关于Kmeans的一些优化方法的总结
程序员文章站
2022-07-14 18:17:46
...
不多说,直接上图。
备注:
对于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
上一篇: 关于集合的一些总结
下一篇: 关于NIO的一些总结