如何将以下功能添加到tfidf矩阵?

时间:2016-12-27 03:31:15

标签: numpy scikit-learn

您好我有一个名为list_cluster的列表,如下所示:

list_cluster=["hello,this","this is a test","the car is red",...]

我正在使用TfidfVectorizer生成如下模型:

from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
with open('vectorizerTFIDF.pickle', 'rb') as infile:
    tdf = pickle.load(infile)
tfidf2 = tdf.transform(list_cluster)

然后我想在这个名为tfidf2的矩阵中添加新功能,我有一个如下列表:

dates=['010000000000', '001000000000', '001000000000', '000000000001', '001000000000', '000000000010',...]

此列表与list_cluster具有相同的长度,并且表示日期有12个位置,并且在1的位置是一年中的相应月份,

例如'010000000000'代表二月,

为了首先使用它作为功能我尝试了:

import numpy as np
dates=np.array(listMonth)
dates=np.transpose(dates)

得到一个numpy数组,然后转置它以便将它与第一个矩阵连接起来tfidf2

print("shape tfidf2: "+str(tfidf2.shape),"shape dates: "+str(dates.shape))

为了连接我的矢量和矩阵我试过:

tfidf2=np.hstack((tfidf2,dates[:,None]))

然而这是输出:

shape tfidf2: (11159, 1927) shape dates: (11159,)
Traceback (most recent call last):
  File "Main.py", line 230, in <module>
    tfidf2=np.hstack((tfidf2,dates[:,None]))
  File "/usr/local/lib/python3.5/dist-packages/numpy/core/shape_base.py", line 278, in hstack
    return _nx.concatenate(arrs, 0)
ValueError: all the input arrays must have same number of dimensions

形状似乎很好,但我不确定是什么失败了,我想感谢支持将此功能连接到我的tfidf2矩阵,提前感谢您的注意,

1 个答案:

答案 0 :(得分:1)

您需要将所有字符串转换为sklearn的数字。一种方法是在sklearn的预处理模块中使用LabelBinarizer类。这会为原始列中的每个唯一值创建一个新的二进制列。

如果日期与tfidf2的行数相同,那么我认为这样可行。

# create tfidf2
tfidf2 = tdf.transform(list_cluster)

#create dates
dates=['010000000000', '001000000000', '001000000000', '000000000001', '001000000000', '000000000010',...]

# binarize dates
lb = LabelBinarizer()
b_dates = lb.fit_transform(dates)

new_tfidf = np.concatenate((tfidf2, b_dates), axis=1)