0

私はさまざまな scikit-learn ツールをいじっています。教師あり学習クラスにはすべてmodel.fit(X, y)、モデルを適合させるために呼び出す同じ一般的な API があります。これらのいくつか (少なくとも ExtraTreesRegressor) では、2 次元配列を渡すことができ、正常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.

ええ、はい、それらは一致します。の 1 列だけを使用する場合は機能しますが、これが多変量がサポートされていないことを意味するのか、それとも正しく行っていないだけなのかyはわかりません。y

どの scikit クラスが 2 次元を受け入れることができ、どのクラスが受け入れyられないかを示す明示的な文書はありますか? エラーメッセージから推測するだけでなく、特定の種類のモデルがこれをサポートしているかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

4

fit メソッドSGDRegressor、期待されるターゲットの形状が(n_samples,)1D であることを明示的に示します。

SGDRegressor必要に応じて、ターゲットごとに 1 つの for ループをラップすることができます。Ridgeそれ以外の場合は、、、またはRidgeCVを試すことができます。ElasticNetElasticNetCV

編集:また、マルチターゲットのサポートを追加したい場合は、おSGDRegressor気軽にプルリクエストを送信してください。

于 2013-10-29T09:05:26.027 に答える