【问题标题】:using x.reshape on a 1D array in sklearn在 sklearn 的一维数组上使用 x.reshape
【发布时间】:2017-01-16 09:45:10
【问题描述】:

我尝试使用 sklearn 来使用简单的决策树分类器,但它抱怨使用一维数组现在已被弃用,必须使用 X.reshape(1,-1)。所以我做到了,但它已将我的标签列表变成了只有一个元素的列表列表,因此标签和样本的数量现在不匹配。换句话说,我的标签列表=[0,0,1,1] 变成了 [[0 0 1 1]]。谢谢

这是我使用的简单代码:

from sklearn import tree
import numpy as np
features =[[140,1],[130,1],[150,0],[170,0]]
labels=[0,0,1,1]
labels = np.array(labels).reshape(1,-1)
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features,labels)
print clf.predict([150,0])

【问题讨论】:

  • 我怀疑你可能想要这个:labels = np.asarray(labels)[:, None]?
  • 这似乎相当于使用 reshape(-1,1) 而不是 (1,-1)。它给出了正确的答案,但我仍然收到弃用警告
  • 大概,一旦完全弃用一维数组,sklearn 的作者将不得不修改该(可能还有其他)函数以将其考虑在内。我一直认为shape (x, y) 的数组是二维的,即使x or y == 1 也是如此。也就是说,我以前错了。

标签: python scikit-learn


【解决方案1】:

你正在重塑错误的东西。重塑您预测的数据,而不是您的标签。

>>> clf.predict(np.array([150,0]).reshape(1,-1))
array([1])

您的标签必须与您的训练数据(特征)对齐,因此两个数组的长度应该相同。如果标签被重塑,你是对的,它是一个长度为 1 且不等于特征长度的列表。

您必须重塑您的测试数据,因为预测需要一个看起来像您的训练数据的数组。即每个索引都需要是一个训练示例,具有与训练中相同数量的特征。您会看到以下两个命令分别返回一个列表列表和一个列表。

>>> np.array([150,0]).reshape(1,-1)
array([[150,   0]])
>>> np.array([150,0])
array([150,   0])

【讨论】:

  • 你是对的。没有警告和正确的结果。一些额外的解释将不胜感激。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2015-01-21
  • 2016-06-19
  • 2016-10-14
  • 2017-07-08
  • 2020-10-29
  • 2017-10-04
相关资源
最近更新 更多