Python 使用与Scikit管道配合的部分螺纹接头
如何在封装在()中的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
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
,则需要对数据进行多次传递。您最终是否找到了解决方案?