記錄一下使用Python進(jìn)行的單變量回歸分析的操作流程。另外推薦一個(gè)sklearn機(jī)器學(xué)習(xí)的嗶哩嗶哩視頻(文末閱讀原文,進(jìn)行觀看)。
python不像R中,默認(rèn)的函數(shù)可以做回歸分析lm
,可以做方差分析aov
,python中進(jìn)行統(tǒng)計(jì)分析需要載入外在的包,這里經(jīng)常用到的是statsmodels
和sklearn
包,statsmodels
風(fēng)格還是和R語言類似,sklearn
則偏向機(jī)器學(xué)習(xí)了,是機(jī)器學(xué)習(xí)的入門包。
「statsmodels包介紹:」
statsmodels官方文檔:https://www./stable/
statsmodels
主要是偏向傳統(tǒng)統(tǒng)計(jì)分析,比如回歸分析,方差分析,時(shí)間序列等。
- 回歸模型:線性回歸 ,通用線性回歸,魯邦線性模型 ,線性混合效應(yīng)模型等
- 時(shí)間序列分析:AR , ARMA , ARIMA , VAR等
- 非參數(shù)方法:核密度估計(jì) , 核回歸
「sklearn包介紹:」
sklearn官方文檔:https:///stable/
sklearn
是一個(gè)機(jī)器學(xué)習(xí)包,包括各種機(jī)器學(xué)習(xí)的方法。
- 分類 :SVM , K近鄰 ,隨機(jī)森林 , 邏輯回歸等
- 模型選擇 :網(wǎng)格搜索, 交叉驗(yàn)證 ,指標(biāo)矩陣
「來自R語言用戶轉(zhuǎn)python數(shù)據(jù)分析的毒打」
?這毒打甚是酸爽,簡單的回歸分析,R中一行代碼的事情,在python中差點(diǎn)勸退,這是學(xué)藝不精然后丟人現(xiàn)眼的感慨??!用法不太一樣,習(xí)慣很難改,不過隨著python語法的熟悉,套路了解之后,就淡定很多,感覺python進(jìn)行分析時(shí),更偏向底層,R分析時(shí)更友好,但是python中的sklearn,通過建立一套規(guī)則,之后無論回歸分析,還是隨機(jī)森林,還是嶺回歸,套路都是一樣的。
?
「sklearn機(jī)器學(xué)習(xí)的一般流程包括:」
「進(jìn)入正題」
這里,使用Python中的statsmodels和sklearn進(jìn)行回歸分析。
1. 數(shù)據(jù)來源:women
women是R中的一個(gè)數(shù)據(jù)集,我們把它保存到csv文件中:
> data(women)
> write.csv(women,"women.csv",row.names = F)
「數(shù)據(jù)預(yù)覽:」
2. statsmodels的矩陣的形式
?statsmodels有兩種方法,一種是通過numpy矩陣操作的形式運(yùn)算,這里的OLS都是大寫,另一種是formula形式,ols是小寫,風(fēng)格類似R。
?
import pandas as pd
import statsmodels.api as sm
dat = pd.read_csv("women.csv")
dat.head()
dat.describe()
x = dat['height']
X = x.values.reshape(-1,1) # 轉(zhuǎn)化為矩陣形式
y = dat['weight']
# 增加常數(shù)項(xiàng)
X1 = sm.add_constant(X)
X1
re = sm.OLS(y,X1).fit() # 注意,這里y在前面,X在后面
print(re.summary())
「代碼思路:」
- 載入statsmodels為了分析數(shù)據(jù)
- 提取height一列,將其變?yōu)榫仃嚨男问?,作為x變量
結(jié)果:
結(jié)果可以看出,截距為-87.5167,回歸系數(shù)為3.45,兩者都達(dá)到極顯著水平。R方為0.991,調(diào)和R方為0.990.
3. statsmodels的formula的形式
?statsmodels也可以使用類似R語言,公式的方法進(jìn)行建模。
?
import statsmodels.formula.api as smf
smf.ols("weight ~ height",data=dat).fit().summary()
結(jié)果:
可以看出,formula和前者的結(jié)果完全一致。
4. sklearn的形式
?sklearn是非常強(qiáng)大的包,包括很多機(jī)器學(xué)習(xí)的方法,是機(jī)器學(xué)習(xí)的入門包,這里使用其分析回歸分析。
?
from sklearn.linear_model import LinearRegression
mod = LinearRegression()
re = mod.fit(X1,y) # 注意,這里X在前面,y在后面。
re.coef_
re.intercept_
「結(jié)果:」
結(jié)果可以看出,回歸系數(shù)和截距和之前的分析完全一致。
「一個(gè)坑:」
statsmodels
中,進(jìn)行分析時(shí),都是y變量在前面,X變量在后面,比如:
re = sm.OLS(y,X1).fit() # 注意,這里y在前面,X在后面
smf.ols("weight ~ height",data=dat).fit().summary()
但是sklearn
中,X在前面,y在后面,比如:
re = mod.fit(X1,y) # 注意,這里X在前面,y在后面。
5. R語言作為對比
> mod = lm(weight ~ height ,data=women)
> summary(mod)
結(jié)果:
在這里插入圖片描述可以看出,截距為-87.51667,回歸系數(shù)為3.45,R方為0.991,調(diào)和R方為0.9903,和之前的結(jié)果完全一致。
6. sklearn用于GWAS和GS的實(shí)施
sklearn中機(jī)器學(xué)習(xí)的應(yīng)用,非常具有代表性,這里總結(jié)sklearn擬合模型三部曲:
「以回歸分析為例,sklearn是這樣做的:」
from sklearn.linear_model import LinearRegression # 載入回歸分析
mod = LinearRegression() # 第一步:實(shí)例化,我們后面就可以用mod去建模了
re = mod.fit(X1,y) # 第二步:通過接口,訓(xùn)練模型
re.coef_ # 第三步:提取結(jié)果信息
re.intercept_ # # 第三步:提取結(jié)果信息
上面是回歸分析,也可以很容易的變?yōu)殡S機(jī)森林,決策樹之類的方法,舉一反三的感覺不要太爽喔!
「然后呢?GWAS和GS什么鬼?」
然后我就想到,通過這種形式去將GWAS和GS的分析放進(jìn)去,像GS也包括貝葉斯啊,嶺回歸啊(RRBLUP),參考群,候選群,交叉驗(yàn)證之類的概念,本質(zhì)上也是機(jī)器學(xué)習(xí)的一種形式,通過這種形式調(diào)用,包括后面什么卷積神經(jīng)網(wǎng)絡(luò)等前沿性的算法考慮在內(nèi),然后封裝成一個(gè)庫,對外提供接口API,提供參考群數(shù)據(jù),預(yù)測候選群,然后跑各種各樣的模型,出一個(gè)最優(yōu)模型的結(jié)果,前景不要太美好……哈哈哈……
?我知道,已經(jīng)有不少研究這樣做了,但是想著自己以后能把比較前沿成熟的算法放到自己工作中,感覺好像已經(jīng)跨行成功進(jìn)入人工智能的樣子,套用茂茂的話:“好嗨喲”……
?
7. 怎么能少得了嗶哩嗶哩?
「推薦書籍」,之前寫了一篇西瓜書的讀后感:如何學(xué)習(xí)GWAS以及安利西瓜書,沒有給出書名,差評!這里貼出書名,據(jù)說網(wǎng)上有電子版的,但是對于買書當(dāng)作防身的我,紙質(zhì)書還是更有安全感。
上面這兩本書,我是在嗶哩嗶哩上面,看到這個(gè)up主推薦的,她是個(gè)妹子,還把課講得這么好,不推薦良心很痛的……

「快來關(guān)注我吧,看我是如何在進(jìn)軍機(jī)器學(xué)習(xí)的路上:」