使用预定义数据集的 K 均值聚类

K-means clustering with predefined dataset

我正在尝试对 R 中包 "ggplot2" 附带的电影数据集进行聚类。我将使用 k-means。该数据集附带的列名是:

[1] "title"       "year"        "length"      "budget"      "rating"     
 [6] "votes"       "r1"          "r2"          "r3"          "r4"         
[11] "r5"          "r6"          "r7"          "r8"          "r9"         
[16] "r10"         "mpaa"        "Action"      "Animation"   "Comedy"     
[21] "Drama"       "Documentary" "Romance"     "Short" 

您认为根据电影类型进行聚类是个好主意吗?我有点迷路,不知道从哪里开始。有什么建议吗?

回答你的第一个问题:是的,我认为这是一个有趣的项目。使用此数据集可能是了解不同数据挖掘技术的一种很酷的方式。

为了回答你的第二个问题,这里有一些建议。聚类是一种无监督学习技术。当目标变量(在这种情况下,目标变量可能是电影的类型)未知时,学习是无监督的。但是,查看您列出的列,您似乎确实有流派信息。考虑到这一点,您有两个选择。首先,您可以假装没有流派信息。在这种情况下,您将对其余数据应用 k-means。聚类完成后,您可以通过将算法与已知类型进行比较来评估该算法的效果。其次,您可以将此问题视为分类问题。在这种情况下,您将使用流派信息来学习可以预测流派的模型。你可能已经知道了,但我只是想说一下。

为了给你一些关于聚类问题的具体建议,我首先想知道 'r1', ..., 'r10' 变量代表什么。它们是数值变量还是分类变量? K-means 有两个步骤:一个是将数据点分配给最接近它的质心,另一个是通过取集群中所有数据点的平均值来计算新的质心。取这些变量的平均值有意义吗?

考虑到这一点,我建议首先选择要在聚类算法中使用的变量。然后编写以下函数:一个可以计算两点之间的距离,一个可以将观测值分配给最近的质心,一个可以根据分配重新计算质心。

你需要弄清楚是什么造就了一个好的集群。

有数百万种方法可以对这个数据集进行聚类。因为可以对数据进行不同的预处理,使用不同的算法、距离等等。

没有您的指导,聚类算法只会做一些事情,而且很可能return一个完全无用的结果!

所以你需要先搞清楚objective:什么是好的聚类?

然后您可以尝试调整数据,以便聚类算法为此进行优化 objective。对于 k-means,您需要在预处理中完成所有这些工作。对于 hclust,您还可以选择符合您需求的距离函数。