K均值聚类-具有额外变量

时间:2019-09-17 19:29:39

标签: python math scikit-learn k-means

我正在按固定数量的组对几个地理纬度/经度进行k均值聚类。这种基本的群集工作正常。

但是我有另一个变量(每个点一个),我想用k均值聚类来说明。这有可能吗?

聚类数据如下所示:

Lat: [1.23, 2.12, 3.65, 4.32, 5.63, 5.43]
Lon: [1.43, 2.43, 3.76, 4.43, 5.25, 1.75]
Extra variable: [20, 20, 10, 10, 10, 10]

如果我要将上述数据分为2组,并且每组额外变量的总和不能超过40,那么我将如何处理? (如果有可能,我对k均值的理解是很基本的/低端的。)

2 个答案:

答案 0 :(得分:2)

似乎这不再是基本的集群应用程序,而是具有约束的优化问题。换句话说,您希望完成:

  

最大程度地减少了聚类1中的点与聚类2中的点之间的总距离

     

受约束的是,对于每个群集,群集1和群集2中Extra变量的总和小于40。

这是一个非线性程序,因此您必须使用非线性优化工具来解决此问题。

或者,根据数据的大小,您可以修改k-means聚类,以使其继续移动聚类质心并重新分配数据点,但是检测何时数据重新分配将使聚类超过限制的总和。额外变量。在这种情况下,您可以改为随机移动群集的质心。跟踪最佳集群集(集群内距离低和集群间差异大的某种组合),经过一段时间后,使用通过此方法获得的最佳集群集。

答案 1 :(得分:0)

好,所以只需添加额外的功能并运行它即可。

data = np.asarray([np.asarray(df['Lat']),np.asarray(df['Lon']),np.asarray(df['Extra variable'])])

有关更多信息,请参见下面的链接。

https://www.pythonforfinance.net/2018/02/08/stock-clusters-using-k-means-algorithm-in-python/