7

我正在尝试为监督学习准备数据。我有我的 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'>

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

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

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

0.4329597715,0.3637511039,0.4893141843,0.35840...   

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

4

3 回答 3

3

这将完成工作。

`df1 = pd.DataFrame(X.toarray())   //Convert sparse matrix to array
 df2 = YOUR_DF of size 57k x 40

 newDf = pd.concat([df1, df2], axis = 1)`//newDf is the required dataframe
于 2016-11-25T12:16:59.290 回答
1

我想到了:

第一:遍历我的 pandas 列并创建一个列表列表

for_np = []

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

然后创建一个 np 数组:

n = np.array(for_np)

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

import scipy.sparse

X = scipy.sparse.hstack([X, n])
于 2016-11-13T04:18:23.960 回答
0

你可以看看这个问题的答案:

在 scikit-learn 中使用 Featureunion 为 tfidf 组合两个 pandas 列

显然,给出的答案应该有效,但是一旦您希望分类器进行预测,您肯定希望使用管道和特征联合。

于 2017-01-17T14:59:01.013 回答