当我使用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)
我认为有一些理由可以用这种方式设计库;有人可以照亮我吗?
答案 0 :(得分:2)
执行y = np.random.rand(10)
时,y是[10,]
的一维数组。如果它是行向量或列向量则无关紧要。它只是一个只有一个维度的向量。看看this answer和this 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
操作。
您可能还想查看以下链接,讨论类似问题。