如何使用sklearn Pipeline转换项目?

我有一个简单的scikit-learn Pipeline,包含两个步骤:一个TfIdfVectorizer后跟一个LinearSVC

我已经使用我的数据拟合了这个pipeline,一切正常。

现在我想使用我的拟合pipeline来转换(而不是预测!)一个项目。

我尝试使用pipeline.transform([item]),但与pipeline.named_steps['tfidf'].transform([item])相比,结果不同。甚至结果的形状和类型也不同:第一个是一个1×3000的CSR矩阵,第二个是一个1×15000的CSC矩阵。哪个是正确的?为什么它们不同?

当使用scikit-learn的Pipeline时,如何转换项目,即在最终估计器之前获取项目的向量表示?


回答:

你不能在一个包含非转换器作为最后一步的pipeline上调用transform方法。如果你想在这样的pipeline上调用transform,最后的估计器必须是一个转换器。

甚至transform方法文档也这么说:

对数据应用转换,以及最终估计器的transform方法。只有当最终估计器实现了transform时才有效。

此外,没有一种方法可以使用除了最后一个之外的所有估计器。不过,你可以创建自己的Pipeline,并从scikit-learn的Pipeline继承所有内容,但添加一个方法,类似于:

def just_transforms(self, X):    """对数据应用所有转换,而不应用最后的估计器。
    参数
    ----------
    X : iterable
        要预测的数据。必须满足pipeline第一步的输入要求。
    """    Xt = X    for name, transform in self.steps[:-1]:        Xt = transform.transform(Xt)    return Xt

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注