使用 `TfidfVectorizer`、`CountVectorizer` 等时,是否需要对标签进行编码?

在处理文本数据时,我理解需要将文本标签编码成某种数值表示(例如,使用 LabelEncoderOneHotEncoder 等)。

但是,我的疑问是,当你使用一些特征提取类(例如 TfidfVectorizerCountVectorizer 等)时,是否需要显式地执行这一步,还是这些类会在后台自动对标签进行编码?

如果确实需要自己单独对标签进行编码,你能否在 Pipeline 中执行这一步(如下的示例)

    pipeline = Pipeline(steps=[        ('tfidf', TfidfVectorizer()),        ('sgd', SGDClassifier())    ])

或者你需要在使用管道之前先对标签进行编码,因为管道期望 fit()transform() 数据(而不是标签)?


回答:

请查看 scikit-learn 词汇表中关于 transform 的术语:

在转换器中,将输入,通常只有 X,转换到某个转换空间(通常记为 Xt)。输出是一个数组或稀疏矩阵,长度为 n_samples,且列数在拟合后固定。

事实上,几乎所有转换器都只转换特征。这对 TfidfVectorizerCountVectorizer 同样适用。如果有疑问,你总是可以检查转换函数的返回类型(例如 CountVectorizerfit_transform 方法)。

当你在一个管道中组合多个转换器时,情况也是如此。这在其 用户指南 中有说明:

转换器通常与分类器、回归器或其他估计器结合使用,以构建一个复合估计器。最常用的工具是 Pipeline。Pipeline 通常与 FeatureUnion 结合使用,后者将转换器的输出连接成一个复合特征空间。TransformedTargetRegressor 处理目标的转换(例如对 y 进行对数变换)。相比之下,Pipeline 只转换观测数据(X)

因此,总的来说,你通常需要单独处理标签,并且在拟合估计器/管道之前进行处理。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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