如何在我的数据集中应用 k 均值?

数据挖掘 r 聚类 k-均值 异常检测
2022-03-03 18:18:06

这是我的示例数据集

我必须从我的数据集中检测异常。异常是关于网络使用的哪个区域和哪个时间(我的数据中的 total_activity)显着改善。帮助我了解如何为该数据集应用 k-means。

4个回答

Kmeans 仅适用于数值数据,因此

  1. 把你的分类数据扔出去,
  2. 标准化您的数字数据,
  3. 计算选定度量的距离矩阵(例如,dist()使用euclidean),
  4. 运行kmeans(distance_matrix,k=3)(尝试 k=3 说 k=7)
  5. 查看model$cluster以获取数据点类

事实上,我不会使用 k-means 来解决您的问题。为什么不像sklearn 提供的那样基于 svm 的方法呢?

请参阅,是一般方法,是实际示例。

正如@user2974951 所说,K-means 用于数值数据。还有其他聚类算法也适用于分类数据,例如K-modes

但是让我们考虑您的数据并尝试了解它是否是数字:

  • square_id - 是标识符,所以它很可能不代表数据点之间的关系。除非确实如此,否则它不是您应该用于算法的功能。
  • country_code - 代表一个国家,所以一个直观的建模方法是分类使用它。您可能会考虑是否可以以任何方式对其进行量化(例如,通过推导国家之间的距离),但这将在很大程度上取决于您的问题的背景,因此需要进一步考虑。
  • activity_date - 日期是定量的,但您需要将日期格式转换为一致的数字表示,例如通过Unix time,这是自 1970 年 1 月 1 日以来经过的时间。
  • activity_time - 也许这是活动时间?如果是这样的话,我建议在时间的表示上把它和activity_date合并。
  • total_activity - 似乎是您唯一的上下文数据,以科学记数法表示幸运的是它是数字的,所以你只能在它上面应用 K-means。但这会导致聚集在一条数值线上。

这是关于如何使用您拥有的数据。但是,剩下的问题是您实际上可以做什么?

探索数据以了解它是值得的。例如,您为什么不尝试二维地绘制数据以了解它所代表的含义?例如,您可以绘制 country vs total_activity,或 time vs total_activity。您可以通过映射第三个特征(在我的两个建议中分别为时间或国家)来增强表示。您可以在时间与活动图上用颜色表示国家,或在国家与活动图上用颜色亮度(如HSL 颜色表示)或点大小表示时间。

KMeans不适用于此类数据。

数学很重要检查 k-means 的目标函数,以及优化它是否对您的应用程序有意义 - 可能没有。那么这个钉子的螺丝刀是错误的。