Чтобы быть в безопасности, вы можете просто вычислить каждую ячейку вместо
использования sklearn.metrics.confusion_matrix()
, а затем перейдите оттуда:
# some fake data (assumes labels are boolean)
test_y = [True, True, False, False, True]
y_pred = [True, False, True, False, True]
idx_range = range(len(test_y))
tn = sum([not test_y[idx] and not y_pred[idx] for idx in idx_range])
fp = sum([not test_y[idx] and y_pred[idx] for idx in idx_range])
fn = sum([test_y[idx] and not y_pred[idx] for idx in idx_range])
tp = sum([test_y[idx] and y_pred[idx] for idx in idx_range])
# ... and then calculate the metrics
Если вы предпочитаете использовать pandas.factorize()
, вы также можете принудительно настроить отображение True
на 1
и False
на 0
, установив sort=True
:
test_y = [True, True, False, False, True]
y_pred = [True, False, True, False, True]
# pd.factorize() returns a tuple so get the data (0th elem)
test_y_factor = pd.factorize(test_y, sort=True)[0]
y_pred_factor = pd.factorize(y_pred, sort=True)[0]
# confirm that the translation happened properly:
[*zip(test_y, test_y_factor[0])]
##
## output:
## [(True, 1), (True, 1), (False, 0), (False, 0), (True, 1)]