上篇博客中讲到的分级聚类算法为我们返回了一棵形象直观的树,但是这个方法有两个缺点。
1.在没有额外的投入的情况下,树形视图是不会真正将数据拆分成不同组的。
2.该算法的计算量非常惊人,因为我们必须计算每两个配对项之间的关系,并且在合并项之后,这些关系还得重新再计算,所以在处理很大规模的数据集时,该算法的运行速度会非常缓慢。
K-均值聚类完全不同于分级聚类,因为我们会预先告诉算法希望生成的聚类数量,然后算法会根据数据的结构状况来确定聚类的大小。
K-均值聚类算法首先会随机确定k个中心位置,然后将各个数据项分配给最临近的中心点。待分配完成之后,聚类中心就会移到分配给该聚类的所有节点的平均位置处,然后整个分配过程重新开始。这一过程会一直重复下去,直到分配过程不再产出变化为止。
如图所示,有A,B,C,D,E五个数据项,随机生成两个数据项(黑点处),将距离最近的的数据合为一类,取平均后生成新的两个数据项(黑点处),再次将距离最近的数据合为一类,如此重复,直到数据固定。
mark
import random def kcluster(rows,distance=pearson,k=4): # 确定每个点的最大值和最小值,给随机数定个范围 ranges=[(min([row[i] for row in rows]),max([row[i] for row in rows])) for i in range(len(rows[0]))] # 随机建立k个中心点 clusters=[[random.random()*(ranges[i][1]-ranges[i][0])+ranges[i][0] for i in range(len(rows[0]))] for j in range(k)] lastmatches=None # 设定循环100次,看你的数据大小,次数自定义 for t in range(100): print 'Iteration %d' % t bestmatches=[[] for i in range(k)] # 在每一行中寻找距离最近的中心点 for j in range(len(rows)): row=rows[j] bestmatch=0 for i in range(k): d=distance(clusters[i],row) if d<distance(clusters[bestmatch],row): bestmatch=i bestmatches[bestmatch].append(j) # 如果结果与上一次的相同,则整个过程结束 if bestmatches==lastmatches: break lastmatches=bestmatches # 将中心点移到其所有成员的平均位置处 for i in range(k): avgs=[0.0]*len(rows[0]) if len(bestmatches[i])>0: for rowid in bestmatches[i]: for m in range(len(rows[rowid])): avgs[m]+=rows[rowid][m] for j in range(len(avgs)): avgs[j]/=len(bestmatches[i]) clusters[i]=avgs return bestmatches
使用分级聚类算法的数据
blognames,words,data = clusters.readfile('blogdata1.txt') kclust = clusters.kcluster(data,k=10) print [blognames[r] for r in kclust[1]]
此算法的关键在于k值的大小,不同的k值会有不同的结果,因为多尝试几个k值,选用最合适的为恬!
相关推荐
:将核学习方法的思想应用于K-均值聚类中,提出了一种核K-均值聚类算法,算法的主要思想是:首先将原空间中待聚类的样本经过 一个非线性映射,映射到一个高维的核空间中,突出各类样本之间的特征差异,然后在这个核...
基于K-means聚类算法的图像分割 算法的基本原理: 基于K-means聚类算法的图像分割以图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取...
由于其算法思想简便,又容易实现对大规模数据的聚类,因此K-均值算法已成为一种最常用的聚类算法之一K-均值算法能找到关于聚类误差的局部的最优解,是一个能应用在许多聚类问题上的快速迭代算法。它是一种以点为基础的...
k-均值聚类算法实现灰度图像分割,输入图像矩阵和聚类中心个数,返回为最终的聚类中心
主要介绍了详解Java实现的k-means聚类算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
K-means算法是很典型的基于距离的聚类算法,k-medoids聚类算法同样有效
K-Means算法是典型的基于距离的聚类算法,其中k代表类簇个数,means代表类簇内数据对象的均值(这种均值是一种对类簇中心的描述),因此,K-Means算法又称为k-均值算法。K-Means算法是一种基于划分的聚类算法,以...
提出了一种基于四叉树K-均值聚类算法的软件故障预测算法。采用四叉树的目的包括利用四叉树寻找K-均值聚类算法所需要的聚类中心和利用四叉树来进行软件模块的故障预测。在这种算法中,输入门限参数决定了最初的聚类...
定义了一个欧氏距离和监督信息相混合的新的最近邻计算函数,从而将K-均值算法很好地应用于半监督聚类问题。针对K-均值算法初始质心敏感的缺陷,用粒子群算法的搜索空间模拟聚类的欧氏空间,迭代搜索找到较优的聚类质心...
基于 K-means 聚类算法的图像区域分割,首先从数据样本种选取K个点作为初始聚类中心,其次计算各个样本到聚类的距离,把样本归到离它最近的那个聚类中心所在的累,计算新形成的每个聚类的数据对象的平均值来得到新的...
针对传统K-均值聚类算法对初始聚类中心敏感、现有初始聚类中心优化算法缺乏客观性,提出一种基于样本空间分布密度的初始聚类中心优化K-均值算法。该算法利用数据集样本的空间分布信息定义数据对象的密度,并根据整个...
针对布谷鸟搜索(CS)算法后期收敛速度慢,传统K-均值算法对初始...通过对经典数据集的仿真实验分析,相比K-均值算法、PSO-K-均值算法及CS-K-均值算法来说,提出的CSSA-OIKM算法能有效提高聚类精确性,且算法稳定性好。
讨论的是对模糊C-均值聚类方法的改进,在原有的模糊C-均值算法的基础上,提出一种软硬结合的快速模糊C-均值聚类算法。快速模糊C-均值聚类算法是在模糊C-均值聚类算法之前加入一层硬C-均值聚类算法。硬聚类算法能比...
基于k-means聚类算法的研究,黄韬,刘胜辉,本文首先分析研究聚类分析方法,对多种聚类分析算法进行分析比较,讨论各自的优点和不足,同时针对原k-means算法的聚类结果受随机��
机器视觉基础 | image-k-means | 基于 k-均值聚类算法图像分割
首先对原始振动信号进行EMD分解, 对含故障特征的IMFintrinsic mode function分量进行信号重构, 随后对重构信号进行Hilbert包络谱分析, 在提取特征量的基础上, 应用优化K-均值聚类算法进行故障类型和故障程度分类。...
delphi xe5编写的k-均值聚类算法,有窗体实例。
基于opencv3 实现 基于聚类的图像分割,k-means聚类效果好,但需要注意需认为设定聚类数量,可在代码中更改。
模式识别中对C-均值聚类算法的改进版本:采用自适应模糊C-均值聚类算法,对图像进行分类。
Matlab基于k均值聚类学习算法的rbf神经网络实现-基于k均值聚类学习算法的rbf神经网络实现.rar 基于k均值聚类学习算法的rbf神经网络实现