欢迎来到天天文库
浏览记录
ID:56922946
大小:392.00 KB
页数:13页
时间:2020-07-24
《机器学习kmeans聚类算法与应用.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、机器学习算法day02_Kmeans聚类算法及应用课程大纲Kmeans聚类算法原理Kmeans聚类算法概述Kmeans聚类算法图示Kmeans聚类算法要点Kmeans聚类算法案例需求用Numpy手动实现用Scikili机器学习算法库实现Kmeans聚类算法补充算法缺点改良思路课程目标:1、理解Kmeans聚类算法的核心思想2、理解Kmeans聚类算法的代码实现3、掌握Kmeans聚类算法的应用步骤:数据处理、建模、运算和结果判定1.Kmeans聚类算法原理1.1概述K-means算法是集简单和经典于一身的基于距离的聚类算法采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就
2、越大。该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。1.2算法图示假设我们的n个样本点分布在图中所示的二维空间。从数据点的大致形状可以看出它们大致聚为三个cluster,其中两个紧凑一些,剩下那个松散一些,如图所示:我们的目的是为这些数据分组,以便能区分出属于不同的簇的数据,给它们标上不同的颜色,如图:1.3算法要点1.3.1核心思想通过迭代寻找k个类簇的一种划分方案,使得用这k个类簇的均值来代表相应各类样本时所得的总体误差最小。k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。 k-means算法的基础是最小误差平方和准则,其代价函
3、数是: 式中,μc(i)表示第i个聚类的均值。各类簇内的样本越相似,其与该类均值间的误差平方越小,对所有类所得到的误差平方求和,即可验证分为k类时,各聚类是否是最优的。上式的代价函数无法用解析的方法最小化,只能有迭代的方法。1.3.2算法步骤图解下图展示了对n个样本点进行K-means聚类的效果,这里k取2。1.3.3算法实现步骤k-means算法是将样本聚类成k个簇(cluster),其中k是用户给定的,其求解过程非常直观简单,具体算法描述如下:1)随机选取k个聚类质心点2)重复下面过程直到收敛 { 对于每一个样例i,计算其应该属于的类: 对于每一个类j,重新计算该类的质
4、心:} 其伪代码如下:********************************************************************创建k个点作为初始的质心点(随机选择)当任意一个点的簇分配结果发生改变时 对数据集中的每一个数据点 对每一个质心 计算质心与数据点的距离 将数据点分配到距离最近的簇 对每一个簇,计算簇中所有点的均值,并将均值作为质心 2.Kmeans分类算法Python实战2.1需求对给定的数据集进行聚类本案例采用二维数据集,共80个样本,有4个类。样例如下:testSet.txt1.4.-
5、3.3.4.-1.-5.-3.0.2.-3.1.0.-3.-3.-1.2.1.-3.3.3.-3.-2.-3.4.2.-2.2.0.-0.-0.-3.2.1.-0.3.2.-3.2.2python代码实现2.2.1利用numpy手动实现fromnumpyimport*#加载数据defloadDataSet(fileName):dataMat=[]fr=open(fileName)forlineinfr.readlines():curLine=line.strip().split('t')fltLine=map(float,curLine)#变成float类型dataMat.append
6、(fltLine)returndataMat#计算欧几里得距离defdistEclud(vecA,vecB):returnsqrt(sum(power(vecA-vecB,2)))#构建聚簇中心defrandCent(dataSet,k):n=shape(dataSet)[1]centroids=mat(zeros((k,n)))forjinrange(n):minJ=min(dataSet[:,j])maxJ=max(dataSet[:,j])rangeJ=float(maxJ-minJ)centroids[:,j]=minJ+rangeJ*random.rand(k,1)return
7、centroids#k-means聚类算法defkMeans(dataSet,k,distMeans=distEclud,createCent=randCent):m=shape(dataSet)[0]clusterAssment=mat(zeros((m,2)))#用于存放该样本属于哪类及质心距离centroids=createCent(dataSet,k)clusterChanged=TruewhileclusterChange
此文档下载收益归作者所有