記錄一下使用Python進(jìn)行的單變量回歸分析的操作流程。另外推薦一個sklearn機(jī)器學(xué)習(xí)的嗶哩嗶哩視頻(文末閱讀原文,進(jìn)行觀看)。
python不像R中,默認(rèn)的函數(shù)可以做回歸分析lm
,可以做方差分析aov
,python中進(jìn)行統(tǒng)計分析需要載入外在的包,這里經(jīng)常用到的是statsmodels
和sklearn
包,statsmodels
風(fēng)格還是和R語言類似,sklearn
則偏向機(jī)器學(xué)習(xí)了,是機(jī)器學(xué)習(xí)的入門包。
「statsmodels包介紹:」
statsmodels官方文檔:https://www.statsmodels.org/stable/
statsmodels
主要是偏向傳統(tǒng)統(tǒng)計分析,比如回歸分析,方差分析,時間序列等。
「sklearn包介紹:」
sklearn官方文檔:https://scikit-learn.org/stable/
sklearn
是一個機(jī)器學(xué)習(xí)包,包括各種機(jī)器學(xué)習(xí)的方法。
「來自R語言用戶轉(zhuǎn)python數(shù)據(jù)分析的毒打」
?這毒打甚是酸爽,簡單的回歸分析,R中一行代碼的事情,在python中差點勸退,這是學(xué)藝不精然后丟人現(xiàn)眼的感慨??!用法不太一樣,習(xí)慣很難改,不過隨著python語法的熟悉,套路了解之后,就淡定很多,感覺python進(jìn)行分析時,更偏向底層,R分析時更友好,但是python中的sklearn,通過建立一套規(guī)則,之后無論回歸分析,還是隨機(jī)森林,還是嶺回歸,套路都是一樣的。
?
「sklearn機(jī)器學(xué)習(xí)的一般流程包括:」
數(shù)據(jù)的獲取
特征的提取
特征的選擇
數(shù)據(jù)預(yù)處理
模型的訓(xùn)練
模型的評估
模型的優(yōu)化
模型持久化
「進(jìn)入正題」
這里,使用Python中的statsmodels和sklearn進(jìn)行回歸分析。
women是R中的一個數(shù)據(jù)集,我們把它保存到csv文件中:
> data(women)
> write.csv(women,"women.csv",row.names = F)
「數(shù)據(jù)預(yù)覽:」
?statsmodels有兩種方法,一種是通過numpy矩陣操作的形式運算,這里的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ù)項
X1 = sm.add_constant(X)
X1
re = sm.OLS(y,X1).fit() # 注意,這里y在前面,X在后面
print(re.summary())
「代碼思路:」
結(jié)果:
?statsmodels也可以使用類似R語言,公式的方法進(jìn)行建模。
?
import statsmodels.formula.api as smf
smf.ols("weight ~ height",data=dat).fit().summary()
結(jié)果:
?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é)果:」
「一個坑:」
statsmodels
中,進(jìn)行分析時,都是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在后面。
> mod = lm(weight ~ height ,data=women)
> summary(mod)
結(jié)果:
可以看出,截距為-87.51667,回歸系數(shù)為3.45,R方為0.991,調(diào)和R方為0.9903,和之前的結(jié)果完全一致。
sklearn中機(jī)器學(xué)習(xí)的應(yīng)用,非常具有代表性,這里總結(jié)sklearn擬合模型三部曲:
「以回歸分析為例,sklearn是這樣做的:」
from sklearn.linear_model import LinearRegression # 載入回歸分析
mod = LinearRegression() # 第一步:實例化,我們后面就可以用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),參考群,候選群,交叉驗證之類的概念,本質(zhì)上也是機(jī)器學(xué)習(xí)的一種形式,通過這種形式調(diào)用,包括后面什么卷積神經(jīng)網(wǎng)絡(luò)等前沿性的算法考慮在內(nèi),然后封裝成一個庫,對外提供接口API,提供參考群數(shù)據(jù),預(yù)測候選群,然后跑各種各樣的模型,出一個最優(yōu)模型的結(jié)果,前景不要太美好……哈哈哈……
?我知道,已經(jīng)有不少研究這樣做了,但是想著自己以后能把比較前沿成熟的算法放到自己工作中,感覺好像已經(jīng)跨行成功進(jìn)入人工智能的樣子,套用茂茂的話:“好嗨喲”……
?
「推薦書籍」,之前寫了一篇西瓜書的讀后感:如何學(xué)習(xí)GWAS以及安利西瓜書,沒有給出書名,差評!這里貼出書名,據(jù)說網(wǎng)上有電子版的,但是對于買書當(dāng)作防身的我,紙質(zhì)書還是更有安全感。
「快來關(guān)注我吧,看我是如何在進(jìn)軍機(jī)器學(xué)習(xí)的路上:」