概率与数理统计
概率
概率是描述随机现象发生可能性的数学工具,是用来量化不确定性的概念。概率和数理统计在人工智能中用于辅助建模,其建模思想广泛应用于机器学习中的不同模型,如:高斯贝叶斯。
概念
定义:概率(Probability)是描述随机事件发生可能性的数值,通常表示为介于 0 到 1 之间的实数。概率为 0 表示事件不可能发生,概率为 1 表示事件一定发生。
概率是一种固有属性,因为求概率是比较难的,所以我们往往使用频率(frequency,在实际观测或试验中,某一事件发生的次数与总试验次数之比) 来代替。- 当实验次数越来越多时,频率就趋近于概率。在工程实践中,数据量很大时,概率直接拿频率来代替即可。
基本特性
- 非负性:概率值始终是非负的,即概率值不会为负数,即:1 >= P(A) >= 0
- 规范性:所有可能事件的概率之和等于1,即:P(A) + P(B) + P(B) … = 1
计算方法
离散型变量
概念
-
离散型变量是指有限的状态中选一个变量。
-
举例:
- 例如:交通灯有红灯、绿灯、黄灯;
- 例如:性别有男、女、未知;
离散量一般需要编码,编码的方式常见的有下面两种:
Zero index编码
-
编码是从0开始,例如:0, 1, 2, 3, 4,…, N-1
-
编码本身有大小,但是这个大小并没有数学内涵
例如:编码1和编码4,它们只是一个编码,它们是平等的,并不存在类似考试成绩的排名,这个就是值没有数学内涵。
One hot编码
-
编码是向量编码,其形式一般为:
0: [1, 0, 0, 0, 0, ... ] 1: [0, 1, 0, 0, 0, ... ] 2: [0, 0, 1, 0, 0, ... ]备注:one hot是一种重要的编码,它从一开始认为人人平等,这一思想在自然语言处理中是核心理念。
离散量计算概率的例子
-
假定有一个离散量做实验得到的数据为:[1, 2, 2, 2, 3, 1, 1]
-
计算方法:(出现个数/总的个数)
-
概率:
- 事件1出现的概率P(1) = 3 / 8
- 事件2出现的概率P(2) = 4 / 8
- 事件3出现的概率P(3) = 1 / 8
以鸢尾花为例,通过代码求得各个类别的出现概率,代码如下:
from sklearn.datasets import load_iris
# 加载开源库中的iris数据集
X,y = load_iris(return_X_y=True)
P_y0 = (y == 0).mean()
P_y1 = (y == 1).mean()
P_y2 = (y == 2).mean()
print(f'类别0的鸢尾花出现概率P(0) = ', P_y0)
print(f'类别1的鸢尾花出现概率P(1) = ', P_y1)
print(f'类别2的鸢尾花出现概率P(2) = ', P_y2)
补充知识点:
以上计算得到的是先验概率,先验概率是指已经形成既定事实的概率分布,其是与生俱来的,改变不了的。
连续型变量
定义
-
连续型变量是指可以取无限个数值的变量,其取值可以在一个区间内任意取值。
例如:
[0, 1]:一个从 0 到 1 的连续量中间可以有无数个采样结果 -
严格意义上:
-
对于连续量的某个单点(例如:0.6),这个点的概率是0(因为宽度为0,求积分为0)
-
连续量的概率是
概率密度函数积分,单点的积分上下限是0理论中的定义,在现实中是不太可能的,例如:在物理中经常提到在光滑的平面上求得….,完全光滑的平面在现实中是不存在的。所以,在工程中要进行化简,而人工智能是纯理论数学的工程化简。
-
概率密度函数
上述对连续量的概率介绍时,提到了一个重要的概念为概率密度函数(PDF, Probability Density Function)
- 概率密度函数是概率的导函数(概率密度函数→求积分→概率)
- 概率是概率密度函数的积分(概率→求微分→概率密度函数)
- 概率密度函数是比较常见的,其中便有:高斯分布
高斯分布(正态分布)
-
定义:高斯分布是一种连续型概率分布,其曲线呈钟形,对称分布在均值处,并由均值和方差两个参数完全描述。
-
高斯分布的概率密度函数为:
其中,
μ是均值,σ是标准差。
- Python绘制高斯分布:
import numpy as np
from matplotlib import pyplot as plt
def gaussian(x, mu, sigma):
"""
计算高斯分布的概率密度函数值
参数:
x: 随机变量
mu: 均值
sigma: 标准差
返回:
高斯分布的概率密度函数值
"""
return 1/(np.sqrt(2*np.pi)*sigma) * np.exp(-(x - mu)**2 / (2*sigma**2))
# 测试高斯分布函数
x = np.linspace(start=-5, stop=5, num=100)
mu = 0
sigma = 1
# 可视化高斯分布
plt.plot(x, gaussian(x, mu=0, sigma=1), label="$\mu=0, \sigma=1$")
plt.plot(x, gaussian(x, mu=1, sigma=1), label="$\mu=1, \sigma=1$")
plt.plot(x, gaussian(x, mu=0, sigma=2), label="$\mu=0, \sigma=2$")
plt.title('Gaussian Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density Function')
plt.grid(True)
plt.legend()
plt.show()
理论中的概率与工程中的概率
如果要求一个高斯分布函数上某一点的概率,其方法为求曲线的积分:
如果按照理论的方法是求不了概率的(因为理论中任意一点的宽度为0,进而概率也为0),所以我们需要进行工程化简。
核心思想:常规情况下,模型中对概率的使用,
- 重在比较概率的大小,而不是计算概率的具体数值是多少
- 求连续量的概率时,往往使用概率密度函数的值来代替概率的值(原因:求得是相对大小,而不是绝对大小)
连续量计算概率的例子
-
假定有一个连续量采样数据:[1, 2, 2, 2, 3, 1, 1]
-
计算方法:
- 计算概率密度函数来代替
- 由于上述采样数据的概率密度函数不可知,所以进一步工程化简
- 由于自然界普遍都是高斯分布,所以假定其是高斯分布即可
import numpy as np
def gaussian(x, mu, sigma):
"""
计算高斯分布的概率密度函数值
参数:
x: 随机变量
mu: 均值
sigma: 标准差
返回:
高斯分布的概率密度函数值
"""
return 1/(np.sqrt(2*np.pi)*sigma) * np.exp(-(x - mu)**2 / (2*sigma**2))
# 采样数据
logitis = np.array([1, 2, 2, 2, 2, 3, 1, 1])
# mu即为采样数据的均值
mu = logitis.mean()
# sigma即为采样数据的标准差
sigma = logitis.std()
# 求P(1)的概率
P1 = gaussian(x=1, mu=mu, sigma=sigma)
# 求P(2)的概率
P2 = gaussian(x=2, mu=mu, sigma=sigma)
# 求P(3)的概率
P3 = gaussian(x=3, mu=mu, sigma=sigma)
print(f'P(1)的概率为:',P1)
print(f'P(2)的概率为:',P2)
print(f'P(3)的概率为:',P3)