亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python Sklearn中19個(gè)實(shí)用隱藏功能詳解

89542767 / 694人閱讀

  小編寫這篇文章的主要目的,主要是用來(lái)給大家解釋,Python Sklearn當(dāng)中,一些實(shí)用的隱藏功能,大概有19條,這些實(shí)用的隱藏技能,會(huì)給我們的工作和生活帶來(lái)很大的便利性,具體下文就給大家詳細(xì)的介紹一下。


  今天跟大家介紹19個(gè)Sklearn中超級(jí)實(shí)用的隱藏的功能,這些功能雖然不常見,但非常實(shí)用,它們可以直接優(yōu)雅地替代手動(dòng)執(zhí)行的常見操作。接下來(lái)我們就一個(gè)一個(gè)介紹這些功能,希望對(duì)大家有所幫助!


  寫在前面


  通過(guò)查看Sklearn的API,發(fā)現(xiàn)最常用的模型和函數(shù)只是眾多庫(kù)中的一小部分。盡管某些功能的使用范圍非常小并且一般用于一些邊緣情況,但我發(fā)現(xiàn)很多評(píng)估器、轉(zhuǎn)換器和實(shí)用程序功能可以很好地處理手動(dòng)執(zhí)行的常見操作。

01.png

  因此,接下來(lái)我將列出最重要的一些功能并做個(gè)簡(jiǎn)要的解釋,這樣可以我們擴(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è)最有幫助的特征是防止過(guò)擬合和降低模型復(fù)雜性的必要步驟。Sklearn提供的最健壯的算法之一是遞歸特征消除(RFE)。它通過(guò)使用交叉驗(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)大,但過(guò)度擬合的風(fēng)險(xiǎn)非常高。因此,Sklearn提供了稱為ExtraTrees(分類器和回歸器)的RF替代方案。


  "Extra"這個(gè)詞并不是指更多的樹,而是指更多的隨機(jī)性。該算法使用了另一種類似于決策樹的樹。唯一的區(qū)別是,不同于在構(gòu)建每棵樹時(shí)計(jì)算分割閾值,這些閾值是為每個(gè)特征隨機(jī)繪制的,并選擇最佳閾值作為分割規(guī)則。這允許以偏差略微增加的代價(jià)來(lái)降低方差:


  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算法來(lái)尋找缺失值的最佳替代:


  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。它通過(guò)將每個(gè)特征的缺失值建模為其他特征的函數(shù)來(lái)尋找缺失值。這個(gè)過(guò)程是按循序漸進(jìn)的循環(huán)方式完成的。在每一步中,選擇一個(gè)具有缺失值的特征作為目標(biāo)(y),其余的作為特征數(shù)組(X)。然后,使用回歸函數(shù)預(yù)測(cè)y中的缺失值,并對(duì)每個(gè)特征繼續(xù)這個(gè)過(guò)程,直到max_iter次數(shù)(IterativeImputer的一個(gè)參數(shù))。


  因此,會(huì)為一個(gè)缺失的值生成多個(gè)預(yù)測(cè)。這樣做的好處是,可以將每個(gè)缺失的值視為隨機(jī)變量,并將其與固有的不確定性聯(lián)系起來(lái):


  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來(lái)控制樣本的數(shù)量,這些樣本應(yīng)該被歸類為異常值。參數(shù)越小,對(duì)異常值的魯棒性越強(qiáng)。它的API與任何其他線性回歸函數(shù)相同。下面,你可以看到它與貝葉斯嶺回歸器在一個(gè)有大量異常值的數(shù)據(jù)集上的比較:

02.png

  可以看到,設(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é)者很方便,通過(guò)該方法,對(duì)決策樹的決策過(guò)程可視化,對(duì)其決策過(guò)程和原理更加一目了然。


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

03.png

  7.linear_model.Perceptron


  盡管感知機(jī)是一個(gè)奇特的名字,但它是一個(gè)簡(jiǎn)單的線性二進(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è)無(wú)信息特征的數(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è)冗余特征。

04.png

  9.metrics.ConfusionMatrixDisplay


  總所周知,混淆矩陣是用于評(píng)估分類問(wèn)題的常用方法。我們通常使用的大多數(shù)指標(biāo)都來(lái)自于它,如精度、召回率、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è)二元分類問(wèn)題
  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í)說(shuō),我不喜歡默認(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)來(lái)檢測(cè)異常值。每棵樹試圖通過(guò)選擇一個(gè)單一的特征,并在所選特征的最大值和最小值之間隨機(jī)選擇一個(gè)分裂值來(lái)隔離每個(gè)樣本。


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


  因此,當(dāng)隨機(jī)樹組成的森林為特定樣本共同產(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])


  12.preprocessing.PowerTransformer


  許多線性模型需要在數(shù)值特征上進(jìn)行一些轉(zhuǎn)換才能使其服從正態(tài)分布。StandardScaler和MinMaxScaler在大多數(shù)發(fā)行版中都比較適用。然而,當(dāng)數(shù)據(jù)存在高偏度時(shí),分布的核心指標(biāo),如平均值、中位數(shù)、最小值和最大值,就會(huì)受到影響。因此,簡(jiǎn)單的標(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來(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


  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ù)范圍)來(lái)衡量數(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í)例的簡(jiǎn)寫。該函數(shù)不需要為Pipeline中的每一步命名,而是只接受變形器和估計(jì)器并執(zhí)行它的工作,從而不需要使代碼那么長(zhǎng):


  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,這有相同的問(wèn)題——每個(gè)預(yù)處理步驟都應(yīng)該命名,這會(huì)使代碼變得冗長(zhǎng)且不可讀。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屬性來(lái)拆分?jǐn)?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來(lái)編碼有序的分類特征。注意到,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)目中,如果多帶帶使用它們,則可能需要使用多個(gè)指標(biāo)并導(dǎo)入它們。


  從sklearn.metrics中導(dǎo)入大量指標(biāo)可能會(huì)污染你的名稱空間,使其變得不必要的長(zhǎng)。一種解決方案是可以使用metrics.get_scorer函數(shù)使用其文本名稱訪問(wèn)任何度量,而不需要導(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ù)。通過(guò)對(duì)更小的數(shù)據(jù)子集進(jìn)行訓(xùn)練,篩選出表現(xiàn)最差的候選人。每次迭代后,訓(xùn)練樣本增加一定的因子,而可能的候選個(gè)數(shù)減少盡可能多的因子,從而獲得更快的評(píng)估時(shí)間。


  快多少呢?在我做過(guò)的實(shí)驗(yàn)中,HalvingGridSearch比普通GridSearch快11倍,HalvingRandomSearch甚至比HalvingGridSearch快10倍。


  19.sklearn.utils


  Sklearn在sklearn.utils中有一整套實(shí)用程序和輔助功能。Sklearn本身使用這個(gè)模塊中的函數(shù)來(lái)構(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等庫(kù)正在慢慢從Sklearn中搶走領(lǐng)先的ML庫(kù)的頭把交椅,但它仍然是現(xiàn)代ML工程師技能堆棧中不可估量的一部分。


  一致的API、卓越的代碼設(shè)計(jì)以及創(chuàng)建強(qiáng)大的ML工作流的能力仍然使Sklearn在功能和靈活性方面無(wú)與倫比。盡管我們可以在基礎(chǔ)知識(shí)方面完成很多工作,但本文表明Sklearn提供的不僅僅是表面上的東西!


  以上就是小編給大家總結(jié)的相關(guān)知識(shí)了,希望可以給大家?guī)?lái)一定的幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/128250.html

相關(guān)文章

  • ApacheCN 學(xué)習(xí)資源匯總 2019.3

    摘要:主頁(yè)暫時(shí)下線社區(qū)暫時(shí)下線知識(shí)庫(kù)自媒體平臺(tái)微博知乎簡(jiǎn)書博客園合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到特色項(xiàng)目中文文檔和教程與機(jī)器學(xué)習(xí)實(shí)用指南人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)科學(xué)比賽系列項(xiàng)目實(shí)戰(zhàn)教程文檔代碼視頻數(shù)據(jù)科學(xué)比賽收集平臺(tái),,劍指,經(jīng)典算法實(shí)現(xiàn)系列課本課本描述 【主頁(yè)】 apachecn.org 【Github】@ApacheCN 暫時(shí)下線: 社區(qū) 暫時(shí)下線: cwiki 知識(shí)庫(kù) 自媒體平臺(tái) ...

    array_huang 評(píng)論0 收藏0
  • ApacheCN 學(xué)習(xí)資源匯總 2019.3

    摘要:主頁(yè)暫時(shí)下線社區(qū)暫時(shí)下線知識(shí)庫(kù)自媒體平臺(tái)微博知乎簡(jiǎn)書博客園合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到特色項(xiàng)目中文文檔和教程與機(jī)器學(xué)習(xí)實(shí)用指南人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)科學(xué)比賽系列項(xiàng)目實(shí)戰(zhàn)教程文檔代碼視頻數(shù)據(jù)科學(xué)比賽收集平臺(tái),,劍指,經(jīng)典算法實(shí)現(xiàn)系列課本課本描述 【主頁(yè)】 apachecn.org 【Github】@ApacheCN 暫時(shí)下線: 社區(qū) 暫時(shí)下線: cwiki 知識(shí)庫(kù) 自媒體平臺(tái) ...

    Prasanta 評(píng)論0 收藏0
  • ApacheCN 編程/大數(shù)據(jù)/數(shù)據(jù)科學(xué)/人工智能學(xué)習(xí)資源 2019.4

    摘要:我們是一個(gè)大型開源社區(qū),旗下群共余人,數(shù)量超過(guò)個(gè),網(wǎng)站日超過(guò),擁有博客專家和簡(jiǎn)書程序員優(yōu)秀作者認(rèn)證。我們組織公益性的翻譯活動(dòng)學(xué)習(xí)活動(dòng)和比賽組隊(duì)活動(dòng),并和等國(guó)內(nèi)著名開源組織保持良好的合作關(guān)系。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 我們是一個(gè)...

    tomorrowwu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<