精度可以作為度量模型好壞的一個指標,它表示預測正確的樣本數佔所有樣本數的比例。
但是在實踐中,我們通常不僅對精確的預測感興趣,還希望將這些預測結果用於更大的決策過程
我們先看一下測量精度可能會怎麼誤導我們
⭐精度並不能很好地度量預測效能,因為我們所犯得錯誤並不包括我們感興趣的所有資訊:
例如:有一個自動化測試篩選癌症,如果測試結果為陰性,則認為該患者是健康的,若是陽性則需要進一步篩查。在這裡我們將陽性測試結果稱為正類,陰性結果稱為負類,
於是就有了以下兩種常見的錯誤型別:
第一類錯誤:假正例(錯誤的陽性預測,可能導致額外費用)
第二類錯誤:假反例(錯誤的陰性預測,可能使得病人無法及早發現病情,造成嚴重後果)
⭐不平衡資料集:一個類別比另一個類別出現次數多很多的資料集
下面將用到:
建立資料集
#建立一個不平衡資料集
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
```
'''