Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python K-均值聚类-带有额外变量_Python_Math_Scikit Learn_K Means - Fatal编程技术网

Python K-均值聚类-带有额外变量

Python K-均值聚类-带有额外变量,python,math,scikit-learn,k-means,Python,Math,Scikit Learn,K Means,我正在用固定数量的组对几个地理纬度/经度点进行k均值聚类。这个基本的集群工作得很好 但是我有另一个变量(每个点一个),我希望k-means聚类能够解释这个变量。这有可能吗 聚类数据可能如下所示: 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] 如果我想把上面的数据分成两组,每组的额外变量之和不能

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

但是我有另一个变量(每个点一个),我希望k-means聚类能够解释这个变量。这有可能吗

聚类数据可能如下所示:

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]

如果我想把上面的数据分成两组,每组的额外变量之和不能超过40,我该怎么做呢?(如果可能的话——我对k-means的理解相当基本/低端。)

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

最小化分组到簇1的点与分组到簇2的点之间的总距离(以纬度为单位)

受集群1和集群2中每个集群的额外变量之和小于40的约束

这是一个非线性程序,所以你必须使用非线性优化工具来解决这个问题


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

这似乎不再是一个基本的聚类应用,而是一个带约束的优化问题。换句话说,您希望实现:

最小化分组到簇1的点与分组到簇2的点之间的总距离(以纬度为单位)

受集群1和集群2中每个集群的额外变量之和小于40的约束

这是一个非线性程序,所以你必须使用非线性优化工具来解决这个问题


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

好的,因此只需添加额外功能并运行它

data = np.asarray([np.asarray(df['Lat']),np.asarray(df['Lon']),np.asarray(df['Extra variable'])])
有关更多信息,请参阅下面的链接


好的,只需添加额外的功能并运行它

data = np.asarray([np.asarray(df['Lat']),np.asarray(df['Lon']),np.asarray(df['Extra variable'])])
有关更多信息,请参阅下面的链接


你能分享代码吗?你到目前为止尝试了什么,突出显示你得到的错误?我没有得到任何错误。我只是不知道使用哪种方法/方法来获得k-means分组中包含的额外变量。无论是软限制(考虑在内)还是硬限制(截止值为40)。如果需要,这是我的kmeans启动代码:
kmeans=kmeans(n_clusters=2,random_state=0,init=“k-means++”).fit(lat_lon_numpy_array)
你能共享代码吗?你到目前为止尝试了什么,突出显示了你得到的错误?我没有得到任何错误。我只是不知道使用哪种方法/方法来获得k-means分组中包含的额外变量。无论是软限制(考虑在内)还是硬限制(截止值为40)。如果需要,这是我的kmeans启动代码:
kmeans=kmeans(n_clusters=2,random_state=0,init=“k-means++”).fit(lat_lon_numpy_array)
感谢您的输入-您会推荐什么非线性优化工具,或者为我指明方向?据我所知,pyOpt将对类似数据进行聚类,但(从我上面的示例)20,20将群集,10、10、10、10将群集。-还是我遗漏了什么我们想要的是每个集群中的20、10、10。(我在看这个例子[)我认为您的最佳解决方案是具有尽可能接近的点的簇(基于lat和long的欧几里德距离)是正确的吗满足群集值之和的硬约束?如果是这种情况,我不确定是否有可用的群集包来解决您试图完成的问题。因此,您必须定义自定义非线性程序,并使用通用非线性程序解决包来解决。感谢您的输入-你会推荐什么非线性优化工具,或者给我指明方向?据我所知,pyOpt将对类似的数据进行聚类,但是(从我上面的示例中)20、20将被聚类,10、10、10、10将被聚类。-或者我遗漏了什么?-我们想要的是每个聚类中的最佳值为20、10、10。(我在看这个例子[)我认为您的最佳解决方案是具有尽可能接近的点的簇(基于lat和long的欧几里德距离)是正确的吗满足集群值之和的硬约束?如果是这种情况,我不确定是否有集群包可以解决您试图完成的问题。因此,您必须定义自定义非线性程序,并使用通用非线性程序解决包来解决。