为什么scikit-learn需要针对不同回归量的不同数据形状?

时间:2017-02-01 05:17:06

标签: 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)

但如果我想使用支持向量回归量,那么我不会重塑自变量:

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

我认为有一些理由可以用这种方式设计库;有人可以照亮我吗?

1 个答案:

答案 0 :(得分:2)

执行y = np.random.rand(10)时,y是[10,]一维数组。如果它是行向量或列向量则无关紧要。它只是一个只有一个维度的向量。看看this answerthis too,了解其背后的理念。

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

至于你的评论: -

  

为什么sklearn不会自动理解如果我传递了n_samples = n和n_features = 1

的形状(n,)

sklearn 可能不会根据X数据单独推断其n_samples=n and n_features=1或其他方式(n_samples=1 and n_features=n)。可以这样做,如果y通过,可以清楚地表明n_samples

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

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