【kmeans】自定义聚类距离

pyclustering 开源

from pyclustering.utils import read_sample
from pyclustering.utils.metric import distance_metric, type_metric
from pyclustering.samples.definitions import SIMPLE_SAMPLES


def my_manhattan(point1, point2):
    dimension = len(point1)
    result = 0.0
    for i in range(dimension):
        result += abs(point1[i] - point2[i]) * 0.1
    return result

metric = distance_metric(type_metric.USER_DEFINED, func=my_manhattan)
distance = metric([2.0, 3.0], [1.0, 3.0])
#             # Load list of points for cluster analysis.
sample = read_sample(SIMPLE_SAMPLES.SAMPLE_SIMPLE3)

metric = distance_metric(type_metric.USER_DEFINED, func=my_manhattan)

# create K-Means algorithm with specific distance metric
start_centers = [[4.7, 5.9], [5.7, 6.5]];
kmeans_instance = kmeans(sample, start_centers, metric=metric)
 
# run cluster analysis and obtain results
kmeans_instance.process()
clusters = kmeans_instance.get_clusters()
points = [[0.25, 0.2], [2.5, 4.0]]
closest_clusters = kmeans_instance.predict(points)
print(clusters)
print(closest_clusters)



但kmeans自定义距离中存在无法使用某些距离,
核心原因在于kmeans的计算过程中,取平均的操作,不同的距离定义之下,平均的含义是不同的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在sklearn中使用KMeans算法时,默认的距离度量是欧氏距离(Euclidean distance)。但是,你可以自定义距离度量来适应特定的需求。下面是一个使用自定义距离函数的示例: 首先,你需要定义一个函数来计算样本之间的距离。这个函数应该接受两个样本作为参数,并返回一个标量值作为它们之间的距离度量。下面是一个简单的例子,假设我们想使用曼哈顿距离(Manhattan distance)作为自定义距离度量: ```python from sklearn.metrics.pairwise import pairwise_distances def manhattan_distance(x, y): return np.sum(np.abs(x - y)) # 使用自定义距离度量 kmeans = KMeans(n_clusters=3, init='random', n_init=10, algorithm='full', metric=manhattan_distance) # 训练模型 kmeans.fit(data) ``` 在上面的代码中,我们首先导入`pairwise_distances`函数,它可以用于计算样本之间的距离。然后,我们定义了一个`manhattan_distance`函数来计算曼哈顿距离。最后,我们创建了一个KMeans对象,并将`metric`参数设置为`manhattan_distance`,这样KMeans算法将使用我们自定义距离度量来进行聚类。 需要注意的是,如果你想使用其他自定义距离度量,可以根据需要编写相应的距离函数。另外,还可以使用`pairwise_distances`函数来计算不同样本之间的距离矩阵,并将其传递给KMeans算法的`metric`参数。这样可以更灵活地使用不同的距离度量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值