为什么sklearn的LinearRegression要用形如x=[[6]]的列表来作为入参?


x=[[6],[8],[10],[14],[18]]
y=[[7],[9],[13],[17.5],[18]]
是正确的,但是使用
x=[6,8,10,14,18]
y=[7,9,13,17.5,18]
就会报错
DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
DeprecationWarning)
ValueError: Found input variables with inconsistent numbers of samples: [1, 5]

网址
http://www.jianshu.com/p/738f...

clipboard.png

clipboard.png

相关介绍没有看懂,惭愧。。。
http://scikit-learn.org/stabl...

clipboard.png

阅读 6.1k
3 个回答

我觉得你对机器学习算法还是不了解的,其实是这样的:
你的输入的数据X应该是数据的特征向量,y是特征向量对应的标签。每一个样本都有一个特征向量,这样你输入的X一定是二维数组才对,y如果是单标签就为一维数组,若为多标签或者像神经元网络那样的标签就为二维数组。
你的x=[[6],[8],[10],[14],[18]],算法可以理解为只有一个特征项,但是如果为x=[6,8,10,14,18],你让算法怎么理解

Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1)

1维数组来传递数据在0.19版本将触发ValueError
X.reshape(-1, 1)来重塑数据的形状(数组的维度)


也就是说,你需要以二维数组的方式传递数据。

监督学习中,x是特征集,行是样本,列是特征。所以必须是二维数组。如果你传入一维数组,你把它当做样本还是特征??

另外y是一维的应该没关系。sklearn.datasets中的数据的y都是一维的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏