自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

快速比較多種機器學習模型實例

人工智能 機器學習
當從事機器學習項目時,所有數(shù)據(jù)科學家都必須面對的一個問題是:哪種機器學習模型架構(gòu)比較適合我的數(shù)據(jù)呢?

 介紹

當從事機器學習項目時,所有數(shù)據(jù)科學家都必須面對的一個問題是:哪種機器學習模型架構(gòu)比較適合我的數(shù)據(jù)呢?

[[326370]]

不幸的是,對于哪種模型比較好,還沒有明確的答案。當面對這種不確定性的時候,常用的方法是:實驗!

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

機器學習數(shù)據(jù)集

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

 

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

接下來,我們需要將數(shù)據(jù)拆分為訓練集和測試集。拆分比例為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ù)集上快速測試6種不同模型的擬合度。

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

為了更準確地表示每個模型的擬合度,實際上是需要調(diào)整默認參數(shù)的,但是,本文出于演示目的,我將使用每個模型的默認參數(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)建一個變量dfs,該變量用來保存通過對訓練集上應用5-fold交叉驗證創(chuàng)建的數(shù)據(jù)集。

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

測試集上的分類報告如下:

 

快速比較多種機器學習模型實例

 

評估結(jié)果

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

為了更好地估計每個模型的指標分布,我在30個樣本上運行了empirical bootstrapping。此外,我將關注兩個指標:性能指標和擬合時間指標。下面的Python代碼塊實現(xià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'

首先,讓我們繪制來自5-fold交叉驗證的性能指標。

 

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

 

快速比較多種機器學習模型實例

 

 

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

訓練時間怎么樣呢?

 

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

 

快速比較多種機器學習模型實例

 

 

隨機森林雖然相對于KNN、GNB和LogReg來說比較慢,但其性能僅次于KNN。如果我繼續(xù)細化模型,我可能會將大部分精力集中在隨機森林上,因為它的性能幾乎與XGBoost相同(它們的95%置信區(qū)間可能重疊),但訓練速度幾乎快了4倍!

如果您希望對這些模型進行更多的分析(例如,計算每個度量標準的置信區(qū)間),您將需要訪問每個度量標準的均值和標準差。

 

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

 

快速比較多種機器學習模型實例

 

 

 

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

 

快速比較多種機器學習模型實例

 

 

結(jié)論

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

責任編輯:華軒 來源: 今日頭條
相關推薦

2023-03-07 16:12:32

2017-07-11 16:19:50

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

2016-11-15 15:02:00

機器學習算法

2023-11-01 08:50:52

DjangoPython

2020-10-30 08:53:34

機器學習任務編排

2014-03-17 10:28:52

PythonJulia

2022-04-11 15:40:34

機器學習研究推理

2024-09-09 11:45:15

ONNX部署模型

2020-08-10 15:05:02

機器學習人工智能計算機

2022-06-20 07:16:25

機器學習模型Codex

2009-10-28 13:27:11

2017-08-25 14:05:01

機器學習算法模型

2016-08-31 06:55:45

機器學習標題誘餌

2022-07-14 10:33:20

XGBoost機器學習

2017-03-24 15:58:46

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

2017-07-13 10:12:58

機器學習

2022-03-28 09:00:00

SQL數(shù)據(jù)庫機器學習

2020-09-22 14:59:52

機器學習人工智能計算機

2022-09-06 08:00:00

機器學習金融數(shù)據(jù)科學

2022-05-18 16:24:36

PythonPyCaret機器學習
點贊
收藏

51CTO技術棧公眾號