如何改善k均值聚类的结果

时间:2020-05-21 05:27:10

标签: python python-3.x cluster-analysis k-means

我有以下简单的小表,并且我使用了k-means聚类算法对它们进行聚类。

|                 |Cluster| ItalianRe|Japanese|Pizza|Sandwich|Fast Food| 
|-----------------|-------|----------|--------|-----|--------|---------|
|Central Toronto  | 0     |33        |8       |17   |10      |2
|Downtown Toronto | 1     |77        |55      |12   |17      |14
|East Toronto     | 2     |7         |9       |2    |4       |3
|East York        | 2     |4         |3       |4    |3       |1
|Etobicoke        | 0     |18        |6       |20   |7       |9
|North York       | 2     |4         |9       |9    |13      |14
|Scarborough      | 3     |1         |8       |23   |15      |29
|West Toronto     | 2     |7         |5       |7    |7       |5
|York             | 2     |8         |4       |7    |2       |0

对我来说,斯卡伯勒和北约克看上去非常相似,“三明治”和“快餐”中的数字很高,而“日语”中的数字相同。但是,斯卡伯勒被单独分组,北约特克被其他四个分组,乍一看实际上并不那么熟悉。

我使用以下代码进行聚类

# run k-means clustering
kmeans = KMeans(init="k-means++", n_clusters=4,  ).fit(df)

任何人都可以帮助我了解为什么会发生这种情况,或者是否有解决此问题的方法。

P.S。昨天运行代码时,我假设它会将这两个集群聚集在一起。但是现在它像这样聚集了。

1 个答案:

答案 0 :(得分:1)

直觉上,沿着一个维度的相似性并不一定意味着两个点彼此靠近。为了使可视化更容易,请考虑一个包含两个点的二维示例:一个是(0,10),另一个是(0,0)。其他点可能是(1,1),(3,2),(-1,-3)之类的东西。。。现在,您可以看一下前两点,并认为它们都非常相似(实际上是相同的),因此应将它们分组在一起。但是,如果您直观地看到此示例,则很明显(0,0)距离其他点比到第一个点更近。

因此,这可能为我们提供了直觉,为什么3维相似度不能表示紧密度。

此外,两者之间的快餐差异仍然很大。如果我没记错的话,k均值聚类试图将距离最小化,因此“都具有较高的数值”并不意味着什么,但是“此维度上的距离为15”(此数据集中的较大距离)确实可以。