基于混合类型数据框的K均值

时间:2018-12-03 02:05:01

标签: python pandas cluster-analysis k-means

我有以下数据集,我想在上面应用聚类(特别是k均值)。

     id      category     value
0    122         A          3
1    122         B          4
2    122         C          9
3    145         A          19
4    145         B          22
5    145         C          90
.
.
. 
197    225         A          16 
198    225         B          17
199    225         C          12

我想做的是创建id集群。例如,每个聚类应包含基于类别值计算出的相似性度量的一些ID。

例如:C1 {122,145,148} C2 {225,222,221} ....

关于如何处理此类问题的任何想法?

2 个答案:

答案 0 :(得分:0)

Pivot 将您的数据转换为适当的形状:

您的类别应为,而不是单独的行。

     id          A          B         C
1    122         3          4         9
2    145         19         22        90
..

别忘了排除ID列进行分析!集群时切勿包含ID。为了进行分析,您的数据应仅包含A,B,C列;每个ID一行。这样您就有了一个n x 3的矩阵,那么就可以使用k均值了。

答案 1 :(得分:-1)

我假设存在A-Z中的类别,并且有许多行属于同一类别。 K均值算法的工作原理如下所示。从您的问题还不清楚什么是相似性度量。一旦更清楚地了解聚类目标是什么,我将更新我的答案。

更新:在再次查看数据并注意到@ Anony-Mousse的评论之后,我认为问题是:给定三个类别A,B,C及其各自的值和标签(Ids),根据它们进行聚类一些相似性指标(可以是欧几里得距离,余弦距离或其他一些度量)。我正在更新我以前的答案,以符合上述假设。

解析数据并生成三个数字或一键编码的特征,这些特征表示每个ID的类别A,B和C的值。

  

K:输入

     

重复直到收敛:

     
      
  • 随机将3维簇质心U1初始化为Uk。
  •   
  • 对于每个Id,请找到类别值和聚类质心之间的最小欧式距离总和。将该群集质心分配为   当前ID的新群集中心。
  •   
  • 对于每个群集,通过平均分配给它的所有样本(Id)的特征来重新计算其质心。
  •   

当簇质心不发生变化或每个质心的变化小于输入所提供的较小值时,就会出现收敛。