我必须将一些json格式的文档聚类。我想修改功能哈希来减小尺寸。开始小,这是我输入:使用功能散列的群集
doc_a = { "category": "election, law, politics, civil, government",
"expertise": "political science, civics, republican"
}
doc_b = { "category": "Computers, optimization",
"expertise": "computer science, graphs, optimization"
}
doc_c = { "category": "Election, voting",
"expertise": "political science, republican"
}
doc_d = { "category": "Engineering, Software, computers",
"expertise": "computers, programming, optimization"
}
doc_e = { "category": "International trade, politics",
"expertise": "civics, political activist"
}
现在,我怎么去使用功能散列,为每个文档向量,然后计算相似度和创建群集?阅读http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.FeatureHasher.html后,我有点失落。 不知道如果我必须使用“字典”或转换我的数据有一些整数,然后使用'pair''input_type'到我的featureHasher。我应该如何解释featureHasher的输出?例如,示例http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.FeatureHasher.html输出一个numpy数组。
In [1]: from sklearn.feature_extraction import FeatureHasher
In [2]: hasher = FeatureHasher(n_features=10, non_negative=True, input_type='pair')
In [3]: x_new = hasher.fit_transform([[('a', 1), ('b', 2)], [('a', 0), ('c', 5)]])
In [4]: x_new.toarray()
Out[4]:
array([[ 1., 2., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 5., 0., 0.]])
In [5]:
我认为这些行是文档和列值是..?说,如果我想聚类或找到这些向量之间的相似性(使用余弦或Jaccard),不知道是否我必须做项目明智的比较?
预期输出:doc_a,doc_c和doc_e应该位于一个群集中,其余群集位于另一个群集中。
谢谢!
谢谢瑞安。我在10种具有4种文本特征的文档上试了一下,效果很好。现在,我可以直观地查看群集的成员,并查看哪些功能对其“亲密度”有贡献。当我处理非常大的数据集时,这会成为一个问题,因为文档中提到:“没有办法做反向变换(从特征索引到字符串特征名),这在试图反思哪些特征对于一个模型。”)。我正在研究sklearn可以提供的其他事情。有任何想法吗? – user1717931
是的,与HashingVectorizer有一个折衷,因为你可以使用更多的功能来适应你的模型,但是你失去了自省的能力。 sklearn中的其他向量化工具(CountVectorizer,TFIDFVectorizer)将允许您执行自检,但它们有更大的占用空间;为了使它们适合大数据集,您可以将max_features设置为合理的数字。 –
如果我必须手动计算两个散列向量(包含每个要素桶中散列数的特征向量)之间的相似度 - 我可以简单地使用jaccard或余弦我相信。对? – user1717931