向 CountVectorizer 矩阵添加附加功能
Add additional feature to CountVectorizer matrix
我遇到了一个问题,我必须向由 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.
有人知道如何解决这个问题吗?
由于CountVectorizerreturns是一个稀疏矩阵,需要对其进行稀疏矩阵运算。您可以使用 scipy.sparse
.
中的 hstack
来完成此操作
例如(取自scipy的文档):
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]])
您可以像 this article which give you average word length of every tweet and use FeatureUnion:
那样编写自己的转换器
vectorizer = FeatureUnion([
('cv', CountVectorizer(analyzer = 'word', ngram_range = (1,1))),
('av_len', AverageLenVectizer(...))
])
我遇到了一个问题,我必须向由 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.
有人知道如何解决这个问题吗?
由于CountVectorizerreturns是一个稀疏矩阵,需要对其进行稀疏矩阵运算。您可以使用 scipy.sparse
.
hstack
来完成此操作
例如(取自scipy的文档):
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]])
您可以像 this article which give you average word length of every tweet and use FeatureUnion:
那样编写自己的转换器vectorizer = FeatureUnion([
('cv', CountVectorizer(analyzer = 'word', ngram_range = (1,1))),
('av_len', AverageLenVectizer(...))
])