Classification metrics can‘t handle a mix of multilabel-indicator and continuous-multioutput targets

使用MLP(多层感知)算法训练mnist数据集后,然后对mnist数据集的训练数据进行预测并计算其预测的准确率。

y_train_predict = mlp.predict(x_train_normal)
accuary = accuracy_score(y_train,y_train_predict)
在运行代码报如下错误 ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets

然后百度查看该报错的信息是传入函数的预测结果标签和真实标签的数据属性数量不同,真实标签数据多加了一列序号,因此报错。

于是分别打印了y_train和y_train_predict的数据和维度,查看y_train_predict的数据类型和维度都和真实标签y_train不一样。因此现在都目标是将y_train_predict的数据转换成和y_train的数据类型一样的。

查询资料然后发现之前的predict_classes()已经被弃用,现可以使用predict()和numpy.argmax(y_train_predict,axis=1)结合使用来达到一样的效果。

numpy.argmax()函数是返回该数组的最大值的索引,当axis=0,是在列中比较,选出最大的  索引。当axis=1,是在行中比较,选出最大的  索引。在多维数组中,axis=-1表示沿着最后一个维度进行操作。在二维数组中,最后一位(axis=1)和(axis=-1)是一样的。在一维数组中,最后一位(也是第一位)axis=0和axis=-1是一样的。

找到原因后修改代码如下:

y_train_predict = mlp.predict(x_train_normal)
y_train_predict = numpy.argmax(y_train_predict,axis=1)
accuary = accuracy_score(y_train,y_train_predict)
print("train data accuracy:", accuary)

代码运行成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值