K-Means聚类用于多变量数据(包含离散和连续属性)

我想了解如何使用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基于三个重要的假设:

  1. 每个属性的均值能代表数据
  2. 最小化平方偏差
  3. 它们都同样重要

K-means中的这些假设意味着你应该只在区间尺度变量上使用它(1),这些变量不应有偏斜(2),并且具有可比较的值域(不要混合不同的单位/尺度;例如薪资、年龄和身高)(3)。

类别的独热编码并不会使它们变成区间尺度。如果你只是将数据转换成某个IR^p向量空间,你会得到“一些输出”,但这些输出在任何客观意义上都不是好的。你回答了错误的问题,因为你根本没有费心去明确问题本身。

如果你幸运的话,可能有一个单一的属性(在你的例子中可能是薪资)主导结果,而其他所有属性对结果没有任何影响…

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注