機(jī)器學(xué)習(xí)-分類評(píng)估方法-精確率-召回率-ROC曲線-AUC指標(biāo)

一、分類評(píng)估的方法:

1、精確率
2、召回率

二、概念介紹:

1、混淆矩陣:
在分類任務(wù)下,預(yù)測(cè)結(jié)果(Predicted Condition)與正確標(biāo)記(True Condition)之間存在四種不同的組合,構(gòu)成混淆矩陣(適用于多分類):

混淆矩陣.png

注意:其中P代表正例,N代表反例。

2、準(zhǔn)確率:(TP + TN) / (TP + FN + FP + TN)。

3、精確率:預(yù)測(cè)結(jié)果為正例樣本中真是為正例的比例。

  • 精確率公式:(TP) / (TP + FP)
精確率.png

4、召回率:真實(shí)為正例的樣本中預(yù)測(cè)結(jié)果為正例的比例(查的全,對(duì)正樣本的區(qū)分能力)。

  • 召回率公式:(TP) / (TP + FN)
召回率.png

5、F1-score:反映模型的穩(wěn)健性。

F1-score公式: F1 = 2TP / (2TP + FN + FP) = (2 * Precision * Recall) / (Precision + Recall)

三、分類評(píng)估報(bào)告api:

1、sklearn.metrics import classification_report(y_true, y_pred, labels=[], target_names=None)

  • y_true: 真實(shí)目標(biāo)值
  • y_pred:評(píng)估器預(yù)測(cè)目標(biāo)值
  • labels:指定類別對(duì)應(yīng)的數(shù)字
  • target_names: 目標(biāo)類別名稱
  • return: 每個(gè)類別精確率與召回率

2、分類評(píng)估報(bào)告代碼演示??:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, roc_auc_score

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

"""
腫瘤分類分析
"""

# 1、獲取數(shù)據(jù)
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
         'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
         'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv(
    "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
    names=names)

print(data.head())

# 2、基本數(shù)據(jù)處理
# 2.1、缺失值處理
data = data.replace(to_replace="?", value=np.nan)
data = data.dropna()

# 2.2 確定特征值,目標(biāo)值
x = data.iloc[:, 1:10]
print("x.head():", x.head())
y = data["Class"]
print("y.head():\n", y.head())

# 2.3 分割數(shù)據(jù)
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22, test_size=0.2)

# 3.特征工程(標(biāo)準(zhǔn)化)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)

# 4.機(jī)器學(xué)習(xí) - 模型訓(xùn)練(邏輯回歸)
estimator = LogisticRegression()
estimator.fit(x_train, y_train)

# 5.模型評(píng)估
# 5.1 準(zhǔn)確率
ret = estimator.score(x_test, y_test)
print("準(zhǔn)確率為:\n", ret)

# 5.2 預(yù)測(cè)值
y_pre = estimator.predict(x_test)
print("模型預(yù)測(cè)值為:\n", y_pre)

# 5.3 精確率、召回率指標(biāo)評(píng)價(jià)
ret = classification_report(y_test, y_pre, labels=(2, 4), target_names=("良性", "惡性"))
print("ret:\n", ret)

3、分類評(píng)估代碼運(yùn)行結(jié)果:

分類評(píng)估代碼運(yùn)行結(jié)果.png

4、從運(yùn)行結(jié)果來看,recall召回率假如100個(gè)樣本有99個(gè)樣本分類正確,只有1個(gè)分類錯(cuò)誤,但是假設(shè)這樣一個(gè)情況:如果99個(gè)樣本癌癥,1個(gè)樣本費(fèi)癌癥,不管怎樣我全都預(yù)測(cè)正例(默認(rèn)癌癥為正例),準(zhǔn)確率就為99%,但是這樣效果并不好,因?yàn)檫@樣的樣本是不均衡的,那么如何衡量樣本不均衡情況下的評(píng)估呢?這就需要參考ROC曲線AUC指標(biāo)了。

四、ROC曲線與AUC指標(biāo):

1、TPR與FPR:

  • TPR = TP / (TP + FN) : 所有真實(shí)類別為1的樣本中,預(yù)測(cè)類別為1的比例。
  • FPR = FP / (FP + TN) : 所有真實(shí)類別為0的樣本中,預(yù)測(cè)類別為1的比例。

2、ROC曲線:

  • ROC曲線的橫軸就是FPRate,縱軸就是TPRate,當(dāng)二者相等時(shí),表示的意義是:對(duì)于不論真實(shí)類別是1還是0的樣本,分類器預(yù)測(cè)為1的概率是相等的,此時(shí)ACU為0.5,參考圖中紅色虛線部分。
ROC曲線.png

3、AUC指標(biāo):

  • AUC的概率意義是隨機(jī)取一對(duì)正負(fù)樣本,正樣本得分大于負(fù)樣本得分的概率。
  • AUC的范圍在[0, 1]之間,并且越接近1越好,越接近0.5屬于亂猜。
  • ACU=1,完美分類器**,采用這個(gè)預(yù)測(cè)模型時(shí),不管設(shè)定什么閾值都能得出完美預(yù)測(cè)。絕大多數(shù)預(yù)測(cè)的場(chǎng)合,不存在完美分類器。
  • 0.5<AUC<1,優(yōu)于隨機(jī)猜測(cè),這個(gè)分類器(模型)妥善設(shè)定閾值的話,能有預(yù)測(cè)價(jià)值。

4、AUC計(jì)算API:from sklearn.metrics import roc_auc_score

  • sklearn.metrics.roc_auc_score(y_true, y_score)
  • 計(jì)算ROC曲線面積,即AUC值
  • y_true : 每個(gè)樣本的真實(shí)類別,必須為0(反例),1(正例)標(biāo)記
  • y_score : 預(yù)測(cè)得分,可以是正類的估計(jì)概率、置信值或者分類器方法的返回值。
  • AUC只能用來評(píng)價(jià)二分類
  • AUC非常適合評(píng)價(jià)樣本不平衡中的分類器性能

5、roc-auc代碼演示??:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, roc_auc_score

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

"""
腫瘤分類分析
"""

# 1、獲取數(shù)據(jù)
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
         'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
         'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv(
    "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
    names=names)

print(data.head())

# 2、基本數(shù)據(jù)處理
# 2.1、缺失值處理
data = data.replace(to_replace="?", value=np.nan)
data = data.dropna()

# 2.2 確定特征值,目標(biāo)值
x = data.iloc[:, 1:10]
print("x.head():", x.head())
y = data["Class"]
print("y.head():\n", y.head())

# 2.3 分割數(shù)據(jù)
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22, test_size=0.2)

# 3.特征工程(標(biāo)準(zhǔn)化)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)

# 4.機(jī)器學(xué)習(xí) - 模型訓(xùn)練(邏輯回歸)
estimator = LogisticRegression()
estimator.fit(x_train, y_train)

# 5.模型評(píng)估
# 5.1 準(zhǔn)確率
ret = estimator.score(x_test, y_test)
print("準(zhǔn)確率為:\n", ret)

# 5.2 預(yù)測(cè)值
y_pre = estimator.predict(x_test)
print("模型預(yù)測(cè)值為:\n", y_pre)

# 5.3 精確率、召回率指標(biāo)評(píng)價(jià)
ret = classification_report(y_test, y_pre, labels=(2, 4), target_names=("良性", "惡性"))
print("ret:\n", ret)

# # 5.4 auc指標(biāo)計(jì)算
y_test = np.where(y_test > 3, 1, 0)

roc_auc_score = roc_auc_score(y_test, y_pre)
print("roc_auc_score:\n", roc_auc_score)

6、運(yùn)行結(jié)果:

roc-auc-score.png

7、ROC曲線的繪制:

  • (1) 構(gòu)建模型,把模型的概率值從大到小進(jìn)行排序。
  • (2) 從概率最大的點(diǎn)開始取值,一直進(jìn)行TPR和FPR的計(jì)算,然后構(gòu)建整體模型,得到結(jié)果。
  • (3) 其實(shí)就是在求解積分(面積)
    繪制ROC曲線的意義就是不斷的把可能分錯(cuò)的情況扣除掉,從概率最高往下取的點(diǎn),每有一個(gè)是負(fù)樣本,就會(huì)導(dǎo)致分錯(cuò)排在它下面的所有正樣本,所以要把它下面的正樣本數(shù)扣除掉(1-TPR,身下的正樣本的比例)。ROC曲線繪制出來了,AUC就定了,分對(duì)的概率也就能求出來了。

五、總結(jié):

1、 混淆矩陣:
  • 真正例(TP)
  • 偽反例(FN)
  • 偽正例(FP)
  • 真反例(TN)
2、精確率(Precision)與召回率(Recall):
  • 準(zhǔn)確率(對(duì)不對(duì)) :(TP + TN) / (TP + TN + FN + FP)
  • 精確率(查的準(zhǔn)不準(zhǔn)) : (TP)/ (TP + FN)
  • 召回率(查的全不全) : (TP) / (TP + FN)
  • F1-score :反映模型的穩(wěn)健性
3、roc曲線和auc指標(biāo):
  • roc曲線:通過TPR和FPR來進(jìn)行圖形繪制,繪制之后,形成一個(gè)指標(biāo)auc
  • auc:
    (1)越接近1,效果越好
    (2)越接近0,效果越差
    (3)越接近0.5,效果就是胡說
    注意:這個(gè)指標(biāo)主要用于評(píng)價(jià)不均衡的二分類問題。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容