如何向Scikit学习分类模型中添加BOW以外的功能

时间:2019-05-22 07:01:36

标签: 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)

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

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

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

1 个答案:

答案 0 :(得分:2)

是的,你是对的; Topic列不是主要/常规功能。

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

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