2019年5月,Scikit-learn(sklearn)迎來了歷史性的0.21版本,不再支持Python 2.7和3.4,僅支持Python 3.5及後續版本。此前,2018年9月0.20版本發布時,已對此做出了提前說明。
sklearn版本更新內容的六大分類
在了解這一次的版本更新內容前,先熟悉一下sklearn對更新內容的分類習慣。
sklearn將更新內容劃分成六個大類,由四種顏色標識。分別是:
綠色,重大新功能 Major Feature;綠色,新功能 Feature;藍色,效率提高 Efficiency;藍色,性能增強 Enhancement;紅色,缺陷修復 Fix;橙色,接口改動 API Change。在0.21版本發布後,陸續更新了幾個以缺陷修復為主的小版本。考慮到0.21版本的更新內容不算少,所以,挑選綠色標識的內容,主要關注一下新增的功能。
0.21的綠色功能更新內容摘要
一共有24個綠色標籤的功能性改動,涉及到了14個類別。其中,13類是具體模塊,剩下的1類,是牽涉多個模塊的基礎性改動。
sklearn.cluster 新增了1項
一個聚類算法 cluster.OPTICS,比cluster.DBSCAN更方便調參。sklearn.ensemble 新增了2項
兩個實驗性質的梯度下降樹GBT,分別是ensemble.HistGradientBoostingClassifier 和 ensemble.HistGradientBoostingRegressor,據說是受到了LightGBM的啟發。當樣本數量大於數萬個時,會比ensemble.GradientBoostingRegressor 和 ensemble.GradientBoostingClassifier要快。但因為是實驗性質的,功能還不健全,sklearn也可能隨時修改這一項更新的內容,對結果不做一致性的保證。添加了ensemble.VotingRegressor,它為回歸問題提供了等效的ensemble.VotingClassifier。sklearn.impute 新增了2項
添加了缺失值處理的新方法 impute.IterativeImputer,實驗性質。impute.SimpleImputer 和 impute.IterativeImputer 新增了一個參數 「add_indicator」,實現了impute.MissingIndicator的轉換輸出。這樣一來,預測模型也可以解釋缺失值了。sklearn.inspection 新增了1項
號外!號外!現在凡是有 「predict_proba」方法的回歸或者分類器都支持部分依賴圖(inspection.plot_partial_dependence)啦!sklearn.isotonic 新增了1項
允許在 isotonic.IsotonicRegression 處理不同的數據類型了,比如:float32。sklearn.linear_model 新增了2項
通過選擇「saga」解算器,linear_model.LogisticRegression 和 linear_model.LogisticRegressionCV 現在支持Elastic-Net懲罰約束了。添加了 linear_model.lars_path 的加強版 linear_model.lars_path_gram,可以直接不提供 X 和 y 就開搞。sklearn.metrics 新增了4項
為單輸出回歸提供了 metrics.max_error 指標,以及相應的 「max_error」得分參數。可以計算每個類別的混淆矩陣了!新增的 metrics.multilabel_confusion_matrix 有助於調參。新增的 metrics.jaccard_score 可以用來計算 Jaccard係數,操作方式跟 metrics.f1_score 差不多。之前「Haversine距離」可以通過最近鄰計算得到,現在新增了metrics.pairwise.haversine_distances ,可以通過 metrics.pairwise_distances 設置「metric=『pairwise』」實現。sklearn.model_selection 新增了1項
新增了兩個類,分別是:GridSearchCV, RandomizedSearchCV。現在允許「refit=callable」來加強查找的可伸縮性,具體可以參考《模型複雜度和交叉驗證分數的平衡之道》。sklearn.neighbors 新增了1項
添加了 neighbors.NeighborhoodComponentsAnalysis,它實現了近領成分分析算法。sklearn.pipeline 新增了2項
pipeline.Pipeline 現在可以使用索引切片了!比如:my_pipleline[0:-1]。提取的子序列可以作為另一個Pipeline實例。還可以直接索引管道的特定步驟,跟通過「named_steps」一樣的效果,但更方便。比如:my_pipeline['svc']。為pipeline.Pipeline,compose.ColumnTransformer 和 pipeline.FeatureUnion以及相應的「make_」 添加了可選參數「verbose」,用來顯示每個步驟的進度和時間。sklearn.preprocessing 新增了1項
preprocessing.OneHotEncoder 現在支持通過「drop」刪除某個類別的特徵。這在存在共線性的時候比較實用,例如:將結果數據輸入神經網絡或非規則化回歸時。sklearn.tree 新增了3項
決策樹更容易畫出來了!現在可以基於「matplotlib」,通過 tree.plot_tree作圖,不再依賴難安裝的「dot」庫了。現在可以通過 tree.export_text 導出閱讀性良好的「文本格式」決策樹了。tree.BaseDecisionTree 新增了 get_n_leaves() 和 get_depth() 兩個方法。重點是:基於這個基礎算法的那些模型都同步更新了這兩個方法。比如:tree.DecisionTreeClassifier,tree.DecisionTreeRegressor,tree.ExtraTreeClassifier,tree.ExtraTreeRegressor。sklearn.utils 新增了1項
utils.resample 現在可以通過新增的「stratify」參數,設置根據分布分層取樣。涉及多個模塊的基礎更新,新增有2項
完全重寫了「_repr_()」方法,現在用的是Python標準庫的列印方式,很優雅。這個方法用在調用 print(estimator) 的時候。但想改的話也可以,通過修改 sklearn.set_config 的 「print_changed_only」參數。引入了Estimator Tags 估算器標籤,字典形式存儲,通過調用「_get_tags()」方法獲取。像sklearn.utils.estimator_checks.check_estimator 可以使用這些標籤決定運行哪些測試以及輸入哪些數據是合適的。標籤可以依賴於估算器的參數設置,甚至系統控制,一般只在運行的時候才真正生效。標籤作為注釋,可以標識具體某個估算器的功能、數據要求、支持的輸出類型、支持的方法等信息。以上就是sklearn的0.21版本綠色功能性改動部分的摘要,更詳細準確的內容就必須前往官方文檔查閱了。