上篇博客中讲到的分级聚类算法为我们返回了一棵形象直观的树,但是这个方法有两个缺点。
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值,选用最合适的为恬!
相关推荐
Java实现的k-means聚类算法详解 k-means聚类算法是一种常用的无监督学习算法,用于对数据进行聚类分析。该算法的主要思想是将相似的数据点聚类到一起,形成不同的簇。Java语言是实现k-means聚类算法的不二之选。 ...
k-均值聚类算法(K-Means Clustering)是一种广泛应用的数据分析方法,尤其在图像处理领域,常用于图像的灰度图像分割。该算法通过将数据集中的样本点分配到最近的聚类中心所属的类别,以此来达到划分的目的。在图像...
基于K-means聚类算法的图像分割 算法的基本原理: 基于K-means聚类算法的图像分割以图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取...
标题与描述中的“模式识别K-均值聚类法matlab实现程序”指向了一种在数据科学和机器学习领域广泛使用的算法——K-均值聚类(K-Means Clustering)。K-均值聚类是一种无监督学习方法,主要用于数据的分类与模式识别,其...
由于其算法思想简便,又容易实现对大规模数据的聚类,因此K-均值算法已成为一种最常用的聚类算法之一K-均值算法能找到关于聚类误差的局部的最优解,是一个能应用在许多聚类问题上的快速迭代算法。它是一种以点为基础的...
本篇文章将深入探讨基于k-均值聚类算法的图像分割方法,这是一种广泛应用且理解相对简单的算法。 首先,我们要了解k-均值聚类算法的基本原理。k-均值是一种迭代的无监督学习方法,用于将数据集划分为k个不同的类别...
总结来说,k-均值聚类算法实验是数据挖掘教学的重要组成部分,它帮助学生从理论走向实践,通过编程实现聚类算法,增强对数据结构和聚类概念的理解。通过不断的迭代优化,最终达到对数据集进行有效分割的目的,为后续...
K-均值聚类算法是数据挖掘和机器学习领域中常用的一种非监督学习方法,它主要用于将数据集划分成K个不同的簇。该算法最早由MacQueen在1967年提出,至今仍然是聚类算法的基石之一。K-均值算法的核心思想是通过迭代...
【动态K-均值聚类算法在RBF神经网络中心选取中的应用】 RBF神经网络,全称为径向基函数神经网络,因其简洁的网络结构、快速的学习速度以及优秀的泛化能力,在模式识别和函数近似等领域得到广泛应用。然而,确定RBF...
本文将深入探讨两种常见的聚类算法——K-means算法和K-medoids算法,并结合MATLAB代码来阐述它们的工作原理、优缺点以及实现过程。 ### K-means算法 **概述:** K-means是最为广泛使用的聚类算法之一,其目标是将...
《基于K-means聚类算法的图像分割在MATLAB中的实现》 图像分割是计算机视觉领域中的基础任务,它旨在将图像划分为多个区域或对象,每个区域具有相似的特征。K-means聚类算法是一种广泛应用的数据分析方法,它通过...
### 基于粗糙集的K-均值聚类算法在图像分割中的应用 #### 一、引言 图像分割是计算机视觉中的一个重要任务,它旨在将图像划分成多个具有相似特性的区域,以便进一步分析处理。传统的图像分割方法包括阈值分割、...
K-means聚类算法是一种广泛应用的无监督学习方法,主要用于数据的分组或分类,尤其在数据挖掘和机器学习领域。它的目标是将数据集划分为k个互不重叠的簇,使得同一簇内的数据点间的相似度尽可能高,而不同簇之间的...
实验所需的硬件主要为配备相关编程软件的个人计算机,软件部分则需要支持执行K-均值算法的编程语言,如MATLAB或其他支持数值计算的环境。 三、实验原理 1) 非监督学习的理论基础:在未知标签的情况下,通过寻找数据...
K-MEANS聚类算法的实现 K-MEANS聚类算法是一种常用的无监督机器学习算法,主要用于对数据进行聚类分析。该算法的主要思想是将相似的数据对象划分到同一个簇中,使得簇内的数据对象尽量相似,而簇间的数据对象尽量...
首先对原始振动信号进行EMD分解, 对含故障特征的IMFintrinsic mode function分量进行信号重构, 随后对重构信号进行Hilbert包络谱分析, 在提取特征量的基础上, 应用优化K-均值聚类算法进行故障类型和故障程度分类。...
《试验三K-均值聚类算法试验报告》 K-均值聚类算法是一种广泛应用的无监督学习方法,主要用于将数据集中的样本点按照相似性进行分组,即聚类。该算法的核心思想是通过迭代寻找最优的聚类中心,以使各簇内的样本点尽...
聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解....
基于python聚类算法的实现--包含:最大最小距离算法、近邻聚类算法、层次聚类算法、K-均值聚类算法、ISODATA聚类算法