属性错误:“管道”对象没有属性“partial_fit”

knt*_*tgu 4 python machine-learning scikit-learn dictvectorizer

我正在尝试通过大量数据训练我的二元分类器。之前我可以通过sklearn的fit方法来完成训练。但现在,我有更多的数据,我无法应付它们。我正在尝试部分安装它们,但无法消除错误。如何增量训练我的海量数据?通过应用我之前的方法,我收到有关管道对象的错误。我已经浏览了增量学习中的示例,但仍然运行这些代码示例会出现错误。我将不胜感激任何帮助。

X,y = transform_to_dataset(training_data)

clf = Pipeline([
    ('vectorizer', DictVectorizer()),
    ('classifier', LogisticRegression())])

length=len(X)/2

clf.partial_fit(X[:length],y[:length],classes=np.array([0,1]))

clf.partial_fit(X[length:],y[length:],classes=np.array([0,1]))
Run Code Online (Sandbox Code Playgroud)

错误

AttributeError: 'Pipeline' object has no attribute 'partial_fit'
Run Code Online (Sandbox Code Playgroud)

尝试给定的代码示例:

clf=SGDClassifier(alpha=.0001, loss='log', penalty='l2', n_jobs=-1,
                      #shuffle=True, n_iter=10, 
                      verbose=1)
length=len(X)/2

clf.partial_fit(X[:length],y[:length],classes=np.array([0,1]))

clf.partial_fit(X[length:],y[length:],classes=np.array([0,1]))
Run Code Online (Sandbox Code Playgroud)

错误

File "/home/kntgu/anaconda2/lib/python2.7/site-packages/sklearn/utils/validation.py", line 573, in check_X_y
ensure_min_features, warn_on_dtype, estimator)
File "/home/kntgu/anaconda2/lib/python2.7/site-packages/sklearn/utils/validation.py", line 433, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
TypeError: float() argument must be a string or a number
Run Code Online (Sandbox Code Playgroud)

我的数据集由一些句子及其词性标签和依赖关系组成。

Thanks  NN  0   root
to  IN  3   case
all DT  1   nmod
who WP  5   nsubj
volunteered VBD 3   acl:relcl
.   .   1   punct

You PRP 3   nsubj
will    MD  3   aux
remain  VB  0   root
as  IN  5   case
alternates  NNS 3   obl
.   .   3   punct
Run Code Online (Sandbox Code Playgroud)

Ben*_*aVR 5

scikit-learn 中的对象Pipeline没有,如文档partial_fit中所示。

这样做的原因是您可以向该Pipeline对象添加任何您想要的估计器,并且并非所有估计器都实现partial_fit. 以下是受支持的估算器的列表

如您所见,使用SGDClassifier(without Pipeline),您不会收到此“无属性”错误,因为支持此特定估计器。您收到的此错误消息可能是由文本数据引起的。您可以使用LabelEncoder来处理非数字列。

  • @kntgu 您可以将对象(步骤)放入具有“partial_fit()”方法的“Pipeline”中,但也可以将“Pipeline”中没有此方法的对象(步骤)放入其中。当您在“Pipeline”对象上调用“fit()”时,它将在您添加的每个步骤上调用此“fit()”。如果“Pipeline”具有此“fit()”方法,则只能向“Pipeline”添加步骤。然而,假设“Pipeline”确实支持“partial_fit()”,只有少数步骤具有“partial_fit()”,因此“Pipeline”希望为每个步骤调用此方法,但这些步骤根本不支持它。这就是为什么 `Pipeline` 本身不支持这种方法,希望现在已经清楚了。 (2认同)