Python源码示例:sklearn.metrics.multilabel_confusion_matrix()
示例1
def _prep_confusion_matrix(self, y_test, y_pred, labels):
"""
Calculate a confusion matrix and add it to the model as a data frame suitable for Qlik
"""
# Calculate confusion matrix and flatten it to a simple array
if len(y_test.shape) == 1:
confusion_array = metrics.confusion_matrix(y_test, y_pred).ravel()
# Structure into a DataFrame suitable for Qlik
result = []
i = 0
for t in labels:
for p in labels:
result.append([str(t), str(p), confusion_array[i]])
i = i + 1
self.model.confusion_matrix = pd.DataFrame(result, columns=["true_label", "pred_label", "count"])
self.model.confusion_matrix.insert(0, "model_name", self.model.name)
# Handle confusion matrix format for multi-label classification
else:
confusion_array = metrics.multilabel_confusion_matrix(y_test, y_pred)
result = pd.DataFrame(confusion_array.reshape(-1, 4), columns=["true_negative", "false_positive", "false_negative", "true_positive"])
self.model.confusion_matrix = pd.DataFrame(np.arange(len(confusion_array)), columns=["step"])
self.model.confusion_matrix = pd.concat([self.model.confusion_matrix, result], axis=1)
self.model.confusion_matrix.insert(0, "model_name", self.model.name)
示例2
def specificity_score(y_true, y_pred, pos_label=1, sample_weight=None):
"""Compute the specificity or true negative rate.
Args:
y_true (array-like): Ground truth (correct) target values.
y_pred (array-like): Estimated targets as returned by a classifier.
pos_label (scalar, optional): The label of the positive class.
sample_weight (array-like, optional): Sample weights.
"""
MCM = multilabel_confusion_matrix(y_true, y_pred, labels=[pos_label],
sample_weight=sample_weight)
tn, fp, fn, tp = MCM.ravel()
negs = tn + fp
if negs == 0:
warnings.warn('specificity_score is ill-defined and being set to 0.0 '
'due to no negative samples.', UndefinedMetricWarning)
return 0.
return tn / negs
示例3
def test_multilabel_confusion_matrix_binary():
# Test multilabel confusion matrix - binary classification case
y_true, y_pred, _ = make_prediction(binary=True)
def test(y_true, y_pred):
cm = multilabel_confusion_matrix(y_true, y_pred)
assert_array_equal(cm, [[[17, 8], [3, 22]],
[[22, 3], [8, 17]]])
test(y_true, y_pred)
test([str(y) for y in y_true],
[str(y) for y in y_pred])
示例4
def test_multilabel_confusion_matrix_multiclass():
# Test multilabel confusion matrix - multi-class case
y_true, y_pred, _ = make_prediction(binary=False)
def test(y_true, y_pred, string_type=False):
# compute confusion matrix with default labels introspection
cm = multilabel_confusion_matrix(y_true, y_pred)
assert_array_equal(cm, [[[47, 4], [5, 19]],
[[38, 6], [28, 3]],
[[30, 25], [2, 18]]])
# compute confusion matrix with explicit label ordering
labels = ['0', '2', '1'] if string_type else [0, 2, 1]
cm = multilabel_confusion_matrix(y_true, y_pred, labels=labels)
assert_array_equal(cm, [[[47, 4], [5, 19]],
[[30, 25], [2, 18]],
[[38, 6], [28, 3]]])
# compute confusion matrix with super set of present labels
labels = ['0', '2', '1', '3'] if string_type else [0, 2, 1, 3]
cm = multilabel_confusion_matrix(y_true, y_pred, labels=labels)
assert_array_equal(cm, [[[47, 4], [5, 19]],
[[30, 25], [2, 18]],
[[38, 6], [28, 3]],
[[75, 0], [0, 0]]])
test(y_true, y_pred)
test(list(str(y) for y in y_true),
list(str(y) for y in y_pred),
string_type=True)
示例5
def test_multilabel_confusion_matrix_errors():
y_true = np.array([[1, 0, 1], [0, 1, 0], [1, 1, 0]])
y_pred = np.array([[1, 0, 0], [0, 1, 1], [0, 0, 1]])
# Bad sample_weight
assert_raise_message(ValueError, "inconsistent numbers of samples",
multilabel_confusion_matrix,
y_true, y_pred, sample_weight=[1, 2])
assert_raise_message(ValueError, "bad input shape",
multilabel_confusion_matrix,
y_true, y_pred,
sample_weight=[[1, 2, 3],
[2, 3, 4],
[3, 4, 5]])
# Bad labels
assert_raise_message(ValueError, "All labels must be in [0, n labels)",
multilabel_confusion_matrix,
y_true, y_pred, labels=[-1])
assert_raise_message(ValueError, "All labels must be in [0, n labels)",
multilabel_confusion_matrix,
y_true, y_pred, labels=[3])
# Using samplewise outside multilabel
assert_raise_message(ValueError, "Samplewise metrics",
multilabel_confusion_matrix,
[0, 1, 2], [1, 2, 0], samplewise=True)
# Bad y_type
assert_raise_message(ValueError, "multiclass-multioutput is not supported",
multilabel_confusion_matrix,
[[0, 1, 2], [2, 1, 0]],
[[1, 2, 0], [1, 0, 2]])
示例6
def multilabel_confusion_matrix(*args):
"""Dummy version of multilabel_confusion_matrix."""
return np.array([])
示例7
def test_multilabel_confusion_matrix_multilabel():
# Test multilabel confusion matrix - multilabel-indicator case
from scipy.sparse import csc_matrix, csr_matrix
y_true = np.array([[1, 0, 1], [0, 1, 0], [1, 1, 0]])
y_pred = np.array([[1, 0, 0], [0, 1, 1], [0, 0, 1]])
y_true_csr = csr_matrix(y_true)
y_pred_csr = csr_matrix(y_pred)
y_true_csc = csc_matrix(y_true)
y_pred_csc = csc_matrix(y_pred)
# cross test different types
sample_weight = np.array([2, 1, 3])
real_cm = [[[1, 0], [1, 1]],
[[1, 0], [1, 1]],
[[0, 2], [1, 0]]]
trues = [y_true, y_true_csr, y_true_csc]
preds = [y_pred, y_pred_csr, y_pred_csc]
for y_true_tmp in trues:
for y_pred_tmp in preds:
cm = multilabel_confusion_matrix(y_true_tmp, y_pred_tmp)
assert_array_equal(cm, real_cm)
# test support for samplewise
cm = multilabel_confusion_matrix(y_true, y_pred, samplewise=True)
assert_array_equal(cm, [[[1, 0], [1, 1]],
[[1, 1], [0, 1]],
[[0, 1], [2, 0]]])
# test support for labels
cm = multilabel_confusion_matrix(y_true, y_pred, labels=[2, 0])
assert_array_equal(cm, [[[0, 2], [1, 0]],
[[1, 0], [1, 1]]])
# test support for labels with samplewise
cm = multilabel_confusion_matrix(y_true, y_pred, labels=[2, 0],
samplewise=True)
assert_array_equal(cm, [[[0, 0], [1, 1]],
[[1, 1], [0, 0]],
[[0, 1], [1, 0]]])
# test support for sample_weight with sample_wise
cm = multilabel_confusion_matrix(y_true, y_pred,
sample_weight=sample_weight,
samplewise=True)
assert_array_equal(cm, [[[2, 0], [2, 2]],
[[1, 1], [0, 1]],
[[0, 3], [6, 0]]])