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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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