将 Sklearn TFIDF 与附加数据相结合

jrj*_*s83 7 numpy pandas sklearn-pandas

我正在尝试为监督学习准备数据。我有我的 Tfidf 数据,它是从我的数据框中名为“合并”的列生成的

vect = TfidfVectorizer(stop_words='english', use_idf=True, min_df=50, ngram_range=(1,2))
X = vect.fit_transform(merged['kws_name_desc'])
print X.shape
print type(X)

(57629, 11947)
<class 'scipy.sparse.csr.csr_matrix'>
Run Code Online (Sandbox Code Playgroud)

但我还需要向这个矩阵添加额外的列。对于 TFIDF 矩阵中的每个文档,我都有一个附加数字特征的列表。每个列表的长度为 40,它由浮点数组成。

所以为了澄清起见,我有 57,629 个长度为 40 的列表,我想将它们附加到我的 TDIDF 结果中。

目前,我在 DataFrame 中有这个,示例数据:合并 ["other_data"]。下面是来自合并 ["other_data"] 的示例行

0.4329597715,0.3637511039,0.4893141843,0.35840...   
Run Code Online (Sandbox Code Playgroud)

如何使用 TF-IDF 矩阵附加数据框列的 57,629 行?老实说,我不知道从哪里开始,希望得到任何指点/指导。

jrj*_*s83 1

我想到了:

第一:迭代我的 pandas 列并创建一个列表列表

for_np = []

for x in merged['other_data']:
    row = x.split(",")
    row2 = map(float, row)
    for_np.append(row2)
Run Code Online (Sandbox Code Playgroud)

然后创建一个np数组:

n = np.array(for_np)
Run Code Online (Sandbox Code Playgroud)

然后在 X(我原来的 tfidf 稀疏矩阵和新矩阵)上使用 scipy.sparse.hstack。如果这些 40 维向量不能改善分类结果,我最终可能会重新加权,但这种方法有效!

import scipy.sparse

X = scipy.sparse.hstack([X, n])
Run Code Online (Sandbox Code Playgroud)