前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1个掷硬币问题,4个Python解法

1个掷硬币问题,4个Python解法

作者头像
Python中文社区
发布2018-02-01 11:13:02
1.2K0
发布2018-02-01 11:13:02
举报
文章被收录于专栏:Python中文社区Python中文社区

專 欄

❈本文作者:王勇,目前感兴趣项目商业分析、Python、机器学习、Kaggle。17年项目管理,通信业干了11年项目经理管合同交付,制造业干了6年项目管理:PMO,变革,生产转移,清算和资产处理。MBA, PMI-PBA, PMP。❈

我在学习机器学习算法和玩Kaggle 比赛时候,不断地发现需要重新回顾概率、统计、矩阵、微积分等知识。如果按照机器学习的标准衡量自我水平,这些知识都需要重新梳理一遍。

网上或许有各种各样知识片断,却较难找到一本书将概率,统计、矩阵、微积分公式和Python结合起来。 要么是讲的比较浅显,要么跨度比较大。 最近看到一本书,恰好把上面的问题解决了。着重讲解Python for 概率,统计,机器学习. 相比较吴恩达教授的网上课程,各有千秋。

  • l 感觉吴教授的课程偏学术。 假设学生数学基础比较扎实(毕竟课堂受众是斯坦福大学学生,起点比较高),用矩阵推导公式,简洁明了。整个课程把绝大多数机器学习算法都教了一遍。
  • 这本书偏工程实践。 书中从多个层面来介绍经典算法。尤其是后期的泛化,正则化等章节。介绍的算法,但是每个算法都用2-5种python方法实现。例如: 

Python 循环或自带Itertools ((笛卡尔乘积,经典概率)

Python sympy(数学符号) (微积分公式推导和实现)

Python Pandas(分组计算) (程序员看得懂)

Python numpy (矩阵计算) (注:用矩阵计算,有速度飞起来的感觉)

Python scipy (科学计算库) (算法增强器)

个人感觉这本书比较适合我的学习目标。 也许也有人喜欢这样的书。书名和下载地址在文章最后面。

我先来翻译一段书中的一道期望计算题目,分享一下这种庖丁解牛和层次渐近的感觉。

题目:

三个硬币: 1角,2角,5角。 同时掷硬币,正面朝上的将面值加在一起求和。 只有两个硬币正面朝上的期望和是多少?

  • Xi ∈ {0, 1} 注:硬币为Xi, (面值10,10,50,分别为X10,X20,X50,只有正面和反面,是服从二项分布(0,1)
  • ξ := 10X10 + 20X20+ 50X50 注: ξ 为正面朝上的硬币面值之和
  • η := X10X20(1 −X50) + (1 − X10)X20X50 + X10(1 − X20)X50 注: η 为只有两个硬币正面朝上的情况

这样此题就变成了计算 E(ξ |η) 在 η 条件为真时,ξ 的期望。我们首先需要找到一个函数 h(η)。 这个函数可以让残差最小化。

现在,计算两个硬币朝上的面值之和公式变成了如何定义h(η)函数。

注:η的结果是{0,1},所以h函数的只有两种输入值{0,1}。因此,正交内积条件为

因为我们只需要知道满足两个硬币朝上的情况,(即η =1 ),所以公式简化为:

两边积分计算求和

数学公式到此就结束了。本书中定义h(η) = αη,并求α。这样公式就变成了如下形式。

注:

公式推导完了,下面就看看Python的四种解法吧。

解法1 :Sympy数学符号方法

上述推导公式,直接可以用数学符号语言,在Sympy中计算。计算结果精准alpha = 160/3

E|η) = (160/3)*η

代码语言:javascript
复制

ξ = 10*X10 + 20*X20 + 50*X50 η = X10*X20*(-X50 + 1) + X10*X50*(-X20 + 1) + X20*X50*(-X10 + 1) 160/3

解法2 :用Pandas,分组和计算(程序员的方式)

注:做1000次试验(蒙特卡罗仿真),然后计算试验的均值。计算结果近似于推导结果。

53.340141339548644

解法3:用Numpy,矩阵计算(速度快,有飞起来的感觉)

53.3542987559

解法4: 用笛卡尔笛卡尔乘积,过滤只有两个硬币朝上事件,计算期望

[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)] [(0, 1, 1), (1, 0, 1), (1, 1, 0)] [70, 60, 30] 53.333333333333336

这道概率期望题,书中演示了4种方法: Sympy,Numpy, Pandas 和Itertools. 在科学计算和机器学习中,采用不同的实现方法可以有助于问题解决和交叉检查。最后分享一下这本书的名字:

. Python for Probability, Statistics, and Machine Learning

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档