Add additional feature to CountVectorizer matrix
我遇到了一个问题,我必须在 scikit learn 的 CountVectorizer 函数创建的标记计数列表中添加一个附加特征(平均字长)。假设我有以下代码:
1 2 3 4 5 6 7 8 9 | #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 函数简单地连接两个列表,如下所示:
1 | x = zip(x_counts, average_lengths) |
但是当我尝试拟合我的模型时出现错误:
1 | ValueError: setting an array element with a sequence. |
有人知道如何解决这个问题吗?
您可以像本文一样编写自己的转换器,它可以为您提供每条推文的平均字长并使用 FeatureUnion:
1 2 3 4 | vectorizer = FeatureUnion([ ('cv', CountVectorizer(analyzer = 'word', ngram_range = (1,1))), ('av_len', AverageLenVectizer(...)) ]) |
因为CountVectorizer返回的是一个稀疏矩阵,所以需要对其进行稀疏矩阵运算。您可以通过使用
中的
例如(取自 scipy 的文档):
1 2 3 4 5 6 | 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]]) |