版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章无监督学习4.1K均值凝聚聚类4.2凝聚聚类4.3密度聚类之DBSCAN算法4.4小结4.1K均值凝聚聚类K均值凝聚聚类进行入手,K均值凝聚聚类是聚类算法中最简单的一个,也是聚类算法中最实用的一个,在平常运用中使用次数也比较多。Kmeans算法,顾名思义,K表示类别数,Means表示均值。Kmeans算法就是一种通过均值对数据进行分类的算法。算法的原理很简单,对于给定的数据,按照数据之间的距离分为K个种类。让种类间的距离相对比较小,而种类与种类之间的距离相对较远,就是高内聚低耦合。选择K个算法的流程如下:首先先选择K个聚类个数.直接生成K个中心作为均值定量,或者随机选择K个均值定量,然后作为聚类中心。对每个点确定其聚类中心点。再计算其聚类新中心。重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变)。Kmeans的流程可以用以下一组图表示。我们先设置了一个K值为三,然后我们先随机从数据中找出三点作为三个均值定量,然后在计算所有数据各点到质心的距离,然后将是数据分配给距离最近的一类,用不同的颜色表示数据所属各类,然后经过第一轮的迭代后从各类中可以计算新的均值定量,然后计算每个数据点到个类之间的最近距离分到该类里面,重复迭代上述步骤。最终得到了一个合适的均值定量来表示我们的类别。当然在实际运用该算法时,一般会多以迭代,才能得到理想的结果。通过下列代码观察Kmeans算法的聚点,并观察决策边界fromsklearn.datasetsimportmake_blobsimportmatplotlib.pyplotaspltblobs=make_blobs(random_state=7,centers=3)X_blobs=blobs[0]plt.scatter(X_blobs[:,0],X_blobs[:,1],c='r',edgecolors='k')fromsklearn.clusterimportKMeansimportnumpyasnpkmeans=KMeans(n_clusters=3)kmeans.fit(X_blobs)X_min,X_max=X_blobs[:,0].min()-0.5,X_blobs[:,0].max()+0.5y_min,y_max=X_blobs[:,1].min()-0.5,X_blobs[:,1].max()+0.5xx,yy=np.meshgrid(np.arange(X_min,X_max,.02),np.arange(y_min,y_max,.02))Z=kmeans.predict(np.c_[xx.ravel(),yy.ravel()])Z=Z.reshape(xx.shape)plt.figure(1)plt.clf()plt.imshow(Z,interpolation='nearest',extent=(xx.min(),xx.max(),yy.min(),yy.max()),cmap=plt.cm.summer,aspect='auto',origin='lower')plt.plot(X_blobs[:,0],X_blobs[:,1],'r.',markersize=5)centroids=kmeans.cluster_centers_plt.scatter(centroids[:,0],centroids[:,1],marker='x',s=150,linewidths=3,color='b',zorder=10)plt.xlim(X_min,X_max)plt.ylim(y_min,y_max)plt.xticks(())plt.yticks(())plt.show()看过此算法后,我们很容易与KNN算法搞混,两者都有一个相似的过程,就是都需要找到某一个点最近的点,二者都采用了最近邻的思想。其实两者的差别还是挺大的,Kmeans算法是无监督学习的聚类算法,而KNN算法是监督学习的分类算法。KNN算法基本不需要训练,只要从测试集里面根据距离计算公式找到K个点,用这K个点表示测试机集的类别即可,而Kmeans算法有明显的训练过程,需要反复迭代找到K个类别的最佳质心来决定数据的类别。优点:1.原理简单、实现容易,是解决聚类问题的一种经典算法,保持可伸缩性和高效率,当数据集是密集的,它的效果较好。2.算法的可解释性较强,只要需要调参的的参数只有分类数K。缺点1.必须事先给出K值,而且对初值敏感,对于不同的初始值,可能会导致不同结果。2.对躁声和孤立点数据敏感。3.采用迭代方法,得到的结果只是局部最优。4.2凝聚聚类
凝聚聚类算法类,是许多基于相同原则构建的聚类算法,算法的原理如下:所谓凝聚聚类就是让算法在一开始的时候,将每一个点作为一个类别,每一次进行算法合并两个最近的两类,直到满足某个条件为止。sklearn中实现该算法的满足条件是类别的个数,当剩下指定个数的类时,算法自动停止。这里的参数重要的是链接准则,他的意思是如何寻找最相近的点。sklearn库中包含三种链接方式:ward:是默认选项,通过挑选两个类来合并,类中的方差增加最小通过这中链接方式通常得到大小差不多相等的簇。average链接:将簇中所有点之间平均距离最小的两个类合并。complete链接:也称为最大链接,将簇中点之间最大距离最小的两个类合并。ward适用于大多数数据集。如果类中的成员个数非常不同,那么average或complete可能效果更好。下面是对数据集采用三种链接准则得到的结果。程序如下:
fromsklearn.datasets.samples_generatorimportmake_blobs
fromsklearn.clusterimportAgglomerativeClustering
importnumpyasnp
importmatplotlib.pyplotasplt
fromitertoolsimportcycle##python自带的迭代器模块
##产生随机数据的中心
centers=[[1,1],[-1,-1],[1,-1]]
##产生的数据个数
X,lables_true=make_blobs(n_samples=2000,centers=centers,cluster_std=0.5,random_state=22)
ac=AgglomerativeClustering(linkage='ward',n_clusters=4)
##训练数据
ac.fit(X)
##每个数据的分类
lables=ac.labels_
##绘图
plt.figure(1)
plt.clf()
colors=cycle('rgcy')
fork,colinzip(range(4),colors):
##根据lables中的值是否等于k,重新组成一个True、False的数组
my_members=lables==k
##X[my_members,0]取出my_members对应位置为True的值的横坐标
plt.plot(X[my_members,0],X[my_members,1],col+'.')
plt.show()参数linkage的取值依次为:[‘ward’,‘average’,‘complete’]优点
1、距离和规则的相似度容易定义,限制少
2、不需要预先制定聚类数
3、可以发现类的层次关系
缺点
1,计算复杂度太高
2,奇异值也能产生很大影响
3,算法很可能聚类成链状4.3密度聚类之DBSCAN算法DBSCAN聚类算法是一种基于密度的算法,这一类算法通常通过根据数据的紧密程度进行分类,如果一个数据属于该类,则在其附近一定存在属于该类的数据点。通过紧密分布的数据集分为一类,就得到了一个聚类类别。通过将所有数据划分为不同类别,就得到了最终的聚类类别结果。该算法将具有足够密度的区域划分为一类,并在具有噪声的数据集中能划分出不同形状的类别,它将类定义为密度相连的点的最大集合。那么它是怎么基于密度工作的呢?在一个数据集中,我们的目标是把数据中密度相近的聚为一类。我们先从数据中选择一点,然后按照一定规则在这里寻找密度相近的点组成一类。其他的数据点也是如此。这个规则就是根据这个随即被选中的数据点画一个圆圈,规定这个圆的半径以及圆内最少包含的数据数,然后在包含在内的数据中转移中心点,那么这个圆圈的圆心就转移到这个内部样本点,继续去圈附近其它的数据点,然后一直重复上述过程,继续增加数据点直到没有符合条件的数据为止。基于密度这点有什么好处呢,我们知道kmeans聚类算法只能根据距离进行计算,而现实中还会有各种形状的图,比如环形图,这个时候,kmeans算法就不适用。于是就想到根据数据的密度进行分类。上述基本是DBSCAN算法的主要内容了,是不是很简单,但是我们还有三个问题没有考虑。第一个是一些数据远离于其他数据点,这些点不在任何一类的周围,在DBSCAN中,我们一般将这些样本点标记为噪音点。第二个是距离的度量问题,即如何计算某样本和核心对象样本的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离。这和KNN分类算法的最近邻思想完全相同。DBSCAN这个算法包括了重要的两个参数,这两个参数比较难指定,公认的指定方法是以下两个:
半径:半径是比较重要的一个点,如果选择过大了,圈住点就多了,类别的个数就少了,反之圈住的点少,类别就增加,这对最后生成的结果非常重要。
MinPts:这个参数就是圈住的点的个数,也相当于是一个密度,一般我们先让这个值尽可能地小,然后进行多次尝试算法。下面我们对DBSCAN算法进行应用:首先我们生成一个环形数据来测试算法fromsklearn.datasets.samples_generatorimportmake_circlesimportmatplotlib.pyplotaspltfromsklearn.clusterimportDBSCANX,y_true=make_circles(n_samples=2000,factor=0.5,noise=0.1)#这是一个圆环形状的#DBSCAN算法dbscan=DBSCAN(eps=.1,min_samples=10)dbscan.fit(X)#该算法对应的两个参数plt.scatter(X[:,0],X[:,1],c=dbscan.labels_)plt.show()从图中可以看出,算法划分的方法符合我们的思维,并且基本做到了完美划分。接下来试验一下对于双半月数据,算法能不能做到好的预测
fromsklearn.datasetsimportmake_moons
importmatplotlib.pyplotasplt
fromsklearn.clusterimportDBSCAN
X,y_true=make_moons(n_samples=2000,noise=0.1)
#DBSCAN算法
dbscan=DBSCAN(eps=.1,min_samples=10)
dbscan.fit(X)#该算法对应的两个参数
plt.scatter(X[:,0],X[:,1],c=dbscan.labels_)
plt.show()从图中看出,依旧能建立较好的模型。
测试完之后大家可能感觉没有那么神奇,因为这种方法符合我们的思维,但是这是由计算机划分出来的。与Kmeans算法进行对比,我们就能知道这个算法的优越之处了。fromsklearn.datasetsimportmake_moons
importmatplotlib.pyplotasplt
fromsklearn.clusterimportKMeans
X,y_true=make_moons(n_samples=2000,noise=0.1)
#DBSCAN算法
kmeans=KMeans(n_clusters=2)
kmeans.fit(X)#该算法对应的两个参数
plt.scatter(X[:,0],X[:,1],c=kmeans.labels_)
plt.show()可以看到如果分为两类,这种划分方式不符合我们的思维。所以对于不同的问题要选择合适的算法才能解决。优点1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西师范高等专科学校工作人员招聘考试试题
- 2025江苏省海安中等专业学校工作人员招聘考试试题
- 太阳能光伏安装专项施工方案
- 2026年生物传感器疾病早期检测报告
- 文言文机器翻译系统在初中文言文音韵学教学中的应用课题报告教学研究课题报告
- 初中历史文物修复中电磁学原理的金属文物修复课题报告教学研究课题报告
- 董事会成员聘任合同书合同三篇
- 2026年工程承包合同二篇
- 肾福康胶囊对单侧输尿管梗阻大鼠肾间质纤维化的干预效应与机制探究
- 肺腺癌顺铂耐药与放疗的相关性及临床策略优化研究
- 2026年江苏南京市高三二模高考物理试卷试题(含答案详解)
- 第13课 每个人都有梦想 课件(内嵌视频)2025-2026学年道德与法治二年级下册统编版
- C语言程序设计97871132952400000(1-1)
- 篮球比赛记录表(通用)
- 金属材料的基础知识
- 煤矿在用主通风机系统安全检测检验规范
- GB/T 19001-2016质量管理体系要求
- MCGS 项目7:组态应用实例
- GA/T 1494-2018路面结冰监测系统通用技术条件
- FZ/T 52039-2014再生聚苯硫醚短纤维
- 徐霞客人物介绍分析课件
评论
0/150
提交评论