python - 如何将 BOW 以外的功能添加到 scikit-learn 分类模型中

标签 python scikit-learn text-classification

我正在尝试构建一个文本分类模型。我的目标是将 10000 个文档中的每个段落分类为是否包含“劳工罢工事件”信息。

首先,我遵循基本的预处理步骤,将段落转换为术语文档矩阵 (CountVectorizer)。然后将这个矩阵输入到 scikit-learn 提供的逻辑回归和 svm 等模型中。

但是,我发现预训练的 LDA 模型给出的有关文档主题的信息将有助于段落级别的文本分类。

因此,我还想提供有关主题的信息以及每个文本的 BOW 信息。

遵循similar的答案问题,我认为只需在术语文档矩阵的最后一列添加主题编号即可。

例如,让“text_train”为我的训练语料库(假设有 40000 个段落),“topic”为 LDA 模型赋予每个段落的主题编号列表。

vectorizer = CountVectorizer(ngram_range=(1,3))
X = vectorizer.fit_transform(text_train)  
X.toarray() #shape (40000, 643898)
topic = coo_matrix([topic]).T #shape (40000, 1)
hstack([X.toarray(), topic]).toarray() #shape (40000, 643899)

这将返回所需的矩阵,其最后一列包含有关主题的信息。

但是,由于主题编号不像术语文档矩阵的元素那样具有基数(或序数)顺序,我担心某些线性机器学习模型可能不适合这项工作。

这是真的吗?那我还有其他可以采用的解决方案吗?

最佳答案

是的,你说得对; 主题列不是基数/序数特征。

您可以使用oneHotEncoding() topic 功能,然后将其附加到 countVectorizer 输出。

另一个选项(我认为这是更好的方法),您可以提供每个主题的概率(可以通过使用 lda.transform() 函数获得)作为附加功能。

关于python - 如何将 BOW 以外的功能添加到 scikit-learn 分类模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56251034/

相关文章:

python - 为什么我的预测值几乎相同(并且与平均值相似)?

python - 安装 scikit-learn 时就地构建扩展有什么优势?

python - GridSearchCV 没有关于高冗长的报告

machine-learning - fastText 的官方 python 绑定(bind)中是否有方法 .predict

python - 通过将列表插入列表来扩展列表

python - 如何将列表列表打印为简单字符串?

python - Nose 工具和 pylint

python - 为什么这个图形路由会重复

python - 如何使用带有 countVectorizer.fit_transform() 的 pickled 分类器来标记数据

python - 使用机器学习对大文本进行分类