如何解决sklearn.neural_networks.MLPRegressor-无法计算准确性得分
这是我关于StackOverflow的第一篇文章!我正在使用MLPRegressor
为我的问题生成一个二进制类的多输出预测。获得预测后,我将使用numpy.round()
舍入所有值,以便可以使用accuracy_score
(因为准确度分数仅适用于分类问题)。此后,当出现以下错误时,我尝试使用sklearn.metrics.accuracy_score
:
ValueError: Classification metrics can't handle a mix of multilabel-indicator and multiclass-multIoUtput targets
仅当我在max_iter
中手动设置MLPRegressor
关键字参数时,才会发生此错误。如果不手动设置,回归器不会收敛,但是不会发生错误。
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
from joblib import dump,load
data = np.loadtxt('tictac_multi.txt')
X = data[:,:9]
y = data[:,9:]
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.20,random_state=7)
regr = MLPRegressor(random_state=7,hidden_layer_sizes=(9,81,729,9),activation='tanh',learning_rate='invscaling',solver='adam',max_iter = 400).fit(X_train,y_train)
preds = regr.predict(X_test)
preds = np.round(preds)
print(accuracy_score(y_test,preds))
这是数据集的链接:http://www.connellybarnes.com/work/class/2016/deep_learning_graphics/proj1/tictac_multi.txt
堆栈跟踪:
Traceback (most recent call last):
File "mlp.py",line 21,in <module>
scores.append(accuracy_score(y_test,preds))
File "C:\Users\animu\AppData\Local\Programs\Python\python37\lib\site-packages\sklearn\utils\validation.py",line 73,in inner_f
return f(**kwargs)
File "C:\Users\animu\AppData\Local\Programs\Python\python37\lib\site-packages\sklearn\metrics\_classification.py",line 187,in accuracy_score
y_type,y_true,y_pred = _check_targets(y_true,y_pred)
File "C:\Users\animu\AppData\Local\Programs\Python\python37\lib\site-packages\sklearn\metrics\_classification.py",line 91,in _check_targets
"and {1} targets".format(type_true,type_pred))
ValueError: Classification metrics can't handle a mix of multilabel-indicator and multiclass-multIoUtput targets
解决方法
错误消息指出,这是因为
分类指标无法处理multilabel-indicator和 多类多输出目标
这意味着accuracy_score()
可以在多标签的情况下(例如您的情况)使用,但是如果类标签不是二进制的则不能。
您要说明的是,您具有二进制类多输出预测,但是在预测中,preds[89]
除了2
和{{的二进制输出之外,还包含值0
。 1}}
1
返回
preds[89]
在预测数组中除89以外的其他条目(其值不是二进制)可以在以下位置找到:
-
array([ 0.,-0.,1.,2.,-0.])
-
preds[139]
-
preds[501]
-
preds[503]
-
preds[770]
-
preds[1039]
因此,您现在必须确保将这些条目(所有条目的值均为preds[1107]
)转换为二进制标签(2
或0
),以使{ {1}}上班。
可能的解决方案:
您可以将所有出现的目标值1
替换为值accuracy_score()
:
2
然后,您可以调用1
方法:
for outer_index in range(preds.shape[0]):
for index in range(preds[outer_index].shape[0]):
if(np.abs(preds[outer_index][index]) != 0 and np.abs(preds[outer_index][index]) != 1):
preds[outer_index][index]=1
返回
accuracy_score()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。