在 K-Means 算法 (Apache Spark) 中找到 K 的完美值
Find the perfect value for K in K-Means Algorithm (Apache Spark)
我正在从事一个涉及使用 K-means 模型进行异常检测的项目。
但是,为了获得几乎精确的结果,我需要找到 K 的最佳值。
我的算法依赖于我的模型中的异常值通常会自行放置在一个集群上的想法。通常 "normal" 数据会与其他正常数据聚类在一起,但异常数据会形成自己的聚类,因此表示存在异常。但是,我需要为我的算法找到 K 的最佳值,看看它是否好。
关于如何找到好的 K 值有什么想法吗?
这是一个包含 "normal" 虚拟数据的示例文件,我将使用这些虚拟数据来训练我的模型:
Name Size Records
File1 1013 105727
File2 990 104230
File3 1520 110542
File4 2198 115369
File5 2026 113430
File6 1844 112105
File7 1216 108159
File8 1520 110408
File9 1013 105359
File10 1317 108428
File11 1925 112553
File12 1449 109456
File13 1803 111436
File14 2036 115937
File15 2043 116383
使用分层版本的 K-means。 Apache Spark 具有以这种方式工作的 BisectingKMeans。它根据您拥有的记录数量计算出合适的 K 值。这样您就不必在创建模型时定义 K(集群)。如果您对它分配的值不满意,您仍然可以设置一个 K 值,但它通常工作得很好。
感谢@Peheje 的提示。
我正在从事一个涉及使用 K-means 模型进行异常检测的项目。
但是,为了获得几乎精确的结果,我需要找到 K 的最佳值。
我的算法依赖于我的模型中的异常值通常会自行放置在一个集群上的想法。通常 "normal" 数据会与其他正常数据聚类在一起,但异常数据会形成自己的聚类,因此表示存在异常。但是,我需要为我的算法找到 K 的最佳值,看看它是否好。
关于如何找到好的 K 值有什么想法吗?
这是一个包含 "normal" 虚拟数据的示例文件,我将使用这些虚拟数据来训练我的模型:
Name Size Records
File1 1013 105727
File2 990 104230
File3 1520 110542
File4 2198 115369
File5 2026 113430
File6 1844 112105
File7 1216 108159
File8 1520 110408
File9 1013 105359
File10 1317 108428
File11 1925 112553
File12 1449 109456
File13 1803 111436
File14 2036 115937
File15 2043 116383
使用分层版本的 K-means。 Apache Spark 具有以这种方式工作的 BisectingKMeans。它根据您拥有的记录数量计算出合适的 K 值。这样您就不必在创建模型时定义 K(集群)。如果您对它分配的值不满意,您仍然可以设置一个 K 值,但它通常工作得很好。
感谢@Peheje 的提示。