上篇博客中讲到的分级聚类算法为我们返回了一棵形象直观的树,但是这个方法有两个缺点。
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-均值聚类算法。 ##### 3.2 非线性映射的重要性 非线性映射的选择对于核K-均值聚类的成功至关重要。理想情况下,选择的映射应该能够有效地增加不同类别之间的特征差异,从而使它们在...
Java实现的k-means聚类算法详解 k-means聚类算法是一种常用的无监督学习算法,用于对数据进行聚类分析。该算法的主要思想是将相似的数据点聚类到一起,形成不同的簇。Java语言是实现k-means聚类算法的不二之选。 ...
由Bezdek提出的模糊C-均值聚类算法,结合了模糊集理论和传统的K-均值聚类。与K-均值聚类不同,模糊C-均值聚类方法对像元属于不同类别的程度进行量化,使用隶属度概念来表达这种不确定性。这种方法允许一个像元可以...
标题与描述中的“模式识别K-均值聚类法matlab实现程序”指向了一种在数据科学和机器学习领域广泛使用的算法——K-均值聚类(K-Means Clustering)。K-均值聚类是一种无监督学习方法,主要用于数据的分类与模式识别,其...
"面向立木识别的有效K-均值聚类算法研究" 本文 recherché 了面向立木识别的有效 K-均值聚类算法,以解决林区自动对靶施药过程中点云数据聚类准确率低、效率低的问题。该算法首先使用窗口滤波算法对相关数据进行...
基于K-均值聚类算法RBF神经网络交通流预测 本篇论文的主要内容是基于K-均值聚类算法的RBF神经网络交通流预测模型的研究。该模型通过K-均值聚类算法对RBF神经网络进行优化,使得模型具有更高的预测精度和收敛性。 ...
《K-均值聚类算法在Matlab中的实现》 K-均值聚类(K-Means Clustering)是一种广泛应用的数据分析方法,主要用于无监督学习中的数据分组。它通过迭代过程,将数据集中的样本点分配到最近的聚类中心所属的簇中,以...
### K-均值聚类算法知识点详解 #### 一、K-均值聚类算法简介 K-均值聚类是一种非监督学习方法,主要用于数据挖掘中的无标签数据集分类。该算法通过迭代的方式将数据集划分为K个簇(cluster),使得每个数据点归属到...
本篇文章将深入探讨基于k-均值聚类算法的图像分割方法,这是一种广泛应用且理解相对简单的算法。 首先,我们要了解k-均值聚类算法的基本原理。k-均值是一种迭代的无监督学习方法,用于将数据集划分为k个不同的类别...
K-均值聚类算法是数据挖掘领域中一种非常重要的聚类分析方法,其基本原理是将n个数据对象划分为k个簇,使得每个数据对象都属于离它最近的均值代表的簇。K-均值算法在数据挖掘中取得了显著的成就,尤其是在聚类分析...
K-均值聚类算法是数据挖掘和机器学习领域中常用的一种非监督学习方法,它主要用于将数据集划分成K个不同的簇。该算法最早由MacQueen在1967年提出,至今仍然是聚类算法的基石之一。K-均值算法的核心思想是通过迭代...
模式识别k-均值聚类算法matlaB实现 模式识别k-均值聚类算法是数据挖掘和机器学习中常用的算法,用于对数据进行聚类分析。该算法的核心思想是将数据分为k个类别,每个类别的中心点称为聚合中心。该算法的实现过程...
验报告——K-均值聚类算法 K-均值聚类算法是一种广泛应用的无监督学习方法,主要用于数据的分类和聚类。本实验旨在深入理解非监督学习的原理,并熟练掌握K-Means算法的设计与实现。实验环境为具备相关编程软件的...
本文将深入探讨两种常见的聚类算法——K-means算法和K-medoids算法,并结合MATLAB代码来阐述它们的工作原理、优缺点以及实现过程。 ### K-means算法 **概述:** K-means是最为广泛使用的聚类算法之一,其目标是将...
首先对原始振动信号进行EMD分解, 对含故障特征的IMFintrinsic mode function分量进行信号重构, 随后对重构信号进行Hilbert包络谱分析, 在提取特征量的基础上, 应用优化K-均值聚类算法进行故障类型和故障程度分类。...
聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解....
基于python聚类算法的实现--包含:最大最小距离算法、近邻聚类算法、层次聚类算法、K-均值聚类算法、ISODATA聚类算法
基于opencv3 实现 基于聚类的图像分割,k-means聚类效果好,但需要注意需认为设定聚类数量,可在代码中更改。
《试验三K-均值聚类算法试验报告》 K-均值算法是机器学习领域中常见的非监督学习方法,主要用于数据的聚类分析。它通过迭代的方式将数据集中的样本点分配到最近的聚类中心,从而形成不同的簇。本实验旨在深化对非...