混淆矩阵取值错误

Confusion matrix get value error

我正在尝试使用 sci-kit 创建一个混淆矩阵来学习癫痫数据集 https://archive.ics.uci.edu/ml/datasets/Epileptic+Seizure+Recognition

准备好后,进行交叉验证和建模,得到如下结果(我标记了屏幕截图):

现在,当我想要获得混淆矩阵时,我得到了这个错误:

    from sklearn.metrics import confusion_matrix
    conf = confusion_matrix(pred["y"], pred["PredictedLabel"])
    print(conf)

我该如何解决这个问题?

您可以将预测标签和真实标签都转换为 str:

conf = confusion_matrix(pred["y"].astype(str), pred["PredictedLabel"].astype(str))

尝试重现类似问题,请考虑以下情况,其中 predicted 和 true 是不同类型:

import pandas as pd
from sklearn.metrics import confusion_matrix

pred = pd.DataFrame()
pred["y"] = [1,2,3]
pred["PredictedLabel"] = ['1','2','3']
conf = confusion_matrix(pred["y"], pred["PredictedLabel"])
print(conf)

会报错:ValueError: Mix of label input types (string and number)

如果您将它们都转换为 str 类型(您也可以将其他类型用作 int 或 float,两者必须相同,但对于预测标签和真实标签 ):

import pandas as pd
from sklearn.metrics import confusion_matrix

pred = pd.DataFrame()
pred["y"] = [1,2,3]
pred["PredictedLabel"] = ['1','2','3']
conf = confusion_matrix(pred["y"].astype(str), pred["PredictedLabel"].astype(str))
print(conf)

结果:

[[1 0 0]
 [0 1 0]
 [0 0 1]]

如果数据框中的值类型不一致,请尝试将双精度数(假设它们是双精度数)转换为字符串。试试,

conf = confusion_matrix(pred["y"].values.astype(int).astype(str), pred["PredictedLabel"].values)
conf = pd.DataFrame(conf)

如果您想要标签,可以将它们添加回来,

my_columns = ["y", "PredictedLabel"]
conf.columns = my_columns
print(conf)