解释 K-means 的结果
Posted
技术标签:
【中文标题】解释 K-means 的结果【英文标题】:Explain results of K-means 【发布时间】:2013-04-22 01:44:14 【问题描述】:我在 Weka 中使用分类器和集群进行了一些预测。我知道如何分析分类器的结果,但我不知道像 K-means 这样的集群的某些结果的真正含义。我知道集群的工作方式不同。要成为更清楚我想具体解释 // cmets 下的表格的全部含义:
编辑:我根据其中一个属性进行预测。表中生成的 3 个集群是否对应于该属性具有的 3 个答案,或者 3 个集群更随机?我真的可以使用集群来制作吗?预测?
kMeans
======
Number of iterations: 9
Within cluster sum of squared errors: 297.46622082142716
Missing values globally replaced with mean/mode
Cluster centroids:
Cluster#
Attribute Full Data 0 1 2
(477) (136) (172) (169)
=======================================================
Religion 8.6939 7.6691 8.9709 9.2367
Vote_Criterion 2.7736 2.8971 2.4942 2.9586
Sex 1.4906 1.4559 2 1
DateBirth 1930.7652 1937.5147 1920.2965 1935.9882
Educ 3.2201 3.2721 3.2209 3.1775
Immigrant 1.6415 1.6838 1.5872 1.6627
Income 2.4675 2.5 2.5523 2.355
Occupation 3.6184 3.8162 3.2907 3.7929
Vote2013 1 2 1 1
Time taken to build model (full training data) : 0.06 seconds
=== Model and evaluation on training set ===
//PLEASE EXPLAIN THE FOLLOWING TABLE
Clustered Instances
0 136 ( 29%)
1 172 ( 36%)
2 169 ( 35%)
EDIT2:vote2013 是一个投票意向属性,有 3 个值,1,2 和 3 代表 3 位候选人总统。那么,vote2013 中的 1,2 是什么意思?
【问题讨论】:
【参考方案1】:这是失败的 k-means 的一个很好的例子。
这实际上不是算法错误,而是您将它用于不适合 k-means 的数据。让我解释一下为您找到了哪些“集群”k-means:
集群 #0 是 2013 年投票的用户(假设 2
表示他们投票?)
在其余实例中,集群 #1 是 sex 2
(女性?),集群 #2 是 sex 1
(男性?)。
问题在于 k-means 最小化了方差。并且在诸如“性别”和“投票”之类的二元属性上拆分数据会在降低方差方面产生巨大的改进。但它实际上并没有产生任何有用的信息!
永远不要对离散属性使用 k-means。它优化了数学度量 - 平方和 - 这仅对 连续 变量有意义。 p>
【讨论】:
我同意 k-means 按 Sex 和 Vote2013 拆分数据,但有一件事让我感到困惑 - 拆分时如何发现 Vote2013 = 1 和 2 而 Vote2013 的总数 = 1? Sex的情况,其中总数反映了两者的混合,更有意义。知道这里发生了什么吗? vote2013 是一个投票意向属性,有 3 个值,1,2 和 3 代表 3 位候选人总统。那么,vote2013 中的 1,2 是什么意思?(来自 EDIT2) 只是一个猜测:也许,因为它是一个类属性,它得到不同的处理。不是给出平均值,而是报告多数类?【参考方案2】://PLEASE EXPLAIN THE FOLLOWING TABLE
Clustered Instances
0 136 ( 29%)
1 172 ( 36%)
2 169 ( 35%)
确定了三个集群,0、1 和 2。
-
第一个聚类包含 136 个数据点,占 477 个数据点总数的 29%。
第二个聚类包含 172 个数据点,占 477 个数据点总数的 36%。
第三个集群包含 169 个数据点,占 477 个数据点总数的 35%。
这似乎很容易 - 我误解了你的问题吗?
编辑 您发布的输出仅显示了使用 k-means 识别的集群。您有三个集群,其质心由第一个表中显示的属性组合给出。
我不确定您所说的 “我根据其中一个属性进行预测”是什么意思 - 此算法将允许您获取未知样本(包含所有属性)并确定哪个离它最近的集群。这实际上意味着在您的数据环境之外几乎没有什么意义。 k-means 算法会在不同的粒度级别上给出不同数量的聚类,因此它确实是一种用于识别数据中存在但难以通过检查得出的关系的工具。
如果您使用它进行分类,您将首先识别集群,然后为每个集群分配一个分类,然后您可以通过找到最近的集群质心来对传入的样本进行分类。
【讨论】:
以上是关于解释 K-means 的结果的主要内容,如果未能解决你的问题,请参考以下文章
解释 K-Means cluster_centers_ 输出
k-means聚类分析 python 代码实现(不使用现成聚类库)