Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么scikit learn对不同的回归器要求不同的数据形状?_Python_Numpy_Scikit Learn - Fatal编程技术网

Python 为什么scikit learn对不同的回归器要求不同的数据形状?

Python 为什么scikit learn对不同的回归器要求不同的数据形状?,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,当我使用sklearn时,我总是发现自己在重塑数据,这很烦人,而且会让我的代码难看。为什么不能让库处理各种数据形状,并进行适当的解释?例如,要使用线性回归器,我需要 from sklearn.linear_model import LinearRegression x = np.random.rand(10).reshape(-1,1) y = np.random.rand(10).reshape(-1,1) regr = LinearRegression() regr.fit(x,y) 但如

当我使用
sklearn
时,我总是发现自己在重塑数据,这很烦人,而且会让我的代码难看。为什么不能让库处理各种数据形状,并进行适当的解释?例如,要使用线性回归器,我需要

from sklearn.linear_model import LinearRegression
x = np.random.rand(10).reshape(-1,1)
y = np.random.rand(10).reshape(-1,1)
regr = LinearRegression()
regr.fit(x,y)
但如果我想使用支持向量回归,那么我不会重塑自变量:

from sklearn.svm import SVR
x = np.random.rand(10).reshape(-1,1)
y = np.random.rand(10)
regr = SVR()
regr.fit(x,y)

我想图书馆是这样设计的是有原因的;有人能告诉我吗?

当你做
y=np.random.rand(10)
,y是
[10,]
一维数组。不管是行向量还是列向量。它只是一个只有一维的向量。看看并理解它背后的哲学

它是“numpy哲学”的一部分。而sklearn依赖于numpy

关于你的评论:-

为什么sklearn不能自动理解,如果我传递给它形状(n,)的东西,n_samples=n,n_features=1

sklearn可能无法仅基于X数据推断其
n_样本=n和n_特征=1
或其他方式(
n_样本=1和n_特征=n
)。如果通过y,则可以执行此操作,这可以清楚地说明
n\u样本

但这意味着更改所有依赖于此类语义的代码,这可能会破坏很多东西,因为
sklearn
严重依赖于
numpy
操作。

您可能还想查看以下讨论类似问题的链接


我在使用指定的任何估计器时,都不会得到任何错误。使用
x=np.random.rand(10)。重塑(-1,1),y=np.random.rand(10)
SVR
LinearRegression
都可以用(n,)或(n,1)取y。因此,您可以用
x=np.random.rand(10)
y=np.random.rand(10)
运行上述操作?当我尝试这样做时,我得到一个
ValueError
。您使用的是哪个版本的
scikit learn
?否。不是
X
X
必须始终是
[n_样本,n_特征]
的二维向量。我说的是
y
(这是上面代码片段中唯一不同的代码)
y
可以是一个列向量
[n_samples,1]
或简单地
[n_samples,1]
。当我使用
SVR
和一个列向量
y.shape=(n_samples,1)
时,我会得到一个
数据转换警告。至于
X
,我仍然不清楚为什么
sklearn
不能自动理解,如果我传递的是
(n,)
形状的东西,那么
n\u samples=n
n\u features=1
。是的,我确实得到了y的警告。为了更清楚,我添加了一个答案。希望能有帮助