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

快速比較多種機(jī)器學(xué)習(xí)模型實(shí)例

人工智能 機(jī)器學(xué)習(xí)
當(dāng)從事機(jī)器學(xué)習(xí)項(xiàng)目時(shí),所有數(shù)據(jù)科學(xué)家都必須面對(duì)的一個(gè)問(wèn)題是:哪種機(jī)器學(xué)習(xí)模型架構(gòu)比較適合我的數(shù)據(jù)呢?

 介紹

當(dāng)從事機(jī)器學(xué)習(xí)項(xiàng)目時(shí),所有數(shù)據(jù)科學(xué)家都必須面對(duì)的一個(gè)問(wèn)題是:哪種機(jī)器學(xué)習(xí)模型架構(gòu)比較適合我的數(shù)據(jù)呢?

[[326370]]

不幸的是,對(duì)于哪種模型比較好,還沒(méi)有明確的答案。當(dāng)面對(duì)這種不確定性的時(shí)候,常用的方法是:實(shí)驗(yàn)!

在本文中,我將向您展示如何快速測(cè)試數(shù)據(jù)集上的多個(gè)模型,以找到可能提供優(yōu)質(zhì)性能的機(jī)器學(xué)習(xí)模型,從而使您能夠?qū)⒕性谀P偷奈⒄{(diào)和優(yōu)化上。

機(jī)器學(xué)習(xí)數(shù)據(jù)集

在開(kāi)始實(shí)驗(yàn)之前,我們需要一個(gè)數(shù)據(jù)集。我將假設(shè)我們的問(wèn)題是有監(jiān)督的二元分類(lèi)任務(wù)。讓我們從sklearn加載乳腺癌數(shù)據(jù)集開(kāi)始。

 

  1. from sklearn.datasets import load_breast_cancer 
  2. X, y = data = load_breast_cancer(return_X_y=True

接下來(lái),我們需要將數(shù)據(jù)拆分為訓(xùn)練集和測(cè)試集。拆分比例為75/25。

 

  1. from sklearn.model_selection import train_test_split 
  2. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=8675309) 

Python編碼

我們將在此數(shù)據(jù)集上快速測(cè)試6種不同模型的擬合度。

  1. 邏輯回歸
  2. 隨機(jī)森林
  3. K最近鄰居
  4. 支持向量機(jī)
  5. 高斯樸素貝葉斯
  6. XGBoost

為了更準(zhǔn)確地表示每個(gè)模型的擬合度,實(shí)際上是需要調(diào)整默認(rèn)參數(shù)的,但是,本文出于演示目的,我將使用每個(gè)模型的默認(rèn)參數(shù),這樣可以使總體思路更加清晰。

 

  1. from sklearn.linear_model import LogisticRegression 
  2. from sklearn.neighbors import KNeighborsClassifier 
  3. from sklearn.svm import SVC 
  4. from sklearn.ensemble import RandomForestClassifier 
  5. from sklearn.naive_bayes import GaussianNB 
  6. from xgboost import XGBClassifier 
  7. from sklearn import model_selection 
  8. from sklearn.utils import class_weight 
  9. from sklearn.metrics import classification_report 
  10. from sklearn.metrics import confusion_matrix 
  11. import numpy as np 
  12. import pandas as pd 
  13. def run_exps(X_train: pd.DataFrame , y_train: pd.DataFrame, X_test: pd.DataFrame, y_test: pd.DataFrame) -> pd.DataFrame: 
  14.     ''
  15.     Lightweight script to test many models and find winners 
  16. :param X_train: training split 
  17.     :param y_train: training target vector 
  18.     :param X_test: test split 
  19.     :param y_test: test target vector 
  20.     :return: DataFrame of predictions 
  21.     '''     
  22.     dfs = [] 
  23.     models = [ 
  24.           ('LogReg', LogisticRegression()),  
  25.           ('RF', RandomForestClassifier()), 
  26.           ('KNN', KNeighborsClassifier()), 
  27.           ('SVM', SVC()),  
  28.           ('GNB', GaussianNB()), 
  29.           ('XGB', XGBClassifier()) 
  30.         ] 
  31.     results = [] 
  32.     names = [] 
  33.     scoring = ['accuracy''precision_weighted''recall_weighted''f1_weighted''roc_auc'
  34.     target_names = ['malignant''benign'
  35.     for name, model in models: 
  36.         kfold = model_selection.KFold(n_splits=5, shuffle=True, random_state=90210) 
  37.         cv_results = model_selection.cross_validate(model, X_train, y_train, cv=kfold, scoring=scoring) 
  38.         clf = model.fit(X_train, y_train) 
  39.         y_pred = clf.predict(X_test) 
  40.         print(name
  41.         print(classification_report(y_test, y_pred, target_names=target_names)) 
  42.         results.append(cv_results) 
  43.         names.append(name
  44.         this_df = pd.DataFrame(cv_results) 
  45.         this_df['model'] = name 
  46.         dfs.append(this_df) 
  47.     final = pd.concat(dfs, ignore_index=True
  48.     return final 
  49. final=run_exps(X_train,y_train, X_test,  y_test ) 
  50. final 

在上面的Python代碼中有很多東西需要解釋。首先,我們創(chuàng)建一個(gè)變量dfs,該變量用來(lái)保存通過(guò)對(duì)訓(xùn)練集上應(yīng)用5-fold交叉驗(yàn)證創(chuàng)建的數(shù)據(jù)集。

接下來(lái),models保存在元組列表中,其中包含要測(cè)試的每個(gè)分類(lèi)器的名稱(chēng)和類(lèi)。在此之后,我們循環(huán)遍歷這個(gè)列表并運(yùn)行5-fold交叉驗(yàn)證。每次運(yùn)行的結(jié)果都記錄在我們附加到dfs列表的pandas dataframe中。必須注意,這里指標(biāo)是兩個(gè)類(lèi)的加權(quán)平均指標(biāo)。

測(cè)試集上的分類(lèi)報(bào)告如下:

 

快速比較多種機(jī)器學(xué)習(xí)模型實(shí)例

 

評(píng)估結(jié)果

我們將分析從run_exps()腳本返回的final(dataframe)中的數(shù)據(jù)。

為了更好地估計(jì)每個(gè)模型的指標(biāo)分布,我在30個(gè)樣本上運(yùn)行了empirical bootstrapping。此外,我將關(guān)注兩個(gè)指標(biāo):性能指標(biāo)和擬合時(shí)間指標(biāo)。下面的Python代碼塊實(shí)現(xiàn)了這一點(diǎn)。

 

  1. bootstraps = [] 
  2. for model in list(set(final.model.values)): 
  3.     model_df = final.loc[final.model == model] 
  4.     bootstrap = model_df.sample(n=30, replace=True
  5.     bootstraps.append(bootstrap) 
  6.          
  7. bootstrap_df = pd.concat(bootstraps, ignore_index=True
  8. results_long = pd.melt(bootstrap_df,id_vars=['model'],var_name='metrics', value_name='values'
  9. time_metrics = ['fit_time','score_time'] # fit time metrics 
  10. ## PERFORMANCE METRICS 
  11. results_long_nofit = results_long.loc[~results_long['metrics'].isin(time_metrics)] # get df without fit data 
  12. results_long_nofit = results_long_nofit.sort_values(by='values'
  13. ## TIME METRICS 
  14. results_long_fit = results_long.loc[results_long['metrics'].isin(time_metrics)] # df with fit data 
  15. results_long_fit = results_long_fit.sort_values(by='values'

首先,讓我們繪制來(lái)自5-fold交叉驗(yàn)證的性能指標(biāo)。

 

  1. import matplotlib.pyplot as plt 
  2. import seaborn as sns 
  3. plt.figure(figsize=(20, 12)) 
  4. sns.set(font_scale=2.5) 
  5. g = sns.boxplot(x="model", y="values", hue="metrics", data=results_long_nofit, palette="Set3"
  6. plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) 
  7. plt.title('Comparison of Model by Classification Metric'
  8. #plt.savefig('./benchmark_models_performance.png',dpi=300) 
  9. plt.show() 

 

快速比較多種機(jī)器學(xué)習(xí)模型實(shí)例

 

 

很明顯,支持向量機(jī)在所有指標(biāo)上對(duì)我們的數(shù)據(jù)的擬合度都很差,而集成決策樹(shù)模型(Random Forest和XGBoost)對(duì)數(shù)據(jù)的擬合非常好。

訓(xùn)練時(shí)間怎么樣呢?

 

  1. plt.figure(figsize=(20, 12)) 
  2. sns.set(font_scale=2.5) 
  3. g = sns.boxplot(x="model", y="values", hue="metrics", data=results_long_fit, palette="Set3"
  4. plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) 
  5. plt.title('Comparison of Model by Fit and Score Time'
  6. plt.show() 

 

快速比較多種機(jī)器學(xué)習(xí)模型實(shí)例

 

 

隨機(jī)森林雖然相對(duì)于KNN、GNB和LogReg來(lái)說(shuō)比較慢,但其性能僅次于KNN。如果我繼續(xù)細(xì)化模型,我可能會(huì)將大部分精力集中在隨機(jī)森林上,因?yàn)樗男阅軒缀跖cXGBoost相同(它們的95%置信區(qū)間可能重疊),但訓(xùn)練速度幾乎快了4倍!

如果您希望對(duì)這些模型進(jìn)行更多的分析(例如,計(jì)算每個(gè)度量標(biāo)準(zhǔn)的置信區(qū)間),您將需要訪問(wèn)每個(gè)度量標(biāo)準(zhǔn)的均值和標(biāo)準(zhǔn)差。

 

  1. metrics = list(set(results_long_nofit.metrics.values)) 
  2. bootstrap_df.groupby(['model'])[metrics].agg([np.std, np.mean]) 

 

快速比較多種機(jī)器學(xué)習(xí)模型實(shí)例

 

 

 

  1. time_metrics = list(set(results_long_fit.metrics.values)) 
  2. bootstrap_df.groupby(['model'])[time_metrics].agg([np.std, np.mean]) 

 

快速比較多種機(jī)器學(xué)習(xí)模型實(shí)例

 

 

結(jié)論

上述分析只考慮了平均精度、召回率等。在實(shí)際問(wèn)題中,您不太可能關(guān)心類(lèi)之間的平均精度,相反,您可能會(huì)特別關(guān)注某個(gè)類(lèi)的精度!此外,必須調(diào)整每個(gè)機(jī)器學(xué)習(xí)模型的超參數(shù),以真正評(píng)估它們與數(shù)據(jù)的擬合程度。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2023-03-07 16:12:32

2017-07-11 16:19:50

大數(shù)據(jù)Kafka消息隊(duì)列

2016-11-15 15:02:00

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

2023-11-01 08:50:52

DjangoPython

2020-10-30 08:53:34

機(jī)器學(xué)習(xí)任務(wù)編排

2014-03-17 10:28:52

PythonJulia

2022-04-11 15:40:34

機(jī)器學(xué)習(xí)研究推理

2022-06-20 07:16:25

機(jī)器學(xué)習(xí)模型Codex

2020-08-10 15:05:02

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

2024-09-09 11:45:15

ONNX部署模型

2017-08-25 14:05:01

機(jī)器學(xué)習(xí)算法模型

2009-10-28 13:27:11

2016-08-31 06:55:45

機(jī)器學(xué)習(xí)標(biāo)題誘餌

2020-09-22 14:59:52

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

2017-07-13 10:12:58

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

2017-03-24 15:58:46

互聯(lián)網(wǎng)

2022-09-06 08:00:00

機(jī)器學(xué)習(xí)金融數(shù)據(jù)科學(xué)

2022-03-28 09:00:00

SQL數(shù)據(jù)庫(kù)機(jī)器學(xué)習(xí)

2022-07-14 10:33:20

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

2022-05-18 16:24:36

PythonPyCaret機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

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