我正在尝试在一个庞大的数据集上训练我的二元分类器。之前,我可以使用sklearn的fit方法完成训练。但现在,我有更多的数据,无法处理。我尝试部分拟合数据,但无法摆脱错误。我如何才能增量地训练我的庞大数据?使用我之前的方法时,我得到了关于pipeline对象的错误。我已经查看了增量学习的示例,但运行这些代码示例时仍然会出现错误。任何帮助我都会非常感激。
X,y = transform_to_dataset(training_data)clf = Pipeline([ ('vectorizer', DictVectorizer()), ('classifier', LogisticRegression())])length=len(X)/2clf.partial_fit(X[:length],y[:length],classes=np.array([0,1]))clf.partial_fit(X[length:],y[length:],classes=np.array([0,1]))
错误
AttributeError: 'Pipeline' object has no attribute 'partial_fit'
尝试给定的代码示例:
clf=SGDClassifier(alpha=.0001, loss='log', penalty='l2', n_jobs=-1, #shuffle=True, n_iter=10, verbose=1)length=len(X)/2clf.partial_fit(X[:length],y[:length],classes=np.array([0,1]))clf.partial_fit(X[length:],y[length:],classes=np.array([0,1]))
错误
File "/home/kntgu/anaconda2/lib/python2.7/site-packages/sklearn/utils/validation.py", line 573, in check_X_yensure_min_features, warn_on_dtype, estimator)File "/home/kntgu/anaconda2/lib/python2.7/site-packages/sklearn/utils/validation.py", line 433, in check_arrayarray = np.array(array, dtype=dtype, order=order, copy=copy)TypeError: float() argument must be a string or a number
我的数据集包括一些句子及其词性标签和依存关系。
Thanks NN 0 rootto IN 3 caseall DT 1 nmodwho WP 5 nsubjvolunteered VBD 3 acl:relcl. . 1 punctYou PRP 3 nsubjwill MD 3 auxremain VB 0 rootas IN 5 casealternates NNS 3 obl. . 3 punct
回答:
如文档中所见,scikit-learn的Pipeline
对象没有partial_fit
属性。
其原因是您可以向该Pipeline
对象添加任何您想要的估计器,而并非所有这些估计器都实现了partial_fit
。这里有一份支持的估计器列表。
如您所见,使用SGDClassifier
(不使用Pipeline
),您不会得到“无此属性”的错误,因为这个特定的估计器是支持的。您得到的这个错误信息可能是由于文本数据引起的。您可以使用LabelEncoder来处理非数值列。