【机器学习基础】关于Scikit-Learn,你不一定知道的10件事
作者:Rebecca Vickery??編譯:ronghuaiyang
導讀
Scikit-learn中有很多方便的功能,你不一定知道。
Scikit-learn是使用最廣泛的Python機器學習庫之一。它有一個標準化和簡單的接口用來預處理數據和進行模型的訓練,優化和評估。
該項目最初是由David Cournapeau開發的谷歌Summer of Code項目,并在2010年首次公開發布。自創建以來,這庫已經發展成為一個豐富的生態系統,用于開發機器學習模型。
隨著時間的推移,該項目開發了許多方便的功能,增強了其易用性。在本文中,我將介紹10個你可能不知道的最有用的特性。
1. Scikit-learn 有內置的數據集
Scikit-learn API有多種內置的toy和現實世界數據集。只需一行代碼就可以訪問這些函數,如果你正在學習或只是想快速嘗試一些新功能,那么它們非常有用。
你還可以使用生成器方便地為回歸make_regression()、聚類make_blobs()以及分類make_classification()生成合成數據集。
所有的加載工具都提供了返回已經分割成X(特征)和y(目標)的數據的選項,這樣就可以直接使用它們來訓練模型。
#?Toy?regression?data?set?loading from?sklearn.datasets?import?load_bostonX,y?=?load_boston(return_X_y?=?True)#?Synthetic?regresion?data?set?loading from?sklearn.datasets?import?make_regressionX,y?=?make_regression(n_samples=10000,?noise=100,?random_state=0)2. 第三方公開數據集獲取也很方便
如果你想通過Scikit-learn直接訪問更多公開可用的數據集,有一個方便的函數可以讓你直接從openml.org網站導入數據。這個網站包含超過21,000種不同的數據集,用于機器學習項目。
from?sklearn.datasets?import?fetch_openmlX,y?=?fetch_openml("wine",?version=1,?as_frame=True,?return_X_y=True)3. 有現成的分類器來訓練基線模型
在開發機器學習模型時,明智的做法是首先創建一個基線模型。這個模型本質上應該是一個“偽”模型,比如總是預測最經常出現的類。這為你的“智能”模型提供了一個基準,這樣你就可以確保它比隨機結果表現得更好。
Scikit-learn中包含用于分類任務的 DummyClassifier()和用于回歸問題的DummyRegressor()。
from?sklearn.dummy?import?DummyClassifier#?Fit?the?model?on?the?wine?dataset?and?return?the?model?score dummy_clf?=?DummyClassifier(strategy="most_frequent",?random_state=0)dummy_clf.fit(X,?y)dummy_clf.score(X,?y)4. Scikit-learn 有自己的繪圖 API
Scikit-learn有一個內置的繪圖API,它允許你在不導入任何其他庫的情況下可視化模型性能。包括下列繪圖功能:部分依賴圖、混淆矩陣、精確度召回率曲線和ROC曲線。
import?matplotlib.pyplot?as?plt? from?sklearn?import?metrics,?model_selection from?sklearn.ensemble?import?RandomForestClassifier from?sklearn.datasets?import?load_breast_cancerX,y?=?load_breast_cancer(return_X_y?=?True)X_train,?X_test,?y_train,?y_test?=?model_selection.train_test_split(X,?y,?random_state=0) clf?=?RandomForestClassifier(random_state=0) clf.fit(X_train,?y_train)metrics.plot_roc_curve(clf,?X_test,?y_test) plt.show()5. Scikit-learn 具有內置的特征選擇方法
提高模型性能的一種方法是只使用最好的特征集來訓練模型,或者去除冗余的特征。這個過程稱為特征選擇。
Scikit-learn有許多函數來進行feature selection。其中一個是SelectPercentile()。該方法根據所選擇的統計方法選擇表現最好的X百分位特征進行評分。
from?sklearn?import?model_selection from?sklearn.ensemble?import?RandomForestClassifier from?sklearn.datasets?import?load_wine from?sklearn.pipeline?import?Pipeline from?sklearn.preprocessing?import?StandardScaler from?sklearn.feature_selection?import?SelectPercentile,?chi2X,y?=?load_wine(return_X_y?=?True)X_trasformed?=?SelectPercentile(chi2,?percentile=60).fit_transform(X,?y)6. Pipelines 可以讓你把所有的機器學習工作流串到一起
除了為機器學習提供廣泛的算法,Scikit-learn也有一系列的預處理和數據變換的功能。為了便于機器學習工作流的重現性和簡單性,Scikit-learn創建了**pipeline **,它允許你將大量的預處理步驟與模型訓練階段鏈接在一起。
pipeline將工作流中的所有步驟存儲為單個實體,可以通過fit和predict方法調用。在pipeline對象上調用fit方法時,將自動執行預處理步驟和模型訓練。
from?sklearn?import?model_selection from?sklearn.ensemble?import?RandomForestClassifier from?sklearn.datasets?import?load_breast_cancer from?sklearn.pipeline?import?Pipeline from?sklearn.preprocessing?import?StandardScalerX,y?=?load_breast_cancer(return_X_y?=?True)X_train,?X_test,?y_train,?y_test?=?model_selection.train_test_split(X,?y,?random_state=0)#?Chain?together?scaling?the?variables?with?the?model pipe?=?Pipeline([('scaler',?StandardScaler()),?('rf',?RandomForestClassifier())]) pipe.fit(X_train,?y_train)pipe.score(X_test,?y_test)7. 使用ColumnTransformer,你可以對不同的特征應用不同的預處理
在許多數據集中,你將擁有不同類型的特征,需要應用不同的預處理步驟。例如,數據集中可能混合有分類數據和數值數據,你可能希望通過獨熱編碼將分類數據轉換為數值數據并縮放數值變量。
Scikit-learn pipeline中有一個函數ColumnTransformer,可以讓你非常容易地通過索引或通過指定的列名來指定哪些列應用最合適的預處理。
from?sklearn?import?model_selection from?sklearn.linear_model?import?LinearRegression from?sklearn.datasets?import?fetch_openml from?sklearn.compose?import?ColumnTransformer from?sklearn.pipeline?import?Pipeline from?sklearn.impute?import?SimpleImputer from?sklearn.preprocessing?import?StandardScaler,?OneHotEncoder#?Load?auto93?data?set?which?contains?both?categorical?and?numeric?features X,y?=?fetch_openml("auto93",?version=1,?as_frame=True,?return_X_y=True)#?Create?lists?of?numeric?and?categorical?features?? numeric_features?=?X.select_dtypes(include=['int64',?'float64']).columns categorical_features?=?X.select_dtypes(include=['object']).columnsX_train,?X_test,?y_train,?y_test?=?model_selection.train_test_split(X,?y,?random_state=0)#?Create?a?numeric?and?categorical?transformer?to?perform?preprocessing?steps numeric_transformer?=?Pipeline(steps=[('imputer',?SimpleImputer(strategy='median')),('scaler',?StandardScaler())])categorical_transformer?=?Pipeline(steps=[('imputer',?SimpleImputer(strategy='constant',?fill_value='missing')),('onehot',?OneHotEncoder(handle_unknown='ignore'))])#?Use?the?ColumnTransformer?to?apply?to?the?correct?features preprocessor?=?ColumnTransformer(transformers=[('num',?numeric_transformer,?numeric_features),('cat',?categorical_transformer,?categorical_features)])#?Append?regressor?to?the?preprocessor lr?=?Pipeline(steps=[('preprocessor',?preprocessor),('classifier',?LinearRegression())])#?Fit?the?complete?pipeline lr.fit(X_train,?y_train) print("model?score:?%.3f"?%?lr.score(X_test,?y_test))8. 你可以簡單的輸出一個HTML來表示你的pipeline
pipeline通常非常復雜,特別是在處理真實數據時。因此,Scikit-learn提供了一個方法來輸出pipeline中步驟的HTML圖,這非常方便。
from?sklearn?import?set_configset_config(display='diagram')???lr9. 有一個繪圖函數來可視化決策樹
plot_tree()函數允許你創建一個決策樹模型中的步驟圖。
import?matplotlib.pyplot?as?plt? from?sklearn?import?metrics,?model_selection from?sklearn.tree?import?DecisionTreeClassifier,?plot_tree from?sklearn.datasets?import?load_breast_cancerX,y?=?load_breast_cancer(return_X_y?=?True)X_train,?X_test,?y_train,?y_test?=?model_selection.train_test_split(X,?y,?random_state=0) clf?=?DecisionTreeClassifier() clf.fit(X_train,?y_train)plot_tree(clf,?filled=True) plt.show()10. 有許多第三方的庫可以擴展Scikit-learn的功能
許多第三方庫都可以使用Scikit-learn并擴展其功能。其中兩個例子包括category-encoders庫,它為分類特征提供了更廣泛的預處理方法,以及ELI5庫,用于更好的模型可解釋性。
這兩個包也可以直接在Scikit-learn pipeline中使用。
—END—
英文原文:https://towardsdatascience.com/10-things-you-didnt-know-about-scikit-learn-cccc94c50e4f
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進群:總結
以上是生活随笔為你收集整理的【机器学习基础】关于Scikit-Learn,你不一定知道的10件事的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】Pytorch中文语言模型be
- 下一篇: 免费!Excel数据分析训练营!让你1招