Python 使用与Scikit管道配合的部分螺纹接头

Python 使用与Scikit管道配合的部分螺纹接头,python,scikit-learn,Python,Scikit Learn,如何在封装在()中的scikit学习分类器上调用partial_fit() 我正在尝试使用sgdclassizer构建一个增量可训练的文本分类器,如: from sklearn.linear_model import SGDClassifier from sklearn.pipeline import Pipeline from sklearn.feature_extraction.text import HashingVectorizer from sklearn.feature_extrac

如何在封装在()中的scikit学习分类器上调用
partial_fit()

我正在尝试使用
sgdclassizer
构建一个增量可训练的文本分类器,如:

from sklearn.linear_model import SGDClassifier
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.multiclass import OneVsRestClassifier

classifier = Pipeline([
    ('vectorizer', HashingVectorizer(ngram_range=(1,4), non_negative=True)),
    ('tfidf', TfidfTransformer()),
    ('clf', OneVsRestClassifier(SGDClassifier())),
])
但是我得到一个
AttributeError
试图调用
分类器。partial_fit(x,y)


它支持
fit()。是否可以内省管道,调用数据转换器,然后在我的分类器上直接调用
partial_-fit()

管道不使用
partial_-fit
,因此不公开它。我们可能需要一个用于核心外计算的专用管道方案,但这也取决于以前模型的能力

特别是在这种情况下,您可能希望对数据进行多次传递,一次传递适合管道的每个阶段,然后转换数据集以适合下一个阶段,但第一个阶段是无状态的,因此不适合数据中的参数


同时,根据您的需要定制您自己的包装器代码可能更容易。

以下是我正在做的事情-其中“mapper”和“clf”是我的管道obj中的两个步骤

def partial_pipe_fit(pipeline_obj, df):
    X = pipeline_obj.named_steps['mapper'].fit_transform(df)
    Y = df['class']
    pipeline_obj.named_steps['clf'].partial_fit(X,Y)
您可能希望在不断调整/更新分类器时跟踪性能,但这是第二点

因此,更具体地说,原始管道的构造如下

to_vect = Pipeline([('vect', CountVectorizer(min_df=2, max_df=.9, ngram_range=(1, 1), max_features = 100)),
                            ('tfidf', TfidfTransformer())])
full_mapper = DataFrameMapper([
            ('norm_text', to_vect),
            ('norm_fname', to_vect), ])

full_pipe = Pipeline([('mapper', full_mapper), ('clf', SGDClassifier(n_iter=15, warm_start=True,
                                                                n_jobs=-1, random_state=self.random_state))])

谷歌DataFrameMapper了解更多信息-但在这里,它只是启用了一个转换步骤,可以很好地处理熊猫

你能推荐我如何使用我自己的吗?我尝试使用管道的transform()方法,然后提取分类器并将转换后的数据提供给它的partial_fit(),但我得到一个错误,即tdf向量未定义。请阅读和。然后阅读的文档,以确保您完全理解有状态特征提取的问题。实现将取决于您试图解决的问题。特别是如果您使用有状态转换器作为
TfidfTransformer
,则需要对数据进行多次传递。您最终是否找到了解决方案?