sklearn計算精度とリコール率---accuracy_score、metrics.precision_score、metrics.recall_score
変換元:http://d0evi1.com/sklearn/model_evaluation/
accuracy_score
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)は指示関数です.
マルチラベルcaseの下で、二分類label:
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
ここでは、二元分類の例を示します.
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
ここでは、二元分類の例を示します.
>>> 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...