偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Sklearn 實(shí)現(xiàn)高效機(jī)器學(xué)習(xí)的 19 個(gè)最優(yōu)雅的技巧

人工智能 機(jī)器學(xué)習(xí)
選擇最有助于預(yù)測(cè)的特征是防止過(guò)擬合和降低模型復(fù)雜度的必要步驟。Sklearn 提供的最強(qiáng)大的算法之一是遞歸特征消除 (RFE)。它使用交叉驗(yàn)證自動(dòng)找到最重要的特征,并丟棄其余特征。

了解 19 個(gè) Sklearn 功能,它們可以直接而優(yōu)雅地替代你手動(dòng)執(zhí)行的常見(jiàn)操作。

通過(guò)查閱Sklearn 的API 參考[1],我發(fā)現(xiàn)最常用的模型和函數(shù)只是該庫(kù)功能的冰山一角。盡管有些功能非常局限,只用于極少數(shù)的邊緣情況,但我發(fā)現(xiàn)許多估算器、變換器和實(shí)用函數(shù),可以更優(yōu)雅地修復(fù)人們手動(dòng)執(zhí)行的常見(jiàn)操作。

因此,我決定列出最優(yōu)雅、最重要的功能,并進(jìn)行簡(jiǎn)要說(shuō)明,以便你可以在一篇文章中顯著擴(kuò)展你的 Sklearn 工具集。

1.covariance.EllipticEnvelope[2]

分布中存在異常值是很常見(jiàn)的。許多算法都會(huì)處理異值,Sklearn 內(nèi)置的一個(gè)例子EllipticalEnvelope就是一個(gè)例子。該算法的優(yōu)勢(shì)在于它在檢測(cè)正態(tài)分布(高斯)特征中的異常值方面表現(xiàn)非常出色:

import numpy as np
from sklearn.covariance import EllipticEnvelope

# Create a sample normal distribution
X = np.random.normal(loc=5, scale=2, size=50).reshape(-1, 1)

# Fit the estimator
ee = EllipticEnvelope(random_state=0)
_ = ee.fit(X)

# Test
test = np.array([6, 8, 20, 4, 5, 6, 10, 13]).reshape(-1, 1)

# predict returns 1 for an inlier and -1 for an outlier
>>> ee.predict(test)

array([ 1,  1, -1,  1,  1,  1, -1, -1])

展示如何使用橢圓包絡(luò)估計(jì)器從正態(tài)分布的特征中檢測(cè)異常值。

為了測(cè)試估計(jì)器,我們創(chuàng)建一個(gè)均值為 5、標(biāo)準(zhǔn)差為 2 的正態(tài)分布。訓(xùn)練完成后,我們將一些隨機(jī)數(shù)傳遞給它的predict方法。該方法對(duì)test中的異常值(分別為 20、10、13)返回 -1。

2.feature_selection.RFECV[3]

選擇最有助于預(yù)測(cè)的特征是防止過(guò)擬合和降低模型復(fù)雜度的必要步驟。Sklearn 提供的最強(qiáng)大的算法之一是遞歸特征消除 (RFE)。它使用交叉驗(yàn)證自動(dòng)找到最重要的特征,并丟棄其余特征。

該估計(jì)器的一個(gè)優(yōu)點(diǎn)是它是一個(gè)包裝器——它可以用于任何返回特征重要性或系數(shù)分?jǐn)?shù)的 Sklearn 算法。。這是一個(gè)合成數(shù)據(jù)集上的示例:

from sklearn.datasets import make_regression
from sklearn.feature_selection import RFECV
from sklearn.linear_model import Ridge

# Build a synthetic dataset
X, y = make_regression(n_samples=10000, n_features=15, n_informative=10)

# Init/fit the selector
rfecv = RFECV(estimator=Ridge(), cv=5)
_ = rfecv.fit(X, y)

# Transform the feature array
>>> rfecv.transform(X).shape
(10000, 10)

展示基于模型的特征選擇技術(shù)——RFECV 如何使用 Ridge 回歸器作為模型來(lái)工作。

偽數(shù)據(jù)集包含 15 個(gè)特征,其中 10 個(gè)為信息性特征,其余均為冗余特征。我們利用Ridge回歸模型擬合了 5 倍 RFECV 估計(jì)器。訓(xùn)練完成后,你可以使用該transform方法丟棄冗余特征。調(diào)用結(jié)果.shape顯示,該估計(jì)器成功丟棄了所有 5 個(gè)不必要的特征。

我已經(jīng)寫(xiě)了一篇關(guān)于該算法的完整文章,涵蓋了它如何與真實(shí)世界的數(shù)據(jù)集一起工作的細(xì)節(jié):

3.ensemble.ExtraTrees[4]

盡管隨機(jī)森林功能強(qiáng)大,但過(guò)擬合的風(fēng)險(xiǎn)很高。因此,Sklearn 提供了一種名為 ExtraTrees(既是分類器又是回歸器)的 RF 替代方案。

extra一詞并不意味著更多的樹(shù),而是更多的隨機(jī)性。該算法使用了另一種與決策樹(shù)非常相似的樹(shù)。

唯一的區(qū)別在于,我們不是構(gòu)建每棵樹(shù)時(shí)就計(jì)算分割閾值,而是為每個(gè)特征隨機(jī)抽取閾值,并選擇最佳閾值作為分割規(guī)則。這降低了方差,但會(huì)略微增加偏差:

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)

# Decision trees
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

# Random Forest
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)

在合成數(shù)據(jù)集上比較 RandomForest 和 ExtaTreesRegressor 的性能。ExtraTrees 勝出!

如你所見(jiàn),ExtraTreesRegressor 在合成數(shù)據(jù)集上的表現(xiàn)優(yōu)于隨機(jī)森林。

從官方用戶指南[5]中了解有關(guān)極隨機(jī)樹(shù)的更多信息。

4.impute.IterativeImputer[6]和KNNImputer[7]

如果你正在尋找比更強(qiáng)大、更先進(jìn)的插補(bǔ)技術(shù)SimpleImputer,Sklearn 可以再次滿足你的需求。

sklearn.impute子包包括兩個(gè)基于模型的插補(bǔ)算法——KNNImputer和IterativeImputer。

顧名思義,KNNImputer使用 k-Nearest-Neighbors 算法來(lái)找到缺失值的最佳替代:

from sklearn.impute import KNNImputer

# Code taken from Sklearn user guide
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. ]])

使用 KNNImputer 作為基于模型的插補(bǔ)技術(shù)來(lái)適當(dāng)填充缺失值。

一種更穩(wěn)健的算法是IterativeImputer。它通過(guò)將每個(gè)缺失值特征建模為其余特征的函數(shù)來(lái)查找缺失值。此過(guò)程以循序漸進(jìn)的方式進(jìn)行。在每個(gè)步驟中,選擇一個(gè)具有缺失值的特征作為目標(biāo)(y),其余特征則選擇為特征數(shù)組(X)。然后,使用回歸器預(yù)測(cè) 中的缺失值y,并對(duì)每個(gè)特征重復(fù)此過(guò)程,直到 max_iter 次數(shù)(IterativeImputer 的一個(gè)參數(shù))。

因此,單個(gè)缺失值會(huì)生成多個(gè)預(yù)測(cè)。這樣做的好處是將每個(gè)缺失值視為一個(gè)隨機(jī)變量,并關(guān)聯(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.        ]])

展示更強(qiáng)大的基于模型的插補(bǔ)技術(shù)——IterativeImputer 的工作原理。


發(fā)現(xiàn) BayesianRidge 和 ExtraTree 與 IterativeImputer 配合使用效果更佳。

5.linear_model.HuberRegressor[8]

異常值的存在會(huì)嚴(yán)重影響任何模型的預(yù)測(cè)。許多異常值檢測(cè)算法會(huì)丟棄異常值并將其標(biāo)記為缺失值。雖然這有助于模型的學(xué)習(xí)功能,但它完全消除了異常值對(duì)分布的影響。

另一種算法是HuberRegressor。它不是完全移除異常值,而是在擬合過(guò)程中賦予異常值較小的權(quán)重。它有epsilon一個(gè)超參數(shù),用于控制應(yīng)被歸類為異常值的樣本數(shù)量。參數(shù)越小,模型對(duì)異常值的魯棒性就越強(qiáng)。它的 API 與任何其他線性回歸器相同。

下面,你可以看到它與具有大量異常值的數(shù)據(jù)集上的貝葉斯嶺回歸器的比較[9]:

imgimg

如你所見(jiàn),epsilon 為 1.35、1.5、1.75 的 HuberRegressor 成功捕捉到了不受異常值影響的最佳擬合線。

你可以從用戶指南[10]中了解有關(guān)該算法的更多信息。

6.tree.plot_tree[11]

Sklearn 可以使用以下函數(shù)繪制單個(gè)決策樹(shù)的結(jié)構(gòu)plot_tree。對(duì)于剛開(kāi)始學(xué)習(xí)基于樹(shù)的模型和集成模型的初學(xué)者來(lái)說(shuō),此功能可能很方便:

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);

使用 Sklearn 的 plot_tree 函數(shù)可視化決策樹(shù)。

圖片圖片

還有其他繪制樹(shù)的方法,例如使用 Graphviz 格式。請(qǐng)參閱用戶指南[12]了解更多信息。

7.linear_model.Perceptron[13]

這份列表中最酷的名字是排名第七的——感知器。雖然名字很花哨,但它其實(shí)是一個(gè)簡(jiǎn)單的線性二分類器。該算法最顯著的特點(diǎn)是它適用于大規(guī)模學(xué)習(xí),并且默認(rèn)情況下:

  • 它不需要學(xué)習(xí)率。
  • 不實(shí)施正則化。
  • 它僅在出現(xiàn)錯(cuò)誤時(shí)更新其模型。

它相當(dāng)于 SGDClassifier,loss='perceptron', eta=1, learning_rate="constant", penalty=None但速度稍快一些:

from sklearn.datasets import make_classification
from sklearn.linear_model import Perceptron

# Create a large dataset
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

展示感知器在樣本二元分類問(wèn)題上的性能。

8.feature_selection.SelectFromModel[14]

Sklearn 中另一個(gè)基于模型的特征選擇估計(jì)器是SelectFromModel。它不如 RFECV 那樣穩(wěn)健,但由于計(jì)算成本較低,對(duì)于海量數(shù)據(jù)集來(lái)說(shuō)是一個(gè)不錯(cuò)的選擇。它也是一個(gè)包裝器估計(jì)器,適用于任何具有以下.feature_importances_屬性的模型.coef_:

from sklearn.feature_selection import SelectFromModel

# Make a dataset with 40 uninformative features
X, y = make_regression(n_samples=int(1e4), n_features=50, n_informative=10)

# Init the selector and transform feature array
selector = SelectFromModel(estimator=ExtraTreesRegressor()).fit(X, y)

>>> selector.transform(X).shape
(10000, 8)

在具有 40 個(gè)冗余特征的合成數(shù)據(jù)集上嘗試使用 ExtraTreesRegressor 的 SelectFromModel 估計(jì)器。

如你所見(jiàn),該算法成功刪除了所有 40 個(gè)冗余特征。

9.metrics.ConfusionMatrixDisplay[15]

混淆矩陣是分類問(wèn)題的圣杯。大多數(shù)指標(biāo)都源于它,例如精確度、召回率、F1、ROC AUC 等。Sklearn 可以計(jì)算并繪制默認(rèn)混淆矩陣:

from sklearn.metrics import plot_confusion_matrix
from sklearn.model_selection import train_test_split

# Make a binary classification problem
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);

圖片圖片

說(shuō)實(shí)話,我不太喜歡默認(rèn)的混淆矩陣。它的格式是固定的——行是真實(shí)標(biāo)簽,列是預(yù)測(cè)值。此外,第一行第一列是負(fù)類,第二行第二列是正類。有些人可能更喜歡其他格式的矩陣,比如轉(zhuǎn)置矩陣或翻轉(zhuǎn)矩陣。

例如,我喜歡將正類設(shè)為第一行第一列,以符合維基百科的格式。這有助于我更好地區(qū)分 TP、FP、TN、FN 這四個(gè)矩陣項(xiàng)。幸運(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);

圖片圖片

在將混淆矩陣cm傳遞給之前,你可以將ConfusionMatrixDisplay設(shè)置為你想要的任何格式。

10.Generalized Linear Models[16]

如果存在適用于其他類型分布的替代方案,那么將目標(biāo) ( y ) 轉(zhuǎn)換為正態(tài)分布是沒(méi)有意義的。

例如,Sklearn 為目標(biāo)變量提供了三種廣義線性模型,分別為泊松分布、Tweedie 分布或 Gamma 分布。與預(yù)期的正態(tài)分布不同,PoissonRegressor、TweedieRegressor和GammaRegressor可以為具有相應(yīng)分布的目標(biāo)生成穩(wěn)健的結(jié)果。

除此之外,它們的 API 與任何其他 Sklearn 模型相同。要確定目標(biāo)的分布是否與上述三個(gè)分布相匹配,你可以將它們的 PDF(概率密度函數(shù))繪制在具有完美分布的相同軸上。

例如,要查看目標(biāo)是否遵循泊松分布,請(qǐng)使用 Seaborn 中的 kdeplot繪制其 PDF ,并通過(guò)在相同軸上從 Numpy 中np.random.poisson采樣來(lái)繪制完美的泊松分布。

11.ensemble.IsolationForest[17]

由于基于樹(shù)的模型和集成模型通常能產(chǎn)生更穩(wěn)健的結(jié)果,它們?cè)诋惓V禉z測(cè)方面也被證明是有效的。例如,Sklearn 中的IsolationForest ,其使用由極其隨機(jī)的樹(shù)組成的森林(tree.ExtraTreeRegressor)來(lái)檢測(cè)異常值。每棵樹(shù)都嘗試通過(guò)選擇一個(gè)特征,并在所選特征的最大值和最小值之間隨機(jī)選擇一個(gè)分割值來(lái)隔離每個(gè)樣本。

這種類型的隨機(jī)分區(qū)會(huì)在每棵樹(shù)的根節(jié)點(diǎn)和終止節(jié)點(diǎn)之間產(chǎn)生明顯較短的路徑。

因此,當(dāng)隨機(jī)樹(shù)林共同為特定樣本產(chǎn)生較短的路徑長(zhǎng)度時(shí),它們很可能是異?!猄klearn 用戶指南。

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])

該算法正確捕獲了異常值(90)并將其標(biāo)記為-1。

在用戶指南[18]中閱讀有關(guān)該算法的更多信息。

12.preprocessing.PowerTransformer[19]

許多線性模型需要對(duì)數(shù)值特征進(jìn)行一些轉(zhuǎn)換,以使其服從正態(tài)分布,StandardScaler和MinMaxScaler對(duì)大多數(shù)分布都運(yùn)行良好。

然而,當(dāng)數(shù)據(jù)偏度較高時(shí),分布的核心指標(biāo)(例如平均值、中位數(shù)、最小值和最大值)都會(huì)受到影響。因此,簡(jiǎn)單的歸一化和標(biāo)準(zhǔn)化對(duì)偏斜分布不起作用。

相反,Sklearn 中的 PowerTransformer 使用對(duì)數(shù)變換將任何傾斜的特征實(shí)現(xiàn)了盡可能地轉(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ù)變換來(lái)解決這個(gè)問(wèn)題:

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[20]

Sklearn 中的另一個(gè)數(shù)字轉(zhuǎn)換器是RobustScaler。你大概能從它的名字猜到它的作用——它可以以一種對(duì)異常值魯棒的方式轉(zhuǎn)換特征。如果某個(gè)特征中存在異常值,則很難使它們服從正態(tài)分布,因?yàn)樗鼈儠?huì)嚴(yán)重扭曲平均值和標(biāo)準(zhǔn)差。

不使用平均值/標(biāo)準(zhǔn)差,而是RobustScaler使用中位數(shù)和四分位距 (IQR) 來(lái)縮放數(shù)據(jù),因?yàn)檫@兩個(gè)指標(biāo)不會(huì)因異常值而產(chǎn)生偏差。你也可以在用戶指南[21]中閱讀相關(guān)內(nèi)容。

14.compose.make_column_transformer[22]

在 Sklearn 中,有一個(gè)使用make_pipeline函數(shù)創(chuàng)建 Pipeline 實(shí)例的簡(jiǎn)寫(xiě)方法。該函數(shù)無(wú)需為每個(gè)步驟命名,也無(wú)需讓代碼變得冗長(zhǎng),只需接受轉(zhuǎn)換器和估算器即可完成其工作:

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())])

使用“make_pipeline”函數(shù)縮短創(chuàng)建 Sklearn 管道的代碼。

對(duì)于更復(fù)雜的場(chǎng)景,ColumnTransformer使用 ,但它也存在同樣的問(wèn)題——每個(gè)預(yù)處理步驟都應(yīng)該命名,這會(huì)使代碼冗長(zhǎng)且難以閱讀。值得慶幸的是,Sklearn 提供了類似的函數(shù)make_pipeline— make_column_transformer:

import seaborn as sns
from sklearn.compose import make_column_transformer
from sklearn.preprocessing import OneHotEncoder

# Load diamonds dataset
diamonds = sns.load_dataset("diamonds")
X, y = diamonds.drop("price", axis=1), diamonds.price.values.reshape(-1, 1)

# Isolate numeric and categorical cols
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函數(shù)縮短創(chuàng)建ColumnTransformer對(duì)象的代碼。

如你所見(jiàn),使用起來(lái)make_column_transformer要短得多,并且它負(fù)責(zé)自行命名每個(gè)轉(zhuǎn)換器步驟。

15.compose.make_column_selector[23]

如果你仔細(xì)觀察,就會(huì)發(fā)現(xiàn)我們使用了select_dtypes函數(shù)以及columnsPandas DataFrames 的屬性來(lái)隔離數(shù)字列和分類列。雖然這種方法有效,但使用 Sklearn 可以實(shí)現(xiàn)更靈活、更優(yōu)雅的解決方案。

make_column_selector 函數(shù)創(chuàng)建一個(gè)可直接傳遞給ColumnTransformer實(shí)例的列選擇器。它的功能與select_dtypes類似, 甚至更好。它包含dtype_include和dtype_exclude參數(shù),用于根據(jù)數(shù)據(jù)類型選擇列。

如果需要自定義列過(guò)濾器,甚至可以將正則表達(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)),
)

你無(wú)需傳遞列名列表,只需傳遞make_column_selector帶有相關(guān)參數(shù)的實(shí)例即可!

16.preprocessing.OrdinalEncoder[24]

初學(xué)者常犯的一個(gè)錯(cuò)誤是使用LabelEncoder來(lái)編碼有序分類特征。如果你注意到了,LabelEncoder一次只能轉(zhuǎn)換一列,而不是像OneHotEncoder那樣同時(shí)轉(zhuǎn)換。你可能會(huì)認(rèn)為 Sklearn 犯了一個(gè)錯(cuò)誤!

實(shí)際上,LabelEncoder應(yīng)該僅用于編碼響應(yīng)變量(y),如其文檔[25]中所述。要編碼特征數(shù)組(X),你應(yīng)該使用OrdinalEncoder可以正常工作的函數(shù)。它將有序分類列轉(zhuǎn)換為具有 (0, n_categories - 1) 個(gè)類別的特征。并且它只需一行代碼即可對(duì)所有指定的列執(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.]])

使用 OrdinalEncoder 編碼序數(shù)分類特征

17.metrics.get_scorer[26]

Sklearn 內(nèi)置了 50 多個(gè)指標(biāo),它們的文本名稱可以在 中查看sklearn.metrics.SCORERS.keys()。在單個(gè)項(xiàng)目中,你可能需要使用多個(gè)指標(biāo),如果要單獨(dú)使用它們,則需要導(dǎo)入它們。

直接導(dǎo)入大量指標(biāo)sklearn.metrics可能會(huì)污染你的命名空間,并導(dǎo)致不必要的冗長(zhǎng)代碼。解決方案是,你可以使用metrics.get_scorer函數(shù)通過(guò)文本名稱訪問(wèn)任何指標(biāo),而無(wú)需導(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)

使用 get_scorer 函數(shù)而不導(dǎo)入指標(biāo)。

18.model_selection.HalvingGrid[27]和HalvingRandomSearchCV[28]

在 Sklearn 0.24 版本中,我們引入了兩個(gè)實(shí)驗(yàn)性的超參數(shù)優(yōu)化器:HalvingGridSearchCV和HalvingRandomSearchCV類。

與窮舉型網(wǎng)格搜索 (GridSearch) 和隨機(jī)化搜索 (RandomizedSearch) 不同,新類別使用了一種名為“連續(xù)減半”的技術(shù)。它不是在所有數(shù)據(jù)上訓(xùn)練所有候選集(參數(shù)組合集),而是只將一部分?jǐn)?shù)據(jù)提供給參數(shù)。通過(guò)在較小的數(shù)據(jù)子集上進(jìn)行訓(xùn)練,可以過(guò)濾掉表現(xiàn)最差的候選集。每次迭代后,訓(xùn)練樣本都會(huì)增加一定倍數(shù),而可能的候選集數(shù)量則會(huì)相應(yīng)減少,從而大大縮短評(píng)估時(shí)間。

快多少?在我進(jìn)行的實(shí)驗(yàn)中,HalvingGridSearch 比常規(guī) GridSearch 快 11 倍,HalvingRandomSearch 甚至比 HalvingGridSearch 快 10 倍。你可以在這里閱讀我對(duì)連續(xù)減半的詳細(xì)概述和我的實(shí)驗(yàn):

19.sklearn.utils[29]

最后但同樣重要的是,Sklearn 的 subpackage 模塊中提供了大量的實(shí)用函數(shù)和輔助函數(shù)sklearn.utils。Sklearn 本身使用此模塊中的函數(shù)來(lái)構(gòu)建我們常用的所有轉(zhuǎn)換器和估算器。

有很多有用的,例如class_weight.compute_class_weight,estimator_html_repr,shuffle,check_X_y等等。你可以在自己的工作流程中使用它們,使你的代碼更像 Sklearn,或者在創(chuàng)建適合 Sklearn API 的自定義轉(zhuǎn)換器和估算器時(shí)它們可能會(huì)派上用場(chǎng)。

參考資料

[1] Sklearn 的API 參考: https://scikit-learn.org/stable/modules/classes.html#api-reference

[2] covariance.EllipticEnvelope: https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope

[3] feature_selection.RFECV: https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFECV.html

[4] ensemble.ExtraTrees: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesRegressor.html

[5] 用戶指南: https://scikit-learn.org/stable/modules/ensemble.html#extremely-randomized-trees

[6] impute.IterativeImputer: https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html

[7] KNNImputer: https://scikit-learn.org/stable/modules/generated/sklearn.impute.KNNImputer.html

[8] linear_model.HuberRegressor: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.HuberRegressor.html

[9] 貝葉斯嶺回歸器的比較: https://scikit-learn.org/stable/auto_examples/linear_model/plot_huber_vs_ridge.html#sphx-glr-auto-examples-linear-model-plot-huber-vs-ridge-py

[10] 用戶指南: https://scikit-learn.org/stable/modules/linear_model.html#huber-regression

[11] tree.plot_tree: https://scikit-learn.org/stable/modules/generated/sklearn.tree.plot_tree.html

[12] 用戶指南: https://scikit-learn.org/stable/modules/tree.html#decision-trees

[13] linear_model.Perceptron: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Perceptron.html

[14] feature_selection.SelectFromModel: https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html

[15] metrics.ConfusionMatrixDisplay: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ConfusionMatrixDisplay.html

[16] Generalized Linear Models: https://scikit-learn.org/stable/modules/linear_model.html#generalized-linear-regression

[17] ensemble.IsolationForest: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html

[18] 在用戶指南: https://scikit-learn.org/stable/modules/outlier_detection.html#isolation-forest

[19] preprocessing.PowerTransformer: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PowerTransformer.html

[20] preprocessing.RobustScaler: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.RobustScaler.html

[21] 用戶指南: https://scikit-learn.org/stable/modules/preprocessing.html#preprocessing-data

[22] compose.make_column_transformer: https://scikit-learn.org/stable/modules/generated/sklearn.compose.make_column_transformer.html

[23] compose.make_column_selector: https://scikit-learn.org/stable/modules/generated/sklearn.compose.make_column_selector.html

[24] preprocessing.OrdinalEncoder: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OrdinalEncoder.html

[25] 文檔: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

[26] metrics.get_scorer: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.get_scorer.html

[27] model_selection.HalvingGrid: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.HalvingGridSearchCV.html

[28] HalvingRandomSearchCV: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.HalvingGridSearchCV.html

[29] sklearn.utils: https://scikit-learn.org/stable/modules/classes.html#module-sklearn.utils

責(zé)任編輯:武曉燕 來(lái)源: 數(shù)據(jù)STUDIO
相關(guān)推薦

2020-11-16 11:56:57

機(jī)器學(xué)習(xí)技術(shù)工具

2020-05-19 14:29:50

機(jī)器學(xué)習(xí)TensorFlow

2024-04-10 12:39:08

機(jī)器學(xué)習(xí)庫(kù)python

2018-10-18 09:00:00

機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)算法數(shù)據(jù)科學(xué)家

2019-09-03 18:09:20

機(jī)器學(xué)習(xí)AI訓(xùn)練數(shù)據(jù)

2020-05-19 09:00:26

機(jī)器學(xué)習(xí)人工智能TensorFlow

2017-03-20 16:30:15

Android退出應(yīng)用優(yōu)雅方式

2021-08-13 14:35:37

視頻會(huì)議軟件遠(yuǎn)程工作

2024-03-28 14:29:46

JavaScript編程

2024-12-04 15:10:21

2025-05-29 08:35:39

Python代碼開(kāi)發(fā)

2017-06-12 17:54:45

Python編程

2022-05-04 12:44:57

Python編程語(yǔ)言

2023-01-29 07:45:06

DevOps

2024-07-12 15:27:58

2011-05-31 14:48:31

PHP

2020-02-18 10:11:11

機(jī)器學(xué)習(xí)技術(shù)人工智能

2017-08-30 19:11:38

Linux命令行tab

2025-10-27 02:11:00

2024-06-24 13:35:48

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)