分類模型的評估(三)

在前兩篇文章里(《分類模型的評估(一)》和《分類模型的評估(二)》),針對二分類問題,我們分別討論了

  • 評估某個給定分類結果的指標:查准率(Precision)、查全率(Recall)以及F-score
  • 綜合評估分類模型整體效果的指標:ROC曲線-AUC值

這篇文章將藉助一個具體的例子來討論上述指標的代碼實現(使用Python)

一、什麼是Python

Python是一門計算機編程語言,它在數據科學領域的應用極其廣泛,具體的江湖地位可用圖1來表示。

圖1

限於篇幅,Python的安裝和語法介紹在此就不展開了,有需要的同學可以參考這個網頁。

其實我在這裡單列一節出來講Python,主要是為了展示我畫的圖1。

二、數據集以及模型簡介

為了更具體地討論實現,我們使用美國個人收入的普查數據來搭建模型(源自美國加州大學歐文分校,點擊這裡下載)。數據中具體的變數以及說明如表1所示。

表1

需要被預測的年收入分類(label)是一個二元變數,因此使用邏輯回歸來解決這個二分類問題。另外為了建模方便,我們在這裡只使用數值型自變數。

另外本篇文章的完整代碼這裡

三、Precision,Recall以及F-score

針對一個給定的預測結果,Precision,Recall以及F-score的實現十分簡單,如下所示。其中參數「pred」是模型的預測結果、「label」是真實結果、beta是F-score的beta權重。

import numpy as npdef PrecisionRecallFscore(pred, label, beta=1): """ 計算預測結果的Precision, Recall以及Fscore """ bins = np.array([0, 0.5, 1]) tp, fp, fn, tn = np.histogram2d(label, pred, bins=bins)[0].flatten() precision = tp / (tp + fp) recall = tp / (tp + fn) fscore = (1 + beta ** 2) * precision * recall / (beta ** 2 * precision + recall) return precision, recall, fscore

由於邏輯回歸的直接預測結果是類別1的概率,即 hat{P}(y_i = 1) ,而最終預測結果與人為選擇的閾值 alpha 有關,具體的如公式(1)所示。

hat{y_i} = egin{cases}1, hat{P}(y_i = 1) > alpha \0, else end{cases}	ag{1}

那麼這三個指標隨著 alpha 的變動情況如圖2所示。圖中的結果與《分類模型的評估(一)》中的討論是一致的。

圖2

另外對於一個給定的閾值 alpha ,比如 alpha = 0.5 ,不同的 eta 會使得F-score有不同的側重點,如圖3所示。

圖3

四、ROC曲線和AUC值

對於邏輯回歸模型,ROC曲線和AUC值的實現代碼也很簡單,如下所示。其中參數「predProb」是預測的類別1的概率,參數「label」是真實結果。可以看到這份代碼不僅針對邏輯回歸,對其他評分模型也是適用的。

from sklearn import metricsdef AUC(predProb, label): """ 計算False positive rate, True positive rate和AUC """ # 得到False positive rate和True positive rate fpr, tpr, _ = metrics.roc_curve(label, predProb) # 得到AUC auc = metrics.auc(fpr, tpr) return fpr, tpr, auc

將模型結果表示出來就如圖4所示。

圖4

五、廣告時間

這篇文章的大部分內容參考自我的新書《精通數據科學:從線性回歸到深度學習》,歡迎大家購買。

另外歡迎大家觀看我的公開課,懇請大家批評與指正。

數據科學「內戰」:統計 vs. 機器學習?

www.chinahadoop.cn圖標
推薦閱讀:

一文概覽用於數據集增強的生成對抗網路架構
機器學習筆記005 | 更加接近現實情況的預測
機器學習基石筆記15-16:小結和雜談
機器學習基石筆記2:感知器學習演算法(PLA)

TAG:機器學習 | Python | 數據科學 |