首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sklearn.neural_networks.MLPRegressor -无法计算精度分数

sklearn.neural_networks.MLPRegressor -无法计算精度分数
EN

Stack Overflow用户
提问于 2020-10-07 23:46:51
回答 1查看 863关注 0票数 0

这是我在StackOverflow上的第一篇文章!我正在使用MLPRegressor为我的问题生成一个二进制类多输出预测。一旦得到了我的预测,我就使用numpy.round()对所有的值进行舍入,这样我就可以使用accuracy_score(因为准确性评分只适用于分类问题)。在此之后,当我得到以下错误时,我尝试使用sklearn.metrics.accuracy_score

代码语言:javascript
复制
ValueError: Classification metrics can't handle a mix of multilabel-indicator and multiclass-multioutput targets

仅当我在max_iter中手动设置MLPRegressor关键字参数时,才会发生此错误。当我不手动设置它时,回归器不会收敛,但是错误不会发生。

代码语言:javascript
复制
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,81,81,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

堆栈跟踪:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 09:52:58

当错误消息声明时,发生这种情况是因为

分类指标不能处理多标签指示符和多类多输出目标的混合

这意味着,accuracy_score()可以在像您这样的多标签情况下工作,但如果类标签不是二进制的,则不能工作。

您是说,您有一个二进制类多输出预测,但是在您的预测中,preds[89]包含一个2值,除了01的二进制输出之外。

代码语言:javascript
复制
preds[89]

返回

代码语言:javascript
复制
array([ 0., -0., -0., -0.,  1.,  2., -0., -0., -0.])

除预测数组中的89项外,还可以在以下内容中找到具有非二进制值的其他条目:

  • preds[139]
  • preds[501]
  • preds[503]
  • preds[770]
  • preds[1039]
  • preds[1107]

因此,现在您必须确保这些条目(它们都具有2值)被转换为二进制标签(01),以便accuracy_score()工作。

可能的解决方案:

可以将目标值2的所有出现情况替换为值1

代码语言:javascript
复制
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()方法:

代码语言:javascript
复制
print(accuracy_score(y_test,preds))

回传

代码语言:javascript
复制
0.8367658276125095
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64253812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档