【问题标题】:Confusion matrix get value error混淆矩阵获取值错误
【发布时间】:2018-10-02 19:58:47
【问题描述】:

我正在尝试使用 sci-kit learn 为来自的癫痫数据集创建一个混淆矩阵 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)

我该如何解决这个问题?

【问题讨论】:

    标签: python scikit-learn confusion-matrix valueerror


    【解决方案1】:

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

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

    尝试重现类似问题,请考虑以下情况,其中 predict 和 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 类型(您也可以使用 other 作为 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]]
    

    【讨论】:

      【解决方案2】:

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

      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)
      

      【讨论】:

      • 太棒了。如果这满足您的目的,那么请接受答案(我的答案旁边的复选框)以帮助我将来能够更好地帮助他人。编码愉快。
      猜你喜欢
      • 1970-01-01
      • 2019-10-15
      • 2015-09-18
      • 1970-01-01
      • 2018-03-08
      • 2020-03-09
      • 2020-07-25
      • 2019-01-05
      • 2021-12-03
      相关资源
      最近更新 更多