Python报错:
ValueError: Classification metrics can‘t handle a mix of binary and continuous targets
原因分析:
sklearn函数输入参数的数据类型不匹配导致,有可能是输入的y_true为[0,0,1,1,1]的int型数据,而y_predict是类似于[0.5,0.3,0.6,0.5,0.2]概率数据。可能使用了model.predict_proba()
函数进行了预测。
方法:需把概率数据转换为整型数据即可。
方法一:
在预测时使用:
y_predict = model.predict_classes(x_test) # 输出 [0,1,1,1]格式的数据
y_scores = model.predict_proba(x_test)# 输出[负的概率,正的概率] 格式的数据,根据预测任务的不同而不同
model是训练的模型。
这种方法就是将预测值与预测概率分开。
注意! 这种方法对有些编码方式可能不适用。
方法二:
使用model.predict_proba()预测之后将结果转化为int类型的数据
y_scores = model.predict_proba(x_test)# 输出[负的概率,正的概率] 格式的数据
y_pred = y_socres[:,1] # 取第二列正的概率,根据每个人的数据不同而不同!
y_pred = np.around(y_pred,0).astype(int) # .around()是四舍五入的函数 第二个参数0表示保留0位小数,也就只保留整数!! .astype(int) 将浮点数转化为int型
方法三:
如果是在二分类任务中使用了one-hot编码,那么当 0 位置的概率小于 1 位置的概率时该值为 1 ,否则为0。如预测出来[0.6,0,8] 那么值为1,如预测出来[0.2,0,3] 值还是1,可如果以0.5为界限判断0、1显然是不合理的。因此使用以下代码更加合理:文章来源:https://www.toymoban.com/news/detail-516505.html
yy_pred = model.predict(x_test, batch_size=b) # 预测出[[0.4,0.45],[0.8,0.3],[0.6,0.71]]
y_pred = np.argmax(yy_pred, axis=1) # 选择max值进行输出0,或1
总结:
使用上面三种方法预测的结果,就可以直接中sklearn的包进行求精确度等各种数据了。文章来源地址https://www.toymoban.com/news/detail-516505.html
到了这里,关于Python报错:ValueError: Classification metrics can‘t handle a mix of binary and continuous targets的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!