我一直在摆弄不同的scikit-learn工具。监督学习类都具有相同的通用API,您可以在其中调用model.fit(X, y)
以适合模型。使用其中一些(至少ExtraTreesRegressor),我可以为y
传递一个二维数组,它工作正常。与其他人一起,它不起作用。它通常不会说为什么它不起作用,但是:我得到的形状不匹配错误表明它只能预测单个输出维度而不实际这样说。例如,随机梯度下降:
>>> X.shape
(77946, 24)
>>> y.shape
(77946, 24)
>>> mach = sklearn.linear_model.SGDRegressor()
>>> mach.fit(X, y)
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
mach.fit(X, y)
File "C:\FakeProgs\Python\lib\site-packages\sklearn\linear_model\stochastic_gradient.py", line 842, in fit
sample_weight=sample_weight)
File "C:\FakeProgs\Python\lib\site-packages\sklearn\linear_model\stochastic_gradient.py", line 811, in _fit
coef_init, intercept_init)
File "C:\FakeProgs\Python\lib\site-packages\sklearn\linear_model\stochastic_gradient.py", line 752, in _partial_fit
_check_fit_data(X, y)
File "C:\FakeProgs\Python\lib\site-packages\sklearn\linear_model\stochastic_gradient.py", line 228, in _check_fit_data
raise ValueError("Shapes of X and y do not match.")
ValueError: Shapes of X and y do not match.
嗯,是的,他们匹配。如果我只使用一列y
,它就可以工作,但我不知道这是否意味着不支持多变量y
,或者我只是做得不对。
是否有明确的文档说明哪些scikit类可以接受二维y
而哪些不能?如何判断给定类型的模型是否支持这一点,而不仅仅是尝试从错误消息中猜测出来?
答案 0 :(得分:4)
SGDRegressor
的{{3}}明确指出预期目标的形状为(n_samples,)
,因此为1D。
如果需要,您可以包装for循环以适合每个目标SGDRegressor
。否则,您可以尝试Ridge
,RidgeCV
,ElasticNet
或ElasticNetCV
。
编辑:如果您想将多目标支持添加到SGDRegressor
,请随时发送拉取请求。