变压器在 scikit-learn 中 - 一些具有 fit 和 transform 方法或 fit_transform 方法的类。
预测器- 一些具有拟合和预测方法或 fit_predict 方法的类。
Pipeline只是一个抽象概念,它不是一些现有的机器学习算法。通常,在 ML 任务中,您需要在应用最终估计器之前对原始数据集执行不同的转换序列(查找特征集、生成新特征、仅选择一些好的特征)。
Here http://scikit-learn.org/stable/auto_examples/model_selection/grid_search_text_feature_extraction.html是 Pipeline 使用的一个很好的例子。
Pipeline 为您提供了一个用于所有 3 个转换步骤和结果估计器的界面。它在内部封装了转换器和预测器,现在您可以执行以下操作:
vect = CountVectorizer()
tfidf = TfidfTransformer()
clf = SGDClassifier()
vX = vect.fit_transform(Xtrain)
tfidfX = tfidf.fit_transform(vX)
predicted = clf.fit_predict(tfidfX)
# Now evaluate all steps on test set
vX = vect.fit_transform(Xtest)
tfidfX = tfidf.fit_transform(vX)
predicted = clf.fit_predict(tfidfX)
只需:
pipeline = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', SGDClassifier()),
])
predicted = pipeline.fit(Xtrain).predict(Xtrain)
# Now evaluate all steps on test set
predicted = pipeline.predict(Xtest)
通过管道,您可以轻松地对该元估计器的每个步骤的参数集执行网格搜索。正如上面链接中所描述的。除最后一步之外的所有步骤都必须是变换,最后一步可以是变换器或预测器。回答编辑:
你打电话时pipln.fit()
- 管道内的每个变压器将安装在前一个变压器的输出上(第一个变压器是在原始数据集上学习的)。最后一个估计器可以是转换器或预测器,仅当您最后一个估计器是转换器(分别实现 fit_transform 或分别实现转换和拟合方法)时,您才可以在管道上调用 fit_transform() ,仅当您可以在管道上调用 fit_predict() 或 Predict() 时你的最后一个估计器是预测器。所以你不能在管道上调用fit_transform或transform,最后一步是预测器。