K-means算法

K-means算法是一种常用的数据聚类方法,通过迭代更新聚类中心来达到最佳聚类效果。首先随机选取K个点作为初始中心,然后计算每个数据点与中心点的距离,将其归类到最近的中心点所在的类别。接着使用类别内所有点的均值来更新中心点。当中心点不再改变或达到预设迭代次数时,算法终止。本文将介绍K-means的详细步骤和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法思想:

以空间中K个点为中心,对最靠近他们的点进行归类,通过迭代,逐次更新各聚类中心点的值,直到有最好的聚类效果

算法描述:

1)开始随机选中k个点作为初始中心

2)开始迭代,求其到各中心ci的距离,算出距离di,选出di最小的一个中心点,作为这个点所在类

3)利用均值的方法更新该类的中心值,也就是把迭代过后,所有属于某个中心点的值的x和y进行求平均找到新的中心点

4)对于所有的c个聚类中心,如果利用(2)(3)的方法迭代更新后,值保持不变,则迭代结束(或者达到一定的次数),否则继续迭代

算法流程:

输入k,data[n]

1)选择k个初始中心点c[0] = data[0],.....,c[k-1]=data[k-1]

2)对于data[0], ...... data[n-1] 分别与c[0] ....c[k-1]比较,选出差值最小的,标记为i

3)对于所有标记点相同的,重新计算c[i]的值

4)重复(2)(3)操作,直到所有c[i]值的变化小于给定阈值

 

代码实现

import numpy as np


def Kmeans(X, k, maxIt):
    # numPoints 是 X 的行数量,numDim是X的列数量
    numPoints = X.shape[0]
    numDim = X.shape[1]
    # 因为X只有 x,y两个特征,需要最后聚类后的分类结果,所以需要让矩阵多一个列
    dataSet = np.zeros((numPoints, numDim + 1))
    # 把X的内容赋值给dataSet的第一列和第二列,所以第三列的分类结果初始值为0
    # 逗号前是行,逗号后是列
    dataSet[:, :-1] = X

    #centroids = dataSet[np.random.randint(numPoints, size=k), :]
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值