问题:使用Keras
做分类任务,model.predict
预测得到的值为每个类别的概率值,而不是类别。
源码:
y_test_pred = model.predict(x_test, batch_size=256, verbose=1)
解决:
import numpy as np
y_test_pred = model.predict(x_test, batch_size=256, verbose=1)
y_test_pred = np.argmax(y_test_pred, axis=1)
注意:axis
值为你要转换的行,而且输出为一维数据,即每个样本对应一个类别值。
总结:
Keras
框架能使用的函数是predict
和predict_classes
;Sklearn
中能使用的函数是predict
和predict_proba
。
predict函数:
1.训练后返回一个概率值数组,此数组的大小为n·k
,第i行第j列上对应的数值代表模型对此样本属于某类标签的概率值,行和为1。例如预测结果为:[[0.66651809 0.53348191]
,代表预测样本的标签是0
的概率为0.66651809
,1
的概率为0.53348191
。
2.输出预测值很简单,只需要在括号内加入处理好的数据集。
pt = predict(test)
output:
3.将预测值转换为0/1值,方法有两种,第一种是使用predict_classes
直接输出标签值,第二种是用Numpy
转换一下,具体操作如下:
print(np.argmax(pt, axis=1))
output:
注意:
本人在实际操作时发现,使用predict_classes()
会出现报错:'Model' object has no attribute 'predict_classes'
。这是因为本系统在搭建模型时,先进行了神经网络的编写,之后使用model = Model(input=inp, output=outp)
方法,此时这种综合起来的方法无法使用predict_classes()
,所以需要配合numpy.argmax()
方法将样本最大概率归属类别的值转化为样本的预测数组。