Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >独家|使用Python进行机器学习的假设检验(附链接&代码)

独家|使用Python进行机器学习的假设检验(附链接&代码)

作者头像
数据派THU
发布于 2019-08-30 02:26:11
发布于 2019-08-30 02:26:11
1.1K0
举报
文章被收录于专栏:数据派THU数据派THU

作者给出了假设检验的解读与Python实现的详细的假设检验中的主要操作。

也许所有机器学习的初学者,或者中级水平的学生,或者统计专业的学生,都听说过这个术语,假设检验。

我将简要介绍一下这个当我学习时给我带来了麻烦的主题。我把所有这些概念放在一起,并使用python进行示例。

在我寻求更广泛的事情之前要考虑一些问题 ——

什么是假设检验?我们为什么用它?什么是假设的基本条件?什么是假设检验的重要参数?

让我们一个个地开始吧:

1、 什么是假设检验?

假设检验是一种统计方法,用于使用实验数据进行统计决策。假设检验基本上是我们对人口参数做出的假设。

例如:你说班里的学生平均年龄是40岁,或者一个男生要比女生高。

我们假设所有这些例子都需要一些统计方法来证明这些。无论我们假设什么是真的,我们都需要一些数学结论。

2、我们为什么要用它?

假设检验是统计学中必不可少的过程。假设检验评估关于总体的两个相互排斥的陈述,以确定样本数据最佳支持哪个陈述。当我们说一个发现具有统计学意义时,这要归功于一个假设检验。

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

不同均值和方差下的正态分布

假设的基础是规范化和标准规范化

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

标准化的正态曲线图像和数据分布及每个部分的百分比

你一定想知道这两个图像之间有什么区别,有人可能会说我找不到,而其他人看到的图像会比较平坦,而不是陡峭的。好吧伙计这不是我想要表达的,首先你可以看到有不同的正态曲线所有那些正态曲线可以有不同的均值和方差,如第二张图像,如果你注意到图形是合理分布的,总是均值= 0和方差= 1。当我们使用标准化的正态数据时,z—score的概念就出现了。

正态分布

如果变量的分布具有正态曲线的形状——一个特殊的钟形曲线,则该变量被称为正态分布或具有正态分布。正态分布图称为正态曲线,它具有以下所有属性:1.均值,中位数和众数是相等。

正态分布方程

标准化正态分布

标准正态分布是平均值为0,标准差为1的正态分布

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

  • 零假设:

在推论统计中,零假设是一种普遍的说法或默认的观点,即两个测量现象之间没有关系,或者分组间没有关联

换句话说,它是一个基本假设,或基于领域或问题知识。

示例:公司的生产力=50个单位/天等

  • 备择假设:

另一种假设是假设检验中使用的假设与零假设相反。通常认为观察是真实效果的结果(叠加了一定量的偶然的变化)

零假设与备择假设

示例:公司生产≠50单位/每天等。

重要程度:指我们接受或拒绝无效假设的重要程度。接受或拒绝假设不可能100%准确,因此我们选择通常为5%的重要程度。

这通常用alpha(数学符号)表示,通常为0.05或5%,这意味着您的输出应该有95%的信心在每个样本中给出类似的结果。

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

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

单尾测试:统计假设的测试,其中拒绝区域仅在采样分布的一侧,称为单尾测试

例如:一所大学有≥4000名学生或数据科学≤80%采用的组织。

双尾测试:双尾测试是一种统计测试,其中分布的关键区域是双侧的,并测试样本是否大于或小于某个值范围。如果被测试的样本属于任一关键区域,则接受替代假设而不是零假设。

例如:一所大学!= 4000名学生或数据科学!= 80%的组织采用

单尾和双尾图像

P值:P值或计算概率是当研究问题的零假设(H 0)为真时,找到观察到的或更极端的结果的概率 —— “极端”程度的定义取决于假设如何被检测。

如果您的P值小于选定的显着性水平,那么就拒绝原假设,即接受样本提供合理的证据来支持备选假设。它并不意味着“有意义”或“重要”的差异;这是在考虑结果的真实相关性时决定的。

例如:你有一枚硬币而你不知道这是否公平或棘手所以让我们决定零和备择假设

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

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

现在让我们掷硬币并计算p值(概率值)。

第一次投掷硬币,结果是尾部P值= 50%(头部和尾部的概率相等)

第二次抛硬币,结果是尾巴,现在p值= 50/2 = 25%

同样地,我们连续6次投掷并得到P值= 1.5%的结果,但是我们将显着性水平设置为95%表示我们允许的5%错误率,在这里我们看到我们超出了那个水平,即我们的零假设不成立,所以我们需要拒绝并提出这个硬币实际上是一个狡猾的硬币。

自由度: 现在想象你对期望值没有兴趣,你对数据分析感兴趣。您有一个包含10个值的数据集。如果你没有估算任何东西,每个值都可以取任何数字,对吧?每个值都可以完全自由变化。但是假设您想使用单样本t检验来测试10个值的样本的总体平均值。你现在有一个约束——平均值的估计。究竟是什么约束?通过定义均值,必须保持以下关系:数据中所有值的总和必须等于n x mean,其中n是数据集中的值的数量。

因此,如果数据集有10个值,则10个值的总和必须等于平均值x 10.如果10个值的平均值为3.5(您可以选择任何数字),则此约束要求10个值的总和必须等于10 x 3.5 = 35。

使用该约束,数据集中的第一个值可以自由变化。无论它是什么价值,所有10个数字的总和仍然可以具有35的值。第二个值也可以自由变化,因为无论你选择什么值,它仍然允许所有值的总和的可能性是35岁。

现在让我们看一些广泛使用的假设检验类型: ——

  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检验

单样本t检验:单样本t检验确定样本均值是否与已知或假设的总体均值具有统计学差异。单样本t检验是参数检验。

例如:你有10个年龄,你正在检查平均年龄是否为30岁。 (使用python查看下面的代码)

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

上面代码的结果如下:

单样本t测试结果

双样本t检验:独立样本t检验或双样本t检验比较两个独立组的平均值,以确定是否有统计证据表明相关的人口均值存在显着差异。独立样本t检验是参数检验。该测试也称为:独立t检验。

示例:在week1和week2之间是否存在任何关联(代码在下面的python中给出)

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

双样本t校验结果

配对样本t检验:配对样本t检验也称为依赖样本t检验。这是一个单变量测试,测试2个相关变量之间的显着差异。这方面的一个例子是,如果您在某些治疗,病症或时间点之前和之后收集个人的血压。

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

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

执行下面的代码可以得到同样的结果。

import pandas as pd

from scipy import stats

df = pd.read_csv("blood_pressure.csv")

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

什么时候可以运行Z校验。

在统计学中使用几种不同类型的校验(即f检验,卡方检验,t检验)

(链接: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/ )。

在下列情况下,您将使用Z测试:

  • 您的样本量大于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个),这并不总是重要的。
  • 您的数据应从人口中随机选择,每个项目都有相同的选择机会。
  • 如果可能的话,样本量应该相等。

再举一个例子,我们使用z-test进行血压测量,如156个单样本Z检验。

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

双样本Z检验 —— 在两个样本z检验中,类似于t检验,我们检查两个独立的数据组并确定两个组的样本均值是否相等。

H0:两组的平均值为0

H1:两组的平均值不为0

例:我们检查血液之后和血液数据之前的血液数据。(下面是python代码)

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实例图

与z和t分布不同,F分布没有任何负值,因为由于每个偏差的平方,组内变异和组内变异总是正的。

单向F检验(ANOVA):根据它们的平均相似度和f分数来判断两个或更多个组是否相似。

示例:有3种不同的植物类别及其重量,需要检查所有3组是否相似(下面是python代码)

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

双向F检验: 双向F检验是单向检验的扩展(链接:https://stattrek.com/Help/Glossary.aspx?

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

现在让我们来看看平均作物产量(不是任何小组的平均作物产量),以及每个因子的平均作物产量,以及组合在一起的因子

import statsmodels.api as sm

from statsmodels.formula.api import olsdf_anova2 =

pd.read_csv

("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),将应用此测试。它用于确定两个变量之间是否存在显着关联。

例如,在选举调查中,选民可能按性别(男性或女性)和投票偏好(民主党,共和党或独立团体)进行分类。我们可以使用卡方检验来确定独立性,以确定性别是否与投票偏好相关

以下为python代码

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手教你使用Python实现常用的假设检验 !
比如:两个样本方差比服从F分布,区间估计就采用F分布计算临界值(从而得出置信区间),最终采用F检验。
我被狗咬了
2020/09/14
2K0
手把手教你使用Python实现常用的假设检验 !
机器学习数学基础:常见分布与假设检验
所谓机器学习和深度学习, 背后的逻辑都是数学, 所以数学基础在这个领域非常关键, 而统计学又是重中之重, 机器学习从某种意义上来说就是一种统计学习。
Datawhale
2020/07/09
3.4K0
机器学习数学基础:常见分布与假设检验
小孩都看得懂的假设检验
本文是「小孩都看得懂」系列的第十篇,本系列的特点是极少公式,没有代码,只有图画,只有故事。内容不长,碎片时间完全可以看完,但我背后付出的心血却不少。喜欢就好!
用户5753894
2020/06/01
2.1K0
小孩都看得懂的假设检验
Python中的统计假设检验速查表
本文是一个机器学习项目中最流行的统计假设检验的速查表,包含使用Python接口的示例。
AiTechYun
2018/09/26
2.2K0
Python中的统计假设检验速查表
如何用python来做假设检验, 求假设检验、置信区间、效应量
我们再在进行数据分析时,简单的数据分析不能深刻的反映一组数据得总体情况,倘若我们用统计学角度来分析数据则会解决一些平常解决不了得问题.
润森
2022/08/18
2.2K0
如何用python来做假设检验, 求假设检验、置信区间、效应量
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看? 作者: 计算机魔术师 版本: 1.0 ( 2023.8.27 )
计算机魔术师
2023/12/18
2.4K0
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?
常用统计检验的Python实现
今天给大家整理了一些使用python进行常用统计检验的命令与说明,请注意,本文仅介绍如何使用python进行不同的统计检验,对于文中涉及的假设检验、统计量、p值、非参数检验、iid等统计学相关的专业名词以及检验背后的统计学意义不做讲解,因此读者应该具有一定统计学基础。
刘早起
2020/04/22
2.4K0
深度好文 | 探索 Scipy 与统计分析基础
云朵君推荐 本文部分内容仅展示部分核心代码,本文提供含完整代码的完整PDF版本下载,获取方式:关注公众号 「数据STUDIO」并回复【210512】获取。若你对代码不感兴趣,直接略过,不影响阅读。
数据STUDIO
2021/06/24
3.2K0
统计系列(四)利用Python进行假设检验
核心:一个多分类自变量与另一个多分类因变量。如检验学历(低、中、高)在收入等级(低、中、高)上的差异
HsuHeinrich
2023/03/16
1.3K0
统计系列(四)利用Python进行假设检验
python数据统计分析「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说python数据统计分析「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/09/12
1.9K0
python数据统计分析「建议收藏」
假设检验在数据分析中的应用
在这篇文章中,我不会具体去推导检验统计量和相应拒绝域的得出,这对于大部分非统计学专业的人士来说是晦涩的,我只想通过一个案例告诉大部分初学者假设检验怎么在数据挖掘中使用。
用户3577892
2020/10/09
1.3K0
假设检验在数据分析中的应用
数据分析:假设检验方法汇总及R代码实现
显著性检验方法,通常也被称为假设检验方法,是统计学中用于评估样本统计量是否显著不同于某个假设值的一种重要工具。以下是假设检验方法使用时需要考虑的三个条件的书面化表述:
生信学习者
2024/06/20
9520
数据分析:假设检验方法汇总及R代码实现
如何检测两组数据是否同分布?
一个模型中,很重要的技巧就是要确定训练集与测试集特征是否同分布,这也是机器学习的一个很重要的假设,但很多时候我们默认这个道理,却很难有方法来保证数据同分布。
Python数据科学
2021/10/08
2.6K0
当数据遇上代码:程序员的假设检验
在降本增效的大背景下,我们会尝试去使用价格更加合理的云服务,那么我们该如何测试服务SLI是否如其宣称一样?
用户6879030
2024/06/05
1650
当数据遇上代码:程序员的假设检验
数据科学20 | 假设检验和P值
假设检验用来判断样本与样本、样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法。
王诗翔呀
2020/07/03
1.9K0
从零开始统计学 01 | 假设检验
假设指的是当我们没有足够的证据支持一个结果时,先可以假定一个结果。这个事先给出的假定结果,就叫做原假设(或零假设, H0),同时提出与之相对应的假设,叫做备择假设(H1)。
白墨石
2021/01/13
8640
从零开始统计学 01 | 假设检验
t检验的工作原理和在Python中的实现
因此,总有一天你可能会使用t检验,深入了解它的工作原理非常重要。作为开发人员,通过从头开始实现假设检验以理解。
AiTechYun
2018/08/16
9.3K0
t检验的工作原理和在Python中的实现
如何使用统计显着性检验来解释机器学习结果
在比较两种不同的机器学习算法或比较相同的算法与不同的配置时,收集一组结果是一个好习惯。
老人雨何
2018/02/07
3.2K0
如何使用统计显着性检验来解释机器学习结果
【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现(上)
对总体参数的具体数值所作的陈述,称为假设;再利用样本信息判断假设足否成立,这整个过程称为假设检验。
Ai学习的老章
2019/04/10
2.2K0
【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现(上)
Python数据科学:正态分布与t检验
区间估计用到了中心极限定理,表现为如果抽样多次,每次抽样都有一个均值,产生的多个均值服从正态分布。
小F
2020/10/09
2.2K0
Python数据科学:正态分布与t检验
推荐阅读
相关推荐
手把手教你使用Python实现常用的假设检验 !
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档