0

linear_model.SGDClassifier() を実行して、分類するすべての例の後に更新しようとしています。私のコードは小さな機能ファイル (10 個の機能) で機能しますが、より大きな機能ファイル (約 80000 個の機能ですが、非常にまばらです) を指定すると、最初に partial_fit() が呼び出されたときにすぐにエラーが発生し続けます。

これは私が疑似コードで行うことです:

X, y = load_svmlight_file(train_file)
classifier = linear_model.SGDClassifier()
classifier.fit(X, y)

for every test_line in test file:
  test_X, test_y = getFeatures(test_line)
  # This gives me a Python list for X
  # and an integer label for y

  print "prediction: %f" % = classifier.predict([test_X])

  classifier.partial_fit(csr_matrix([test_X]),
                         csr_matrix([Y_GroundTruth])
                         classes=np.unique(y) )

partial_fit() 行で発生し続けるエラーは次のとおりです。

  File "/bla/bla/epd/lib/python2.7/site-packages/sklearn/linear_model/stochastic_gradient.py", line 487, in partial_fit
    coef_init=None, intercept_init=None)
  File "/bla/bla/epd/lib/python2.7/site-packages/sklearn/linear_model/stochastic_gradient.py", line 371, in _partial_fit
    sample_weight=sample_weight, n_iter=n_iter)
  File "/bla/bla/epd/lib/python2.7/site-packages/sklearn/linear_model/stochastic_gradient.py", line 451, in _fit_multiclass
    for i in range(len(self.classes_)))
  File "/bla/bla/epd/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.py", line 517, in __call__
    self.dispatch(function, args, kwargs)
  File "/bla/bla/epd/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.py", line 312, in dispatch
    job = ImmediateApply(func, args, kwargs)
  File "/bla/bla/epd/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.py", line 136, in __init__
    self.results = func(*args, **kwargs)
  File "/bla/bla/epd/lib/python2.7/site-packages/sklearn/linear_model/stochastic_gradient.py", line 284, in fit_binary
    est.power_t, est.t_, intercept_decay)
  File "sgd_fast.pyx", line 327, in sklearn.linear_model.sgd_fast.plain_sgd (sklearn/linear_model/sgd_fast.c:7568)
ValueError: ndarray is not C-contiguous

私はまた、partial.fit() Python 配列、または numpy 配列 (デフォルトでは C 連続 (sort=C) であると思いました) をフィードしようとしましたが、これは同じ結果をもたらします。クラス属性は私が思う問題ではありません。省略したり、ハードコードで適切なクラスを指定したりすると、同じエラーが表示されます。

分類子の _coef 配列のフラグを出力すると、次のように表示されることに気付きました。

Flags of coef_ array:
  C_CONTIGUOUS : False
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False 

私は何か間違ったことをしていると確信していますが、実際には何がわかりません...

どんな助けでも大歓迎です!

4

1 に答える 1

3

記録のために (したがって、この質問は未回答のようには見えません)、この質問は以前に scikit-learn メーリング リストで回答されています。scikit-learn 0.14 のバグSGDClassifierです。回避策は、イニシャルfitをに置き換えることpartial_fitです。

更新:数分前にバグを修正しました。

于 2013-10-09T15:50:47.627 に答える