【机器学习基础】关于Scikit-Learn,你不一定知道的10件事
作者:Rebecca Vickery??編譯:ronghuaiyang
導(dǎo)讀
Scikit-learn中有很多方便的功能,你不一定知道。
Scikit-learn是使用最廣泛的Python機(jī)器學(xué)習(xí)庫之一。它有一個標(biāo)準(zhǔn)化和簡單的接口用來預(yù)處理數(shù)據(jù)和進(jìn)行模型的訓(xùn)練,優(yōu)化和評估。
該項目最初是由David Cournapeau開發(fā)的谷歌Summer of Code項目,并在2010年首次公開發(fā)布。自創(chuàng)建以來,這庫已經(jīng)發(fā)展成為一個豐富的生態(tài)系統(tǒng),用于開發(fā)機(jī)器學(xué)習(xí)模型。
隨著時間的推移,該項目開發(fā)了許多方便的功能,增強(qiáng)了其易用性。在本文中,我將介紹10個你可能不知道的最有用的特性。
1. Scikit-learn 有內(nèi)置的數(shù)據(jù)集
Scikit-learn API有多種內(nèi)置的toy和現(xiàn)實世界數(shù)據(jù)集。只需一行代碼就可以訪問這些函數(shù),如果你正在學(xué)習(xí)或只是想快速嘗試一些新功能,那么它們非常有用。
你還可以使用生成器方便地為回歸make_regression()、聚類make_blobs()以及分類make_classification()生成合成數(shù)據(jù)集。
所有的加載工具都提供了返回已經(jīng)分割成X(特征)和y(目標(biāo))的數(shù)據(jù)的選項,這樣就可以直接使用它們來訓(xùn)練模型。
#?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. 第三方公開數(shù)據(jù)集獲取也很方便
如果你想通過Scikit-learn直接訪問更多公開可用的數(shù)據(jù)集,有一個方便的函數(shù)可以讓你直接從openml.org網(wǎng)站導(dǎo)入數(shù)據(jù)。這個網(wǎng)站包含超過21,000種不同的數(shù)據(jù)集,用于機(jī)器學(xué)習(xí)項目。
from?sklearn.datasets?import?fetch_openmlX,y?=?fetch_openml("wine",?version=1,?as_frame=True,?return_X_y=True)3. 有現(xiàn)成的分類器來訓(xùn)練基線模型
在開發(fā)機(jī)器學(xué)習(xí)模型時,明智的做法是首先創(chuàng)建一個基線模型。這個模型本質(zhì)上應(yīng)該是一個“偽”模型,比如總是預(yù)測最經(jīng)常出現(xiàn)的類。這為你的“智能”模型提供了一個基準(zhǔn),這樣你就可以確保它比隨機(jī)結(jié)果表現(xiàn)得更好。
Scikit-learn中包含用于分類任務(wù)的 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有一個內(nèi)置的繪圖API,它允許你在不導(dǎo)入任何其他庫的情況下可視化模型性能。包括下列繪圖功能:部分依賴圖、混淆矩陣、精確度召回率曲線和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 具有內(nèi)置的特征選擇方法
提高模型性能的一種方法是只使用最好的特征集來訓(xùn)練模型,或者去除冗余的特征。這個過程稱為特征選擇。
Scikit-learn有許多函數(shù)來進(jìn)行feature selection。其中一個是SelectPercentile()。該方法根據(jù)所選擇的統(tǒng)計方法選擇表現(xiàn)最好的X百分位特征進(jìn)行評分。
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 可以讓你把所有的機(jī)器學(xué)習(xí)工作流串到一起
除了為機(jī)器學(xué)習(xí)提供廣泛的算法,Scikit-learn也有一系列的預(yù)處理和數(shù)據(jù)變換的功能。為了便于機(jī)器學(xué)習(xí)工作流的重現(xiàn)性和簡單性,Scikit-learn創(chuàng)建了**pipeline **,它允許你將大量的預(yù)處理步驟與模型訓(xùn)練階段鏈接在一起。
pipeline將工作流中的所有步驟存儲為單個實體,可以通過fit和predict方法調(diào)用。在pipeline對象上調(diào)用fit方法時,將自動執(zhí)行預(yù)處理步驟和模型訓(xùn)練。
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,你可以對不同的特征應(yīng)用不同的預(yù)處理
在許多數(shù)據(jù)集中,你將擁有不同類型的特征,需要應(yīng)用不同的預(yù)處理步驟。例如,數(shù)據(jù)集中可能混合有分類數(shù)據(jù)和數(shù)值數(shù)據(jù),你可能希望通過獨(dú)熱編碼將分類數(shù)據(jù)轉(zhuǎn)換為數(shù)值數(shù)據(jù)并縮放數(shù)值變量。
Scikit-learn pipeline中有一個函數(shù)ColumnTransformer,可以讓你非常容易地通過索引或通過指定的列名來指定哪些列應(yīng)用最合適的預(yù)處理。
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通常非常復(fù)雜,特別是在處理真實數(shù)據(jù)時。因此,Scikit-learn提供了一個方法來輸出pipeline中步驟的HTML圖,這非常方便。
from?sklearn?import?set_configset_config(display='diagram')???lr9. 有一個繪圖函數(shù)來可視化決策樹
plot_tree()函數(shù)允許你創(chuàng)建一個決策樹模型中的步驟圖。
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. 有許多第三方的庫可以擴(kuò)展Scikit-learn的功能
許多第三方庫都可以使用Scikit-learn并擴(kuò)展其功能。其中兩個例子包括category-encoders庫,它為分類特征提供了更廣泛的預(yù)處理方法,以及ELI5庫,用于更好的模型可解釋性。
這兩個包也可以直接在Scikit-learn pipeline中使用。
—END—
英文原文:https://towardsdatascience.com/10-things-you-didnt-know-about-scikit-learn-cccc94c50e4f
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進(jìn)群:總結(jié)
以上是生活随笔為你收集整理的【机器学习基础】关于Scikit-Learn,你不一定知道的10件事的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】Pytorch中文语言模型be
- 下一篇: 免费!Excel数据分析训练营!让你1招