2017-09-15 12 views
3

tn, fp, fn, tp 및 대부분의 시간을 완벽하게 추출하기 위해 sklearn.metrics.confusion_matrix(y_actual, y_predict)을 사용하고 있습니다. sklearn.metrics.confusion_matrix()는 항상 TP, TN, FP, FN을 반환하도록 만드십니까?

from sklearn.metrics import confusion_matrix 

y_actual, y_predict = [1,1,1,1], [0,0,0,0] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel() 
>>> [0 0 4 0] # ok 

y_actual, y_predict = [1,1,1,1],[0,1,0,1] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel() 
>>> [0 0 2 2] # ok 

그러나, 경우에 따라서는 confusion_matrix()는 항상 그 정보를 반환하지 않습니다 아래와 같이 나는 ValueError를 얻을 것입니다.

from sklearn.metrics import confusion_matrix 

y_actual, y_predict = [0,0,0,0],[0,0,0,0] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel() 
>>> [4] # ValueError: not enough values to unpack (expected 4, got 1) 

y_actual, y_predict = [1,1,1,1],[1,1,1,1] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel() 
>>> [4] # ValueError: not enough values to unpack (expected 4, got 1) 

임시 해결 방법은 해당 정보를 추출하는 자체 기능을 작성하는 것입니다. confusion_matrix()에 항상 tn, fp, fn, tp 출력을 반환 할 수있는 방법이 있습니까?

감사

답변

5

이 문제는 사용자의 입력 행렬에 포함 된 수있는 고유 라벨의 수와 관련이있다. 두 번째 예제 블록에서는 혼동 행렬을 각각 하나 또는 하나의 클래스 (0 또는 1)로 (올바르게) 작성합니다.

두 클래스 중 하나가 예측되지 않을 때도 강제로 출력하려면 label 특성을 사용하십시오.

y_actual, y_predict = [0,0,0,0],[0,0,0,0] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict, labels=[0,1]).ravel() 
>> array([[4, 0], 
      [0, 0]]) 
+0

와우 완벽! 고맙습니다. –

+0

도움이 되니 기쁩니다! 문제가 해결 되었다면 답을 받아 들여야합니다! – kdd