成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

 介紹

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

[[326370]]

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

在本文中,我將向您展示如何快速測試數據集上的多個模型,以找到可能提供優(yōu)質性能的機器學習模型,從而使您能夠將精力集中在模型的微調和優(yōu)化上。

機器學習數據集

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

 

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

接下來,我們需要將數據拆分為訓練集和測試集。拆分比例為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編碼

我們將在此數據集上快速測試6種不同模型的擬合度。

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

為了更準確地表示每個模型的擬合度,實際上是需要調整默認參數的,但是,本文出于演示目的,我將使用每個模型的默認參數,這樣可以使總體思路更加清晰。

 

  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)建的數據集。

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

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

 

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

 

評估結果

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

為了更好地估計每個模型的指標分布,我在30個樣本上運行了empirical bootstrapping。此外,我將關注兩個指標:性能指標和擬合時間指標。下面的Python代碼塊實現了這一點。

 

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

 

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

 

 

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

訓練時間怎么樣呢?

 

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

 

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

 

 

結論

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

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

2023-03-07 16:12:32

2017-07-11 16:19:50

大數據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

機器學習研究推理

2022-06-20 07:16:25

機器學習模型Codex

2020-08-10 15:05:02

機器學習人工智能計算機

2024-09-09 11:45:15

ONNX部署模型

2009-10-28 13:27:11

2017-08-25 14:05:01

機器學習算法模型

2022-05-18 16:24:36

PythonPyCaret機器學習

2020-09-22 14:59:52

機器學習人工智能計算機

2017-07-13 10:12:58

機器學習

2022-07-14 10:33:20

XGBoost機器學習

2022-09-06 08:00:00

機器學習金融數據科學

2017-03-24 15:58:46

互聯網

2022-03-28 09:00:00

SQL數據庫機器學習

2016-08-31 06:55:45

機器學習標題誘餌
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人射人人 | 欧美日韩电影一区二区 | 日韩中文一区 | 亚洲一区不卡 | 精品国产一区一区二区三亚瑟 | 99婷婷| 欧美亚洲视频在线观看 | 久久综合狠狠综合久久综合88 | 午夜视频免费网站 | 国产一二三视频在线观看 | 黄色在线观看国产 | 天天操天天天 | 日本高清aⅴ毛片免费 | 国产乱码高清区二区三区在线 | 国产精品一区二区三区久久久 | 久www| 亚洲二区视频 | 国产免费一区二区三区网站免费 | 毛片网站在线观看视频 | 国产精品视频999 | 国产精品福利一区二区三区 | 久久久91精品国产一区二区三区 | 国产区精品 | 91麻豆精品国产91久久久久久 | 欧美在线免费 | 成人免费三级电影 | 亚洲精品视频观看 | 日韩精品在线网站 | 在线视频一区二区 | 亚洲91视频 | 午夜免费视频观看 | 成人精品一区二区三区 | 亚洲一区二区三区四区五区中文 | 伊人焦久影院 | 欧美日本久久 | 国产精品有限公司 | 亚洲欧美国产精品久久 | 一区精品国产欧美在线 | 亚洲中午字幕 | 欧美高清视频一区 | 久久久久国产精品一区二区 |