sklearn 除了文本之外的其他输入用于文本分类

Posted

技术标签:

【中文标题】sklearn 除了文本之外的其他输入用于文本分类【英文标题】:Sklearn other inputs in addition to text for text classification 【发布时间】:2016-03-13 17:49:53 【问题描述】:

我正在尝试使用“Sci kit”学习词袋来做一个文本分类器。向量化为分类器。但是,我想知道除了文本本身之外,我如何将另一个变量添加到输入中。假设我想在文本之外添加一些文字(因为我认为它可能会影响结果)。我该怎么做呢? 我是否必须在该分类器之上添加另一个分类器?或者有没有办法将该输入添加到矢量化文本?

【问题讨论】:

我正在处理一个类似的问题并正在研究使用Feature Unionscikit-learn.org/stable/modules/pipeline.html#feature-union。 【参考方案1】:

Scikit 学习分类器适用于 numpy 数组。 这意味着在对文本进行矢量化之后,您可以轻松地将新特征添加到该数组中(我收回这句话,不是很容易但可行)。 问题在于文本分类,您的特征将是稀疏的,因此正常的 numpy 列添加不起作用。

代码修改自text mining example from scikit learn scipy 2013 tutorial。

from sklearn.datasets import load_files
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
import numpy as np
import scipy

# Load the text data

twenty_train_subset = load_files('datasets/20news-bydate-train/',
    categories=categories, encoding='latin-1')

# Turn the text documents into vectors of word frequencies
vectorizer = TfidfVectorizer(min_df=2)
X_train_only_text_features = vectorizer.fit_transform(twenty_train_subset.data)


print type(X_train_only_text_features)
print "X_train_only_text_features",X_train_only_text_features.shape

size = X_train_only_text_features.shape[0]
print "size",size

ones_column = np.ones(size).reshape(size,1)
print "ones_column",ones_column.shape


new_column = scipy.sparse.csr.csr_matrix(ones_column )
print type(new_column)
print "new_column",new_column.shape

X_train= scipy.sparse.hstack([new_column,X_train_only_text_features])

print "X_train",X_train.shape

输出如下:

<class 'scipy.sparse.csr.csr_matrix'>
X_train_only_text_features (2034, 17566)
size 2034
ones_column (2034L, 1L)
<class 'scipy.sparse.csr.csr_matrix'>
new_column (2034, 1)
X_train (2034, 17567)

【讨论】:

哦,我明白了。非常感谢您,先生。

以上是关于sklearn 除了文本之外的其他输入用于文本分类的主要内容,如果未能解决你的问题,请参考以下文章

选择用于对用户文本数据进行分类的 sklearn 管道

sklearn中带有词袋和附加情感特征的文本分类器

如何使用 sklearn Pipeline 和 FeatureUnion 选择多个(数字和文本)列进行文本分类?

向 Sklearn 分类器添加功能

sklearn:文本分类交叉验证中的向量化

如何使用 sklearn 库使用朴素贝叶斯执行文本分类?