Auto Byte

Science AI

Jose Garcia作者张一豪、林亦霖校对于腾凯 编辑张睿毅翻译

# 使用Python进行机器学习的假设检验（附链接&代码）

1、 什么是假设检验

2、我们为什么要用它？

3、什么是假设的基本条件？

（链接https://en.wikipedia.org/wiki/Normalization_(statistics)；https://stats.stackexchange.com/questions/10289/whats——the——difference——between——normalization——and——standardization）。我们所有的假设都围绕这两个术语的基础。让我们看看这些。

4、哪些是假设检验的重要参数
• 零假设

•  备择假设：

I型错误：当我们拒绝零假设时，尽管该假设是正确的。类型I错误由alpha表示。在假设检验中，显示关键区域的正常曲线称为α区域

II型错误：当我们接受零假设但它是错误的。II型错误用beta表示。在假设检验中，显示接受区域的正常曲线称为β区域。

H0：硬币是一个公平的硬币。

H1：硬币是一个狡猾的硬币。并且alpha = 5％或0.05

1. T校验（学生T校验）

2. Z校验

3. ANOVA校验

4. 卡方检验

T—检验：t检验是一种推论统计量，用于确定在某些特征中可能与两组的均值之间是否存在显着差异。它主要用于数据集，如通过翻转硬币100次记录为结果的数据集，将遵循正态分布并且可能具有未知的方差（链接：https://www.investopedia.com/terms/v/variance.asp）。T检验用作假设检验工具（链接：https://www.investopedia.com/terms/h/hypothesistesting.asp），其允许测试适用于群体的假设。

T检验有两种类型：
1. 单样本t检验

2. 双样本t检验

```from scipy.stats import ttest_1sampimport
numpy as npages = np.genfromtxt
(“ages.csv”)print(ages)ages_mean = np.mean(ages)
print(ages_mean)tset, pval = ttest_1samp(ages, 30)
print(“p-values”,pval)if pval < 0.05:    # alpha value is 0.05 or 5%   print
(" we are rejecting null hypothesis")else:
print("we are accepting null hypothesis”)```

```from scipy.stats import ttest_indimport numpy as npweek1 = np.genfromtxt
("week1.csv",  delimiter=",")
week2 = np.genfromtxt
("week2.csv",  delimiter=",")print(week1)
print("week2 data :-\n")print(week2)
week1_mean = np.mean(week1
)week2_mean = np.mean(week2)print
("week1 mean value:",week1_mean)print
("week2 mean value:",week2_mean)
week1_std = np.std(week1)week2_std =
np.std(week2)print("week1 std value:",week1_std)
print("week2 std value:",week2_std)
ttest,pval = ttest_ind(week1,week2)print
("p-value",pval)if pval <0.05:  print
("we reject null hypothesis")else:  print("we accept null hypothesis”）```

H0：表示两个样本之间的差异为0。

H1：两个样本之间的平均差异不是0。

```import pandas as pd
from scipy import stats
df[['bp_before','bp_after']].describe()
ttest,pval = stats.ttest_rel(df['bp_before'], df['bp_after'])
print(pval)
if pval<0.05:
print("reject null hypothesis")
else:
print("accept null hypothesis")

（链接：https://www.statisticshowto.datascie
ncecentral.com/
probability——and——statistics/hypothesis——testing/f——test/
; https://www.statisticshowto.datasciencecentral.
com/probability——and——statistics/chi——square/https://www.statisticshowto.
datasciencecentral.com/
probability——and——statistics/t——test/ ）。

```

• 您的样本量大于30。（链接：

https://www.statisticshowto.datasciencecentral.com/probability——and——statistics/find——sample——size/）否则，请使用t检验。

• 数据点应彼此独立。（链接：

https://www.statisticshowto.datasciencecentral.com/probability——and——statistics/dependent——events——independent/）换句话说，一个数据点不相关或不影响另一个数据点。

• 您的数据应该是正常分布的。但是，对于大样本量（超过30个），这并不总是重要的。

•  您的数据应从人口中随机选择，每个项目都有相同的选择机会。

• 如果可能的话，样本量应该相等。

```import pandas as pd
from scipy import statsfrom statsmodels.stats
import weightstats as stestsztest ,pval = stests.ztest(df['bp_before'], x2=None, value=156)
print(float(pval))if pval<0.05:
print("reject null hypothesis")
else:
print("accept null hypothesis")

```

H0：两组的平均值为0

H1两组的平均值不为0

```ztest ,pval1 = stests.ztest(df['bp_before'],
x2=df['bp_after'],
value=0,alternative='two-sided')print(float(pval1))if pval<0.05:
print("reject null hypothesis")else:    print("accept null hypothesis")```

ANOVA（F-检验）：t检验在处理两组时效果很好，但有时我们想要同时比较两组以上。例如，如果我们想根据种族等某些分类变量来测试选民年龄是否不同，我们必须比较每个级别的平均值或对变量进行分组。我们可以为每对组进行单独的t检验，但是当你进行多次检测时，你会增加误报的可能性。方差分析或ANOVA

（链接：https://en.wikipedia.org/

wiki/Analysis_of_variance）是一种统计推断测试，可让您同时比较多个组。

F =组间变异性/组间变异性

F校验或ANOVA实例图

```df_anova = pd.read_csv('PlantGrowth.csv')
df_anova = df_anova[['weight','group']]grps = pd.unique(df_anova.group.values)
d_data = {grp:df_anova['weight'][df_anova.group == grp] for grp in grps}
F, p = stats.f_oneway(d_data['ctrl'], d_data['trt1'], d_data['trt2'])
print("p-value for significance is: ", p)
if p<0.05:
print("reject null hypothesis")
else:
print("accept null hypothesis")```

Target=Categorical%20variable），当我们有2个自变量和2个以上的组时使用它。双向F检验并不能说明哪个变量占主导地位。如果我们需要检查个体意义，则需要进行事后测试。

```import statsmodels.api as sm
from statsmodels.formula.api import olsdf_anova2 =
("https://raw.githubusercontent.com/Opensourcefordatascience/Data-sets/master/crop_yield.csv")
model = ols('Yield ~ C(Fert)*C(Water)'
, df_anova2).fit()print(f"Overall model F
({model.df_model: .0f},{model.df_resid: .0f}) = {model.fvalue: .3f}, p = {model.f_pvalue: .4f}")
res = sm.stats.anova_lm(model, typ= 2)res```

（链接：https://stattrek.com/Help/

Glossary.aspx?Target=Categorical%20variable），将应用此测试。它用于确定两个变量之间是否存在显着关联。

```df_chi = pd.read_csv('chi-test.csv')
contingency_table=pd.crosstab(df_chi["Gender"],df_chi["Shopping?"])
print('contingency_table :-\n',contingency_table)
#Observed ValuesObserved_Values = contingency_table.values print
("Observed Values :
\n",Observed_Values)b=stats.chi2_contingency(contingency_table)
Expected_Values = b[3]print
("Expected Values :-\n",Expected_Values)
no_of_rows=len(contingency_table.iloc[0:2,0])
no_of_columns=len(contingency_table.iloc[0,0:2])ddof=(no_of_rows-1)*(no_of_columns-1)print
("Degree of Freedom:-",ddof
)alpha = 0.05from scipy.stats import chi2chi_square=sum([(o-e)
**2./e for o,e in zip(Observed_Values,Expected_Values)])
chi_square_statistic=chi_square[0]+chi_square[1]print
("chi-square statistic:-",chi_square_statistic)
critical_value=chi2.ppf(q=1-alpha,df=ddof)print
('critical_value:',critical_value)
#p-valuep_value=1-chi2.cdf(x=chi_square_statistic,df=ddof)
print('p-value:',p_value)print('Significance level: ',alpha)
print('Degree of Freedom: ',ddof)
print('chi-square statistic:',chi_square_statistic)
print('critical_value:',critical_value)print('p-value:',p_value)
if chi_square_statistic>=critical_value:    print
("Reject H0,There is a relationship
between 2 categorical variables")
else:    print("Retain H0,There is no relationship
between 2 categorical variables")
if p_value<=alpha:    print
("Reject H0,There is a relationship
between 2 categorical variables")else:    print
("Retain H0,There is no relationship between 2 categorical variables")```

https://towardsdatascience.com/hypothesis-testing-in-machine-learning-using-python-a0dc89e169ce
THU数据派

THU数据派"基于清华，放眼世界"，以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯，定期组织线下活动，分享前沿产业动态。了解清华大数据，敬请关注姐妹号“数据派THU”。

Z检验技术

Z检验是零假设下的检验统计量的分布可以通过正态分布来近似的任何统计检验。

F检验技术

F检验（F-test），最常用的别名叫做联合假设检验（英语：joint hypotheses test），此外也称方差比率检验、方差齐性检验。它是一种在零假设（null hypothesis, H0）之下，统计值服从F-分布的检验。其通常是用来分析用了超过一个参数的统计模型，以判断该模型中的全部或一部分参数是否适合用来估计母体。 F检验这名称是由美国数学家兼统计学家George W. Snedecor命名，为了纪念英国统计学家兼生物学家罗纳德·费雪（Ronald Aylmer Fisher）。Fisher在1920年代发明了这个检验和F分配，最初叫做方差比率（英语：Variance Ratio）