机器学习储备:概率密度和高斯分布例子解析

 

01

回顾

前面介绍到关于概率论中离散型随机变量,和一个离散型相关的经典分布:二分分布。
 

理解这些基本的概念和理论,对于我们掌握机器学习的许多算法都是非常有帮助的,比如在分类或聚类时,如果能得出某个样本点属于某个类别的概率,那么无疑是非常的好的,这样,我们能将每个样本属于每个分类划定一个得分值,有时候必须这么做,比如下面这个例子。

 

当我们去买一只股票时,假定一个预测器告诉你赚钱,另一个告诉你买这只股票,赚钱的可能为51%,赔钱的可能为49%,那么我想,你会认为第二个的预测更令你满意吧,因为第一个,仅仅告诉你赚钱,但是赔钱的可能性也是很大的啊,所以,根据概率,我会仔细权衡买还是不买,而不是盲目地根据第一个预测器告诉的结果去投资吧

 

所以概率论的知识还是非常有实际意义的,接下来,让我们先看下连续性随机变量的一些基本知识吧。

 

02

连续型随机变量

连续型随机变量,顾名思义,它的取值是连续的,而不是有限个,比如烟台的苹果质量情况,表示为 X,那么 X = 0.4, 0.7, 0.91等等这些值,并且越接近于1.0,这个苹果的质量越好。

 

那么苹果质量情况X,在X = 0.75时的概率是多大呢? 我们记为: p(0.75),在X = 0.83时的概率呢? p(0.83),我们称:p(x)为连续型随机变量X的概率密度,它刻画了X=x时的取值的可能性大小,但不是取值的概率,这点要在理解上注意一下。那么我们统计下p(X<=0.75)是多大呢?(质量情况不大于0.75的概率密度),此时我们将F(0.75) = p(X<=0.75),那么p(X<=0.5)呢?记为F(0.5) = p(X<=0.5)。因此,归纳出一个公式为: 

 

此处,质量情况不可能为负数,所以定积分的区间:[0,x]。

F(x)为质量情况X的分布函数,可以看到分布函数是一个区间长度上概率密度的累计。

 

至于概率密度p(x)和F(x)的关系,一个是导数,一个是积分,F(x)在x属于[负无穷,正无穷]是一定等于概率的总和:1 。

 

我们一般考察随机变量X的取值x的概率密度曲线:p(x),通过概率密度曲线,可以看出随机变量的取值与概率密度的关系,下面看下苹果质量情况 X 满足高斯分布时的曲线。

 

03

一种经典的分布

这种分布就是高斯分布,它在实际研究和工程领域都有着非常广泛的应用。做出归纳假设:苹果质量情况 X 满足高斯分布。我们收集了20个苹果,每个苹果的质量情况现在出来报告了,如下所示:

 

data = np.array([ 0.79,  0.78,  0.8 ,  0.79,  0.77,  0.81,  0.74,  0.85,  0.8 ,

        0.77,  0.81,  0.85,  0.85,  0.83,  0.83,  0.8 ,  0.83,  0.71,

        0.76,  0.8 ])

 

假定这20个苹果质量情况X符合高斯分布,则由一维高斯分布的概率密度公式:

可以看到,在我们已知了20个样本,也就是x,现在要反推高斯分布中的两个关键参数:均值和方差吧。

 

已知各个样本和假定模型后,去求解模型的参数,最常用的方法是最大似然估计吧,根据已有这20个样本和最大似然估计精神推导得出,均值和方差的公式如下:

 

有了这两个参数,每个 x 对应的概率密度不就是f(x)吗,这样根据20个样本,画出概率密度的分布图吧。

 

将以上分析兑现为代码:

 

import numpy as np

import matplotlib.pyplot as plt

#均值

def average(data):

    return np.sum(data)/len(data)

#标准差

def sigma(data,avg):

    sigma_squ = np.sum(np.power((data-avg),2))/len(data)

    return np.power(sigma_squ,0.5)

#gaussian-distribution prob

def prob(data,avg,sig):

    sqrt_2pi = np.power(2*np.pi,0.5)

    coef = 1/(sqrt_2pi*sig)    

    powcoef = -1/(2*np.power(sig,2)) 

    mypow = powcoef * (np.power((data-avg),2))   

    return coef*(np.exp(mypow))

#样本数据

data = np.array([ 0.79,  0.78,  0.8 ,  0.79,  0.77,  0.81,  0.74,  0.85,  0.8 ,

        0.77,  0.81,  0.85,  0.85,  0.83,  0.83,  0.8 ,  0.83,  0.71,

        0.76,  0.8 ])

#根据样本求高斯分布的平均数

ave = average(data)

#根据样本求高斯分布的标准差

sig = sigma(data,ave)

#拿到数据

x = np.arange(0.5,1.0,0.01)

p = prob(x,ave,sig)

#绘制函数

plt.plot(x,p)

plt.grid()

plt.xlabel('apple quality factor')

plt.ylabel('prob density')

plt.yticks(np.arange(0,12,1))

plt.title('Gaussian distribution')

plt.show()

 

图形显示结果:

 

 

几点说明:

1. 可以看到苹果质量在平均数处,大约等于0.8时,取到概率密度的最大值,因为数据样本较少,所以0.5~0.7处概率密度很小。

2. 苹果的质量集中在平均数附近区域

3. 概率密度与x轴所围成的面积为1,等于概率的总和。

4. p值,即概率密度的值不是一定小于1,它和概率的取值不一致,但是概率密度可以理解成概率,也就是说概率是概率密度量纲后的变量,具有相似的意义。

 

以上是高斯分布的概率分布图,那么我们来看下新来的一批500个苹果,高斯分布假定下,它们的质量情况图:

 

#根据计算出来的均值和方差

data1000 = np.random.normal(0.8,0.036,500)

plt.scatter(np.arange(1,501),data1000,c='orange')

plt.xlabel('apple id')

plt.ylabel('apple quality factor')

plt.title('apple quality distribution')

plt.show()

 

 

可以看到苹果的质量情况大都集中在0.75和0.85之间,符合我们的均值预期。

 

以上就是高斯分布的理论和例子解析,谢谢您的阅读!

 

请记住:每天一小步,日积月累一大步!