使用 `TfidfVectorizer`、`CountVectorizer` 等时需要对标签进行编码吗?
Posted
技术标签:
【中文标题】使用 `TfidfVectorizer`、`CountVectorizer` 等时需要对标签进行编码吗?【英文标题】:It is necessary to encode labels when using `TfidfVectorizer`, `CountVectorizer` etc? 【发布时间】:2021-08-25 01:32:27 【问题描述】:在处理文本数据时,我理解需要将文本标签编码为某种数字表示(即,通过使用 LabelEncoder
、OneHotEncoder
等)
但是,我的问题是,当您使用某些特征提取类(即TfidfVectorizer
、CountVectorizer
等)时,您是否需要明确执行此步骤,或者这些是否会为您编码标签?
如果您确实需要自己单独对标签进行编码,您是否可以在Pipeline
中执行此步骤(如下图所示)
pipeline = Pipeline(steps=[
('tfidf', TfidfVectorizer()),
('sgd', SGDClassifier())
])
或者您是否需要事先对标签进行编码,因为管道需要 fit()
和 transform()
数据(而不是标签)?
【问题讨论】:
【参考方案1】:查看 scikit-learn
词汇表中的术语 transform:
在转换器中,将输入(通常只有 X)转换为一些转换后的空间(通常表示为 Xt)。输出是一个长度为 n_samples 且列数在拟合后固定的数组或稀疏矩阵。
事实上,几乎所有的转换器都只转换特征。这也适用于TfidfVectorizer
和CountVectorizer
。如果有疑问,您可以随时检查转换函数的返回类型(如CountVectorizer
的fit_transform
方法)。
在管道中组装多个变压器时也是如此。它在其user guide中声明:
Transformers 通常与分类器、回归器或其他估计器组合以构建复合估计器。最常用的工具是管道。 Pipeline 通常与 FeatureUnion 结合使用,它将转换器的输出连接到复合特征空间中。 TransformedTargetRegressor 处理变换目标(即对数变换 y)。 相比之下,Pipelines 只转换观察到的数据 (X)。
因此,总而言之,您通常会在适合估算器/管道之前单独处理标签。
【讨论】:
以上是关于使用 `TfidfVectorizer`、`CountVectorizer` 等时需要对标签进行编码吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Sklearn 的 TfidfVectorizer 变换
在实践中如何使用 TfidfVectorizer 和元数据进行分类?