太强了!Scikit-learn 0.22新版本发布,新功能更加方便
?500g+超全學(xué)習(xí)資源免費(fèi)領(lǐng)取
作者:xiaoyu,數(shù)據(jù)愛(ài)好者
Python數(shù)據(jù)科學(xué)出品
Scikit-learn此次發(fā)布的版本為0.22。我瀏覽了一下,此次版本除了修復(fù)之前出現(xiàn)的一些bug,還更新了很多新功能,不得不說(shuō)更加好用了。下面我把我了解到主要的幾個(gè)最新功能和大家分享一下。
▍sklearn.ensemble?集成模型
1. 模型融合
舊版本的ensemble集成學(xué)習(xí)模塊里只有提升樹(shù)、隨機(jī)森林等高級(jí)模型,新版本增加了融合模型,有?StackingClassifier?和?StackingRegressor?,對(duì)應(yīng)分類和回歸。原來(lái)模型融合的做法是自己手?jǐn)]一個(gè),現(xiàn)在可以做到直接使用方法,更加方便,尤其對(duì)于參加kaggle競(jìng)賽,模型融合也是上分利器。
下面是更新后的一個(gè)使用例子。
from?sklearn.datasets?import?load_iris from?sklearn.svm?import?LinearSVC from?sklearn.linear_model?import?LogisticRegression from?sklearn.preprocessing?import?StandardScaler from?sklearn.pipeline?import?make_pipeline from?sklearn.ensemble?import?StackingClassifier from?sklearn.model_selection?import?train_test_splitX,?y?=?load_iris(return_X_y=True) estimators?=?[('rf',?RandomForestClassifier(n_estimators=10,?random_state=42)),('svr',?make_pipeline(StandardScaler(),LinearSVC(random_state=42))) ] clf?=?StackingClassifier(estimators=estimators,?final_estimator=LogisticRegression() ) X_train,?X_test,?y_train,?y_test?=?train_test_split(X,?y,?stratify=y,?random_state=42 ) clf.fit(X_train,?y_train).score(X_test,?y_test)0.94736842105263152.?對(duì)梯度提升提供缺失值的本地支持
ensemble.HistGradientBoostingClassifier?和?ensemble.HistGradientBoostingRegressor?現(xiàn)在對(duì)缺失值(NaNs)具有本機(jī)支持,因此在訓(xùn)練或預(yù)測(cè)時(shí)就不需填補(bǔ)缺失數(shù)據(jù)了,完全可以直接運(yùn)行。
from?sklearn.experimental?import?enable_hist_gradient_boosting??#?noqa from?sklearn.ensemble?import?HistGradientBoostingClassifier import?numpy?as?npX?=?np.array([0,?1,?2,?np.nan]).reshape(-1,?1) y?=?[0,?0,?1,?1]gbdt?=?HistGradientBoostingClassifier(min_samples_leaf=1).fit(X,?y) print(gbdt.predict(X))[0 0 1 1]▍sklearn.impute?模塊
新版本的 sklearn.impute 模塊中增加了?impute.KNNImputer?,所以當(dāng)我們需要填補(bǔ)缺失值時(shí),可以考慮直接使用KNN的這個(gè)算法填補(bǔ)。
import?numpy?as?np from?sklearn.impute?import?KNNImputerX?=?[[1,?2,?np.nan],?[3,?4,?3],?[np.nan,?6,?5],?[8,?8,?7]] imputer?=?KNNImputer(n_neighbors=2) print(imputer.fit_transform(X))[[1. 2. 4. ][3. 4. 3. ][5.5 6. 5. ][8. 8. 7. ]]▍sklearn.inspection?模塊
新增加了 inspection.permutation_importance, 可以用來(lái)估計(jì)每個(gè)特征的重要性。
from?sklearn.ensemble?import?RandomForestClassifier from?sklearn.inspection?import?permutation_importanceX,?y?=?make_classification(random_state=0,?n_features=5,?n_informative=3) rf?=?RandomForestClassifier(random_state=0).fit(X,?y) result?=?permutation_importance(rf,?X,?y,?n_repeats=10,?random_state=0,n_jobs=-1)fig,?ax?=?plt.subplots() sorted_idx?=?result.importances_mean.argsort() ax.boxplot(result.importances[sorted_idx].T,vert=False,?labels=range(X.shape[1])) ax.set_title("Permutation?Importance?of?each?feature") ax.set_ylabel("Features") fig.tight_layout() plt.show()▍sklearn.metrics?模塊
新版本增加了一個(gè)非常好的功能 metrics.plot_roc_curve,解決了roc_curve 繪制的問(wèn)題。原來(lái)需要自己根據(jù)auc/roc原理自己擼,雖然網(wǎng)上已有了相應(yīng)成熟的現(xiàn)成代碼,但此后可以直接放心大膽的用了。
同時(shí),這個(gè)?roc_auc_score?函數(shù)也可用于多類分類。目前支持兩種平均策略:1-VS-1 算法計(jì)算成對(duì)的ROC AUC分?jǐn)?shù)的平均值,1-VS-REST 算法計(jì)算每一類相對(duì)于所有其他類的平均分?jǐn)?shù)。在這兩種情況下,多類ROC AUC分?jǐn)?shù)是根據(jù)該模型從樣本屬于特定類別的概率估計(jì)來(lái)計(jì)算的。OVO和OVR算法支持均勻加權(quán)(average='macro')和按流行率(average='weighted')。
from?sklearn.datasets?import?make_classification from?sklearn.svm?import?SVC from?sklearn.metrics?import?roc_auc_scoreX,?y?=?make_classification(n_classes=4,?n_informative=16) clf?=?SVC(decision_function_shape='ovo',?probability=True).fit(X,?y) print(roc_auc_score(y,?clf.predict_proba(X),?multi_class='ovo'))0.9957333333333332腳本的總運(yùn)行時(shí)間:(0分7.364秒)
估計(jì)內(nèi)存使用量:8 MB
▍全新?plotting API?
對(duì)于創(chuàng)建可視化任務(wù),scikit-learn 推出了一個(gè)全新 plotting API。這個(gè)新API可以快速調(diào)整圖形的視覺(jué)效果,不再需要進(jìn)行重新計(jì)算。也可以在同一個(gè)圖形中添加不同的圖表。例如:
from?sklearn.model_selection?import?train_test_split from?sklearn.svm?import?SVC from?sklearn.metrics?import?plot_roc_curve from?sklearn.ensemble?import?RandomForestClassifier from?sklearn.datasets?import?make_classification import?matplotlib.pyplot?as?pltX,?y?=?make_classification(random_state=0) X_train,?X_test,?y_train,?y_test?=?train_test_split(X,?y,?random_state=42)svc?=?SVC(random_state=42) svc.fit(X_train,?y_train) rfc?=?RandomForestClassifier(random_state=42) rfc.fit(X_train,?y_train)svc_disp?=?plot_roc_curve(svc,?X_test,?y_test) rfc_disp?=?plot_roc_curve(rfc,?X_test,?y_test,?ax=svc_disp.ax_) rfc_disp.figure_.suptitle("ROC?curve?comparison")plt.show()▍預(yù)計(jì)算的稀疏近鄰圖
大多數(shù)基于最近鄰圖的估算都接受預(yù)先計(jì)算的稀疏圖作為輸入,以將同一圖重用于多個(gè)估算量擬合。
要在pipeline中使用這個(gè)特性,可以使用 memory 參數(shù),以及neighbors.KNeighborsTransformer 和 neighbors.RadiusNeighborsTransformer 中的一個(gè)。
預(yù)計(jì)算還可以由自定義的估算器來(lái)執(zhí)行。
from?tempfile?import?TemporaryDirectory from?sklearn.neighbors?import?KNeighborsTransformer from?sklearn.manifold?import?Isomap from?sklearn.pipeline?import?make_pipelineX,?y?=?make_classification(random_state=0)with?TemporaryDirectory(prefix="sklearn_cache_")?as?tmpdir:estimator?=?make_pipeline(KNeighborsTransformer(n_neighbors=10,?mode='distance'),Isomap(n_neighbors=10,?metric='precomputed'),memory=tmpdir)estimator.fit(X)#?We?can?decrease?the?number?of?neighbors?and?the?graph?will?not?be#?recomputed.estimator.set_params(isomap__n_neighbors=5)estimator.fit(X)以上就是本次我了解到的主要更新內(nèi)容,更多詳細(xì)信息請(qǐng)參考。
鏈接:https://scikit-learn.org/dev/whats_new/v0.22.html
▍安裝
升級(jí)很簡(jiǎn)單,一行指令即可完成。
pip?install?--upgrade?scikit-learn或者用conda
conda?install?scikit-learn備注:公眾號(hào)菜單包含了整理了一本AI小抄,非常適合在通勤路上用學(xué)習(xí)。
往期精彩回顧 那些年做的學(xué)術(shù)公益-你不是一個(gè)人在戰(zhàn)斗適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)在線手冊(cè)備注:加入本站微信群或者qq群,請(qǐng)回復(fù)“加群”加入知識(shí)星球(4500+用戶,ID:92416895),請(qǐng)回復(fù)“知識(shí)星球”喜歡文章,點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的太强了!Scikit-learn 0.22新版本发布,新功能更加方便的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从周志华的西瓜书到李宏毅的机器学习开源项
- 下一篇: 一文读懂图卷积GCN