K-Means算法

K-Means算法_第1张图片
K-Means算法_第2张图片
c^(i):xi分配到第i个簇
μ:质心
μci:即第xi个样本分配到的簇的质心

Step

1.从样本中随机选取K个点作为簇质心
2.每个点都指向离它最近的簇质心
3.遍历结束后,重新计算K值,即计算K个簇的平均值作为新的质心
重复23直到质心不再发生变化或达到指定迭代次数

简单实例

import numpy as np

def kmeans(data, k, max_iters=100):
    # 随机初始化k个质心
    centroids = data[np.random.choice(len(data), k, replace=False)]
    
    for _ in range(max_iters):
        # 分配每个数据点到最近的质心
        distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
        labels = np.argmin(distances, axis=1)
        
        # 计算新的质心
        new_centroids = np.array([data[labels == i].mean(axis=0) for i in range(k)])
        
        # 如果质心不再变化,停止迭代
        if np.all(centroids == new_centroids):
            break
        
        centroids = new_centroids
    
    return labels, centroids

# 示例数据
data = np.array([
    [1, 2],
    [5, 8],
    [1.5, 1.8],
    [8, 8],
    [1, 0.6],
    [9, 11]
])

k = 2  # 聚类数
labels, centroids = kmeans(data, k)

print("聚类标签:", labels)
print("质心:", centroids)

你可能感兴趣的:(ML——algorithm,算法,kmeans,机器学习)