【问题标题】:Using the score method from Sklearn and get ValueError: multiclass-multioutput is not supported使用 Sklearn 中的 score 方法并获取 ValueError: multiclass-multioutput is not supported
【发布时间】:2018-02-10 07:43:28
【问题描述】:

这是我的代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_mldata
from sklearn import neighbors
from sklearn.model_selection import train_test_split
mnist = fetch_mldata('MNIST original')

sample = np.random.randint(70000, size=5000)
data = mnist.data[sample]
target = mnist.data[sample]

xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=0.8)

knn = neighbors.KNeighborsClassifier(n_neighbors=3)
knn.fit(xtrain, ytrain)

error = 1 - knn.score(xtest, ytest)
print('Erreur: %f' % error)

当我运行“python numb.py”时,我收到此消息错误:

File "/anaconda/lib/python2.7/site-packages/sklearn/metrics/classification.py", line 88, in _check_targets
    raise ValueError("{0} is not supported".format(y_type))
ValueError: multiclass-multioutput is not supported

【问题讨论】:

  • sklearn 评分功能只支持一维输出,mnist 数据是图像,因此是二维的。您可以尝试使输出变平
  • @gionni 已经由 fetch_mldata 完成了展平。
  • 没注意到那一行,抱歉

标签: python arrays numpy scikit-learn


【解决方案1】:

这是一个简单的错字。 ytest 的形状不对,因为你应该写

target = mnist.target[sample]

纠正这一点,脚本运行良好。

此外,您构建sample 的方式可能有重复,这意味着某些图像可能同时在测试集和训练集中。考虑使用np.random.permutation 来打乱样本的顺序。 并考虑在调用 np.random 之前使用种子,以获得可重现的结果(或者更好,使用 sklearn 中的 check_random_state

【讨论】:

  • 感谢 P.Camilleri :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多