欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3.2 数据的假设检验

程序员文章站 2022-05-09 14:07:31
...

使用Python进行简单的常用的假设检验,主要有数据正态性检验、独立两样本t检验、单因素方差分析、相关性检验。
P:拒绝原假设(H0)时犯错误的可能性,这个P值很小(P<0.05代表P很小),则可以认为原假设时错误的。

1.K-S检验
用来判断一组数据是否服从正态分布
使用Scipy库中的stats模块
K-S检验
Kolmogorov-Smirnov检验

它是检验单一样本是否来自某一特定分布的方法。比如检验一组数据是否为正态分布。

(它的检验方法是以样本数据的累计频数分布与特定理论分布比较,若两者间的差距很小,则推论该样本取自某特定分布族。)

即对于假设检验问题:

H0:样本所来自的总体分布服从某特定分布(正态分布)

H1:样本所来自的总体分布不服从某特定分布(正态分布)

使用方式

stats.kstest(rvs, cdf, args=(), N=20, alternative=‘two-sided’, mode=‘approx’)

#3.2假设检验
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy import stats
## 检验数据是否是正态分布
np.random.seed() # 初始化随机数生成器
x = stats.norm.rvs(size=100)  #  产生服从这种分布的一个样本,对随机变量进行随机取值,可以通过size参数指定输出的数组大小。
print(x)

3.2 数据的假设检验

## 查看数据的直方图
plt.figure()
plt.hist(x,bins=20)
plt.xlabel("x")
plt.ylabel("frequenry")
plt.title("hist plot")
plt.show()

3.2 数据的假设检验

## 对数据进行正态性检验
stats.kstest(x,'norm') #K-S检验

3.2 数据的假设检验
P=0.79,远远大于0.05,符合正态分布
如果,达到最佳95%

np.random.seed(19) # 初始化随机数生成器,

程序会把这个特殊的数字——19作为种子,生成对应的初始值,19——对应生成正态分布随机数
3.2 数据的假设检验
P很大如果拒绝原假设就有95%的可能性是错的,所以不能拒绝原假设,认为该组数据是服从正态分布的。
3.2 数据的假设检验

2. 两独立样本t检验

stats.ttest_ind(a, b, axis=0, equal_var=True, nan_policy=‘propagate’)

Calculates the T-test for the means of two independent samples of scores.

对两个独立的数据进行t检验,比较两组样本的均值是否相等,本检验假定两样本具有相同的方差。

原假设:两独立样本具有相同的均值。

备择假设:两独立样本的均值不同。

## 例1:
np.random.seed(125)
x1 = stats.norm.rvs(loc=5,scale=10,size=500) #生成500个均值为5,标准差为10的数据
x2 = stats.norm.rvs(loc=5,scale=10,size=500)
## 查看数据的直方图
plt.figure()
plt.hist(x1,bins=20,color="red",alpha = 0.5)
plt.hist(x2,bins=20,color="blue",alpha = 0.5)
plt.xlabel("x")
plt.ylabel("frequenry")
plt.title("hist plot")
plt.show()

3.2 数据的假设检验

## 独立两样本t检验
stats.ttest_ind(x1,x2)

3.2 数据的假设检验
结果P=76%,远大于0.05,说明这两组数据的均值几乎相等。

3. 单因素方差分析

单因素方差分析 (one-way ANOVA),用于完全随机设计的多个样本均数间的比较,其统计推断是推断各样本所代表的各总体均数是否相等。

H0:各个因素的均值相等μ0=μ1=…=μn
H1:各个因素的均值不完全相等

stats.f_oneway()

Performs a 1-way ANOVA.

单因素方差分析测试两个或多个组具有相同总体平均值的零假设。 该测试应用于来自两个或更多个组的样品,可能具有不同的样本数目。
注:这里没搞懂,代码附上

import seaborn as sns
sns.set_style("white")
Iris = sns.load_dataset("iris")
Iris.head()
## 盒形图 查看数据
#  Seaborn中的boxplot,可以画箱线图,可以看出不同种类的分布情况
## 中间线为中位数,理论上是不能对比均值的,但是可以做为参考。
plt.figure(figsize=(8,6))
sns.boxplot(x="species", y="sepal_width", data=Iris)
plt.title("Boxplot")
plt.show()
## 单因素方差分析
setosa = Iris.sepal_width[Iris.species == "setosa"]
versicolor = Iris.sepal_width[Iris.species == "versicolor"]
virginica = Iris.sepal_width[Iris.species == "virginica"]
## 方差齐性检验
print(stats.levene(setosa,versicolor,virginica))
print("pvalue > 0.05 ,说明各组方差相等")
print("----------------------------------")
print(stats.f_oneway(setosa,versicolor,virginica))
print("pvalue < 0.05 ,说明各组均值不全相等")

Levene检验,检验结果pvalue=0.55远大于0.05,说明3个数组方差相等,可以进行单因素方差分析

## 进行多重比较
from statsmodels.stats.multicomp import pairwise_tukeyhsd

tukey = pairwise_tukeyhsd(endog=Iris.sepal_width,     # 数据
                          groups=Iris.species,   # 分组
                          alpha=0.05)          # 显著性水平
print(tukey)
tukey.plot_simultaneous()    # 绘画出每组的置信区间

tukey.summary()              # 查看summary

4. 相关性检验
检验数据是否具有线性相关使用*stats.pearsonr()*函数。对sepal_length和petal_length进行皮尔逊相关性检验

from sklearn.preprocessing import LabelEncoder,StandardScaler
Iris = pd.read_csv("D:\Desktop\python在机器学习中的应用\Iris.csv")
r,pval = stats.pearsonr(Iris["SepalLengthCm"],Iris["PetalLengthCm"])
print("相关系数: ",r)
print("---------------------")
print("相关系数显著性检验p-value: ",pval)

3.2 数据的假设检验
相关系数大小为0.87 ,p-value远小于0.05,说明线性关系成立。

注:其他方法以后遇到了会补充。

相关标签: 机器学习

上一篇: 假设检验

下一篇: mllib 假设检验