最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python如何將多個模型的ROC曲線繪制在一張圖(含圖例)

 更新時間:2022年02月24日 10:13:05   作者:柳奈奈  
這篇文章主要給大家介紹了關于python如何將多個模型的ROC曲線繪制在一張圖的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

多條ROC曲線繪制函數

 def multi_models_roc(names, sampling_methods, colors, X_test, y_test, save=True, dpin=100):
        """
        將多個機器模型的roc圖輸出到一張圖上
        
        Args:
            names: list, 多個模型的名稱
            sampling_methods: list, 多個模型的實例化對象
            save: 選擇是否將結果保存(默認為png格式)
            
        Returns:
            返回圖片對象plt
        """
        plt.figure(figsize=(20, 20), dpi=dpin)

        for (name, method, colorname) in zip(names, sampling_methods, colors):
            
            method.fit(X_train, y_train)
            y_test_preds = method.predict(X_test)
            y_test_predprob = method.predict_proba(X_test)[:,1]
            fpr, tpr, thresholds = roc_curve(y_test, y_test_predprob, pos_label=1)
            
            plt.plot(fpr, tpr, lw=5, label='{} (AUC={:.3f})'.format(name, auc(fpr, tpr)),color = colorname)
            plt.plot([0, 1], [0, 1], '--', lw=5, color = 'grey')
            plt.axis('square')
            plt.xlim([0, 1])
            plt.ylim([0, 1])
            plt.xlabel('False Positive Rate',fontsize=20)
            plt.ylabel('True Positive Rate',fontsize=20)
            plt.title('ROC Curve',fontsize=25)
            plt.legend(loc='lower right',fontsize=20)

        if save:
            plt.savefig('multi_models_roc.png')
            
        return plt

繪制效果

調用格式與方法

調用方法時,需要把模型本身(如clf_xx)、模型名字(如GBDT)和對應顏色(如crimson)按照順序、以列表形式傳入函數作為參數。

names = ['Logistic Regression',
         'Random Forest',
         'XGBoost',
         'AdaBoost',
         'GBDT',
         'LGBM']

sampling_methods = [clf_lr,
                    clf_rf,
                    clf_xgb,
                    clf_adb,
                    clf_gbdt,
                    clf_lgbm
                   ]

colors = ['crimson',
          'orange',
          'gold',
          'mediumseagreen',
          'steelblue', 
          'mediumpurple'  
         ]

#ROC curves
train_roc_graph = multi_models_roc(names, sampling_methods, colors, X_train, y_train, save = True)
train_roc_graph.savefig('ROC_Train_all.png')

詳細解釋和說明

1.關鍵函數

(1)plt.figure(figsize=(20, 20), dpi=dpin)

在for循環(huán)外繪制圖片的大體框架。figsize控制圖片大小,dpin控制圖片的信息量(其實可以理解為清晰度?documentation的說明是The resolution of the figure in dots-per-inch)

(2)zip()

函數用于將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表。

(3)roc_curve()

fpr, tpr, thresholds = roc_curve(y_test, y_test_predprob, pos_label=1)

該函數的傳入參數為目標特征的真實值y_test和模型的預測值y_test_predprob。需要為pos_label賦值,指明正樣本的值。

該函數的返回值 fpr、tpr和thresholds 均為ndarray, 為對應每一個不同的閾值下計算出的不同的真陽性率和假陽性率。這些值,就對應著ROC圖中的各個點。

(4)auc()

 plt.plot(fpr, tpr, lw=5, label='{} (AUC={:.3f})'.format(name, auc(fpr, tpr)),color = colorname)

函數auc(),傳入參數為fpr和tpr,返回結果為模型auc值,即曲線下面積值。

以上代碼在使用fpr和tpr繪制ROC曲線的同時,也確定了標簽(圖例)的內容和格式。

2. 參數解釋

(1)sampling_methods

是包含多個模型名字的list。所有模型不需要fit過再傳入函數,只需要定義好即可。

clf = RandomForestClassifier(n_estimators = 100, max_depth=3, min_samples_split=0.2, random_state=0)

(2)X_test, y_test

X_test 和 y_test 兩個參數用于傳入函數后計算各個模型的預測值。

y_test_predprob = method.predict_proba(X_test)[:,1]
fpr, tpr, thresholds = roc_curve(y_test, y_test_predprob, pos_label=1)

如果需要繪制的是訓練集的ROC曲線,則可以在對應參數位置分別傳入X_trian和y_train即可。

(3)names 和 colors

這兩個參數均為字符串列表形式。注意,這兩個列表的值要和模型參數中的模型順序一一對應。

如有需要繪制更多的模型,只需要對應增加列表中的值即可。

需要注意的小小坑

1.同一張圖片的同一種方法只能調用一次!??!

plt.legend(loc='lower right')
plt.legend(fontsize=10)

如果像上圖中的我一樣,把同一張圖片plt的方法legend()調用兩次,那么下一個的方法中的參數就會將上一個的參數覆蓋!這種情況下,我就發(fā)現第一個方法賦值的location完全不起作用……

這個時候就需要將這個函數整合如下圖~(其實本來就是應該這么寫的,我也不知道為啥我腦子一抽寫了兩個,可能是ggplot給我的美好印象揮之不去吧)

plt.legend(loc='lower right',fontsize=10)

補充

根據小伙伴的評論提問,在這里進行一下解釋說明:

1.這個函數是適用于所有數據集的,只需要導入數據集后進行訓練集和測試集的劃分即可。(我在“調用格式與方法”部分調用函數使用的是X_train 和y_train,繪制出的則是不同模型在訓練集表現的ROC曲線)

劃分訓練集和測試集的代碼如下(以使用8:2劃分訓練集測試集為例)

# 8:2劃分訓練集測試集
X, y = df.drop(target,axis=1), df[target]
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8, random_state=0)

df:導入數據集

target:目標特征(y)

train_size:訓練集占比80%

random_state: 隨機數種子,不同隨機數種子劃分的訓練集和測試集會有不同。

總結

到此這篇關于python如何將多個模型的ROC曲線繪制在一張圖的文章就介紹到這了,更多相關python多模型的ROC曲線繪制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Python實現監(jiān)聽html點擊事件教程

    使用Python實現監(jiān)聽html點擊事件教程

    在Web開發(fā)中,經常需要在用戶與頁面交互時執(zhí)行一些操作,本文將介紹如何使用Python來監(jiān)聽HTML點擊事件,有需要的小伙伴可以跟隨小編一起了解下
    2024-04-04
  • python?subprocess.run()、subprocess.Popen()、subprocess.check_output()

    python?subprocess.run()、subprocess.Popen()、subprocess.check

    Python的subprocess模塊是用于創(chuàng)建和管理子進程的模塊,本文主要介紹了python?subprocess.run()、subprocess.Popen()、subprocess.check_output(),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Python實現常見的4種坐標互相轉換

    Python實現常見的4種坐標互相轉換

    主流被使用的地理坐標系并不統(tǒng)一,常用的有WGS84、GCJ02(火星坐標系)、BD09(百度坐標系)以及百度地圖中保存矢量信息的web墨卡托,本文利用Python編寫相關類以實現4種坐標系統(tǒng)之間的互相轉換,希望對大家有所幫助
    2023-02-02
  • python保存數據到本地文件的方法

    python保存數據到本地文件的方法

    今天小編就為大家分享一篇python保存數據到本地文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Pycharm+Flask零基礎項目搭建入門的實現

    Pycharm+Flask零基礎項目搭建入門的實現

    本文主要介紹了Pycharm+Flask零基礎項目搭建入門的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Python如何獲取HTTP請求的Response Body

    Python如何獲取HTTP請求的Response Body

    這篇文章主要介紹了在Python中如何獲取HTTP請求的響應體,包括使用內置的urllib庫、第三方庫requests以及一些高級用法,有需要的小伙伴可以了解下
    2024-11-11
  • 讓Python程序定時執(zhí)行的8種方法整理

    讓Python程序定時執(zhí)行的8種方法整理

    在日常工作中,我們常常會用到需要周期性執(zhí)行的任務,一種方式是采用?Linux?系統(tǒng)自帶的?crond?結合命令行實現,另外一種方式是直接使用Python。本文整理了一下?Python?定時任務的實現方式,希望對大家有所幫助
    2023-01-01
  • 一文帶你搞懂Python中的數據容器

    一文帶你搞懂Python中的數據容器

    這篇文章主要為大家詳細介紹了Python中數據容器的相關資料,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,感興趣的可以了解一下
    2022-11-11
  • python 對txt中每行內容進行批量替換的方法

    python 對txt中每行內容進行批量替換的方法

    今天小編就為大家分享一篇python 對txt中每行內容進行批量替換的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python 獲取一個值在某個區(qū)間的指定倍數的值方法

    python 獲取一個值在某個區(qū)間的指定倍數的值方法

    今天小編就為大家分享一篇python 獲取一個值在某個區(qū)間的指定倍數的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論

吴忠市| 镇巴县| 邵阳市| 高碑店市| 定西市| 渭南市| 大港区| 鹤庆县| 邢台市| 衢州市| 桂阳县| 两当县| 密云县| 虹口区| 桑植县| 西平县| 清镇市| 石渠县| 台前县| 东源县| 昭通市| 河池市| 耒阳市| 桓台县| 龙口市| 行唐县| 甘泉县| 广元市| 盖州市| 阿坝县| 南召县| 日土县| 金溪县| 通渭县| 正蓝旗| 滁州市| 平潭县| 松潘县| 囊谦县| 上高县| 富宁县|