python中不像R中,默認的函數可以做迴歸分析lm
,可以做方差分析aov
,python中進行統計分析需要載入外在的包,這裏經常用到的是statsmodels
和sklearn
包,statsmodels
風格還是和R語言類似,sklearn
則偏向機器學習了,是機器學習的入門包。
statsmodels包介紹:
statsmodels官方文檔:https://www.statsmodels.org/stable/
statsmodels
主要是偏向傳統統計分析,比如迴歸分析,方差分析,時間序列等。
- 迴歸模型:線性迴歸 ,通用線性迴歸,魯邦線性模型 ,線性混合效應模型等
- 方差分析(ANOVA)
- 時間序列分析:AR , ARMA , ARIMA , VAR等
- 非參數方法: 核密度估計 , 核迴歸
- 統計模型結果可視化
sklearn包介紹:
sklearn官方文檔:https://scikit-learn.org/stable/
sklearn
是一個機器學習包,包括各種機器學習的方法。
- 分類 :SVM , K近鄰 ,隨機森林 , 邏輯迴歸等
- 迴歸 :Lasso ,嶺迴歸 等
- 聚類 :K-means ,譜聚類等
- 降維 :PCA ,特徵選擇 ,矩陣分解等
- 模型選擇 :網格搜索, 交叉驗證 ,指標矩陣
- 預處理: 特徵提取,正態化
來自R語言用戶轉python數據分析的毒打
這毒打甚是酸爽,簡單的迴歸分析,R中一行代碼的事情,在python中差點勸退,這是學藝不精然後丟人現眼的感慨啊!用法不太一樣,習慣很難改,不過隨着python語法的熟悉,套路瞭解之後,就淡定很多,感覺python進行分析時,更偏向底層,R分析時更友好,但是python中的sklearn,通過建立一套規則,之後無論迴歸分析,還是隨機森林,還是嶺迴歸,套路都是一樣的。
sklearn機器學習的一般流程包括:
-
數據的獲取
-
特徵的提取
-
特徵的選擇
-
數據預處理
-
模型的訓練
-
模型的評估
-
模型的優化
-
模型持久化
進入正題
這裏,使用Python中的statsmodels和sklearn進行迴歸分析。
1. 數據來源:women
women是R中的一個數據集,我們把它保存到csv文件中:
> data(women)
> write.csv(women,"women.csv",row.names = F)
數據預覽:
2. statsmodels的矩陣的形式
statsmodels有兩種方法,一種是通過numpy矩陣操作的形式運算,這裏的OLS都是大寫,另一種是formula形式,ols是小寫,風格類似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) # 轉化爲矩陣形式
y = dat['weight']
# 增加常數項
X1 = sm.add_constant(X)
X1
re = sm.OLS(y,X1).fit() # 注意,這裏y在前面,X在後面
print(re.summary())
代碼思路:
- 載入pandas,爲了讀取數據
- 載入statsmodels爲了分析數據
- 提取height一列,將其變爲矩陣的形式,作爲x變量
- 提取weight一列,作爲y變量
- 增加常數(截距)
- 使用OLS進行模型擬合
- 查看結果
結果:
結果可以看出,截距爲-87.5167,迴歸係數爲3.45,兩者都達到極顯著水平。R方爲0.991,調和R方爲0.990.
3. statsmodels的formula的形式
statsmodels也可以使用類似R語言,公式的方法進行建模。
import statsmodels.formula.api as smf
smf.ols("weight ~ height",data=dat).fit().summary()
結果:
可以看出,formula和前者的結果完全一致。
4. sklearn的形式
sklearn是非常強大的包,包括很多機器學習的方法,是機器學習的入門包,這裏使用其分析迴歸分析。
from sklearn.linear_model import LinearRegression
mod = LinearRegression()
re = mod.fit(X1,y) # 注意,這裏X在前面,y在後面。
re.coef_
re.intercept_
結果:
結果可以看出,迴歸係數和截距和之前的分析完全一致。
一個坑:
statsmodels
中,進行分析時,都是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)
結果:
可以看出,截距爲-87.51667,迴歸係數爲3.45,R方爲0.991,調和R方爲0.9903,和之前的結果完全一致。
6. sklearn用於GWAS和GS的實施
sklearn中機器學習的應用,非常具有代表性,這裏總結sklearn擬合模型三部曲:
- 第一步:實例化,建立評估模型對象
- 第二步:通過模型接口訓練模型
- 第三步:通過模型接口提取需要的信息
以迴歸分析爲例,sklearn是這樣做的:
from sklearn.linear_model import LinearRegression # 載入迴歸分析
mod = LinearRegression() # 第一步:實例化,我們後面就可以用mod去建模了
re = mod.fit(X1,y) # 第二步:通過接口,訓練模型
re.coef_ # 第三步:提取結果信息
re.intercept_ # # 第三步:提取結果信息
上面是迴歸分析,也可以很容易的變爲隨機森林,決策樹之類的方法,舉一反三的感覺不要太爽喔!
然後呢?GWAS和GS什麼鬼?
然後我就想到,通過這種形式去將GWAS和GS的分析放進去,像GS也包括貝葉斯啊,嶺迴歸啊(RRBLUP),參考羣,候選羣,交叉驗證之類的概念,本質上也是機器學習的一種形式,通過這種形式調用,包括後面什麼卷積神經網絡等前沿性的算法考慮在內,然後封裝成一個庫,對外提供接口API,提供參考羣數據,預測候選羣,然後跑各種各樣的模型,出一個最優模型的結果,前景不要太美好……哈哈哈……
我知道,已經有不少研究這樣做了,但是想着自己以後能把比較前沿成熟的算法放到自己工作中,感覺好像已經跨行成功進入人工智能的樣子,套用茂茂的話:“好嗨喲”……
7. 怎麼能少得了嗶哩嗶哩?
推薦書籍,之前寫了一篇西瓜書的讀後感:
上面這兩本書,我是在嗶哩嗶哩上面這個up主推薦的,她是個妹子,還把課講得這麼好,不推薦良心很痛的……
快來關注我吧,看我是如何在進軍機器學習的路上:
信心滿滿離開家,備受打擊咬着牙,以爲堅持能入門,成功勸退臉被打。
閱讀原文,觀看良心up主sklearn教程