python - Scikit-learn:线性_模型.SGDClassifier():ValueError:调用partial_fit()时ndarray不是C连续的

标签 python machine-learning scikit-learn

我正在尝试运行 Linear_model.SGDClassifier() 并在它分类的每个示例后更新它。 我的代码适用于一个小特征文件(10 个特征),但是当我给它一个更大的特征文件(大约 80000 个特征,但非常稀疏)时,它会立即给我错误,第一次调用partial_fit() 时。 p>

这就是我在伪代码中所做的:

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)),但这给出了相同的结果。 我认为classes属性不是问题。如果我省略它或者在硬代码中给出正确的类,则会出现相同的错误。

我确实注意到,当我打印分类器的 _coef 数组的标志时,它显示:

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

我确信我做错了什么,但实际上,我不明白是什么......

感谢任何帮助!

最佳答案

郑重声明(因此这个问题似乎没有得到解答),这个问题是 previously answered在 scikit-learn 邮件列表上。这是 scikit-learn 0.14 的 SGDClassifier 中的一个错误。解决方法是将初始的 fit 替换为 partial_fit

更新:我fixed the bug几分钟前。

关于python - Scikit-learn:线性_模型.SGDClassifier():ValueError:调用partial_fit()时ndarray不是C连续的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19274471/

相关文章:

numpy - 期望最大化(GMM-EM)永远找不到正确的参数。 (高斯混合)

python - 为什么 KMeans 集群标签与 set random_state 并不总是相同?

iOS Core ML 和 DBSCAN Python scikit 模型

Python BeautifulSoup 根据id提取标题

Python 和 Google Sheets - 检查数据在哪一行

python - 在python中将公式作为函数参数传递

machine-learning - 使用 tf.layers 指定的神经网络插入不需要的 reshape 操作

opencv - 手部实时追踪

python - ROC 曲线上 SVM 位置的默认选择

android - Google App Engine 上跨 GET 和 POST 的 Beaker Session?