作者:伏染善 | 来源:互联网 | 2023-10-10 13:16
随着机器学习课程的推进,有一个部分是没法绕开的,那就是概率统计思维。概率在生活中随处可见,从你出门看的天气预报,到买到的商品的质量好坏,以及你表白的成功率。相信我,概率分布的意义不
随着机器学习课程的推进,有一个部分是没法绕开的,那就是概率统计思维。
概率在生活中随处可见,从你出门看的天气预报,到买到的商品的质量好坏,以及你表白的成功率。相信我,概率分布的意义不仅在于统计,更可以指导你的人生。
本文大纲:
常见的离散性分布和连续性分布
如何理解正态分布和幂律分布的商业模式
使用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()
以上。