热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

概率统计思维——几种概率分布函数

随着机器学习课程的推进,有一个部分是没法绕开的,那就是概率统计思维。概率在生活中随处可见,从你出门看的天气预报,到买到的商品的质量好坏,以及你表白的成功率。相信我,概率分布的意义不

随着机器学习课程的推进,有一个部分是没法绕开的,那就是概率统计思维。

概率在生活中随处可见,从你出门看的天气预报,到买到的商品的质量好坏,以及你表白的成功率。相信我,概率分布的意义不仅在于统计,更可以指导你的人生。

本文大纲:

常见的离散性分布和连续性分布

如何理解正态分布和幂律分布的商业模式

使用python实现几种常见的概率分布模型

一、常见的离散性分布和连续性分布

在分清楚什么是离散性和连续性之前,我们首先要知道什么是随机变量。随机变量就是我们对每一个随机事件的结果进行赋值,这种不同的值就是随机变量。拿抛硬币为例吧,正面为1,反面为0,这样就有了把事件(正/反)用变量(1/0)表示的过程。

为什么要讲这么细呢?因为不同的事件不同的模型也会利用不同的概率函数。

常见的离散性概率分布有:伯努利分布、二项分布、几何分布、泊松分布;常见的连续性分布有:正态分布和幂律分布

下面用几个图解释一下每种分布的定义和计算方法:

伯努利分布是离散概率分布里面的基础,就是从抛硬币里抽象出来的:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

二项分布则是多次重复的伯努利分布:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

几何分布和二项分布非常相似,只有最后一点不同:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

泊松分布则是二项分布进行无限细分的结果:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

至于正态分布,我放到下一节讲。需要注意的是,离散性分布要求事件是独立事件,且每次发生事件的概率相同。这就对数据有很高的要求了,想了解怎么区分使用不同的概率函数,可以来猴子哥这里学习。

二、如何理解正态分布和幂律分布的商业模式

正态分布和幂律分布是我们经常可以听到的词。看两张图你就明白了:

正态分布有哪些:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

幂律分布有哪些:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

总结一下就是,每个人都是正态分布的普通人,但由于选择不同,最终的成绩却可以变成幂律分布一般的天差地别。

你一定想问,如何把自己的收入位于幂律分布的前列?又如何完成财富的累积呢?

猴子哥给了三个建议:

为自己的事情设置优先级。先做那些重要的事。才能在正确的路上不断积累经验。

通过有幂律分布的工作和生活方式寻找机会。比如互联网,比如知识付费,比如出书。

人不要担心没有时间,也许白天的工作只能将自己的时间出售一次,但每个人都有并行处理事情的能力,你完全可以利用空闲时间打磨一个技能,完成自我的提升。

说回到正态分布,什么是正态分布呢?

正太分布又名高斯分布(Gaussian distribution),正态曲线呈钟型,两头低,中间高,左右对称。若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。如图:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

有趣的是,正态分布不能直接得到某一个点的值,因为它是连续性分布。我们需要计算一个范围:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

Z表格就是将所有可能的值进行归一化后放入一张可以查询的表中,通过查询比某个值小的概率得到你需要的范围内的正态分布的概率:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

三、使用python实现几种常见的概率分布模型

那么,用python怎么实现这些分布呢?我们需要用到科学计算包scipy

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

我将离散和随机变量分别画在两张画板上,代码如下:

#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
from IPython.core.pylabtools import figsize # import figsize
figsize(10, 10) # 设置 figsize
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,
竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值
官网文档:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines
'''
plt.subplot2grid((2,2),(0,0)) #伯努利分布
X1 = np.arange(0, 2,1)
p1 = 0.5 # 硬币朝上的概率
pList1 = stats.bernoulli.pmf(X1, p1)
plt.plot(X1, pList1, marker='o',line)
plt.vlines(X1, 0, pList1)
plt.xlabel('随机变量:抛硬币1次')
plt.ylabel('概率')
plt.title('伯努利分布:p=%.2f' % p1)
plt.subplot2grid((2,2),(0,1)) #二项分布
n2 = 6 # 做某件事情的次数
p2 = .8 # 做某件事情成功的概率
X2 = np.arange(0, n2+1,1)
pList2=stats.binom.pmf(X2,n2,p2)
plt.vlines(X2, 0, pList2)
plt.xlabel('随机变量:股票成功次数')
plt.ylabel('概率')
plt.title('二项分布:n=%i,p=%.2f' % (n2,p2))#%i代表int类型,%.2f代表float类型小数点后两位
plt.subplot2grid((2,2),(1,0)) #几何分布
k3 = 5
# 做某件事情成功的概率,这里假设每次表白成功概率都是60%
p3 = 0.6
X3 = np.arange(1, k3+1,1)
pList3 = stats.geom.pmf(X3,p3)
plt.plot(X3, pList3, marker='o',line)
plt.vlines(X3, 0, pList3)
plt.xlabel('随机变量:表白第k次才首次成功')
plt.ylabel('概率')
plt.title('几何分布:p=%.2f' % p3)
plt.subplot2grid((2,2),(1,1)) #泊松分布
mu4 = 2 # 平均值:每天发生2次事故
k4=4 #次数,现在想知道每天发生4次事故的概率
#包含了发生0次、1次、2次,3次,4次事故
X4 = np.arange(0, k4+1,1)
pList4 = stats.poisson.pmf(X4,mu4)
plt.plot(X4, pList4, marker='o',line)
plt.vlines(X4, 0, pList4)
#x轴文本
plt.xlabel('随机变量:某路口发生k次事故')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('泊松分布:平均值mu=%i' % mu4)
plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.4, wspace=0.3)
plt.show()

如图:

《概率统计思维——几种概率分布函数》
《概率统计思维——几种概率分布函数》

正态分布的实现代码和图形如下:

#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
#第1步,定义随机变量:
mu=0 #平均值
sigma= 1 #标准差
X = np.arange(-5, 5,0.1)
#第2步,概率密度函数(PDF)
y=stats.norm.pdf(X,mu,sigma)
#第3步,绘图
'''
plot默认绘制折线
'''
plt.plot(X, y)
#x轴文本
plt.xlabel('随机变量:x')
#y轴文本
plt.ylabel('概率:y')
#标题
plt.title('正态分布:$\mu$=%.1f,$\sigma^2$=%.1f' % (mu,sigma))#$\sigma^2$表示特殊值
#网格
plt.grid()
#显示图形
plt.show()

《概率统计思维——几种概率分布函数》

以上。


推荐阅读
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文详细介绍了 React 中的两个重要 Hook 函数:useState 和 useEffect。通过具体示例,解释了如何使用它们来管理组件状态和处理副作用。 ... [详细]
  • 汇编语言等号伪指令解析:探究其陡峭的学习曲线
    汇编语言以其独特的特性和复杂的语法结构,一直被认为是编程领域中学习难度较高的语言之一。本文将探讨汇编语言中的等号伪指令及其对初学者带来的挑战,并结合社区反馈分析其学习曲线。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
author-avatar
伏染善
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有