Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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 基于pycluster的加权聚类_Python_K Means - Fatal编程技术网

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的拟合方法中使用样本权重。这是一个。

我不完全确定我是如何解决这个问题的(已经有一段时间了),但我认为我将权重乘以到质心的距离,效果很好。你是在尝试使用该算法,还是在编写自己的实现?如果你在编写自己的,那么它就相当简单,正如您所说:为点添加一列权重。在每次迭代中,将其乘以到中心的距离,与平方根运算相比,这是一个相对较小的时间加法。关于这一点,您还有疑问吗?您是否有任何建议,如何确定/计算分配给每个特征的最佳样本权重?