3.2 数据的假设检验

使用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)

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
P=0.79,远远大于0.05,符合正态分布
如果,达到最佳95%

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

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

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()

在这里插入图片描述

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

在这里插入图片描述
结果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)

在这里插入图片描述
相关系数大小为0.87 ,p-value远小于0.05,说明线性关系成立。相关系数r的取值范围为【-1,1】之间,如果r<0为负相关,越接近于-1,负相关性越强。r>0为正相关,越接近于1正相关越强。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大桃子技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值