繁体   English   中英

混淆矩阵:ValueError:分类指标无法处理多类和连续多输出目标的混合

[英]Confusion matrix: ValueError: Classification metrics can't handle a mix of multiclass and continuous-multioutput targets

我正在处理一个多类分类问题(12 个类),但我无法创建混淆矩阵。 我想做的是:

from sklearn.metrics import multilabel_confusion_matrix
pred = model_BiLSTM.predict(X_val)
y_unique = np.unique(y_val)
mcm =confusion_matrix(y_val, pred, labels = y_unique)

但根据标题,返回的错误是:“ValueError:分类指标无法处理多类和连续多输出目标的混合”,使用 confusion_matrix() 时也会发生同样的情况。

相反,这是输出

y_val, pred, y_val.shape, pred.shape
16/16 [==============================] - 0s 6ms/step
(array([11,  8,  3,  3,  9,  9,  9,  3,  3,  1,  3,  6,  6,  6,  2,  9,  1,
         3, 10,  6,  9,  2,  9,  4,  3,  9,  6,  9,  3,  3,  3,  3,  8,  1,
         9,  9,  9,  9,  2,  1,  9,  3,  9,  3,  9,  9,  2, 10,  3,  2,  9,
         3,  8,  6,  8,  9,  9,  6,  6,  9,  8,  7,  9,  2,  9,  9,  2,  3,
         9,  9,  2,  6,  3,  7, 11,  9,  9,  2, 11,  6,  7, 11,  6,  9,  2,
         6,  9,  2,  9,  9,  3,  6,  9,  1, 11,  4,  4,  2,  6,  2,  9,  3,
        10,  3,  2,  9,  9, 10,  6,  3,  9,  9,  6,  8,  6,  9,  4,  6,  5,
         9,  6,  6,  3,  3,  3,  9,  6,  2,  9, 11,  6,  9,  3,  9,  6,  9,
         2,  9,  3,  9,  6,  1,  6,  9,  9,  8,  3,  2,  9,  2,  8,  9,  9,
         3, 10,  2,  4,  9,  9,  2,  8,  3,  6,  9,  9,  9,  6,  2,  2,  9,
         7,  9,  3,  6,  7,  2,  9,  2,  9, 10,  9,  2,  9,  5,  7,  6,  5,
         6,  3,  9,  7,  9,  3, 11,  5,  3,  3,  0,  8,  3,  9,  5,  9, 10,
         9,  3,  3, 11,  2,  1,  8,  6,  2,  9,  3,  6,  2,  8,  9,  2,  8,
         3,  3,  9,  6,  2,  1,  9,  9,  2,  2, 10,  9,  1,  6,  9,  9,  2,
         9,  5,  6,  3,  9,  7,  6,  9,  9,  6,  3,  3,  2,  3,  9,  6,  9,
         9,  9,  9,  9,  9,  9,  2,  9,  9,  9,  9,  3,  1,  6,  6,  6, 10,
         9,  9,  9,  2,  9,  2,  3,  9,  9, 10,  6, 10,  6,  1,  1,  6,  1,
         6,  3,  4,  6,  1, 11,  3,  9,  9,  4,  9,  9,  5,  8,  3,  5,  9,
         6,  9,  9,  9,  3,  2,  5,  1,  9,  6,  1,  3,  9,  5,  3,  9,  6,
         7,  2,  9,  9,  3,  5,  9,  6,  6,  3,  1,  9,  3,  9,  7,  9,  9,
         7,  9, 10,  2,  9,  4,  9,  9,  9,  3,  9,  5,  3,  2,  9,  3,  8,
         2,  9,  3, 11,  3,  3,  9,  2, 10,  9,  3,  9,  1,  9, 10,  5,  1,
         2,  5,  9,  2,  3,  5,  9,  4,  8,  9,  5, 10,  3,  2,  6,  3,  6,
        10, 11,  3,  6,  9,  3,  3,  0,  6,  7,  8,  9,  6,  5,  3,  1,  9,
         2,  9,  9,  5,  2,  5,  3,  6, 11,  2,  9,  3,  6,  2,  9,  9,  3,
         3,  3,  5,  6,  4,  4,  9,  2,  2,  5,  1,  0,  9,  4,  3,  3,  9,
         9,  5,  2,  2,  2,  5,  7,  9,  3,  9,  9,  1,  2,  9,  6,  8,  2,
         3,  4,  2,  3,  3,  2,  6,  5,  9,  5,  2,  2,  2,  9,  9,  6,  2,
         9,  4,  9,  9,  2,  3,  8, 11,  9,  9], dtype=int32),
 array([[5.7949889e-03, 2.5301890e-03, 5.9659913e-05, ..., 2.7534673e-03,
         1.8798949e-03, 4.0977496e-01],
        [2.1629781e-04, 1.0219574e-02, 1.2285617e-03, ..., 4.0498661e-04,
         3.6948815e-04, 8.3618681e-04],
        [8.1547890e-03, 1.1354284e-04, 1.3678521e-04, ..., 3.6535120e-01,
         1.1546685e-03, 3.5349184e-03],
        ...,
        [1.1976730e-03, 6.8558909e-02, 8.7605380e-03, ..., 1.7384565e-01,
         5.4570078e-04, 2.0005915e-02],
        [2.1097453e-02, 7.7744485e-03, 2.5690982e-01, ..., 5.4854238e-01,
         3.9467164e-03, 1.6034273e-02],
        [2.0812787e-03, 1.6885218e-05, 4.7070305e-05, ..., 4.3611538e-01,
         3.6522493e-04, 1.4385413e-02]], dtype=float32),
 (486,),
 (486, 12))

如果有帮助,这是我的模型:

def build_BiLSTM_classifier(input_shape, classes):
    input_layer = tfkl.Input(shape=input_shape, name='Input')
    bilstm = tfkl.Bidirectional(tfkl.LSTM(128, return_sequences=True))(input_layer)
    bilstm = tfkl.Bidirectional(tfkl.LSTM(128))(bilstm)
    dropout = tfkl.Dropout(.5, seed=seed)(bilstm)

    classifier = tfkl.Dense(128, activation='tanh')(dropout)
    output_layer = tfkl.Dense(classes, activation='softmax')(classifier)

    model = tfk.Model(inputs=input_layer, outputs=output_layer, name='model')

    model.compile(loss=tfk.losses.SparseCategoricalCrossentropy(), optimizer=tfk.optimizers.Adam(), metrics='accuracy')
    return model

我可以尝试做什么?

您的pred数组似乎包含班级分数而不是预测。 试试pred.argmax(axis=1)代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM