19個(gè)Python?Sklearn中超實(shí)用的隱藏功能分享
今天跟大家介紹 19 個(gè) Sklearn 中超級(jí)實(shí)用的隱藏的功能,這些功能雖然不常見,但非常實(shí)用,它們可以直接優(yōu)雅地替代手動(dòng)執(zhí)行的常見操作。接下來我們就一個(gè)一個(gè)介紹這些功能,希望對(duì)大家有所幫助!
寫在前面
通過查看 Sklearn 的 API,發(fā)現(xiàn)最常用的模型和函數(shù)只是眾多庫中的一小部分。盡管某些功能的使用范圍非常小并且一般用于一些邊緣情況,但我發(fā)現(xiàn)很多評(píng)估器、轉(zhuǎn)換器和實(shí)用程序功能可以很好地處理手動(dòng)執(zhí)行的常見操作。

https://scikit-learn.org/stable/modules/classes.html#api-reference
因此,接下來我將列出最重要的一些功能并做個(gè)簡要的解釋,這樣可以我們擴(kuò)展一些 Sklearn 工具集,以便在學(xué)習(xí)工作中可以更好地更快地處理事務(wù)。
1 .covariance.EllipticEnvelope
通常,在我們的所處理的數(shù)據(jù)分布中有異常值是很常見的,并且許多算法都可以處理離群值,而 EllipticalEnvelope 就是 Sklearn 中直接內(nèi)置的一個(gè)例子。該算法的優(yōu)勢(shì)在于,它在檢測(cè)正態(tài)分布(高斯)特征中的異常點(diǎn)時(shí)表現(xiàn)得非常好:
import?numpy?as?np from?sklearn.covariance?import?EllipticEnvelope #?創(chuàng)建一個(gè)樣本正態(tài)分布 X?=?np.random.normal(loc=5,?scale=2,?size=50).reshape(-1,?1) #?擬合估計(jì)量 ee?=?EllipticEnvelope(random_state=0) _?=?ee.fit(X) #?測(cè)試 test?=?np.array([6,?8,?20,?4,?5,?6,?10,?13]).reshape(-1,?1) #?Predict返回1作為內(nèi)嵌值,返回-1作為異常值 >>>?ee.predict(test) array([?1,??1,?-1,??1,??1,??1,?-1,?-1])
為了檢驗(yàn)評(píng)估結(jié)果,我們創(chuàng)建了一個(gè)均值為5,標(biāo)準(zhǔn)差為2的正態(tài)分布。訓(xùn)練完成后,將一些隨機(jī)數(shù)傳遞給它的預(yù)測(cè)方法。該方法返回-1表示測(cè)試中的異常值,即20、10、13。
2 .feature_selection.RFECV
我們?cè)谧鰯?shù)據(jù)挖掘,做特征工程時(shí),選擇對(duì)預(yù)測(cè)最有幫助的特征是防止過擬合和降低模型復(fù)雜性的必要步驟。Sklearn提供的最健壯的算法之一是遞歸特征消除(RFE)。它通過使用交叉驗(yàn)證自動(dòng)找到最重要的特性,并丟棄其余的。
這個(gè)評(píng)估器的一個(gè)優(yōu)點(diǎn)是它是一個(gè)包裝器——它可以用于返回特征重要性或系數(shù)分?jǐn)?shù)的任何 Sklearn 算法。下面是一個(gè)關(guān)于合成數(shù)據(jù)集的例子:
from?sklearn.datasets?import?make_regression from?sklearn.feature_selection?import?RFECV from?sklearn.linear_model?import?Ridge #?構(gòu)建一個(gè)合成數(shù)據(jù)集 X,?y?=?make_regression(n_samples=10000,?n_features=15,?n_informative=10) #?初始化和擬合選擇器 rfecv?=?RFECV(estimator=Ridge(),?cv=5) _?=?rfecv.fit(X,?y) #?轉(zhuǎn)換特性陣列 >>>?rfecv.transform(X).shape (10000,?10)
數(shù)據(jù)集有 15 個(gè)特征,其中 10 個(gè)特征是信息豐富的,其余都是冗余的。我們用嶺回歸擬合 5-fold RFECV 作為評(píng)估器。訓(xùn)練后,可以使用變換方法丟棄冗余特征。最后調(diào)用 .shape 查看評(píng)估器刪除了所有 5 個(gè)冗余的特性。
3 .ensemble.ExtraTrees
我們都知道,盡管隨機(jī)森林非常強(qiáng)大,但過度擬合的風(fēng)險(xiǎn)非常高。因此,Sklearn提供了稱為 ExtraTrees(分類器和回歸器) 的 RF 替代方案。
"Extra" 這個(gè)詞并不是指更多的樹,而是指更多的隨機(jī)性。該算法使用了另一種類似于決策樹的樹。唯一的區(qū)別是,不同于在構(gòu)建每棵樹時(shí)計(jì)算分割閾值,這些閾值是為每個(gè)特征隨機(jī)繪制的,并選擇最佳閾值作為分割規(guī)則。這允許以偏差略微增加的代價(jià)來降低方差:
from?sklearn.ensemble?import?ExtraTreesRegressor,?RandomForestRegressor from?sklearn.model_selection?import?cross_val_score from?sklearn.tree?import?DecisionTreeRegressor X,?y?=?make_regression(n_samples=10000,?n_features=20) #?決策樹 clf?=?DecisionTreeRegressor(max_depth=None,?min_samples_split=2,?random_state=0) scores?=?cross_val_score(clf,?X,?y,?cv=5) >>>?scores.mean() 0.6376080094392635 #?隨機(jī)森林 clf?=?RandomForestRegressor( ????n_estimators=10,?max_depth=None,?min_samples_split=2,?random_state=0 ) scores?=?cross_val_score(clf,?X,?y,?cv=5) >>>?scores.mean() 0.8446103607404536 #?ExtraTrees clf?=?ExtraTreesRegressor( ????n_estimators=10,?max_depth=None,?min_samples_split=2,?random_state=0 ) scores?=?cross_val_score(clf,?X,?y,?cv=5) >>>?scores.mean() 0.8737373931608834
如結(jié)果所示,ExtraTreesRegressor 在合成數(shù)據(jù)集上的表現(xiàn)優(yōu)于隨機(jī)森林。
4 .impute.IterativeImputer 和 .impute.KNNImputer
如果你正在尋找比 SimpleImputer 更健壯、更先進(jìn)的 imputation 技術(shù),Sklearn再次為你提供了支持。impute 子包包括兩個(gè)基于模型的 impute 算法 KNNImputer 和 IterativeImputer。
顧名思義,KNNImputer 使用 k-Nearest-Neighbors 算法來尋找缺失值的最佳替代:
from?sklearn.impute?import?KNNImputer #?代碼取自Sklearn用戶指南 X?=?[[1,?2,?np.nan],? ?????[3,?4,?3],? ?????[np.nan,?6,?5],? ?????[8,?8,?7]] imputer?=?KNNImputer(n_neighbors=2) imputer.fit_transform(X)
輸出:
array([[1. , 2. , 4. ],
[3. , 4. , 3. ],
[5.5, 6. , 5. ],
[8. , 8. , 7. ]])
另一個(gè)更健壯的算法是 IterativeImputer。它通過將每個(gè)特征的缺失值建模為其他特征的函數(shù)來尋找缺失值。 這個(gè)過程是按循序漸進(jìn)的循環(huán)方式完成的。在每一步中,選擇一個(gè)具有缺失值的特征作為目標(biāo)(y),其余的作為特征數(shù)組(X)。然后,使用回歸函數(shù)預(yù)測(cè) y 中的缺失值,并對(duì)每個(gè)特征繼續(xù)這個(gè)過程,直到 max_iter 次數(shù) (IterativeImputer的一個(gè)參數(shù))。
因此,會(huì)為一個(gè)缺失的值生成多個(gè)預(yù)測(cè)。這樣做的好處是,可以將每個(gè)缺失的值視為隨機(jī)變量,并將其與固有的不確定性聯(lián)系起來:
from?sklearn.experimental?import?enable_iterative_imputer from?sklearn.impute?import?IterativeImputer from?sklearn.linear_model?import?BayesianRidge imp_mean?=?IterativeImputer(estimator=BayesianRidge()) imp_mean.fit([[7,?2,?3],? ??????????????[4,?np.nan,?6],? ??????????????[10,?5,?9]]) ?????????????? X?=?[[np.nan,?2,?3],? ?????[4,?np.nan,?6],? ?????[10,?np.nan,?9]] imp_mean.transform(X)
輸出:
array([[ 6.95847623, 2. , 3. ],
[ 4. , 2.6000004 , 6. ],
[10. , 4.99999933, 9. ]])
結(jié)果表明,使用 IterativeImputer 缺失值填補(bǔ)算法的 BayesianRidge 和 ExtraTree 算法性能效果變現(xiàn)更加優(yōu)秀。
5 .linear_model.HuberRegressor
雖然正常情況下,數(shù)據(jù)分布中存在異常值是非常常見的, 但異常值的存在會(huì)嚴(yán)重破壞任何模型的預(yù)測(cè)。許多異常值檢測(cè)算法會(huì)丟棄異常值并將其標(biāo)記為缺失。雖然這有助于模型的學(xué)習(xí),但它完全消除了異常值對(duì)分布的影響。
另一種算法是 HuberRegressor 回歸算法。它不是完全去除它們,而是在擬合數(shù)據(jù)期間給予異常值更小的權(quán)重。它有超參數(shù) epsilon 來控制樣本的數(shù)量,這些樣本應(yīng)該被歸類為異常值。參數(shù)越小,對(duì)異常值的魯棒性越強(qiáng)。它的API與任何其他線性回歸函數(shù)相同。下面,你可以看到它與貝葉斯嶺回歸器在一個(gè)有大量異常值的數(shù)據(jù)集上的比較:

可以看到,設(shè)置參數(shù) epsilon 為 1.35 1.5, 1.75 的 huberregressionor 算法設(shè)法捕獲不受異常值影響的最佳擬合線。
6 .tree.plot_tree
Sklearn 中可以使用 plot_tree 函數(shù)繪制單個(gè)決策樹的結(jié)構(gòu)。這個(gè)特性可能對(duì)剛開始學(xué)習(xí)基于樹的模型和集成模型的初學(xué)者很方便,通過該方法,對(duì)決策樹的決策過程可視化,對(duì)其決策過程和原理更加一目了然。
from?sklearn.datasets?import?load_iris from?sklearn.tree?import?DecisionTreeClassifier,?plot_tree iris?=?load_iris() X,?y?=?iris.data,?iris.target clf?=?DecisionTreeClassifier() clf?=?clf.fit(X,?y) plt.figure(figsize=(15,?10),?dpi=200) plot_tree(clf,?feature_names=iris.feature_names,? ???????????????class_names=iris.target_names);

還有其他繪制樹的方法,比如 Graphviz。
7 .linear_model.Perceptron
盡管感知機(jī)是一個(gè)奇特的名字,但它是一個(gè)簡單的線性二進(jìn)制分類器。算法的定義特征是適合大規(guī)模學(xué)習(xí),默認(rèn)為:
- 它不需要學(xué)習(xí)速率。
- 不要實(shí)現(xiàn)正則化。
- 它只在分類錯(cuò)誤的情況下更新模型。
它等價(jià)于 SGDClassifier,loss='perceptron', eta0=1, learning_rate="constant", penalty=None ,但略快:
from?sklearn.datasets?import?make_classification from?sklearn.linear_model?import?Perceptron #?創(chuàng)建一個(gè)更大的數(shù)據(jù)集 X,?y?=?make_classification(n_samples=100000,?n_features=20,?n_classes=2) #?Init/Fit/Score clf?=?Perceptron() _?=?clf.fit(X,?y) clf.score(X,?y)
輸出:
0.91928
8 .feature_selection.SelectFromModel
Sklearn 中另一個(gè)基于模型的特征選擇模型是 SelectFromModel。它不像RFECV那樣健壯,但由于它具有較低的計(jì)算成本,可以作為大規(guī)模數(shù)據(jù)集的一個(gè)很好的選擇。它也是一個(gè)包裝器模型,適用于任何具有 .feature_importance_ 或 .coef_ 屬性的模型:
from?sklearn.feature_selection?import?SelectFromModel #?創(chuàng)建一個(gè)包含40個(gè)無信息特征的數(shù)據(jù)集 X,?y?=?make_regression(n_samples=int(1e4),?n_features=50,?n_informative=10) #?初始化選擇器并轉(zhuǎn)換特性數(shù)組 selector?=?SelectFromModel(estimator=ExtraTreesRegressor()).fit(X,?y) selector.transform(X).shape
輸出:
(10000, 8)
如結(jié)果所示,算法成功地刪除了所有40個(gè)冗余特征。
9 .metrics.ConfusionMatrixDisplay
總所周知,混淆矩陣是用于評(píng)估分類問題的常用方法。我們通常使用的大多數(shù)指標(biāo)都來自于它,如精度、召回率、F1、ROC AUC等等。Sklearn中可以計(jì)算和繪制一個(gè)默認(rèn)的混淆矩陣:
from?sklearn.metrics?import?plot_confusion_matrix from?sklearn.model_selection?import?train_test_split #?創(chuàng)建一個(gè)二元分類問題 X,?y?=?make_classification(n_samples=200,?n_features=5,?n_classes=2) X_train,?X_test,?y_train,?y_test?=?train_test_split( ????X,?y,?test_size=0.5,?random_state=1121218 ) clf?=?ExtraTreeClassifier().fit(X_train,?y_train) fig,?ax?=?plt.subplots(figsize=(5,?4),?dpi=100) plot_confusion_matrix(clf,?X_test,?y_test,?ax=ax);

老實(shí)說,我不喜歡默認(rèn)的混淆矩陣。它的格式是固定的—行是true labels,列是predictions label。第一行和第一列是負(fù)類,第二行和第二列是正類。有些人可能更喜歡不同格式的矩陣,可能是轉(zhuǎn)置或翻轉(zhuǎn)的。
例如,我喜歡將正類作為第一行和第一列。這有助于我更好地隔離 4 矩陣項(xiàng) -- TP, FP, TN, FN。幸運(yùn)的是,你可以用另一個(gè)函數(shù) ConfusionMatrixDisplay 繪制自定義矩陣:
from?sklearn.metrics?import?ConfusionMatrixDisplay,?confusion_matrix clf?=?ExtraTreeClassifier().fit(X_train,?y_train) y_preds?=?clf.predict(X_test) fig,?ax?=?plt.subplots(figsize=(5,?4),?dpi=100) cm?=?confusion_matrix(y_test,?y_preds) cmp?=?ConfusionMatrixDisplay(cm,? ??????display_labels=["Positive",?"Negative"]) cmp.plot(ax=ax);

在傳遞給 ConfusionMatrixDisplay 之前,可以把 混淆矩陣cm 放在任何格式中。
10 .Generalized Linear Models
一般情況下,如果有可用于其他類型分布的替代方案,則將目標(biāo)(y)轉(zhuǎn)換為正態(tài)分布是沒有意義的。
例如,Sklearn 為目標(biāo)變量提供了3種廣義線性模型,分別是泊松、Tweedie或Gamma分布 ,而不是所期望的正態(tài)分布,poissonregressionor, TweedieRegressor 和 GammaRegressor 可以生成具有各自分布的目標(biāo)的穩(wěn)健結(jié)果。
除此之外,他們的api與任何其他Sklearn模型一樣。為了找出目標(biāo)的分布是否與上述三個(gè)相匹配,可以將它們的PDF(概率密度函數(shù))繪制在相同軸上。
例如,要查看目標(biāo)是否遵循泊松分布,可以使用 Seaborn 的 kdeploy 繪制它的 PDF,并在相同的軸上使用 np.random_poisson 從 Numpy 中采樣,繪制完美的泊松分布。
11 .ensemble.IsolationForest
一般情況下,基于樹的模型和集合模型通常產(chǎn)生更穩(wěn)健的結(jié)果,它們?cè)诋惓|c(diǎn)檢測(cè)方面也被證明是有效的。Sklearn 中的 IsolationForest 使用一個(gè)極端隨機(jī)樹 (tree.ExtraTreeRegressor) 來檢測(cè)異常值。每棵樹試圖通過選擇一個(gè)單一的特征,并在所選特征的最大值和最小值之間隨機(jī)選擇一個(gè)分裂值來隔離每個(gè)樣本。
這種隨機(jī)分區(qū)會(huì)在每棵樹的根節(jié)點(diǎn)和終止節(jié)點(diǎn)之間產(chǎn)生明顯更短的路徑。
因此,當(dāng)隨機(jī)樹組成的森林為特定樣本共同產(chǎn)生更短的路徑長度時(shí),它們極有可能是異常——Sklearn用戶指南。
from?sklearn.ensemble?import?IsolationForest X?=?np.array([-1.1,?0.3,?0.5,?100]).reshape(-1,?1) clf?=?IsolationForest(random_state=0).fit(X) clf.predict([[0.1],?[0],?[90]])
輸出:
array([ 1, 1, -1])
12 .preprocessing.PowerTransformer
許多線性模型需要在數(shù)值特征上進(jìn)行一些轉(zhuǎn)換才能使其服從正態(tài)分布。StandardScaler 和 MinMaxScaler 在大多數(shù)發(fā)行版中都比較適用。然而,當(dāng)數(shù)據(jù)存在高偏度時(shí),分布的核心指標(biāo),如平均值、中位數(shù)、最小值和最大值,就會(huì)受到影響。因此,簡單的標(biāo)準(zhǔn)化和標(biāo)準(zhǔn)化對(duì)傾斜分布不起作用。
相反,Sklearn 實(shí)現(xiàn)中提供了一個(gè)名為 PowerTransformer的方法,它使用對(duì)數(shù)變換將任何傾斜的特征盡可能地轉(zhuǎn)化為正態(tài)分布??紤] Diamonds 數(shù)據(jù)集中的兩個(gè)特征:
import?seaborn?as?sns
diamonds?=?sns.load_dataset("diamonds")
diamonds[["price",?"carat"]].hist(figsize=(10,?5));

兩者都嚴(yán)重傾斜。我們用對(duì)數(shù)變換 PowerTransformer來解決這個(gè)問題:
from?sklearn.preprocessing?import?PowerTransformer pt?=?PowerTransformer() diamonds.loc[:,?["price",?"carat"]]?=?pt.fit_transform(diamonds[["price",?"carat"]]) diamonds[["price",?"carat"]].hist(figsize=(10,?5));

13 .preprocessing.RobustScaler
Sklearn 中的另一個(gè)數(shù)字轉(zhuǎn)換器是 RobustScaler,我們可以從它的名稱猜出它的用途——可以以一種健壯到異常值的方式轉(zhuǎn)換特性。如果一個(gè)特征中存在異常值,就很難使其服從正態(tài)分布,因?yàn)樗鼈儠?huì)嚴(yán)重扭曲均值和標(biāo)準(zhǔn)差。
與使用均值/標(biāo)準(zhǔn)不同,RobustScaler 使用中值和IQR(四分位數(shù)范圍)來衡量數(shù)據(jù),因?yàn)檫@兩個(gè)指標(biāo)都不會(huì)因?yàn)楫惓V刀衅睢?/p>
14 .compose.make_column_transformer
在 Sklearn 中,有一個(gè)用 make_pipeline 函數(shù)創(chuàng)建 Pipeline 實(shí)例的簡寫。該函數(shù)不需要為Pipeline中的每一步命名,而是只接受變形器和估計(jì)器并執(zhí)行它的工作,從而不需要使代碼那么長:
from?sklearn.impute?import?SimpleImputer from?sklearn.pipeline?import?make_pipeline from?sklearn.preprocessing?import?StandardScaler pipeline?=?make_pipeline(SimpleImputer(),?StandardScaler(),?ExtraTreesRegressor()) pipeline
Pipeline(steps=[('simpleimputer',
SimpleImputer()),
('standardscaler',
StandardScaler()),
('extratreesregressor',
ExtraTreesRegressor())])對(duì)于更復(fù)雜的場(chǎng)景,使用 ColumnTransformer,這有相同的問題——每個(gè)預(yù)處理步驟都應(yīng)該命名,這會(huì)使代碼變得冗長且不可讀。Sklearn提供了與 make_pipeline 類似的函數(shù):
import?seaborn?as?sns
from?sklearn.compose?import?make_column_transformer
from?sklearn.preprocessing?import?OneHotEncoder
#?負(fù)載鉆石數(shù)據(jù)集
diamonds?=?sns.load_dataset("diamonds")
X,?y?=?diamonds.drop("price",?axis=1),?diamonds.price.values.reshape(-1,?1)
#?拆分?jǐn)?shù)字和類別標(biāo)簽
num_cols?=?X.select_dtypes(include=np.number).columns
cat_cols?=?X.select_dtypes(exclude=np.number).columns
make_column_transformer((StandardScaler(),?num_cols),?
????????????????????????????(OneHotEncoder(),?cat_cols))
ColumnTransformer(
transformers=[('standardscaler',
StandardScaler(),
Index(['carat', 'depth',
'table', 'x', 'y', 'z'],
dtype='object')),
('onehotencoder',
OneHotEncoder(),
Index(['cut', 'color',
'clarity'],
dtype='object'))]
)如上所示,使用 make_column_transformer 要短得多,并且它自己負(fù)責(zé)命名每個(gè)轉(zhuǎn)換器步驟。
15 .compose.make_column_selector
上文中,我們使用 select_dtypes 函數(shù)和 pandas DataFrames 的 columns 屬性來拆分數(shù)值列和分類列。雖然這當(dāng)然有效,但使用 Sklearn 有一個(gè)更靈活、更優(yōu)雅的解決方案。
make_column_selector 函數(shù)創(chuàng)建一個(gè)可以直接傳遞到 ColumnTransformer 實(shí)例中的列選擇器。它的工作原理與 select_dtypes 類似,甚至更好。它有 dtype_include 和 dtype_exclude 參數(shù),可以根據(jù)數(shù)據(jù)類型選擇列。如果需要自定義列篩選器,可以將正則表達(dá)式傳遞給 pattern,同時(shí)將其他參數(shù)設(shè)置為 None。下面是它的工作原理:
from?sklearn.compose?import?make_column_selector make_column_transformer( ????(StandardScaler(),?make_column_selector(dtype_include=np.number)), ????(OneHotEncoder(),?make_column_selector(dtype_exclude=np.number)), )
只是傳遞一個(gè)實(shí)例 make_column_selector 與由你設(shè)置相關(guān)參數(shù),而不是傳遞一個(gè)列名稱列表!
16 .preprocessing.OrdinalEncoder
在我們剛學(xué)習(xí)機(jī)器學(xué)習(xí)時(shí),常見的一個(gè)錯(cuò)誤是使用 LabelEncoder 來編碼有序的分類特征。注意到,LabelEncoder 一次只允許轉(zhuǎn)換一個(gè)列,而不是像 OneHotEncoder 那樣同時(shí)轉(zhuǎn)換。你可能會(huì)認(rèn)為 Sklearn 犯了一個(gè)錯(cuò)誤!
實(shí)際上,LabelEncoder 應(yīng)該只用于按照 LabelEncoder 文檔中指定的方式對(duì)響應(yīng)變量(y)進(jìn)行編碼。要編碼特征數(shù)組(X),應(yīng)該使用 OrdinalEncoder,它將有序分類列轉(zhuǎn)換為具有(0, n_categories - 1) 類的特性。它在一行代碼中跨所有指定列執(zhí)行此操作,使得在管道中包含它成為可能。
from?sklearn.preprocessing?import?OrdinalEncoder oe?=?OrdinalEncoder() X?=?[ ????["class_1",?"rank_1"], ????["class_1",?"rank_3"], ????["class_3",?"rank_3"], ????["class_2",?"rank_2"], ] oe.fit_transform(X)
輸出:
array([[0., 0.],
[0., 2.],
[2., 2.],
[1., 1.]])
17 .metrics.get_scorer
Sklearn 內(nèi)置了 50 多個(gè)指標(biāo),它們的文本名稱可以在 Sklearn.metrics.scores.keys 中看到。在單個(gè)項(xiàng)目中,如果單獨(dú)使用它們,則可能需要使用多個(gè)指標(biāo)并導(dǎo)入它們。
從 sklearn.metrics 中導(dǎo)入大量指標(biāo)可能會(huì)污染你的名稱空間,使其變得不必要的長。一種解決方案是可以使用 metrics.get_scorer 函數(shù)使用其文本名稱訪問任何度量,而不需要導(dǎo)入它:
from?sklearn.metrics?import?get_scorer
>>>?get_scorer("neg_mean_squared_error")
make_scorer(mean_squared_error,?
????????????greater_is_better=False)
>>>?get_scorer("recall_macro")
make_scorer(recall_score,?
????????????pos_label=None,?
????????????average=macro)
>>>?get_scorer("neg_log_loss")
make_scorer(log_loss,?
????????????greater_is_better=False,?
????????????needs_proba=True)
18 .model_selection.HalvingGrid 和 HalvingRandomSearchCV
在 sklearn 的 0.24 版本中,引入了兩個(gè)實(shí)驗(yàn)性超參數(shù)優(yōu)化器:HalvingGridSearchCV 和 HalvingRandomSearchCV 類。
與它們?cè)敱M的同類 GridSearch 和 RandomizedSearch 不同,新類使用了一種稱為連續(xù)減半的技術(shù)。 不是在所有數(shù)據(jù)上訓(xùn)練所有候選集,而是只將數(shù)據(jù)的一個(gè)子集提供給參數(shù)。通過對(duì)更小的數(shù)據(jù)子集進(jìn)行訓(xùn)練,篩選出表現(xiàn)最差的候選人。每次迭代后,訓(xùn)練樣本增加一定的因子,而可能的候選個(gè)數(shù)減少盡可能多的因子,從而獲得更快的評(píng)估時(shí)間。
快多少呢?在我做過的實(shí)驗(yàn)中,HalvingGridSearch 比普通 GridSearch 快11倍,HalvingRandomSearch 甚至比 HalvingGridSearch 快10倍。
19 .sklearn.utils
Sklearn在 sklearn.utils 中有一整套實(shí)用程序和輔助功能。Sklearn本身使用這個(gè)模塊中的函數(shù)來構(gòu)建我們使用的所有變形器transformers和估計(jì)器transformers。
這里有許多有用的方法,如 class_weight.compute_class_weight、estimator_html_repr、shuffle、check_X_y等。你可以在自己的工作流程中使用它們,使你的代碼更像 Sklearn,或者在創(chuàng)建適合 Sklearn API 的自定義轉(zhuǎn)換器和評(píng)估器時(shí),它們可能會(huì)派上用場(chǎng)。
總結(jié)
盡管像 CatBoost, XGBoost, LightGBM 等庫正在慢慢從 Sklearn 中搶走領(lǐng)先的 ML 庫的頭把交椅,但它仍然是現(xiàn)代 ML工程師技能堆棧中不可估量的一部分。
一致的 API、卓越的代碼設(shè)計(jì)以及創(chuàng)建強(qiáng)大的 ML 工作流的能力仍然使 Sklearn 在功能和靈活性方面無與倫比。盡管我們可以在基礎(chǔ)知識(shí)方面完成很多工作,但本文表明 Sklearn 提供的不僅僅是表面上的東西!
以上就是19個(gè)Python Sklearn中超實(shí)用的隱藏功能分享的詳細(xì)內(nèi)容,更多關(guān)于Python Sklearn的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
django 發(fā)送手機(jī)驗(yàn)證碼的示例代碼
本篇文章主要介紹了django 發(fā)送手機(jī)驗(yàn)證碼的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
關(guān)于Python字典(Dictionary)操作詳解
這篇文章主要介紹了關(guān)于Python字典(Dictionary)操作詳解,Python字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象,如字符串、數(shù)字、元組等其他容器模型,需要的朋友可以參考下2023-04-04
詳解Python中高階函數(shù)(map,filter,reduce,sorted)的使用
高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話說如果一個(gè)函數(shù)的參數(shù)是函數(shù),那么這個(gè)函數(shù)就是一個(gè)高階函數(shù)。本文為大家詳細(xì)講解了Python中常用的四個(gè)高階函數(shù),感興趣的可以了解一下2022-04-04
通過python模糊匹配算法對(duì)兩個(gè)excel表格內(nèi)容歸類
這篇文章主要介紹了通過python模糊匹配算法對(duì)兩個(gè)excel表格內(nèi)容歸類,比如兩個(gè)不同的工程項(xiàng)目針對(duì)的對(duì)象都是A,那么就需要將這兩個(gè)工程項(xiàng)目歸類到A當(dāng)中,可以減少很大一部分工作量,,需要的朋友可以參考下2023-03-03
python光學(xué)仿真通過菲涅耳公式實(shí)現(xiàn)波動(dòng)模型
這篇文章主要介紹了python光學(xué)仿真通過菲涅耳公式實(shí)現(xiàn)波動(dòng)模型的示例解析原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10

