共计 3284 个字符,预计需要花费 9 分钟才能阅读完成。
后面讲了大数定理,讲了核心极限定理,有读者留言让讲讲切比雪夫定理,安顿。这一篇就来讲讲切比雪夫定理。
在讲切比雪夫定理之前,咱们先看下切比雪夫不等式:
其中 P 示意概率,X 是随机变量,μ 是冀望,k 是常数,σ 是标准差,整个公式示意间隔冀望 μ 越远的值呈现的概率是越小的。
再拿正态分布这张图来感触下,大部分值都是散布在均值左近的,离均值越远的值是越少的,对应呈现的概率也就越低。
对于不等式的证实,咱们就不证实了,有趣味的同学能够去理解下,咱们间接拿来用就好。
看完不了不等式,咱们再来看定理,其实是一回事的,切比雪夫定理示意:
在任意一个数据集中,位于其均值±m 个标准差范畴内的数值比例至多为 1-1/m2,其中 m 为大于 1 的任意负数。
对于 m =2,m= 3 和 m = 5 有如下后果:
所有数据中,至多有 3 /4(或 75%)的数据位于均值±2 个标准差范畴内。
所有数据中,至多有 8 /9(或 88.9%)的数据位于均值±3 个标准差范畴内。
所有数据中,至多有 24/25(或 96%)的数据位于均值±5 个标准差范畴内。
拿后面的正态分布为例,在均值±2 个标准差范畴内的数据约占到全副的 95%。
咱们来模仿生成两个不同散布 (正态 & 非正态) 的数据验证下:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#生成正态数据
norm_data = np.random.randn(1,990)
#生成非正态数据
x = np.arange(0.01,1,0.001)
long_data = 1/x
data = pd.DataFrame({"norm_data":norm_data.reshape(990,),"long_data":long_data})
#绘制概率分布图
plt.figure(figsize = (8,8))
plt.subplot(221)
sns.distplot(data["norm_data"])
plt.subplot(222)
sns.distplot(data["long_data"])
#将正态 & 非正态数据依照标准差进行切分
norm_data_std_bin = [-np.inf
,data["norm_data"].mean() - 3*data["norm_data"].std()
,data["norm_data"].mean() - 2*data["norm_data"].std()
,data["norm_data"].mean() - 1*data["norm_data"].std()
,data["norm_data"].mean()
,data["norm_data"].mean() + 1*data["norm_data"].std()
,data["norm_data"].mean() + 2*data["norm_data"].std()
,data["norm_data"].mean() + 3*data["norm_data"].std()
,np.inf]
long_data_std_bin = [-np.inf
,data["long_data"].mean() - 3*data["long_data"].std()
,data["long_data"].mean() - 2*data["long_data"].std()
,data["long_data"].mean() - 1*data["long_data"].std()
,data["long_data"].mean()
,data["long_data"].mean() + 1*data["long_data"].std()
,data["long_data"].mean() + 2*data["long_data"].std()
,data["long_data"].mean() + 3*data["long_data"].std()
,np.inf]
data["norm_data_cut"] = pd.cut(data["norm_data"],bins = norm_data_std_bin)
data["long_data_cut"] = pd.cut(data["long_data"],bins = long_data_std_bin)
plt.subplot(223)
(data["norm_data_cut"].value_counts().sort_index()/data["norm_data_cut"].count()).plot(kind = "bar",rot = 30)
plt.xticks(np.arange(0,8),["[-inf,u-3σ]","[u-3σ,u-2σ]","[u-2σ,u-σ]","[u-σ,u]","[u,u+σ]","[u+σ,u+2σ]","[u+2σ,u+3σ]","[u+3σ,+inf]"])
plt.subplot(224)
(data["long_data_cut"].value_counts().sort_index()/data["long_data_cut"].count()).plot(kind = "bar",rot = 30)
plt.xticks(np.arange(0,8),["[-inf,u-3σ]","[u-3σ,u-2σ]","[u-2σ,u-σ]","[u-σ,u]","[u,u+σ]","[u+σ,u+2σ]","[u+2σ,u+3σ]","[u+3σ,+inf]"])
通过运行下面的代码能够失去如下四张图:
第一行是正态 & 非正态数据的概率分布,第一张是完满的正态分布,第二张是长尾散布。
第二行是正态 & 非正态数据中均值±m 个标准差范畴内的数据占比,能够看到第一张图中的数据占比与咱们后面的正态分布示意图中是统一的,第二张图因为是长尾散布,所以大部分数据都集中在了均值均值±1 个标准差范畴内。
综上,不论是正态分布还是非正态分布,随机变量的散布状况都是满足切比雪夫定理的。这就像,有人说他月薪不超过 100w 一样。在大多数状况下都是正确的。
切比雪夫定理的一个利用场景就是用来对数据进行预估,比方你当初晓得一个群体支出的均值和标准差,而后想要依据均值和标准差得出这个群体的整体支出状况,比方 90% 的人的支出是多少、80% 的人的支出是多少?这个预估问题应该怎么算呢?
如果你曾经确切的晓得了这个群体的支出是合乎正态分布的,那就简略了,咱们晓得正态分布中的数据是均匀的散布在均值两侧的,90% 的人会有 45% 的人小于均值,另外 45% 的人大于均值。
可现实情况中,并不是所有的数据都是合乎正态分布的,也并不能够晓得所有数据的实在散布状况,这个时候就能够用切比雪夫定理。要预估 90% 的人的支出问题,只须要让 1 -1/m2 等于 90%,即可求出 m 值,通过 m 值就能够晓得 90% 的人的支出状况。
如果晓得具体的散布,能够用具体的散布去进行预计,这样必定更加精确,然而如果不晓得具体散布的时候,能够用切比雪夫,尽管不是很准确,然而总比闭着眼睛猜要靠谱点。