我想了解如何使用K-means对一个多变量数据集进行聚类。这个数据集中每个样本对应一个Person(我有6000人),每个Person都有连续和离散属性(每人10个属性)。例如:
- person_id: 1234
- name: “John Doe”
- age: 30
- height: ‘5 ft 10 in’
- salary_value: 5000
- Salary_currency: USD
- is_customer: False
- Company: “Testing Inc.”
- …
我已经阅读了关于多维K-means聚类的现有答案,但那里的数据集属性都是连续的。更有帮助的阅读是一篇关于连续和离散变量聚类算法的帖子。如后者所述,我接受可能需要找到一个为离散状态赋值的函数。但我不能使用ROCK或COBWEB进行聚类,只能使用K-means。
我可以使用哪些函数来将离散值转换为连续值?此外,有没有办法也可以对属性进行优先级排序(比如基于薪资/年龄的聚类比身高更重要),还是我应该彻底改变整个方法?
回答:
不要在这种数据上使用K-means!
K-means基于三个重要的假设:
- 每个属性的均值能代表数据
- 最小化平方偏差
- 它们都同样重要
K-means中的这些假设意味着你应该只在区间尺度变量上使用它(1),这些变量不应有偏斜(2),并且具有可比较的值域(不要混合不同的单位/尺度;例如薪资、年龄和身高)(3)。
类别的独热编码并不会使它们变成区间尺度。如果你只是将数据转换成某个IR^p向量空间,你会得到“一些输出”,但这些输出在任何客观意义上都不是好的。你回答了错误的问题,因为你根本没有费心去明确问题本身。
如果你幸运的话,可能有一个单一的属性(在你的例子中可能是薪资)主导结果,而其他所有属性对结果没有任何影响…