2021 年 sklearn 版本更新,10 個新玩法!

作者:Jeff Hale 轉自:機器之心

Scikit-learn 更新了,新特性主要包括選擇超參數更快的方法、ICE 圖、直方圖 boosting 改進、OneHotEncoder 支持缺失值等。

自 2007 年發佈以來,Scikit-learn 已經成爲 Python 領域非常重要的機器學習庫,支持分類、迴歸、降維和聚類四大機器學習算法,還包括了特徵提取、數據處理和模型評估三大模塊。

總的來說,Scikit-learn 有以下優點:

  1. 完善的文檔,上手容易;

  2. 豐富的 API,在學術界頗受歡迎;

  3. 封裝了大量的機器學習算法,包括 LIBSVM 和 LIBINEAR 等;

  4. 內置了大量數據集,節省了獲取和整理數據集的時間。

和其他衆多的開源項目一樣,Scikit-learn 目前主要由社區成員自發進行維護。可能是由於維護成本的限制,Scikit-learn 相比其他項目要顯得更爲保守。但在剛剛到來的 2021 年,Scikit-learn 0.24.0 版本更新了,讓我們看看新版本有哪些值得關注的新特性。

1. 選擇超參數更快的方法

HalvingGridSearchCV 和 HalvingRandomSearchCV 將 GridSearchCV 和 RandomizedSearchCV 合併爲超參數調優家族中資源密集度較低的成員。

新類使用錦標賽方法(tournament approach)選擇最佳超參數。它們在觀測數據的子集上訓練超參數組合,得分最高的超參數組合會進入下一輪。在下一輪中,它們會在大量觀測中獲得分數。比賽一直持續到最後一輪。

確定傳遞給 HalvingGridSearchCV 或 halvingAndomSearchCV 的超參數需要進行一些計算,你也可以使用合理的默認值。

HalvingGridSearchCV 使用所有超參數組合。RandomGridSearchCV 使用隨機子集,就如 RandomizedSearchCV 一樣。

一些建議:

在使用之前,這些類需要從 experimental 模塊導入:

2. ICE 圖

Scikit-learn 0.23 版本引入了部分依賴圖(PDP),PDP 對顯示平均特徵非常重要。而 Scikit-learn 0.24 版本則提供了顯示個體條件期望(ICE)圖的選項。

與 PDP 一樣,ICE 圖顯示了目標和輸入特徵之間的依賴關係。不同之處在於, ICE 圖顯示了對每個樣本特徵的預測依賴性——每個樣本一行。特徵的平均 ICE 爲 PDP。

通過將關鍵字參數 kind='individual'傳遞給 plot_partial_dependency 函數可以查看 ICE 圖。而 PDP 和 ICE 則可以通過關鍵字參數 kind='both'進行查看。

來自 scikit-learn gapminder 數據集的 PDP 和 ICE 圖。

3. 直方圖 boo****sting 改進

受 LightGBM 啓發, HistGradientBoostingRegressor 和 HistGradientBoostingClassifier 現在有一個 categorical_features 參數,可用來提供分類特徵支持。因爲基於直方圖的 booster 支持連續特徵,這是一個不錯的選擇。與 one-hot 編碼相比,它節省了訓練時間,並且性能優於其他編碼選項。

model = HistGradientBoostingRegressor(
 categorical_features=[True, False]
)

在 scikit-learn 0.24 版本中,直方圖 boosting 算法在速度和內存使用方面得到了改進。在 2020 年末,HistGradientBoostingClassifier 的基準擬合速度(benchmark fit speed)下降了近 75%。

此外,請注意,基於直方圖的估計器支持缺失值,因此,如果你不需要填充缺失值,則無需進行插補。這些估計器還處於試驗階段,因此啓用估計器需要從 sklearn.experimental 導入。

4. 前向選擇用於特徵選擇

選擇特徵子集時,SequentialFeatureSelector 從無特徵開始,通過前向選擇,逐漸添加特徵,首先添加第一個最有價值的特徵,然後添加第二個最有價值的特徵,依此類推,直到到達選擇的停止點。

不同於特徵選擇轉換器 RFE 和 SelectFromModel,SequentialFeatureSelector 不需要底層模型來公開 coef_或 feature_importances_屬性。但是,SequentialFeatureSelector 可能比 RFE 和 SelectFromModel 這兩個選項慢,因爲它使用交叉驗證來評估模型。

5. 多項式特徵展開的快速逼近

PolynomialFeatures 轉換器創建交互項和特徵的高階多項式。然而,這會讓模型訓練變得非常緩慢。來自 kernel_approximation 命名空間的 PolynomialCountSketch 核近似函數提供了一種更快的方法來訓練具有預測優勢的線性模型,該模型可以使用 PolynomialFeatures 進行近似。

或者,你可以將 PolynomialCountSketch 視爲具有徑向基函數核的支持向量機的更快版本,只是在預測方面,性能差一點。

PolynomialFeatures 返回平方特徵和交互項(如果需要,還可以返回高階多項式)。相反,PolynomialCountSketch 返回在 n_components 參數中指定的特徵數。默認值爲 100,建議文檔字符串(docstring)中包含的特徵數量是原始特徵數量的 10 倍。這些特徵表示多項式特徵展開近似,但不能直接解釋。

6. 用於半監督學習的 SelfTrainingClassifier

SelfTrainingClassifier 是一個新的用於半監督學習的元分類器。它允許所有可以預測屬於目標類的樣本概率的監督分類器作爲半監督分類器,從未標記的觀測結果中學習。

請注意,y_train 中未標記值必須爲 - 1,不能設置爲 null。

7. 平均絕對百分比誤差 (MAPE)

mean_absolute_percentage_error 函數現已被添加爲迴歸問題評分指標。和 R-squared 一樣,MAPE 在不同的迴歸問題中提供了一些比較值。

你可以使用 np.mean(np.abs((y_test — preds)/y_test)) 手動計算 MAPE,但總體來說,這個函數還是非常有用的。

scikit-learn 0.24 版本的 OneHotEncoder 可以處理缺失值。如果在 X_train 中有一個 null 值,那麼在轉換後的列中將有一個列來表示缺失值。

9. OrdinalEncoder 可以處理測試集中的新值

你是否有存在於測試集中、但在訓練集中沒有的類別?如果有這種情況的話,將 handle_unknown='use_encoded_value' 關鍵字參數和新的 unknown_value 參數一起使用。你可以將 unknown_value 參數設置爲未出現在序數編碼值中的整數或 np.nan。這使得 OrdinalEncoder 更易於使用。

10. 遞歸式特徵消除(RFE)接受一定比例的特徵保留

向 n_features_to_select 傳遞一個 0 到 1 之間的浮點數,以控制要選擇特性的百分比。這種添加使得以編程方式消除部分特徵變得更容易。

原文鏈接:https://towardsdatascience.com/the-10-best-new-features-in-scikit-learn-0-24-f45e49b6741b

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/fk8foDKUDSctHh-U_v4p_g