評估指標與評分(上):二分類指標

2022-05-28 18:00:37

精度可以作為度量模型好壞的一個指標,它表示預測正確的樣本數佔所有樣本數的比例。

但是在實踐中,我們通常不僅對精確的預測感興趣,還希望將這些預測結果用於更大的決策過程

1、 二分類指標

我們先看一下測量精度可能會怎麼誤導我們

1.1錯誤型別

⭐精度並不能很好地度量預測效能,因為我們所犯得錯誤並不包括我們感興趣的所有資訊:

例如:有一個自動化測試篩選癌症,如果測試結果為陰性,則認為該患者是健康的,若是陽性則需要進一步篩查。在這裡我們將陽性測試結果稱為正類,陰性結果稱為負類,

於是就有了以下兩種常見的錯誤型別

第一類錯誤:假正例(錯誤的陽性預測,可能導致額外費用)
第二類錯誤:假反例(錯誤的陰性預測,可能使得病人無法及早發現病情,造成嚴重後果)

1.2不平衡資料集

不平衡資料集:一個類別比另一個類別出現次數多很多的資料集

  • 精度無法幫助我們區分:不變的‘未點選’模型潛在的優秀模型

下面將用到:

  • 兩個虛擬分類器:dummy_majority(始終預測多數類),dummy(產生隨機輸出)
  • 兩個常用的分類模型:LogisticRegression,DecissionTree

建立資料集

  #建立一個不平衡資料集

  from sklearn.datasets import load_digits
  import numpy as np

  digits = load_digits()
  y = digits.target==9

  print("類別:{}".format(np.bincount(y)))

  '''
  `類別:[1617  180]`
  '''

建立四個模型

  from sklearn.dummy import DummyClassifier
  from sklearn.model_selection import train_test_split
  from sklearn.linear_model import LogisticRegression
  from sklearn.tree import DecisionTreeClassifier


  X_train,X_test,y_train,y_test = train_test_split(digits.data,y,random_state=0)

  #構建始終預測大多數的模型



  #始終預測多數類
  dummy_majority = DummyClassifier(strategy='most_frequent').fit(X_train,y_train)
  pred_most_frequent = dummy_majority.predict(X_test)

  print("始終預測多數類 Test score:{:.2f}".format(dummy_majority.score(X_test,y_test)))

  #產生隨機輸出
  dummy = DummyClassifier().fit(X_train,y_train)
  pred_dummy = dummy.predict(X_test)
  print("產生隨機輸出 Test score:{:.2f}".format(dummy.score(X_test,y_test)))


  #決策樹
  tree = DecisionTreeClassifier(max_depth=2).fit(X_train,y_train)
  pred_tree = tree.predict(X_test)
  print("決策樹 Test score:{:.2f}".format(tree.score(X_test,y_test)))

  #線性迴歸

  lrg = LogisticRegression(C=0.1).fit(X_train,y_train)
  pred_logreg = lrg.predict(X_test)
  print("線性迴歸 Test score:{:.2f}".format(lrg.score(X_test,y_test)))


  '''
  ```
  始終預測多數類 Test score:0.90
  產生隨機輸出 Test score:0.82
  決策樹 Test score:0.92
  線性迴歸 Test score:0.98
  ```
  '''