本文作者:王 歌
文字編輯:戴 雯
技術總編:張 邯
重大通知!!!爬蟲俱樂部於2020年7月11日至14日在線上舉行為期四天的Stata編程技術定製培訓,招生工作已經圓滿結束啦!!!
另外,應廣大學員需求,爬蟲俱樂部將於2020年7月25日至28日在線上舉行Python編程技術訓練營,本次培訓採用理論與案例相結合的方式,幫助大家在掌握Python基本思想的基礎上,學習科學計算技術與網絡數據抓取技術,詳情可點擊《Python雲端培訓課程開始報名~》,或點擊文末閱讀原文直接提交報名信息呦~
前面我們在舉例時,通常是將所使用的數據集按照75%和25%的比例劃分為訓練集和測試集,這主要是為了我們舉例方便,同時劃分後的數據量也依然符合大樣本的要求。其實在機器學習中還有其他劃分數據集的方法,可以在本身數據總量就比較小時使模型達到很好的效果,我們今天介紹的交叉驗證法就是比較常用的方法,它在我們將要介紹的集成學習的Stacking算法中經常使用到。我們這裡依然使用的是鳶尾花的數據,同時使用Logistic回歸訓練模型。在sklearn中,通常使用 cross_val_predict實現k折交叉驗證,它返回的是一個使用交叉驗證以後的輸出值,若要返回準確度評分,可以使用 cross_val_score。兩者參數相同,第一個參數為所使用的分類器,第二個和第三個參數分別是屬性值和標籤值,最後一個參數 cv確定折數。我們這裡進行5折的交叉驗證,程序如下:
from sklearn.datasets import load_irisfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import cross_val_score, cross_val_predictiris_sample = load_iris()x = iris_sample.datay = iris_sample.targetlrclf = LogisticRegression()predicted = cross_val_predict(lrclf, x, y, cv=5) print('5折交叉驗證預測值:', predicted)scores = cross_val_score(lrclf, x, y, cv=5) print('評分:', scores)print('準確度:', metrics.accuracy_score(predicted, y)) 結果如下:若使用留一法,則要使用 LeaveOneOut類,沒有參數需要設置。具體程序如下:
from sklearn.model_selection import LeaveOneOutloo = LeaveOneOut()scores = cross_val_score(lrclf, x, y, cv=loo)predicted = cross_val_predict(lrclf, x, y, cv=loo)print('留一法預測值:', predicted)scores = cross_val_score(lrclf, x, y, cv=loo)print('評分:', scores)print('準確度:', metrics.accuracy_score(predicted, y)結果如下:假設進行5次5折交叉驗證,我們使用 RepeatedKFold類,有三個參數:
(1) n_split表示要劃分的折數;
(2) n_repeats表示重複幾次;
(3) random_state設置隨機種子。
from sklearn.model_selection import RepeatedKFoldkf = RepeatedKFold(n_splits=5, n_repeats=5, random_state=0) predicted = cross_val_predict(lrclf, x, y, cv=5)print('5次5折交叉驗證預測值:', predicted)scores = cross_val_score(lrclf, x, y, cv=kf)print('評分:', scores)print('準確度:', metrics.accuracy_score(predicted, y))結果如下:在sklearn中還提供了許多其它交叉驗證的類,比如使用 ShuffleSplit類可以隨機的把數據打亂,然後分為訓練集和測試集;對於時間序列的數據,可以使用 TimeSeriesSplit;若要實現分層抽樣式的交叉驗證,可以使用 StratifiedKFold;分層隨機劃分可以使用 StratifiedShuffleSplit,等等,大家可以根據自己的需要來選擇合適的交叉驗證方式。
以上就是本期推文的全部內容啦,感興趣的小夥伴快動手試試吧~對我們的推文累計打賞超過1000元,我們即可給您開具發票,發票類別為「諮詢費」。用心做事,不負您的支持!微信公眾號「Stata and Python數據分析」分享實用的stata、python等軟體的數據處理知識,歡迎轉載、打賞。我們是由李春濤教授領導下的研究生及本科生組成的大數據處理和分析團隊。
此外,歡迎大家踴躍投稿,介紹一些關於stata和python的數據處理和分析技巧。投稿郵箱:statatraining@163.com投稿要求:
1)必須原創,禁止抄襲;
2)必須準確,詳細,有例子,有截圖;
注意事項:
1)所有投稿都會經過本公眾號運營團隊成員的審核,審核通過才可錄用,一經錄用,會在該推文裡為作者署名,並有賞金分成。
2)郵件請註明投稿,郵件名稱為「投稿+推文名稱」。
3)應廣大讀者要求,現開通有償問答服務,如果大家遇到有關數據處理、分析等問題,可以在公眾號中提出,只需支付少量賞金,我們會在後期的推文裡給予解答。