0

我一直在摆弄不同的 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而哪些不能?我如何判断给定类型的模型是否支持这一点,而不仅仅是试图从错误消息中猜测?

4

1 回答 1

4

拟合方法明确SGDRegressor指出预期目标具有形状,(n_samples,)因此是一维的。

如果需要,您可以包装一个 for 循环以适合SGDRegressor每个目标。否则,您可以尝试Ridge,或.RidgeCVElasticNetElasticNetCV

编辑:另外,如果您想添加对多目标的支持,SGDRegressor请随时发送拉取请求。

于 2013-10-29T09:05:26.027 回答