【问题标题】: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(据说它与余弦距离等距离函数更有效,在这里看起来更合适)。

    【讨论】:

      【解决方案2】:

      正如@Jacob Eggers 所提到的,您必须对数据进行非规范化以形成确实是稀疏矩阵的矩阵。 在 python 中使用 SciPy 包作为 k 手段。见

      Scipy Kmeans

      示例和执行。 另请查看Kmeans in python (Stackoverflow),了解有关 python kmeans 聚类的更多信息。

      【讨论】:

        【解决方案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
        

        【讨论】:

          【解决方案4】:

          对于稀疏 k-means,请参阅下面的示例 scikit-learn clustering.
          关于那里有多少个 id,每个用户平均有多少个, 您要查找多少个集群?即使是粗略的数字, 例如100k ids,平均每个用户 10 个,100 个集群, 可能会导致某人在该范围内完成聚类 (或者说“不可能”)。

          MinHash 可能比 k-means 更适合您的问题; 请参阅第 3 章,查找相似项目, Ullman, Mining Massive Datasets;
          还有SO questions/tagged/similarity+algorithm+python

          【讨论】:

            猜你喜欢
            • 2016-07-28
            • 2015-01-16
            • 2017-11-01
            • 2011-06-06
            • 2016-02-01
            • 2019-01-06
            • 1970-01-01
            • 2016-08-14
            • 2018-08-10
            相关资源
            最近更新 更多