K-Means算法



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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值