Python 基于pycluster的加权聚类
我已经设法采用了一段代码片段来介绍如何使用Python 基于pycluster的加权聚类,python,k-means,Python,K Means,我已经设法采用了一段代码片段来介绍如何使用PyCluster的k-means聚类算法。我希望能够对数据点进行加权,但不幸的是,我只能对特征进行加权。我是否遗漏了什么,或者是否有一个技巧可以让我的一些分数比其他分数更重要 import numpy as np import Pycluster as pc points = np.asarray([ [1.0, 20, 30, 50], [1.2, 15, 34, 50], [1.6, 13, 20, 55], [0
PyCluster
的k-means聚类算法。我希望能够对数据点进行加权,但不幸的是,我只能对特征进行加权。我是否遗漏了什么,或者是否有一个技巧可以让我的一些分数比其他分数更重要
import numpy as np
import Pycluster as pc
points = np.asarray([
[1.0, 20, 30, 50],
[1.2, 15, 34, 50],
[1.6, 13, 20, 55],
[0.1, 16, 40, 26],
[0.3, 26, 30, 23],
[1.4, 20, 28, 20],
])
# would like to specify 6 weights for each of the elements in `points`
weights = np.asarray([1.0, 1.0, 1.0, 1.0])
clusterid, error, nfound = pc.kcluster(
points, nclusters=2, transpose=0, npass=10, method='a', dist='e', weight=weights
)
centroids, _ = pc.clustercentroids(points, clusterid=clusterid)
print centroids
对单个数据点进行加权不是KMeans算法的特征。这在算法定义中:在pycluster、MLlib或TrustedAnalytics中不可用 但是,可以添加重复的数据点。例如,如果希望第二个数据点的计数加倍,请将列表改为:
points = np.asarray([
[1.0, 20, 30, 50],
[1.2, 15, 34, 50],
[1.2, 15, 34, 50],
[1.6, 13, 20, 55],
[0.1, 16, 40, 26],
[0.3, 26, 30, 23],
[1.4, 20, 28, 20],
])
现在,您可以在sklearn的拟合方法中使用样本权重。这是一个。我不完全确定我是如何解决这个问题的(已经有一段时间了),但我认为我将权重乘以到质心的距离,效果很好。你是在尝试使用该算法,还是在编写自己的实现?如果你在编写自己的,那么它就相当简单,正如您所说:为点添加一列权重。在每次迭代中,将其乘以到中心的距离,与平方根运算相比,这是一个相对较小的时间加法。关于这一点,您还有疑问吗?您是否有任何建议,如何确定/计算分配给每个特征的最佳样本权重?