> Photo by Joshua Aragon on Unsplash
檢視哪種模型最適合您的資料集的最簡單方法!在開始研究有監督的學習問題時,我們通常不確定哪些模型可以與現有資料集配合使用。一種可能的解決方案是從一個對許多資料集(如"隨機森林")而言效果很好的模型開始,然後進行迭代。這樣,我們可以建立一個旨在提高的基準。
"進步不是由早起的人取得的。它是由懶惰的人嘗試尋找更簡單的方法來做的。"―羅伯特·海因萊因
最有可能的是,在某個時間點上,您還考慮過將所有模型扔到資料集上,然後看看會發生什麼。但是,這並不是那麼簡單的編碼(或者說,它很繁瑣),所以您可能放棄了這個想法,只是嘗試了一些過去使用過的模型。但是現在,有了一個方便的名為lazypredict的庫,您可以使用它透過一行程式碼來訓練scikit-learn中的所有模型(以及更多模型,例如XGBoost和LightGBM)。聽起來不錯吧?讓我們看看這在實踐中是如何實現的!
動手例項首先,您需要透過執行以下命令安裝庫:
pip install lazypredict
最有可能的是,您會遇到一些有關缺少庫的錯誤,因此只需使用pip或conda分別安裝它們即可。我稍後會提到這是可能的改進。然後,我們載入所需的庫:
from lazypredict.Supervised import LazyClassifier, LazyRegressorfrom sklearn.model_selection import train_test_splitfrom sklearn import datasets
lazypredict同時支援分類和迴歸問題,因此我將簡要介紹兩者。
分類任務由於本文的想法是快速展示庫的工作原理,因此我不使用任何奇特的資料集,而僅使用scikit-learn中的示例資料集。對於分類任務,我使用乳腺癌資料集。我載入資料並將其分為訓練和測試集。
# load datadata = datasets.load_breast_cancer()X, y = data.data, data.targetX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=42)# fit all modelsclf = LazyClassifier(predictions=True)models, predictions = clf.fit(X_train, X_test, y_train, y_test)
對於熟悉scikit-learn的任何人來說,使用lazypredict都是非常容易和直觀的。在這種情況下,我們首先建立估算器的例項LazyClassifier,然後使用fit方法將其適合資料。透過在建立LazyClassifier例項的同時指定predictions = True,我們還將為每個觀察值接收所有模型的預測。以防萬一我們以後想將它們用於其他用途。此外,我們可以使用custom_metric引數傳遞自定義指標,以用於評估模型的效能。
注意:透過檢視程式碼,您可以檢視可用模型列表中排除的估計量。對於分類,我們收到以下4個指標,並表明將模型擬合到我們的資料集所花費的時間。
對於使用者而言,另一個重要的隱患是該庫自動將預處理應用於資料集。首先,它使用SimpleImputer估算缺失值(對於數字特徵使用均值,對於分類特徵使用恆定的"缺失"值)。然後,它將StandardScaler用於數字功能,將OneHotEncoder或OrdinalEncoder用於分類功能(取決於基數-唯一值的數量)。儘管這很方便,並且可以確保模型能夠實際執行,但是某些使用者可能更喜歡使用其他方法來預處理資料集。這就是為什麼我認為這應該是圖書館的自願功能,而不是強制性功能。
模型DataFrame包含所有分類器的效能摘要,而預測(此處未顯示,因為DataFrame很大)包含每個模型的所有預測。
迴歸任務如前所述,迴歸任務與分類問題非常相似。我使用Boston Housing資料集並例項化另一個類-LazyRegressor。其餘的都是類推。
# load databoston = datasets.load_boston()X, y = boston.data, boston.targetX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=42)# fit all modelsreg = LazyRegressor(predictions=True)models, predictions = reg.fit(X_train, X_test, y_train, y_test)
自然,包含模型效能的表對迴歸任務具有不同的指標,即R-Squared和RMSE。我們可以使用custom_metric引數新增更多內容(例如,MAPE)。為了使文章簡潔,下表被截斷了,但是可用迴歸器的列表要長得多。
可能的改進在短暫地使用lazypredict庫之後,我認為可以進行一些重大改進:
· 這很簡單,但是要確保該庫具有正確的依賴關係列表,以便使用者不必根據收到的錯誤手動安裝每個庫,
· 允許訪問最佳/所有訓練有素的模型,現在我們只能看到包含結果和預測的表格,
· 並行訓練模型-對於小型資料集來說不是問題,但是,對於較大的資料集,可以加快速度,
· 建立專用的預測方法來獲取預測,
· 將預設的預處理設為可選,並明確記錄在案,
· 允許一些超引數調整。
結論lazypredict是一個方便的包裝器庫,使我們能夠快速將所有模型擬合到資料集中並比較其效能。這樣,我們可以看到"開箱即用"的效果很好。但是,這不是模型訓練和選擇的靈丹妙藥,因為僅訓練預設變數。眾所周知,超引數調整可以極大地改變效能。