(一)什么是聚类聚类,将相似的事物聚集在一起,将不相似的事物划分到不同的类别的过程。是将复杂数据简化为少数类别的一种手段。 (二)聚类的基本思想:
(三)聚类的应用
(四)聚类的对象设有m个样本单位,每个样本测的n项指标(变量),原始资料矩阵: image.png 指标的选择非常重要: (五)数据标准化在各种标准量度值scale差异过大时,或数据不符合正态分布时,可能需要进行数据标准化。 image.png
image.png
image.png
image.png image.png
image.png
image.png
(六)聚类的分类:根据聚类对象的不同,分为Q型聚类,R型聚类
(1)常见距离统计量 - 闵可夫斯基距离系列(线性距离) image.jpeg
image.png p=2,时为欧氏距离(n维空间中的几何距离) image.jpeg (2)常见距离统计量 - 马氏距离(协方差距离) (3)常见距离统计量 - 文本距离
常见相似系数统计量 image.png
image.png 类与类之间 距离的度量方法:
聚类算法的分类:目前有1000多种聚类算法:没有一种聚类算法可以包打天下,聚类算法中的各种参数也必须依据具体问题而调节 1. 层次聚类的方法 image.jpeg
image.jpeg
image.jpeg
image.jpeg
2. 划分聚类的方法 基于划分的方法大多数是基于距离来划分的,首先对样本进行初始化分,然后计算样本间的距离,重新对数据集中的样本进行划分,将样本划分到距离更近的簇中,得到一个新的样本划分,迭代计算直到聚类结果满足用户指定的要求。 要想得到最优的聚类结果,算法需要穷举数据集所有可能的划分情况,但是在实际应用中数据量都比较大,利用穷举方法聚类显然是不现实的,因此大部分基于划分的聚类方法采用贪心策略,即在每一次划分过程中寻求最优解,然后基于最优解进行迭代计算,逐步提高聚类结果的质量。虽然这种方式有可能得到局部最优结果,但是结合效率方面考虑,也是可以接受的。 算法:
举例: 我们首先随机选择3个初始质心,每一个质心为一类: image.jpeg 然后我们计算每一个不是质心的点到这三个质心的距离: image.jpeg 将这些点归类于距离最近的那个质心的一类: image.jpeg 重新计算这三个分类的质心: image.jpeg 不断重复上述两步,更新三个类: image.jpeg 当稳定以后,迭代停止,这时候的三个类就是我们得到的最后的三个: image.jpeg 最著名的是k-means聚类算法和K-medoids算法(中心点聚类)
image.png image.png image.png 3. 基于密度的方法处理“大海中的若干孤岛”,以密度来区分岛 大部分基于密度的方法(Density-based Method)采用距离度量来对数据集进行划分,在球状的数据集中能够正确划分,但是在非球状的数据集中则无法对样本进行正确聚类,并且受到数据集中的噪声数据影响较大。基于密度的方法可以克服这两个弱点。 基于密度的方法提出“密度”的思想,即给定邻域中样本点的数量,当邻域中密度达到或超过密度阈值时,将邻域内的样本包含到当前的簇中。若邻域的密度不满足阈值要求,则当前的簇划分完成,对下一个簇进行划分。基于密度的方法可以对数据集中的离群点进行检测和过滤。 算法:
4. 基于网格的方法基于网格的方法(Grid-based Method)将数据集空间划分为有限个网格单元,形成一个网络结构,在后续的聚类过程中,以网格单元为基本单位进行聚类,而不是以样本为单位。由于算法处理时间与样本数量无关,只与网格单元数量有关,因此这种方法在处理大数据集时效率很高。基于网格的方法可以在网格单元划分的基础上,与基于密度的方法、基于层次的方法等结合使用。 5. 基于模型的方法基于模型的方法(Model-based Method)假定数据集满足一定的分布模型,找到这样的分布模型,就可以对数据集进行聚类。基于模型的方法主要包括基于统计和基于神经网络两大类,前者以高斯混合模型(Gaussian Mixture Models,GMM)为代表,后者以自组织映射网络(Self Organizing Map,SOM)为代表。目前以基于统计模型的方法为主。 聚类结果的解释和验证:
以下内容后续补充: K-means算法的R实现:数据示例: x = rbind(matrix(rnorm(100,sd=0.3),ncol=2),matrix(rnorm(100,mean=1,sd=0.3),ncol=2))
cl = kmeans(x,2,20)
plot(x,col = cl$cluster,pch=3,lwd=1) image.png points(cl$centers,col=1:2,pch=7,lwd=3) # 画出中心点 segments(x[cl$cluster==1,][,1],x[cl$cluster==1,][,2],cl$centers[1,1],cl$centers[1,2]) # 画出每个点到中心点的连线。 segments(x[cl$cluster==2,][,1],x[cl$cluster==2,][,2],cl$centers[2,1],cl$centers[2,2],col=2) image.png 层次聚类算法的R实现:数据示例: data('USArrests')hc = hclust(dist(USArrests),'ave')plot(hc,hang = -1) image.png 解释说明为了有效利用聚类算法, 首先需要度量观测值见的距离,在R中常通过stats包里的dist函数来实现:
另一个计算点之间的距离的方法是cluster包里面的daisy函数: daisy(x, metric = c('euclidean', 'manhattan', 'gower'), stand = FALSE, type = list(), weights = rep.int(1, p), warnBin = warnType, warnAsym = warnType, warnConst = warnType, warnType = TRUE) daisy函数计算数据集中每对观测值的不相似度。daisy函数的参数描述如下:
k-means聚类是最简单的聚类算法之一。R中可以通过stats包里面的kmeans函数实现k-means聚类:
|
|
来自: 新用户5987armE > 《待分类》