4.6 应用实例

来源:互联网 发布:mysql创建序列sql语句 编辑:程序博客网 时间:2024/06/16 00:46

4.6.1 香农熵的计算

在学习决策树时,最重要的步骤是构建决策树。其中,最重要的步骤是根据属性划分数据集,其中先使用哪个属性,后使用哪个属性,是决定决策树构建的好坏的重要标准。其中,使用属性构建数据集,最重要的参考标准,就是使划分后的信息增益最大。
这里就使用到一个概念:香农熵。熵表示随机变量不确定性,即混乱程度的量化指标。熵越大,不确定性越大,越无序;越小,确定性越大,越有序。同理,一条信息的信息量大小,与不确定性直接相关。不确定性越大,信息量越大,熵越大;确定性越大,信息量越小,熵越小。
熵的单位是bit。不计算信息量等,直接存储一个文件,需要的是正常的存储空间大小。通过压缩算法,仅保留有用信息的情况下,存储的是文件的信息量。两者数量上的差距,是冗余度。由此可见:冗余度越大,可压缩的空间越大。反之,亦然。
香农熵的计算公式为:


香农熵计算公式


注意公式的负号,P(x)表示随机变量某个取值的概率。通过SciPy中stats模块里entropy(),可以计算出每种元素的香农熵,示例代码:

from scipy import statsshannon_entropy = stats.entropy(ij/sum(ij), base=None)print(shannon_entropy)

4.6.2 二项分布

二项分布是最重要的离散概率分布之一。假设有一种只有两个结果的试验,其成功概率为p,那么二项分布描述了进行n次这样的独立试验,成功k次的概率。二项分布的概率质量函数公式如下:
f(k;n,p) = (n! / k!(n-k)!)pk(1-p)n-k

例如,可以通过二项分布的概率质量公式计算投掷5次骰子出现3次6的概率。投掷一次骰子,点数为6的概率(即试验成功的概率)为p=1/6,试验次数为5。使用二项分布的概率质量函数pmf()可以很容易计算出现k次6点的概率。和概率密度函数pdf()类似,pmf()的第一个参数为随机变量的取值,后面的参数为描述随机分布所需的参数。对于二项分布来说,参数分别为n和p,而取值范围则为0到n之间的整数。下面的程序计算k为0到6时对应的概率,示例代码:

from scipy import statsstats.binom.pmf(range(6), 5, 1/6.0)

运行结果:

array([  4.01877572e-01,   4.01877572e-01,   1.60751029e-01,         3.21502058e-02,   3.21502058e-03,   1.28600823e-04])

由结果可知:出现0或1次6点的概率为40.2%,而出现3次6点的概率为3.215%。

4.6.3 泊松分布

在二项分布中,如果试验次数n很大,而每次试验成功的概率p很小,乘积np比较适中,那么试验成功次数的概率可以用泊松分布近似描述。
泊松分布适合描述单位时间内随机事件发生的次数的分布情况。在泊松分布中使用λ描述单位时间(或单位面积)中随机事件的平均发生率。如果将二项分布中的试验次数n看作单位时间中所做的试验次数,那么它和事件出现的概率p的乘积就是事件的平均发生率λ,即λ = n p。泊松分布的概率质量函数公式如下:
f(k;λ) = eλk / k!

下面的程序分别计算二项分布和泊松分布的概率质量函数,程序中的事件平均发生率λ恒等于10。根据二项分布的试验次数n,计算每次事件出现的概率p=λ/n。示例代码:

import numpy as npfrom scipy import statslambda_ = 10.0x = np.arange(20)n1, n2 = 100, 1000y_binom_n1 = stats.binom.pmf(x, n1, lambda_/n1)y_binom_n2 = stats.binom.pmf(x, n2, lambda_/n2)y_poisson = stats.poisson.pmf(x, lambda_)print(np.max(np.abs(y_binom_n1 - y_poisson)))print(np.max(np.abs(y_binom_n2 - y_poisson)))

运行结果:

0.006755311103350.000630175404978

由结果可知,随着试验次数的增大,二项分布与泊松分布分别求得的概率误差越来越小。
当试验次数n=100时,绘图代码:

import pylab as plpl.plot(x,y_binom_n1, color="green",label = "binom")pl.plot(x,y_poisson , color="yellow",label = "poisson")pl.legend(loc = "best")pl.show()

绘图结果:


n=100

当n=1000时,绘图代码:

import pylab as plpl.plot(x,y_binom_n2, color="green",label = "binom")pl.plot(x,y_poisson , color="yellow",label = "poisson")pl.legend(loc = "best")pl.show()

绘图结果:


n=1000

同样的,由以上两图对比可知,当n足够大时,二项分布和泊松分布二者十分接近。

t分布和t检验

统计检测是决策指示。例如,我们有两个样本集,我们假设它们由高斯过程生成。我们可以使用T检验来决定是否两个样本值显著不同:

a = np.random.normal(0, 1, size=100)b = np.random.normal(1, 1, size=10)stats.ttest_ind(a, b)

运行结果

 (array(-2.4119199601156796), 0.01755485116571583)

输出结果由以下部分组成:
T统计量:它是这么一种标志,与不同两个随机过程之间成比例并且幅度和差异的显著程度有关。p值:两个过程相同的概率。如果接近1,这两个过程是几乎完全相同的。越靠近零,两个过程越可能有不同的均值。