精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Sklearn 實現高效機器學習的 19 個最優雅的技巧

人工智能 機器學習
選擇最有助于預測的特征是防止過擬合和降低模型復雜度的必要步驟。Sklearn 提供的最強大的算法之一是遞歸特征消除 (RFE)。它使用交叉驗證自動找到最重要的特征,并丟棄其余特征。

了解 19 個 Sklearn 功能,它們可以直接而優雅地替代你手動執行的常見操作。

通過查閱Sklearn 的API 參考[1],我發現最常用的模型和函數只是該庫功能的冰山一角。盡管有些功能非常局限,只用于極少數的邊緣情況,但我發現許多估算器、變換器和實用函數,可以更優雅地修復人們手動執行的常見操作。

因此,我決定列出最優雅、最重要的功能,并進行簡要說明,以便你可以在一篇文章中顯著擴展你的 Sklearn 工具集。

1.covariance.EllipticEnvelope[2]

分布中存在異常值是很常見的。許多算法都會處理異值,Sklearn 內置的一個例子EllipticalEnvelope就是一個例子。該算法的優勢在于它在檢測正態分布(高斯)特征中的異常值方面表現非常出色:

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

展示如何使用橢圓包絡估計器從正態分布的特征中檢測異常值。

為了測試估計器,我們創建一個均值為 5、標準差為 2 的正態分布。訓練完成后,我們將一些隨機數傳遞給它的predict方法。該方法對test中的異常值(分別為 20、10、13)返回 -1。

2.feature_selection.RFECV[3]

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

該估計器的一個優點是它是一個包裝器——它可以用于任何返回特征重要性或系數分數的 Sklearn 算法。。這是一個合成數據集上的示例:

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)

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

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

我已經寫了一篇關于該算法的完整文章,涵蓋了它如何與真實世界的數據集一起工作的細節:

3.ensemble.ExtraTrees[4]

盡管隨機森林功能強大,但過擬合的風險很高。因此,Sklearn 提供了一種名為 ExtraTrees(既是分類器又是回歸器)的 RF 替代方案。

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

唯一的區別在于,我們不是構建每棵樹時就計算分割閾值,而是為每個特征隨機抽取閾值,并選擇最佳閾值作為分割規則。這降低了方差,但會略微增加偏差:

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)

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

如你所見,ExtraTreesRegressor 在合成數據集上的表現優于隨機森林。

從官方用戶指南[5]中了解有關極隨機樹的更多信息。

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

如果你正在尋找比更強大、更先進的插補技術SimpleImputer,Sklearn 可以再次滿足你的需求。

sklearn.impute子包包括兩個基于模型的插補算法——KNNImputer和IterativeImputer。

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

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 作為基于模型的插補技術來適當填充缺失值。

一種更穩健的算法是IterativeImputer。它通過將每個缺失值特征建模為其余特征的函數來查找缺失值。此過程以循序漸進的方式進行。在每個步驟中,選擇一個具有缺失值的特征作為目標(y),其余特征則選擇為特征數組(X)。然后,使用回歸器預測 中的缺失值y,并對每個特征重復此過程,直到 max_iter 次數(IterativeImputer 的一個參數)。

因此,單個缺失值會生成多個預測。這樣做的好處是將每個缺失值視為一個隨機變量,并關聯其固有的不確定性:

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

展示更強大的基于模型的插補技術——IterativeImputer 的工作原理。


發現 BayesianRidge 和 ExtraTree 與 IterativeImputer 配合使用效果更佳。

5.linear_model.HuberRegressor[8]

異常值的存在會嚴重影響任何模型的預測。許多異常值檢測算法會丟棄異常值并將其標記為缺失值。雖然這有助于模型的學習功能,但它完全消除了異常值對分布的影響。

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

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

imgimg

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

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

6.tree.plot_tree[11]

Sklearn 可以使用以下函數繪制單個決策樹的結構plot_tree。對于剛開始學習基于樹的模型和集成模型的初學者來說,此功能可能很方便:

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 函數可視化決策樹。

圖片圖片

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

7.linear_model.Perceptron[13]

這份列表中最酷的名字是排名第七的——感知器。雖然名字很花哨,但它其實是一個簡單的線性二分類器。該算法最顯著的特點是它適用于大規模學習,并且默認情況下:

  • 它不需要學習率。
  • 不實施正則化。
  • 它僅在出現錯誤時更新其模型。

它相當于 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

展示感知器在樣本二元分類問題上的性能。

8.feature_selection.SelectFromModel[14]

Sklearn 中另一個基于模型的特征選擇估計器是SelectFromModel。它不如 RFECV 那樣穩健,但由于計算成本較低,對于海量數據集來說是一個不錯的選擇。它也是一個包裝器估計器,適用于任何具有以下.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 個冗余特征的合成數據集上嘗試使用 ExtraTreesRegressor 的 SelectFromModel 估計器。

如你所見,該算法成功刪除了所有 40 個冗余特征。

9.metrics.ConfusionMatrixDisplay[15]

混淆矩陣是分類問題的圣杯。大多數指標都源于它,例如精確度、召回率、F1、ROC AUC 等。Sklearn 可以計算并繪制默認混淆矩陣:

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

圖片圖片

說實話,我不太喜歡默認的混淆矩陣。它的格式是固定的——行是真實標簽,列是預測值。此外,第一行第一列是負類,第二行第二列是正類。有些人可能更喜歡其他格式的矩陣,比如轉置矩陣或翻轉矩陣。

例如,我喜歡將正類設為第一行第一列,以符合維基百科的格式。這有助于我更好地區分 TP、FP、TN、FN 這四個矩陣項。幸運的是,你可以使用另一個函數 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設置為你想要的任何格式。

10.Generalized Linear Models[16]

如果存在適用于其他類型分布的替代方案,那么將目標 ( y ) 轉換為正態分布是沒有意義的。

例如,Sklearn 為目標變量提供了三種廣義線性模型,分別為泊松分布、Tweedie 分布或 Gamma 分布。與預期的正態分布不同,PoissonRegressor、TweedieRegressor和GammaRegressor可以為具有相應分布的目標生成穩健的結果。

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

例如,要查看目標是否遵循泊松分布,請使用 Seaborn 中的 kdeplot繪制其 PDF ,并通過在相同軸上從 Numpy 中np.random.poisson采樣來繪制完美的泊松分布。

11.ensemble.IsolationForest[17]

由于基于樹的模型和集成模型通常能產生更穩健的結果,它們在異常值檢測方面也被證明是有效的。例如,Sklearn 中的IsolationForest ,其使用由極其隨機的樹組成的森林(tree.ExtraTreeRegressor)來檢測異常值。每棵樹都嘗試通過選擇一個特征,并在所選特征的最大值和最小值之間隨機選擇一個分割值來隔離每個樣本。

這種類型的隨機分區會在每棵樹的根節點和終止節點之間產生明顯較短的路徑。

因此,當隨機樹林共同為特定樣本產生較短的路徑長度時,它們很可能是異常——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])

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

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

12.preprocessing.PowerTransformer[19]

許多線性模型需要對數值特征進行一些轉換,以使其服從正態分布,StandardScaler和MinMaxScaler對大多數分布都運行良好。

然而,當數據偏度較高時,分布的核心指標(例如平均值、中位數、最小值和最大值)都會受到影響。因此,簡單的歸一化和標準化對偏斜分布不起作用。

相反,Sklearn 中的 PowerTransformer 使用對數變換將任何傾斜的特征實現了盡可能地轉換為正態分布。考慮 Diamonds 數據集中的這兩個特征:

import seaborn as sns

diamonds = sns.load_dataset("diamonds")
diamonds[["price", "carat"]].hist(figsize=(10, 5));

圖片圖片

兩者都嚴重傾斜。讓我們使用對數變換來解決這個問題:

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 中的另一個數字轉換器是RobustScaler。你大概能從它的名字猜到它的作用——它可以以一種對異常值魯棒的方式轉換特征。如果某個特征中存在異常值,則很難使它們服從正態分布,因為它們會嚴重扭曲平均值和標準差。

不使用平均值/標準差,而是RobustScaler使用中位數和四分位距 (IQR) 來縮放數據,因為這兩個指標不會因異常值而產生偏差。你也可以在用戶指南[21]中閱讀相關內容。

14.compose.make_column_transformer[22]

在 Sklearn 中,有一個使用make_pipeline函數創建 Pipeline 實例的簡寫方法。該函數無需為每個步驟命名,也無需讓代碼變得冗長,只需接受轉換器和估算器即可完成其工作:

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”函數縮短創建 Sklearn 管道的代碼。

對于更復雜的場景,ColumnTransformer使用 ,但它也存在同樣的問題——每個預處理步驟都應該命名,這會使代碼冗長且難以閱讀。值得慶幸的是,Sklearn 提供了類似的函數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函數縮短創建ColumnTransformer對象的代碼。

如你所見,使用起來make_column_transformer要短得多,并且它負責自行命名每個轉換器步驟。

15.compose.make_column_selector[23]

如果你仔細觀察,就會發現我們使用了select_dtypes函數以及columnsPandas DataFrames 的屬性來隔離數字列和分類列。雖然這種方法有效,但使用 Sklearn 可以實現更靈活、更優雅的解決方案。

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

如果需要自定義列過濾器,甚至可以將正則表達式傳遞給 ,pattern同時將其他參數設置為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)),
)

你無需傳遞列名列表,只需傳遞make_column_selector帶有相關參數的實例即可!

16.preprocessing.OrdinalEncoder[24]

初學者常犯的一個錯誤是使用LabelEncoder來編碼有序分類特征。如果你注意到了,LabelEncoder一次只能轉換一列,而不是像OneHotEncoder那樣同時轉換。你可能會認為 Sklearn 犯了一個錯誤!

實際上,LabelEncoder應該僅用于編碼響應變量(y),如其文檔[25]中所述。要編碼特征數組(X),你應該使用OrdinalEncoder可以正常工作的函數。它將有序分類列轉換為具有 (0, n_categories - 1) 個類別的特征。并且它只需一行代碼即可對所有指定的列執行此操作,從而可以將其包含在管道中。

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 編碼序數分類特征

17.metrics.get_scorer[26]

Sklearn 內置了 50 多個指標,它們的文本名稱可以在 中查看sklearn.metrics.SCORERS.keys()。在單個項目中,你可能需要使用多個指標,如果要單獨使用它們,則需要導入它們。

直接導入大量指標sklearn.metrics可能會污染你的命名空間,并導致不必要的冗長代碼。解決方案是,你可以使用metrics.get_scorer函數通過文本名稱訪問任何指標,而無需導入它:

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 函數而不導入指標。

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

在 Sklearn 0.24 版本中,我們引入了兩個實驗性的超參數優化器:HalvingGridSearchCV和HalvingRandomSearchCV類。

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

快多少?在我進行的實驗中,HalvingGridSearch 比常規 GridSearch 快 11 倍,HalvingRandomSearch 甚至比 HalvingGridSearch 快 10 倍。你可以在這里閱讀我對連續減半的詳細概述和我的實驗:

19.sklearn.utils[29]

最后但同樣重要的是,Sklearn 的 subpackage 模塊中提供了大量的實用函數和輔助函數sklearn.utils。Sklearn 本身使用此模塊中的函數來構建我們常用的所有轉換器和估算器。

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

參考資料

[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

責任編輯:武曉燕 來源: 數據STUDIO
相關推薦

2020-11-16 11:56:57

機器學習技術工具

2020-05-19 14:29:50

機器學習TensorFlow

2024-04-10 12:39:08

機器學習python

2018-10-18 09:00:00

機器學習機器學習算法數據科學家

2019-09-03 18:09:20

機器學習AI訓練數據

2020-05-19 09:00:26

機器學習人工智能TensorFlow

2017-03-20 16:30:15

Android退出應用優雅方式

2021-08-13 14:35:37

視頻會議軟件遠程工作

2025-05-29 08:35:39

Python代碼開發

2022-05-04 12:44:57

Python編程語言

2024-12-04 15:10:21

2024-03-28 14:29:46

JavaScript編程

2017-06-12 17:54:45

Python編程

2024-07-12 15:27:58

2023-01-29 07:45:06

DevOps

2017-08-30 19:11:38

Linux命令行tab

2020-02-18 10:11:11

機器學習技術人工智能

2025-10-27 02:11:00

2024-04-09 14:27:39

2022-04-14 10:40:11

領導者IT團隊遠程團隊
點贊
收藏

51CTO技術棧公眾號

国产精品国产三级国产普通话蜜臀 | 亚洲久久成人| 日韩电影中文字幕在线观看| 成人一对一视频| 国产视频网站在线| 国产成人综合在线观看| 欧美在线激情视频| 日韩精品123区| 欧美男男freegayvideosroom| 在线观看欧美黄色| 欧美久久在线观看| av电影在线观看| 成人高清伦理免费影院在线观看| 国产精品久久久久久久久久ktv | 伦xxxx在线| av在线不卡免费看| 成人h片在线播放免费网站| 国产网址在线观看| 午夜影院欧美| 亚洲视频在线播放| 天堂www中文在线资源| 亚洲伊人精品酒店| 欧美性xxxx极品hd满灌| 日韩视频 中文字幕| 国产精品久久久久久久龚玥菲 | 日韩美一区二区三区| 日韩在线第三页| 国产传媒av在线| 亚洲精品成人悠悠色影视| 日韩偷拍一区二区| 完全免费av在线播放| 久久久免费电影| 51精品免费网站| 欧美日韩中文字幕一区二区三区| 亚洲国产精品网站| 久久av一区二区三| 91精品国产一区二区在线观看| 色综合天天综合网天天看片| 国产日本在线播放| 美女日批视频在线观看| 亚洲日本一区二区三区| 亚洲激情一区二区| 国产福利在线视频| 久久久www免费人成精品| 狠狠干一区二区| 亚洲免费不卡视频| 粉嫩av亚洲一区二区图片| 国产美女精品免费电影| 成人免费一级片| 老妇喷水一区二区三区| 欧美一区二区三区艳史| 免费日韩一级片| 日韩一级在线| 7777精品视频| 欧美特黄aaaaaa| 亚洲综合三区| 日本成熟性欧美| 一级片视频在线观看| 亚洲免费综合| 97在线视频免费播放| 久久露脸国语精品国产91| 亚洲激情不卡| 欧美又大又粗又长| 波多野结衣二区三区| 石原莉奈一区二区三区在线观看| 青青草原成人在线视频| 久久夜色精品国产噜噜亚洲av| 先锋影音国产一区| 国产成人aa精品一区在线播放| 久草视频一区二区| 蜜臀va亚洲va欧美va天堂| 国产一区玩具在线观看| 精品国产区一区二| 不卡av在线网| 日本在线视频不卡| 成人直播在线| 亚洲一线二线三线视频| 欧美视频在线播放一区| 色yeye免费人成网站在线观看| 亚洲国产日韩精品| 亚洲中文字幕久久精品无码喷水| 精品久久毛片| 日韩午夜激情av| 中文在线永久免费观看| 欧美激情在线免费| 日韩视频第一页| 国产亚洲欧美久久久久| 亚洲免费婷婷| 91视频免费网站| 天天摸天天碰天天爽天天弄| 久久精品视频网| 手机看片日韩国产| 黄视频网站在线观看| 欧美视频一区二区| 亚洲啪av永久无码精品放毛片| 你微笑时很美电视剧整集高清不卡| 日韩中文在线不卡| 久久精品国产亚洲av香蕉| 久久精品女人天堂| 亚洲在线免费看| 九色视频网站在线观看| 亚洲精品中文字幕乱码三区| 欧美 日韩 国产一区| 亚洲国产精选| 亚洲国产精品久久91精品| 正在播放国产对白害羞| 伊人精品在线| 成人夜晚看av| 成人全视频高清免费观看| 一区二区三区四区高清精品免费观看| 日本黄色三级大片| 1313精品午夜理伦电影| 色哟哟网站入口亚洲精品| 日韩视频免费观看高清| 国内精品免费**视频| 欧美激情一区二区三区在线视频| 污污在线观看| 欧美精品在线观看一区二区| www.自拍偷拍| 91久久亚洲| 亚洲一区二区三区sesese| 成人亚洲综合天堂| 欧美性69xxxx肥| 蜜臀视频在线观看| 亚洲欧美综合久久久| 国产成人极品视频| 亚洲av片在线观看| 亚洲一区二区黄色| 日本亚洲一区二区三区| 日韩国产综合| 国产精品扒开腿做爽爽爽视频| 欧美亚洲精品在线观看| 一区二区成人在线观看| 肉色超薄丝袜脚交| 99久久综合| 国产日韩在线免费| 日韩在线资源| 欧美猛男超大videosgay| 日本一区二区视频在线播放| 午夜在线一区二区| 欧美人与物videos另类| 麻豆视频在线看| 日韩成人在线网站| 免费在线观看黄网站| www.欧美日韩| 噜噜噜久久亚洲精品国产品麻豆| 黄色欧美在线| 91黑丝高跟在线| 手机福利小视频在线播放| 精品久久久久久久久中文字幕| 日韩成人av一区二区| 亚洲国产午夜| 蜜桃av久久久亚洲精品| 中文字幕在线高清| 一个色综合导航| 91丨九色丨丰满| 亚洲免费三区一区二区| 在线视频日韩欧美| 影音先锋久久| 欧美黑人3p| 成人免费视频观看| 久久精品久久久久电影| 精品人妻久久久久一区二区三区 | 久久精品国产综合| 国产成人精品毛片| 午夜视频在线观看一区二区 | 网曝91综合精品门事件在线| 69av成年福利视频| 狠狠狠综合7777久夜色撩人| 欧美性色综合网| 91插插插插插插| av电影天堂一区二区在线| 成人一级片网站| 精品视频免费| 91九色视频在线观看| www.51av欧美视频| 亚洲最新在线视频| 精品人妻一区二区三区三区四区| 亚洲国产精品久久一线不卡| 好吊日免费视频| 久久99这里只有精品| 欧美成人精品免费| 你懂的一区二区三区| 91九色精品视频| 末成年女av片一区二区下载| 在线观看免费高清视频97| 国产黄色片av| 在线视频你懂得一区| 青草影院在线观看| 久久免费电影网| 欧美激情第四页| 欧美中文字幕| 国产又粗又长又爽视频| 杨幂一区二区三区免费看视频| 91精品久久久久久久久中文字幕| а√天堂中文在线资源8| 中文字幕欧美专区| 三级视频在线看| 欧美美女一区二区三区| 国产做受高潮漫动| 日韩美女啊v在线免费观看| 亚洲一区二区三区四区五区六区| 久久精品久久99精品久久| 玩弄中年熟妇正在播放| 99视频精品全国免费| 欧美精品欧美精品| ccyy激情综合| 成人久久久久久| 日韩不卡在线| 51ⅴ精品国产91久久久久久| а√天堂资源地址在线下载| 国产亚洲a∨片在线观看| 东京干手机福利视频| 91精品久久久久久久久99蜜臂| 日本熟女毛茸茸| 亚洲成人在线网站| 日本黄色小说视频| 中文字幕一区二区日韩精品绯色| 中文字幕一二三四区| 成人精品免费网站| 亚洲一区二区中文字幕在线观看| 日韩精品免费视频人成| 少妇无码av无码专区在线观看| 91精品天堂福利在线观看| 午夜精品一区二区三区四区| 日韩电影不卡一区| 国产精品久久久久久久久久直播| 91精品一区| 国产免费亚洲高清| www.26天天久久天堂| 国产成人精品久久二区二区| 九色porny丨国产首页在线| 欧美日韩国产二区| 一色桃子av在线| 久久国产精品久久久久久| 日本三级视频在线播放| 中文字幕无线精品亚洲乱码一区 | 国产日产欧美一区二区视频| 国产人妻人伦精品1国产丝袜| 成人高清视频免费观看| 稀缺呦国内精品呦| 成人av网在线| 中文字幕第3页| 99久久精品国产网站| 中文字幕精品久久久| 成人精品国产一区二区4080 | 国产午夜久久久久| 免费观看av网站| 久久久久久综合| www.av天天| 中文在线免费一区三区高中清不卡| av黄色在线免费观看| 日本一区二区成人| 中文国语毛片高清视频| 亚洲欧美经典视频| 国产性一乱一性一伧一色| 性欧美大战久久久久久久久| 中日韩黄色大片| 日本电影亚洲天堂一区| 中文字幕在线日亚洲9| 欧美精品 日韩| 亚洲av无码片一区二区三区| 亚洲国产高清福利视频| 人人九九精品| 中文字幕精品www乱入免费视频| 日本中文字幕在线观看| 欧美成人国产va精品日本一级| 欧美人与禽性xxxxx杂性| 555www成人网| 国产成人亚洲一区二区三区| 成人免费午夜电影| 福利片一区二区| 欧美婷婷久久| 希岛爱理av一区二区三区| 久久亚洲精品无码va白人极品| 亚洲精品婷婷| 天天爽人人爽夜夜爽| 国产成人在线网站| 丰满圆润老女人hd| **欧美大码日韩| 国产精品500部| 欧美日韩激情一区二区| 亚洲av无码国产综合专区 | 成年人在线免费看片| 亚洲视频小说图片| 天堂在线免费观看视频| 欧美精品自拍偷拍| 污视频软件在线观看| 色爱av美腿丝袜综合粉嫩av| 久草在线资源站资源站| 国产精品99久久久久久www| 精品91福利视频| 欧美日韩精品免费在线观看视频| 国产精品福利在线观看播放| 日本少妇高潮喷水视频| 激情综合网激情| 3d动漫精品啪啪一区二区下载| 1024成人网| 久久久久久在线观看| 日韩欧美一卡二卡| jizz在线观看中文| 97视频人免费观看| 久久一级大片| 亚洲国产日韩欧美| 国产日韩精品视频一区二区三区 | 亚洲av无码精品一区二区| 欧美xxxx在线观看| 免费在线看a| 国产激情久久久久| 国产欧美自拍一区| 国产女人18毛片| 久久精品国产免费看久久精品| 成人免费毛片日本片视频| 亚洲欧美日韩国产另类专区| 在线免费一区二区| 日韩经典中文字幕| xxx.xxx欧美| 99re热精品| 国产精品国产三级国产在线观看| 日本精品一区二区三区四区| 成人网页在线观看| 老女人性淫交视频| 91精品国产一区二区三区| 大胆av不用播放器在线播放| 国产69久久精品成人| 高清日韩中文字幕| 国产成人艳妇aa视频在线 | 亚洲自拍小视频| 91欧美国产| 91看片就是不一样| 久久夜色精品国产噜噜av| 日韩乱码一区二区| 欧美精品一区二区三区高清aⅴ| a天堂中文在线官网在线| 91精品免费久久久久久久久| 日韩大片在线| 在线观看国产中文字幕| 欧美韩国日本不卡| 久久久久久av无码免费看大片| 亚洲图片在区色| 日韩欧美精品电影| 日韩电影免费观看在| 日韩中文字幕区一区有砖一区| www.久久av| 91国在线观看| av电影在线观看网址| 国产日韩欧美在线看| 久久精品国内一区二区三区水蜜桃| 午夜激情av在线| 亚洲视频一区在线| 亚洲第一天堂影院| 97在线看免费观看视频在线观看| 日韩人体视频| 久久综合久久色| 国产精品久久久久久户外露出 | 综合国产精品久久久| 国产在线播放一区三区四| 欧美成人精品一区二区免费看片| 日韩女优视频免费观看| 51漫画成人app入口| 久久伊人一区二区| 视频一区在线播放| 亚洲精品天堂网| 日韩三级中文字幕| 狠狠躁少妇一区二区三区| 日韩视频精品| 国产精品亚洲а∨天堂免在线| 精品无码人妻一区二区三区| 亚洲精品v欧美精品v日韩精品| 色豆豆成人网| 美国av在线播放| 暴力调教一区二区三区| 中文字幕一区二区人妻视频| 日韩在线免费观看视频| 视频一区日韩| 18禁男女爽爽爽午夜网站免费| 中文字幕+乱码+中文字幕一区| 国产乱人乱偷精品视频a人人澡| 欧美精品精品精品精品免费| 精品一区欧美| 夜夜爽久久精品91| 欧美性xxxxx极品娇小| 日本韩国在线视频爽| 国产精品一区在线播放| 日韩精品国产欧美| 久久久全国免费视频| 亚洲色图av在线| 这里视频有精品| 中文字幕无码不卡免费视频| 亚洲蜜臀av乱码久久精品| 视频国产在线观看| 91免费国产网站| 首页欧美精品中文字幕| 全程偷拍露脸中年夫妇| 亚洲欧美日韩网| 中文字幕一区日韩精品| 亚洲成人福利在线观看| 亚欧色一区w666天堂| 黄色动漫在线| 欧美一区二区在线|