将DictVectorizer转换为TfIdfVectorizer

时间:2016-10-12 19:44:19

标签: python scikit-learn k-means tf-idf dictvectorizer

我需要将此格式的一些数据转换为术语文档矩阵:http://pastebin.com/u1A7v1CV

基本上,每行代表一个表示为word_label_id和频率的文档。对应于每个word_label_id的单词在不同的文件中。

我想将其转换为术语文档矩阵,以便我可以对数据进行矢量化并对其进行聚类。

我已设法将数据转换为字典并使用DictVectorizer获取单热编码的稀疏表示,因为有人建议我按以下方式执行此操作:

data = []

with open('../data/input.mat', 'r') as file:
    for i, line in enumerate(file):
        l = line.split()
        d = dict([(k, v) for k, v in zip(l[::2], l[1::2])])
        data.append(d)


v = DictVectorizer(sparse=True, dtype=float)
X = v.fit_transform(data)

这是输出的样子:

  (0, 1312) 1.0
  (0, 2704) 1.0
  (0, 3322) 1.0
  (0, 3492) 1.0
  (0, 3506) 1.0
  (0, 3660) 1.0
  (0, 3674) 1.0
  (0, 3813) 1.0
  (0, 4782) 1.0
  (0, 4827) 1.0
  (0, 5208) 1.0
  (0, 5721) 1.0
  (0, 6105) 1.0
  (0, 6907) 1.0
  (0, 7252) 1.0
  (0, 7615) 1.0
  (0, 7890) 1.0
  (0, 7891) 1.0
  (0, 7906) 1.0
  (0, 7935) 1.0
  (0, 7954) 1.0
  (0, 7962) 1.0
  (0, 7986) 1.0
  (0, 8000) 1.0
  (0, 8012) 1.0
  : :
  (8579, 50731) 1.0
  (8579, 51298) 1.0
  (8579, 51686) 1.0
  (8579, 51732) 1.0
  (8579, 52439) 1.0
  (8579, 52563) 1.0
  (8579, 52621) 1.0
  (8579, 52980) 1.0
  (8579, 53013) 1.0
  (8579, 53018) 1.0
  (8579, 53155) 1.0
  (8579, 53180) 1.0
  (8579, 53317) 1.0
  (8579, 53739) 1.0
  (8579, 54114) 1.0
  (8579, 54444) 1.0
  (8579, 54489) 1.0
  (8579, 54922) 1.0
  (8579, 55074) 1.0
  (8579, 55164) 1.0
  (8579, 55311) 1.0
  (8579, 55741) 1.0
  (8579, 56010) 1.0
  (8579, 56062) 1.0
  (8579, 56946) 1.0

我不知道这意味着什么以及如何解释它。这相当于你在scikit-learn中从TfIdfVectorizer获得的稀疏矩阵吗?

我对此数据集的后续步骤应该是特征选择和k均值聚类。我只是不知道如何使用DictVectorizerdata词典来继续。

1 个答案:

答案 0 :(得分:1)

DictVectorizer的输出是SciPy稀疏矩阵,就像你从TfIdfVectorizer那样。您可以继续进行功能选择和k-means聚类步骤。