sklearn計算精度とリコール率---accuracy_score、metrics.precision_score、metrics.recall_score


変換元:http://d0evi1.com/sklearn/model_evaluation/
accuracy_score 
** clf.score(X_test, y_test)     accuracy_score  (clf      )

accuracy_score関数は、正確に予測されたfraction(default)であれ、count(normalize=False)であれ、精度を計算します.
Multilabel分類では、関数はサブセットの精度を返します.サンプルの場合、実際のデータセットのlabelと厳密に一致する必要があり、セット全体の予測ラベルは1.0を返します.そうでない場合は0.0を返す.
予測値と真実値の精度は、nサンプルの計算式で次のようになります.
accuracy(y,ŷ )=1nsamples∑i=0nsamples−1l(ŷ i=yi)accuracy(y,y^)=1nsamples∑i=0nsamples−1l(y^i=yi)
1(x)は指示関数です.
>>> import numpy as np
>>> from sklearn.metrics import accuracy_score
>>> y_pred = [0, 2, 1, 3]
>>> y_true = [0, 1, 2, 3]
>>> accuracy_score(y_true, y_pred)
0.5
>>> accuracy_score(y_true, y_pred, normalize=False)
2

マルチラベルcaseの下で、二分類label:
>>> accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2)))
0.5

 
metrics.precision_score、metrics.recall_score
*正解率とリコール率の計算方法に注意してください.私が理解しているのとは少し違います.
二元分類では、「positive」および「negative」という用語は分類器の予測カテゴリ(expectation)を指し、「true」および「false」という用語は予測が正しいかどうかを指す(observationを観察するとも呼ばれる場合もある).
 
実績クラス(observation)
 
予測クラス(expectation)
TP(true positive)結果:Correct
FP(false postive)結果:Unexpected
 
FN(false negative)結果:Missing
TN(true negtive)結果:Correct
sklearn计算准确率和召回率----accuracy_score、metrics.precision_score、metrics.recall_score_第1张图片
ここでは、二元分類の例を示します.
>>> from sklearn import metrics
>>> y_pred = [0, 1, 0, 0]
>>> y_true = [0, 1, 0, 1]
>>> metrics.precision_score(y_true, y_pred)
1.0
>>> metrics.recall_score(y_true, y_pred)
0.5
>>> metrics.f1_score(y_true, y_pred)  
0.66...
>>> metrics.fbeta_score(y_true, y_pred, beta=0.5)  
0.83...
>>> metrics.fbeta_score(y_true, y_pred, beta=1)  
0.66...
>>> metrics.fbeta_score(y_true, y_pred, beta=2) 
0.55...
>>> metrics.precision_recall_fscore_support(y_true, y_pred, beta=0.5)  
(array([ 0.66...,  1.        ]), array([ 1. ,  0.5]), array([ 0.71...,  0.83...]), array([2, 2]...))


>>> import numpy as np
>>> from sklearn.metrics import precision_recall_curve
>>> from sklearn.metrics import average_precision_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> precision, recall, threshold = precision_recall_curve(y_true, y_scores)
>>> precision  
array([ 0.66...,  0.5       ,  1.        ,  1.        ])
>>> recall
array([ 1. ,  0.5,  0.5,  0. ])
>>> threshold
array([ 0.35,  0.4 ,  0.8 ])
>>> average_precision_score(y_true, y_scores)  
0.79...