二元分類效果評估方法


二元分類的效果評估方法有很多,常見的包括預測模型中使用的准確率(accuracy),精確率(precision)和召回率(recall)三項指標,以及綜合評價指標(F1 measure), ROC AU值(Receiver Operating Characteristic ROC,Area Under Curve,AUC)。這些指標評價的樣本分類是真陽性(true positives),真陰性(true negatives),假陽性(false positives),假陰性(false negatives)。陽性和陰性指分類,真和假指預測的正確與否。在我們的垃圾短信分類里,真陽性是指分類器將一個垃圾短信分辨為spam類。真陰性是指分類器將一個正常短信分辨為ham類。假陽性是指分類器將一個正常短信分辨為spam類。假陰性是指分類器將一個垃圾短信分辨為ham類。混淆矩陣(Confusion matrix),也稱列聯表分析(Contingencytable)可以用來描述真假與陰陽的關系。矩陣的行表示實際類型,列表示預測類型。

以垃圾郵件分類為例分析如下:

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.cross_validation import train_test_split
df = pd.read_csv('C:\Users\Besttone\Desktop\SMSSpamCollection', delimiter='\t', header=None)
X_train_raw, X_test_raw, y_train, y_test = train_test_split(df[1],df[0])
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(X_train_raw)
X_test = vectorizer.transform(X_test_raw)
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
predictions = classifier.predict(X_test)
for i, prediction in enumerate(predictions[-5:]):
print('預測類型:%s. 信息:%s' % (prediction, X_test_raw.iloc[i]))
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
y_test = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
y_pred = [0, 1, 0, 0, 0, 0, 0, 1, 1, 1]
confusion_matrix = confusion_matrix(y_test, y_pred)
print(confusion_matrix)
plt.matshow(confusion_matrix)
plt.title('混淆矩陣',fontproperties=font)
plt.colorbar()
plt.ylabel('實際類型',fontproperties=font)
plt.xlabel('預測類型',fontproperties=font)
plt.show()

結果如圖

准確率
准確率是分類器預測正確性的評估指標。scikit-learn提供了accuracy_score來計算:

from sklearn.metrics import accuracy_score
y_pred, y_true = [0, 1, 1, 0], [1, 1, 1, 1]
print(accuracy_score(y_true, y_pred))

結果:0.5

LogisticRegression.score()用來計算模型預測的准確率:

import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.cross_validation import train_test_split, cross_val_score
df = pd.read_csv('mlslpic/sms.csv')
X_train_raw, X_test_raw, y_train, y_test = train_test_split(df['message']
, df['label'])
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(X_train_raw)
X_test = vectorizer.transform(X_test_raw)
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
scores = cross_val_score(classifier, X_train, y_train, cv=5)
print('准確率:',np.mean(scores), scores)

准確率: 0.958373205742 [ 0.96291866 0.95334928 0.95813397 0.96172249 0.95574163]

准確率是分
類器預測正確性的比例,但是並不能分辨出假陽性錯誤和假陰性錯誤。在有些問題里面,比如腫瘤預測問題中,假陰性與假陽性要嚴重得多,其他的問題里可能相反。另外,有時准確率並非一個有效的衡量指標,如果分類的比例在樣本中嚴重失調。比如,分類器預測信用卡交易是否為虛假交易時,假陰性比假陽性更敏感。為了提高客戶滿意度,信用卡部門更傾向於對合法的交易進行風險檢查,往往會忽略虛假交易。因為絕大部分交易都是合法的,這里准確率不是一個有效的衡量指標。經常預測出虛假交易的分類器可能有很高的准確率,但是實際情況可能並非如此。因此,分類器的預測效果還需要另外兩個指標:精確率和召回率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM