【问题标题】:Clustering using k-means in python在 python 中使用 k-means 进行聚类
【发布时间】:2012-03-24 15:03:47
【问题描述】:
我有一个由 user_id tag_id 形式的行组成的文档 d1。
还有另一个文档 d2 由 tag_id tag_name 组成
我需要生成具有相似标记行为的用户集群。
我想用python中的k-means算法试试这个。
我对此完全陌生,无法弄清楚如何开始。
谁能指点一下?
我是否需要首先使用 d1 和他的标签词汇为每个用户创建不同的文档?
然后在这些文档上应用 k-means 算法?
d1 中有大约 100 万用户。我不确定我的想法是否正确,创建了 100 万个文件?
【问题讨论】:
标签:
python
tags
cluster-analysis
data-mining
k-means
【解决方案1】:
由于您拥有的数据是二进制且稀疏的(特别是,并非所有用户都标记了所有文档,对吧)?所以我根本不相信 k-means 是正确的方法。
无论如何,如果您想尝试 k-means,请查看变体,例如 k-medians(不允许“半标记”)和凸/球形k-means(据说它与余弦距离等距离函数更有效,在这里看起来更合适)。
【解决方案3】:
首先,您需要对数据进行非规范化,以便拥有一个像这样的文件:
userid tag1 tag2 tag3 tag4 ....
0001 1 0 1 0 ....
0002 0 1 1 0 ....
0003 0 0 1 1 ....
然后你需要循环遍历 k-means 算法。这是来自 ml 类的 matlab 代码:
% Initialize centroids
centroids = kMeansInitCentroids(X, K);
for iter = 1:iterations
% Cluster assignment step: Assign each data point to the
% closest centroid. idx(i) corresponds to cˆ(i), the index
% of the centroid assigned to example i
idx = findClosestCentroids(X, centroids);
% Move centroid step: Compute means based on centroid
% assignments
centroids = computeMeans(X, idx, K);
end