应用于机器学习的15个统计假设测试速查指南,附 Python代码
尽管在日常开发中会用到数以百计的统计假设测试,但在机器学习实际项目中可能只需要使用到其中一小部分。
在本文中,将涵括最流行的Python API的机器学习项目统计假设测试的备忘单。
每项统计测试均以下述统一的方式给出,包括:
- 测试名称
- 测试检测内容
- 测试的关键假设
- 如何解释测试结果
- 用于测试的Python API。
注:当涉及到数据的预期分布或样本大小这样的假设时,即使在不满足假设的情况下,给定测试的结果虽然可能会不尽如人意,但是也不会无法使用。
通常,数据样本域必须足够大,以便能够分析出它们的分布。
在某些情况下,可以对数据进行校正以满足假设,例如:可以通过删除异常值将接近正态分布修正为正态分布,或在样本有不同方差时使用对自由度的修正。
最后,可能会对某一特定问题进行多项测试,例如:正态化。有时不能用统计数据直接得出清晰的答案,测试后得到的答案却是概率。为此,可以利用不同的方式考虑同一问题,得出不同的答案。所以,对于某些数据问题,需要进行多个不同的测试。
在我的新书中会涉及:统计假设检验、重采样方法,估计统计和非参数方法,并附有有29个进阶教程和完整的源代码。让我们开始吧。
- 更新于2018年11月:增加了对所涉测试的详细论述。
![v2-56b3ae06e57600f1ae32de8c38dee65e_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-56b3ae06e57600f1ae32de8c38dee65e_b.jpg)
教程概述
本教程分为以下四部分:
1.正态性测试
1. Shapiro-Wilk测试
2. D’Agostino’s K^2测试
3. Anderson-Darling测试
2. 相关性测试
1. Pearson相关系数
2.Spearmans序相关性
3 Kendall序相关性
4 Chi-Squared测试。
3 参数统计假设测试
1.学生t测试
2.配对学生t测试
3.方差分析测试(ANOVA)
4.重复测量方差分析(ANOVA)测试
4.非参数统计假设测试
1.Mann-Whitney U测试
2.Wilcoxon带符号序测试
3.Kruskal-Wallis H测试
4.Friedman测试
1. 正态性测试
本节所列出的统计测试,可以利用它们来检查数据是否为高斯分布。
Shapiro-Wilk测试
测试数据样本是否为高斯分布。
假设:
- 各样本中的观察数据独立同分布(iid)。
解释:
- H0:样本为高斯分布。
- H1:样本为非高斯分布。
Python代码。
![v2-27c3958392eabbc660acd112da168eed_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-27c3958392eabbc660acd112da168eed_b.jpg)
- 详细信息请参考:
- scipy.stats.shapiro
- 维基百科:Shapiro-Wilk 测试
D’Agostino’s K^2 测试
测试数据样本是否为高斯分布。
假设:
各样本中的观察数据独立同分布(iid)。
解释
H0:样本为高斯分布。
H1:样本为非高斯分布。
Python代码
![v2-0baad8e05b7415f3c912915505de77e0_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-0baad8e05b7415f3c912915505de77e0_b.jpg)
详细信息请参考:
- scipy.stats.normaltest
- 维基百科:D’Agostino’s $K$-squared 测试
Anderson-Darling测试
测试数据样本是否为高斯分布。
假设
·各样本中的观察数据独立同分布(iid)。
解释
H0:样本为高斯分布。
H1:样本为非高斯分布。
Python代码
![v2-cfcbd6cf61d456fd84b387fba33d6904_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-cfcbd6cf61d456fd84b387fba33d6904_b.jpg)
- 详细信息请参考:
- scipy.stats.anderson
- 维基百科:Anderson-Darling测试
2. 相关性测试
本节所列出的统计测试,可利用它们来检查两个样本是否相关。
Pearson相关系数
检验两个样本是否线性相关。
假设:
·各样本中的观察数据独同分布(iid)。
·各样本中的观测数据呈正态分布。
·各样本的观测数据有相同的方差。
解释
·H0:两个样本之间相互独立。
·H1:样本之间存在依存关系。
Python代码
![v2-8e332d58be3e9d2af3abcc6787e0a2f2_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-8e332d58be3e9d2af3abcc6787e0a2f2_b.jpg)
- 详细信息请参考:
- scipy.stats.pearsonr
- 维基百科:Pearson相关系数
Spearman序相关性
测试两个样本是否存在单调关系。
假设
·各样本中的观察数据独立同分布(iid)。
·各样本中的观测数据可以进行排序。
解释
·H0:两个样本之间相互独立。
·H1:样本之间存在依存关系。
Python代码
![v2-7c1e08c0fef75529064ddba277835753_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-7c1e08c0fef75529064ddba277835753_b.jpg)
详细信息请参考:
- scipy.stats.spearmanr
- 维基百科:Spearman序相关系数
Kendall序相关性
测试两个样本是否存在单调关系。
假设
- 各样本中的观察数据独立同分布(iid)。
- 各样本中的观测数据都可以进行排序。
解释
H0:两个样本之间相互独立。
H1:样本之间存在依存关系。
Python代码。
![v2-24aed821d468aec7da30565b2cd4ca5f_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-24aed821d468aec7da30565b2cd4ca5f_b.jpg)
详细信息请参考:
- scipy.stats.kendalltau
- 维基百科Kendall序相关系数
Chi-Squared测试
测试两个范畴变量是相关的还是独立的。
假设
·计算相依表时使用的观察数据是独立的。
·相依表的每个单元格中至少有25个例子。
解释
·H0:两个样本之间相互独立。
·H1:样本之间存在依存关系。
Python代码
![v2-db2a9d55a36043eaf0ee201ed85d4b82_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-db2a9d55a36043eaf0ee201ed85d4b82_b.jpg)
详细信息请参考:
- scipy.stats.chi2_contingency
- 维基百科:Chi-Squared测试
3. 参数统计假设测试
本节列出了可用于比较数据样本的统计测试。
学生t测试
测试两个独立样本的均值是否有显著不同。
假设
·各样本中的观察结果独立同分布(IID)。
·各个样本中的观察数据呈正态分布。
·各样本中的观察数据具有相同的方差。
解释
·H0:样本的均值相等。
·H1:样本的均值不等。
Python代码
![v2-f2aa491e93c4f72fbe85fd756df780f9_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-f2aa491e93c4f72fbe85fd756df780f9_b.jpg)
详细信息请参考:
- scipy.stats.ttest_ind
- 维基百科:Student’s t-test测试
成对的学生t测试
测试两个样本对的均值是否存在显着性差异。
假设
·各样本中的观测数据是独立同分布的(Iid)。
·各样本中的观测数据呈正态分布。
·各样本的观测数据有相同的方差。
·各样本的观测数据成对出现。
解释
·H0:样本的均值相等。
·H1:样本的均值不等。
Python代码
![v2-8f1574a093711295a4cd3bc63455bb8d_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-8f1574a093711295a4cd3bc63455bb8d_b.jpg)
详细信息请参考:
- scipy.stats.ttest_rel
- 维基百科:Student’s t-test测试
方差分析(ANOVA)测试
测试两个或多个独立样本的均值是否存在显着性差异。
假设
- ·各样本中的观测数据独立同分布 (Iid)。
- 各样本中的观测数据呈正态分布。
- 各样本的观测数据有相同的方差。
解释
·H0:样本的均值相等。
·H1:一个或多个样本的均值不等。
Python代码
![v2-4b5ecfb64c2240bd24106ceef9c174b5_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-4b5ecfb64c2240bd24106ceef9c174b5_b.jpg)
重复测量方差分析(ANOVA)测试
测试两个或更多样本对的均值是否存在显着性差异。
假设
- 各样本中的观测数据独立同分布 (Iid)。
- 各样本中的观测数据呈正态分布。
- 各样本的观测数据有相同的方差。
- 各样本的观测数据成对。
解释
·H0:样本的均值相等。
·H1:一个或多个样本的均值不等。
Python代码
目前Python不支持这种测试。
详细信息请参考:
- ·维基百科:方差分析
4. 非参数统计假设测试
MannWhitney U测试。
测试两个独立样本的分布是否相等。
假设
·各样本中的观测数据为独立同分布的(Iid)。
·可对各样本中的观察数据进行排序。
解释
·H0:样本之间同分布。
·H1:样本之间分布不同。
Python代码
![v2-0250f423f6e66db4ea831a1781c7bf96_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-0250f423f6e66db4ea831a1781c7bf96_b.jpg)
详细信息请参考:
- scipy.stats.mannwhitneyu
- 维基百科:Mann-Whitney U 测试
Wilcoxon带符号 –序测试
测试样本对的分布是否相等。
假设:
- 各样本中的观测数据为独立同分布 (Iid)。
- 可对各样本中的观察数据进行排序。
- 各样本的观察数据是成对的。
解释
H0:样本之间同分布。
H1:样本之间的分布不等。
Python代码。
![v2-ab5fc47b6ad10fb94235a9f7cb30a4ea_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-ab5fc47b6ad10fb94235a9f7cb30a4ea_b.jpg)
详细信息请参考:
- scipy.stats.wilcoxon
- 维基百科 signed-rank 测试
Kruskal-Wallis H 测试
测试两个或多个独立样本的分布是否相等。
假设
·各样本中的观察数据独立同分布(IID)。
·可对各样本中的观察数据进行排序。
解释:
·H0:所有样本同分布。
·H1:一个或多个样本的分布不相同。
Python代码
![v2-f72df4a9f0d69db19d67988cd13b35c6_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-f72df4a9f0d69db19d67988cd13b35c6_b.jpg)
详细信息请参考:
- scipy.stats.kruskal
- 维基百科Kruskal-Wallis方差分析
Friedman 测试
测试两对或多对样本的分布是否相等。
假设
·各样本中的观察数据独立同分布(IID)。
·可对各样本中的观察数据进行排序。
·各样本的观测数据成对。
解释
·H0:所有样本同分布。
·H1:一个或多个样本的分布不同。
Python代码
![v2-f35fade939fa9ddf98fe3752ba904ebc_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5c02a740-f42f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-f35fade939fa9ddf98fe3752ba904ebc_b.jpg)
详细信息请参考:
- scipy.stats.friedmanchisquare
- 维基百科Friedman测试
课外阅读
如果想深入了解本专题的话,本节给出了更多关于本主题的参考资料。
- ·Python正态测试通论
- ·如何利用相关性来理解变量之间的关系?
- 如何利用Python进行的参数统计测试?
- 统计假设测试通论
总结
在本教程中,对机器学习项目中可能需要用到的重要的统计假设测试做了介绍。
具体而言,通过本文可以了解到:
- 在不同应用环境下使用到的不同种类的测试,如:正态性检查、变量之间的关系和样本之间的差异。
- 每个测试的关键假设以及如何解释测试结果。
- ·如何使用Python API实现该测试。
还有问题吗?
可在下面的评论中提出你的问题,我会尽量作答。
我是否遗漏了一项重要的统计测试?或者遗漏了列表中的测试的关键假设?请在下面的评论中告诉我。