作者 | Jose Garcia
譯者 | 張睿毅
校對 | 張一豪、林亦霖
編輯 | 于騰凱
來源 | 數據派THU(ID:DatapiTHU)
【導讀】本文中,作者給出了假設檢驗的解讀與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、哪些是假設檢驗的重要參數?
-
零假設:
-
?備擇假設:
-
T校驗(學生T校驗)
-
Z校驗
-
ANOVA校驗
-
卡方檢驗
鏈接:?https://www.investopedia.com/terms/v/variance.asp
鏈接:?https://www.investopedia.com/terms/h/hypothesistesting.asp
-
單樣本t檢驗
-
雙樣本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”)
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")
鏈接:https://www.statisticshowto.datasciencecentral.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, 否則,請使用t檢驗。
鏈接:?https://www.statisticshowto.datasciencecentral.com/probability——and——statistics/find——sample——size/
-
數據點應彼此獨立, 換句話說,一個數據點不相關或不影響另一個數據點。
鏈接:?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")
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")
鏈接:https://en.wikipedia.org/ wiki/Analysis_of_variance
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")
鏈接:https://stattrek.com/Help/Glossary.aspx? Target=Categorical%20variable
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
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
◆
精彩推薦
◆
倒計時!由易觀攜手CSDN聯合主辦的第三屆易觀算法大賽還剩 7 天,冠軍團隊將獲得3萬元!
本次比賽主要預測訪問平臺的相關事件的PV,UV流量 (包括Web端,移動端等),大賽將會提供相應事件的流量數據,以及對應時間段內的所有事件明細表和用戶屬性表等數據,進行模型訓練,并用訓練好的模型預測規定日期范圍內的事件流量。
推薦閱讀
-
知乎算法團隊負責人孫付偉: Graph?Embedding在知乎的應用實踐
-
必看,61篇NeurIPS深度強化學習論文解讀都這里了
-
打破深度學習局限,強化學習、深度森林或是企業AI決策技術的“良藥”
-
激光雷達,馬斯克看不上,卻又無可替代?
-
卷積神經網絡中十大拍案叫絕的操作
-
Docker是啥?容器變革的火花?
-
5大必知的圖算法,附Python代碼實現
-
阿里云彈性計算負責人蔣林泉:億級場景驅動的技術自研之路
-
40 歲身體死亡,11 年后成“硅谷霍金”,他用一塊屏幕改變 100 萬人!
-
AI大神如何用區塊鏈解決模型訓練痛點, AI+區塊鏈的正確玩法原來是這樣…… | 人物志
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
