AttributeError: 'Pipeline' object has no attribute 'partial_fit'
AttributeError: 'Pipeline' object has no attribute 'partial_fit'
我正尝试在大量数据上训练我的二元分类器。以前,我可以通过使用 sklearn 的 fit 方法来完成训练。但是现在,我有更多的数据,我无法应付它们。我正在尝试部分安装它们,但无法消除错误。我如何增量训练我的海量数据?通过应用我以前的方法,我得到了关于管道对象的错误。我已经完成了 Incremental Learning 中的示例,但仍然 运行 这些代码示例会出错。我将不胜感激任何帮助。
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]))
错误
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)/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]))
错误
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
我的数据集由一些带有词性标签和依存关系的句子组成。
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
来自 scikit-learn 的 Pipeline
对象没有 partial_fit
,如 the docs.
中所示
这样做的原因是您可以向该 Pipeline
对象添加任何您想要的估算器,但并非所有估算器都实现了 partial_fit
。 Here is a list of the supported estimators.
如您所见,使用 SGDClassifier
(没有 Pipeline
),您不会得到此 "no attribute" 错误,因为支持此特定估计器。您收到的此错误消息可能是由于文本数据引起的。您可以使用 LabelEncoder 来处理非数字列。
我遇到了与 SGDClassifier
内部管道不支持增量学习(即 partial_fit 参数)相同的问题。有一种方法可以使用 sklearn 进行增量学习,但它不是 partial_fit
,而是 warm_start
。 sklearn中有两个算法LogisticRegression
和RandomForest
支持warm_start.
热启动是另一种方式 incremental_learning。阅读 here
pipeline 没有属性 partial_fit 因为有很多模型没有 partial_fit 可以分配给 pipeline。
我的解决方案是制作字典而不是管道并将其保存为 joblib。
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer = TfidfTransformer()
from sklearn.linear_model import SGDClassifier
model=SGDClassifier(loss='hinge', penalty='l2',alpha=1e-3, random_state=42)
tosave={
"model":model,
"count":count_vect,
"tfid":tfidf_transformer,
}
import joblib
filename = 'package.sav'
joblib.dump(tosave, filename)
然后使用
import joblib
filename = 'package.sav'
pack=joblib.load(filename)
pack['model'].partial_fit(X,Y)
我正尝试在大量数据上训练我的二元分类器。以前,我可以通过使用 sklearn 的 fit 方法来完成训练。但是现在,我有更多的数据,我无法应付它们。我正在尝试部分安装它们,但无法消除错误。我如何增量训练我的海量数据?通过应用我以前的方法,我得到了关于管道对象的错误。我已经完成了 Incremental Learning 中的示例,但仍然 运行 这些代码示例会出错。我将不胜感激任何帮助。
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]))
错误
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)/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]))
错误
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
我的数据集由一些带有词性标签和依存关系的句子组成。
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
来自 scikit-learn 的 Pipeline
对象没有 partial_fit
,如 the docs.
这样做的原因是您可以向该 Pipeline
对象添加任何您想要的估算器,但并非所有估算器都实现了 partial_fit
。 Here is a list of the supported estimators.
如您所见,使用 SGDClassifier
(没有 Pipeline
),您不会得到此 "no attribute" 错误,因为支持此特定估计器。您收到的此错误消息可能是由于文本数据引起的。您可以使用 LabelEncoder 来处理非数字列。
我遇到了与 SGDClassifier
内部管道不支持增量学习(即 partial_fit 参数)相同的问题。有一种方法可以使用 sklearn 进行增量学习,但它不是 partial_fit
,而是 warm_start
。 sklearn中有两个算法LogisticRegression
和RandomForest
支持warm_start.
热启动是另一种方式 incremental_learning。阅读 here
pipeline 没有属性 partial_fit 因为有很多模型没有 partial_fit 可以分配给 pipeline。 我的解决方案是制作字典而不是管道并将其保存为 joblib。
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer = TfidfTransformer()
from sklearn.linear_model import SGDClassifier
model=SGDClassifier(loss='hinge', penalty='l2',alpha=1e-3, random_state=42)
tosave={
"model":model,
"count":count_vect,
"tfid":tfidf_transformer,
}
import joblib
filename = 'package.sav'
joblib.dump(tosave, filename)
然后使用
import joblib
filename = 'package.sav'
pack=joblib.load(filename)
pack['model'].partial_fit(X,Y)