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折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下: sequences = to…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

发表回复

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