日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习 | 分类评估指标

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习 | 分类评估指标 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. 分類評估指標
    • 1.1 混淆矩陣 Confusion Matrix
      • 1.1.1 scikit-learn 混淆矩陣函數接口
    • 1.2 真陽性TP、假陽性FP、真陰性TN、假陰性FN
      • 1.2.1 衍生評估指標
    • 1.3 準確率 Accuracy
      • 1.3.1 準確率不適用的情形:信用卡欺詐檢測模型(不平衡數據)
    • 1.4 精確率 Precision
      • 1.4.1 精確率適用情形:垃圾郵件分類(高精度模型)
    • 1.5 召回率 Recall
      • 1.5.1 召回率適用情形:醫療模型
    • 1.6 F_1 Score
    • 1.7 F_beta Score
    • 1.8 ROC 曲線
      • 1.8.1 AUC
      • 1.8.2 PR 曲線
  • 2. Sklearn 計算分類器性能指標
  • 參考資料

相關文章:

機器學習 | 目錄

機器學習 | 回歸評估指標

1. 分類評估指標

評估指標(Evaluation Matrix):在建立模型后,我們想要知道它的性能如何,因此我們將通過一系列指標來判斷一個模型的好壞。

1.1 混淆矩陣 Confusion Matrix

混淆矩陣也稱誤差矩陣,是表示精度評價的一種標準格式,用nnnnnn列的矩陣形式來表示。在人工智能中,混淆矩陣(Confusion Matrix)是誤差可視化工具,特別用于監督學習;在無監督學習一般叫做匹配矩陣。

混淆矩陣

  • 每一列代表了預測類別,每一列的總數表示預測為該類別的數據的數目

  • 每一行代表了數據的真實歸屬類別,每一行的數據總數表示該類別的數據實例的數目。每一列中的數值表示真實數據被預測為該類的數目

  • 每一行之和表示該類別的真實樣本數量,每一列之和表示被預測為該類別的樣本數量

  • 如下圖,第一行第一列中的43表示有43個實際歸屬第一類的實例被預測為第一類,同理,第一行第二列的2表示有2個實際歸屬為第一類的實例被錯誤預測為第二類。

    1.1.1 scikit-learn 混淆矩陣函數接口

    skearn.metrics.confusion_matrix(y_true, # array, Gound true (correct) target valuesy_pred, # array, Estimated targets as returned by a classifierlabels=None, # array, List of labels to index the matrix.sample_weight=None # array-like of shape = [n_samples], Optional sample weights )

    參數設置:

    y_true : array, shape = [n_samples]

    Ground truth (correct) target values.

    y_pred : array, shape = [n_samples]

    Estimated targets as returned by a classifier.

    labels : array, shape = [n_classes], optional

    List of labels to index the matrix. This may be used to reorder or select a subset of labels. If none is given, those that appear at least once in y_true or y_pred are used in sorted order.

    sample_weight : array-like of shape = [n_samples], optional

    Sample weights.

    返回值:

    array, shape = [n_classes, n_classes]

    Confusion matrix

    在 scikit-learn 中, 計算混淆矩陣用來評估分類的準確度。

    按照定義, 混淆矩陣CCC中的元素Ci,jC_{i,j}Ci,j?為真實值的為組iii, 而預測為組jjj的觀測數(the number of observations)。

    對于二分類任務, 預測結果中:

    • 真陽數(True Positives, TP)為C1,1C_{1,1}C1,1?
    • 真陰數(True Negatives, TN)為C0,0C_{0,0}C0,0?
    • 假陽數(False Posiives, FN)為C1,0C_{1,0}C1,0?
    • 假陰數(False Negatives, FN)為C1,0C_{1,0}C1,0?

    如果 labels 為 None, scikit-learn 會把在出現在 y_true 或 y_pred 中的所有值添加到標記列表 labels 中, 并排好序。[1]

    sklearn.metrics.confusion_matrix 官方文檔

    1.2 真陽性TP、假陽性FP、真陰性TN、假陰性FN

    對于二分類任務:

    • 真陽性(True Positives, TP)為真實值為1,預測值為1,即正確預測出的正樣本個數
    • 真陰性(True Negatives, TN)為真實值為0,預測值為0,即正確預測出的負樣本個數
    • 假陽性(False Posiives, FP)為真實值為0,預測值為1,即錯誤預測出的正樣本個數(即數理統計的第一類錯誤)
    • 假陰性(False Negatives, FN)為真實值為1,預測值為0,即錯誤預測出的負樣本個數(即數理統計的第二類錯誤)

    概括地來說:

    • 當預測值為1時,體現為陽性;當預測值為0時,體現為陰性
    • 當預測值與真實值相符時,為真;當預測值與真實值相反時,為假

    陽性、陰性由來:這兩個概念是從醫學上引進的,一般來說,陽性(+)是表示疾病或體內生理的變化有一定的結果。相反,化驗單或報告單上的陰性(-),則多數基本上否定或排除某種病變的可能性。


    例1. 計算真陽性、假陽性、真陰性、假陰性:

    如圖所示,藍色為陽性,紅色為陰性;我們訓練的模型是一條直線來劃分這個區域,陽性區域在上,陰性區域在下。

    因此直線上方的點預測值為1,其中6個藍點的真實值為1,2個兩紅點的真實值為0,因此真陽性個數為6,假陽性個數為2;直線下方的點預測值為0,其中5個紅點真實值為0,1個藍點真實值為1,因此真陰性個數為5,假陰性個數為1。最終混淆矩陣如下所示:

    1.2.1 衍生評估指標

    由TP、FP、TN、FN四個指標,可以進一步衍生出其他三個常用的評價分類器性能的指標:

  • 準確率 Accuracy
  • (1)Accuracy=TP+TNTP+FP+TN+FNAccuracy=\frac{TP+TN}{TP+FP+TN+FN}\tag{1}Accuracy=TP+FP+TN+FNTP+TN?(1)

  • 精確率 Precision
  • (2)Precision=TPTP+FPPrecision=\frac{TP}{TP+FP}\tag{2}Precision=TP+FPTP?(2)

  • 召回率 Recall
  • (3)Recall=TPTP+FNRecall=\frac{TP}{TP+FN}\tag{3}Recall=TP+FNTP?(3)

    我們將會在后面對這些指標進行說明。

    這是所有的衍生指標:

    1.3 準確率 Accuracy

    準確率(Accuracy):分類器預測出的正樣本中,真實正樣本的比例,計算公式如下:

    (4)Accuracy=TP+TNTP+FP+TN+FNAccuracy=\frac{TP+TN}{TP+FP+TN+FN}\tag{4}Accuracy=TP+FP+TN+FNTP+TN?(4)


    例2. 假設一個垃圾郵件過濾器模型,在270封垃圾郵件中,正確分類100封,錯誤分類170封;在730封正常郵件中,正確分類700封,錯誤分類30封,計算該分類器的準確率:

    Accuracy=TP+TNTP+FP+TN+FN=100+700100+30+700+170=80%Accuracy=\frac{TP+TN}{TP+FP+TN+FN}=\frac{100+700}{100+30+700+170}=80\%Accuracy=TP+FP+TN+FNTP+TN?=100+30+700+170100+700?=80%

    1.3.1 準確率不適用的情形:信用卡欺詐檢測模型(不平衡數據)

    不平衡數據:一個類別比另一個類別出現次數多得多的數據集,對于不平衡數據,不適合使用準確流來評估模型。

    我們來看一個準確率不適用的情形,假設我們建立一個檢測信用卡欺詐行為的模型,數據中有284,335條良好交易記錄、472條欺詐性交易數據,假設我們的模型預測結果如下:

    這個模型的準確率為:

    Accuracy=TP+TNTP+FP+TN+FN=284335+0284335+472+0+0=99.83%Accuracy=\frac{TP+TN}{TP+FP+TN+FN}=\frac{284335+0}{284335+472+0+0}=99.83\%Accuracy=TP+FP+TN+FNTP+TN?=284335+472+0+0284335+0?=99.83%

    準確率很高,達到了99.83%99.83\%99.83%,但這并不說明這是一個好的模型,因為我們的模型是為了檢測出欺詐數據,但這個模型一條欺詐數據也沒有檢測出來。因此在這個情形下,我們需要選擇其他的評價指標來評價我們的模型。

    1.4 精確率 Precision

    精確率(Precision):又稱精度,體現分類器對整體的判斷能力,即正確預測的比例(在所有預測為陽性的點中,真陽性的比例),計算公式如下:

    (5)Precision=TPTP+FPPrecision=\frac{TP}{TP+FP}\tag{5}Precision=TP+FPTP?(5)

    1.4.1 精確率適用情形:垃圾郵件分類(高精度模型)

    在垃圾郵件分類模型中,檢測假陽性更重要:
    假陰性意味著垃圾郵件將發到你的收件箱中。有點不太方便,但是可接受。而 假陽性意味著漏掉了重要的郵件,這是需要避免的。

    例3. 以下面的圖為例,
    精確率為100100+30=76.9%\frac{100}{100+30}=76.9\%100+30100?=76.9%
    召回率為100100+170=37.0\frac{100}{100+170}=37.0%100+170100?=37.0
    因此即使召回率只有37.0%37.0\%37.0%,但是精確率有76.9%76.9\%76.9%,所以我們仍稱這是一個好的模型。

    1.5 召回率 Recall

    召回率(Recall):又稱靈敏度、真陽性率,為所有真實正樣本中,分類器中能找到多少,計算公式如下:

    (6)Recall=TPTP+FNRecall=\frac{TP}{TP+FN}\tag{6}Recall=TP+FNTP?(6)

    1.5.1 召回率適用情形:醫療模型

    在醫療模型中,檢測假陰性更重要:
    假陽性意味著讓健康人接受進一步檢查,即使這意味會帶來不便,但是可以接受。而假陰性以為著讓病人錯過治療,這是更需要避免的。

    例4. 以下面的圖為例,精確率為10001000+800=55.6%\frac{1000}{1000+800}=55.6\%1000+8001000?=55.6%,召回率為10001000+200=83.3\frac{1000}{1000+200}=83.3%1000+2001000?=83.3,因此即使精確率只有55.6%55.6\%55.6%,但是召回率有83.3%83.3\%83.3%,所以我們仍稱這是一個好的模型。

    1.6 F_1 Score

    F1F_1F1? 得分是統計學中用來衡量二分類模型精確度的一種指標。它同時兼顧了分類模型的精確率和召回率。

    F1F_1F1?得分是精確率和召回率的一種調和平均,當精確率或召回率其中一個較小時,F1F_1F1? 得分將會較小;只有當兩者都較大時,F1F_1F1? 得分才會接近1。

    (7)F1=2×Precision×RecallPrecision+RecallF_1 = 2 \times \frac{Precision\times Recall}{Precision+Recall}\tag{7}F1?=2×Precision+RecallPrecision×Recall?(7)

    F1F_1F1? 得分的取值域為[0,1][0,1][0,1]

    1.7 F_beta Score

    FβF_\betaFβ?的物理意義就是將準確率和召回率這兩個分值合并為一個分值,在合并的過程中,召回率的權重是準確率的β\betaβ倍。F1F_1F1?分數認為召回率和準確率同等重要,F2F_2F2?分數認為召回率的重要程度是準確率的2倍,而F0.5F_{0.5}F0.5?分數認為召回率的重要程度是準確率的一半。

    (8)Fβ=(1+β2)Precision×Recallβ2×Precision+Recallβ∈[0,+∞)F_{\beta}=(1+\beta^2)\frac{Precision \times Recall} {\beta^2 \times Precision+Recall}\quad \beta\in[0,+\infty) \tag{8}Fβ?=(1+β2)β2×Precision+RecallPrecision×Recall?β[0,+)(8)

    FβF_\betaFβ? 得分的取值域為[0,1][0,1][0,1]

    • β=1\beta=1β=1時,即為 F1 得分:

      Fβ=1=(1+1)Precision×RecallPrecision+Recall=2×Precision×RecallPrecision+Recall=F1F_{\beta=1}=(1+1)\frac{Precision \times Recall} {Precision+Recall}= 2 \times \frac{Precision\times Recall}{Precision+Recall}=F_1Fβ=1?=(1+1)Precision+RecallPrecision×Recall?=2×Precision+RecallPrecision×Recall?=F1?

    • β=0\beta=0β=0時,即為精確度:

      Fβ=0=(1+0)Precision×Recall0×Precision+Recall=PrecisionF_{\beta=0}=(1+0)\frac{Precision \times Recall} {0\times Precision+Recall}=PrecisionFβ=0?=(1+0)0×Precision+RecallPrecision×Recall?=Precision

    • β=∞\beta=\inftyβ=時,即為召回率:

      Fβ=N=(1+N2)Precision×RecallN2×Precision+Recall=Precision×RecallN21+N2Precision+11+N2RecallF_{\beta=N}=(1+N^2)\frac{Precision \times Recall} {N^2\times Precision+Recall} =\frac{Precision \times Recall} {\frac{N^2}{1+N^2}Precision+\frac{1}{1+N^2}Recall}Fβ=N?=(1+N2)N2×Precision+RecallPrecision×Recall?=1+N2N2?Precision+1+N21?RecallPrecision×Recall?

      N→∞N \rightarrow \inftyN,有:

      lim?N→∞FN=Precision×Recall1×Precision+Recall=Recall\lim \limits_{N \to \infty}F_N = \frac{Precision \times Recall}{1 \times Precision+Recall} = RecallNlim?FN?=1×Precision+RecallPrecision×Recall?=Recall

    1.8 ROC 曲線

    ROC 曲線:接受者操作特征曲線(Receiver Operating Characterostoc Curve ),roc曲線上每個點反映著對同一信號刺激的感受性。[2]

    x 軸:FPR 假陽性率(誤診率)TPFP+TN\frac{TP}{FP+TN}FP+TNTP?

    y 軸:TPR 真陽性率(召回率、靈敏度) TPTP+FN\frac{TP}{TP+FN}TP+FNTP?

    一般認為,如果 ROC 曲線是光滑的,那么基本可以判斷沒有太大的過擬合,AUC 面積越大一般認為模型更好。

    ROC 曲線由來:ROC曲線,首先是由二戰中的電子工程師和雷達工程師發明的,用來偵測戰場上的敵軍載具(飛機、船艦),也就是信號檢測理論。之后很快就被引入了心理學來進行信號的知覺檢測。此后被引入機器學習領域,用來評判分類、檢測結果的好壞。因此,ROC曲線是非常重要和常見的統計分析方法。

    以疾病檢測為例,這是一個有監督的二分類模型,模型對每個樣本的預測結果為一個概率值,我們需要從中選取一個閾值來判斷健康與否。

    定好一個閾值之后,超過此閾值定義為不健康,低于此閾值定義為健康,就可以得出混淆矩陣。

    而如果在上述模型中我們沒有定好閾值,而是將模型預測結果從高到低排序,將每次概率值依次作為閾值,那么就可以得到多個混淆矩陣。對于每個混淆矩陣,我們計算兩個指標 TPR 和 FPR ,以 FPR 為 x 軸,TPR 為 y 軸畫圖,就得到了 ROC 曲線。

    1.8.1 AUC

  • AUC:(Area under Curve)
  • AUC 被定義為ROC曲線下的面積,取值范圍一般在0.5和1之間。使用AUC值作為評價標準是因為很多時候ROC曲線并不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。

  • AUC 的計算方法
  • 非參數法:(兩種方法實際證明是一致的)

    (1) 梯形法則:早期由于測試樣本有限,我們得到的AUC曲線呈階梯狀。曲線上的每個點向X軸做垂線,得到若干梯形,這些梯形面積之和也就是AUC 。

    (2) Mann-Whitney統計量: 統計正負樣本對中,有多少個組中的正樣本的概率大于負樣本的概率。這種估計隨著樣本規模的擴大而逐漸逼近真實值。

    參數法:

    (3) 主要適用于二項分布的數據,即正反樣本分布符合正態分布,可以通過均值和方差來計算。

  • 從AUC判斷分類器(預測模型)優劣的標準
  • (1) AUC = 1,是完美分類器,采用這個預測模型時,存在至少一個閾值能得出完美預測。絕大多數預測的場合,不存在完美分類器。

    (2) 0.5 < AUC < 1,優于隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。

    (3) AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。

    (4) AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優于隨機猜測。

    三種 AUC 值的實例:

  • 不同模型 AUC 的比較
  • 總的來說,AUC值越大,模型的分類效果越好,疾病檢測越準確;不過兩個模型AUC值相等并不代表模型效果相同,如下圖中有三條ROC曲線,A模型比B和C都要好:

    而下面兩幅圖中兩條ROC曲線相交于一點,AUC值幾乎一樣:當需要高Sensitivity(TPR)時,模型A比B好;當需要高Speciticity(TNR)時,模型B比A好。

    1.8.2 PR 曲線

  • PR 曲線:Precision Recall Curve,PR曲線和ROC曲線類似,ROC曲線是FPR和TPR的點連成的線,PR曲線是準確率和召回率的點連成的線。
  • x 軸:Recall(TPR,與 ROC 曲線的 y 軸相同)

    y 軸:Precision 精確率

  • ROC曲線與PR曲線的取舍
  • 相對來講ROC曲線會穩定很多,在正負樣本量都足夠的情況下,ROC曲線足夠反映模型的判斷能力。因此,對于同一模型,PRC和ROC曲線都可以說明一定的問題,而且二者有一定的相關性,如果想評測模型效果,也可以把兩條曲線都畫出來綜合評價。對于有監督的二分類問題,在正負樣本都足夠的情況下,可以直接用ROC曲線、AUC、KS評價模型效果。在確定閾值過程中,可以根據Precision、Recall或者F1來評價模型的分類效果。對于多分類問題,可以對每一類分別計算Precision、Recall和F1,綜合作為模型評價指標。

    在上圖中,(a)和?為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,?和(d)是將測試集中負樣本的數量增加到原來的10倍后,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。

    2. Sklearn 計算分類器性能指標

    sklearn.metrics 官方文檔

    from sklearn.metrics import accuracy_scorey_pred = [0, 2, 1, 3] y_true = [0, 1, 2, 3] accuracy_score(y_true, y_pred) 0.5
    • 分類報告,同時返回Precision、Recall、F1F_1F1? Score

      classification_report(y_true, y_pred[, …]) Build a text report showing the main classification metrics

    • 混淆矩陣 Confusion Matrix

      metrics.confusion_matrix(y_true, y_pred[, …]) Compute confusion matrix to evaluate the accuracy of a classification

    • 準確率 Accuracy

      metrics.accuracy_score(y_true, y_pred[, …]) Accuracy classification score.

    • 平均準確率 average accuracy (TPR+TNR)/2

      metrics.balanced_accuracy_score(y_true, y_pred) Compute the balanced accuracy

    • 精確率 Precision

      metrics.precision_score(y_true, y_pred[, …]) Compute the precision

    • 召回率 Recall

      metrics.recall_score(y_true, y_pred[, …]) Compute the recall

    • F1F_1F1? Score

      metrics.f1_score(y_true, y_pred[, labels, …]) Compute the F1 score, also known as balanced F-score or F-measure

    • FβF_\betaFβ? Score

      metrics.fbeta_score(y_true, y_pred, beta[, …]) Compute the F-beta score

    • ROC 曲線

      metrics.roc_curve(y_true, y_score[, …]) Compute Receiver operating characteristic (ROC)

    • AUC (梯型法)

      metrics.auc(x, y[, reorder]) Compute Area Under the Curve (AUC) using the trapezoidal rule

    • AUC (Mann-Whitney統計量法)

      metrics.roc_auc_score(y_true, y_score[, …]) Compute Area Under the Receiver Operating Characteristic Curve (ROC AUC) from prediction scores.

    • PR 曲線
      metrics.precision_recall_curve(y_true, …) Compute precision-recall pairs for different probability thresholds

    參考資料

    [1] klchang.混淆矩陣(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)[EB/OL].https://www.cnblogs.com/klchang/p/9608412.html, 2018-09-08.

    [2] dzl_ML.分類器性能指標之ROC曲線、AUC值[EB/OL].https://www.cnblogs.com/dlml/p/4403482.html, 2015-04-08.

    總結

    以上是生活随笔為你收集整理的机器学习 | 分类评估指标的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。