欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于Kmeans的一些优化方法的总结

程序员文章站 2022-07-14 18:17:46
...

不多说,直接上图。
关于Kmeans的一些优化方法的总结
关于Kmeans的一些优化方法的总结
关于Kmeans的一些优化方法的总结
备注:
对于Kmeans++来说,其还是无法消除异常值对kmeans算法稳定性的影响。

关于kmeans++算法的“轮盘法”选初始聚类中心的代码如下:

def get_cloest_dist(point, centroids):
    # 首先赋值成无穷大,依次递减
    min_dist = math.inf
    for centroid in centroids:
        dist = calculateDistance(point, centroid)
        if dist < min_dist:
            min_dist = dist
    return min_dist


import math
import random

def kmeans_plus(dataset, k):
    clusters = []
    n = dataset.shape[0]
    # 首先先选出一个中心点
    rdx = np.random.choice(range(n), 1)
    # np.squeeze去除多余的括号
    clusters.append(np.squeeze(dataset[rdx]).tolist())
    d = [0 for _ in range(len(dataset))]
    for _ in range(1, k):
        tot = 0
        # 计算当前样本到已有簇中心的最小距离
        for i, point in enumerate(dataset):
            d[i] = get_cloest_dist(point, clusters)
            tot += d[i]
        # random.random()返回一个0-1之间的小数
        # 总数乘上它就表示我们随机转了轮盘
        tot *= random.random()
        # 轮盘法选择下一个簇中心
        for i, di in enumerate(d):
            tot -= di
            if tot > 0:
                continue
            clusters.append(np.squeeze(dataset[i]).tolist())
            break
    return np.mat(clusters)


此处的代码来自博客:
https://blog.csdn.net/TechFlow/article/details/105086762

相关标签: 聚类