为CountVectorizer矩阵添加其他功能

时间:2015-12-21 14:08:13

标签: python scikit-learn

我遇到了一个问题,我必须在scikit learn的CountVectorizer函数创建的令牌计数列表中添加一个额外的功能(平均字长)。说我有以下代码:

#list of tweets
texts = [(list of tweets)]

#list of average word length of every tweet
average_lengths = word_length(tweets)

#tokenizer
count_vect = CountVectorizer(analyzer = 'word', ngram_range = (1,1))
x_counts = count_vect.fit_transform(texts)

每个实例的格式应为(令牌,平均字长)。我最初的想法是简单地使用zip函数连接两个列表,如下所示:

x = zip(x_counts, average_lengths)

但是当我尝试适合我的模型时出现错误:

ValueError: setting an array element with a sequence.   

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

你可以在this文章中编写自己的变换器,它可以为每个推文提供平均字长,并使用FeatureUnion

vectorizer = FeatureUnion([
        ('cv', CountVectorizer(analyzer = 'word', ngram_range = (1,1))),
        ('av_len', AverageLenVectizer(...))
    ])

答案 1 :(得分:1)

由于CountVectorizer返回稀疏矩阵,因此需要对其执行稀疏矩阵运算。您可以使用hstack中的scipy.sparse来完成此操作。

例如(摘自scipy' s文档):

from scipy.sparse import coo_matrix, hstack
A = coo_matrix([[1, 2], [3, 4]])
B = coo_matrix([[5], [6]])
hstack([A,B]).toarray()
array([[1, 2, 5],
   [3, 4, 6]])