k-均值聚类算法总结

本文详细介绍了K-均值聚类算法,包括其基本原理、工作流程和存在的不足。针对随机初始化导致的局部最优问题,提出了二分K-均值算法作为改进方法,以达到更好的聚类效果。
摘要由CSDN通过智能技术生成

相关定义

聚类是一种无监督的学习,它将相似的对象归到同一个簇中。聚类方法几乎可以应用到所有的对象,簇内的对象越相似,聚类的效果越好。
K-均值(K-means)聚类是指将数据划分成k个不同的簇,且每个簇的中心采用簇中所含数据的均值计算而成。
聚类和分类最大不同在于,分类的目标事物已知,而聚类不一样。因为其产生的结果与分类相同,而只是类别没有预先定义,聚类有时候也被称为无监督分类。

K-均值聚类算法

K-均值是发现给定数据集的k个簇的算法。簇的个数k是用户给定的,每个簇通过其质心,即簇中所有点的中心来描述。
算法的工作流程如下:首先,随机确定k个初始点作为质心。然后将数据集中的每个点分配到一个簇中。这一步完成后,每个簇的质心更新为该簇所有点的平均值。流程的伪代码如下:

创建k个点作为初试质心
当任意一点的簇分配结果发生改变时:
	对数据集中的每个数据点:
		对每个质心:
			计算数据点与质心直接的距离
		将该数据点分配到距离最近的簇
	对每一个簇:
		更新质心坐标

该段代码涉及到的辅助函数如下:

def create_data(fname):     #导入数据
    datam=[]
    f=open(fname)
    for line in f.readlines():
        curline=line.strip().split('\t')
        floatarr=list(map(float,curline))
        datam.append(floatarr)
    return datam

def distEclud(va,vb):   #计算两点之间的距离
    return np.sqrt(np.power(va-vb,2).sum())

def randCen(datas,k):   #创建k个随机点当作质点
    n=datas.shape[1]    #获取数据特征数
    centP=np.mat(np.zeros((k,n)))   #创建k*n的质点矩阵
    for i in range(n):  #对于数据每一个特征值
        minp=min(datas[:,i])
        rangep=float(max(datas[:,i])-minp)
        centP[:,i]=minp+rangep*np.random.rand(k,1)      
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值