赞
踩
目录
聚类是机器学习中一种重要的无监督算法(Unsupervised Learning),它可以将数据点归结为一系列特定的组合。理论上归为一类的数据点具有相同的特性,而不同类别的数据点则具有各不相同的属性。
与监督学习(如分类器)相比,无监督学习的训练集没有人为标注的结果。在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。
聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。目的是,组内的对象相互之间是相似的(相关的),而不同组中的对象是不同的(不相关的)。组内相似性越大,组间差距越大,说明聚类效果越好。
也就是说, 聚类的目标是得到较高的簇内相似度和较低的簇间相似度,使得簇间的距离尽可能大,簇内样本与簇中心的距离尽可能小。
聚类得到的簇可以用聚类中心、簇大小、簇密度和簇描述等来表示
不同的聚类算法有不同的应用背景,有的适合于大数据集,可以发现任意形状的聚簇;有的算法思想简单,适用于小数据集。总的来说,数据挖掘中针对聚类的典型要求包括:
(1)可伸缩性:当数据量从几百上升到几百万时,聚类结果的准确度能一致。
(2)处理不同类型属性的能力:许多算法针对的数值类型的数据。但是,实际应用场景中,会遇到二元类型数据,分类/标称类型数据,序数型数据。
(3)发现任意形状的类簇:许多聚类算法基于距离(欧式距离或曼哈顿距离)来量化对象之间的相似度。基于这种方式,我们往往只能发现相似尺寸和密度的球状类簇或者凸型类簇。但是,实际中类簇的形状可能是任意的。
(4)初始化参数的需求最小化:很多算法需要用户提供一定个数的初始参数,比如期望的类簇个数,类簇初始中心点的设定。聚类的结果对这些参数十分敏感,调参数需要大量的人力负担,也非常影响聚类结果的准确性。
(5)处理噪声数据的能力:噪声数据通常可以理解为影响聚类结果的干扰数据,包含孤立点,错误数据等,一些算法对这些噪声数据非常敏感,会导致低质量的聚类。
(6)增量聚类和对输入次序的不敏感:一些算法不能将新加入的数据快速插入到已有的聚类结果中,还有一些算法针对不同次序的数据输入,产生的聚类结果差异很大。
(7)高维性:有些算法只能处理2到3维的低纬度数据,而处理高维数据的能力很弱,高维空间中的数据分布十分稀疏,且高度倾斜。
(8)可解释性和可用性:我们希望得到的聚类结果都能用特定的语义、知识进行解释,和实际的应用场景相联系。
适用于大规模数据集的聚类分析,常用于市场分析、图像分析、语音分析、医学分析等领域。
均值漂移算法
基于密度的聚类算法(DBSCAN)
适用于大规模数据集中密度不均匀的聚类分析,常用于空间数据分析、异常检测等领域。
利用高斯混合模型进行最大期望估计
适用于数据集中存在多个高斯分布的聚类分析,常用于图像分析、语音分析、信号处理等领域。
凝聚层次聚类
适用于小规模数据集,常用于生物学研究、社会学研究等领域。
谱聚类模型:适用于大规模数据集的聚类分析,常用于图像分析、社交网络分析等领域。
聚类分析的度量指标用于对聚类结果进行评判,分为内部指标
和外部指标
两大类
主要基于数据点之间的均值和与聚类中心的聚类迭代而成。它主要的优点是十分的高效,由于只需要计算数据点与聚类中心的距离,其计算复杂度只有O(n)。其工作原理主要分为以下四步:
这种方法在理解和实现上都十分简单,但缺点却也十分明显,十分依赖于初始给定的聚类数目;同时随机初始化可能会生成不同的聚类效果,所以它缺乏重复性和连续性。和K均值类似的K中值算法,在计算过程中利用中值来计算聚类中心,使得局外点对它的影响大大减弱;但每一次循环计算中值矢量带来了计算速度的大大下降。
k‐均值++算法的优缺点
鸢尾花的三个特征聚类
- # -*- coding: utf-8 -*-
- import numpy as np
- import matplotlib.pyplot as plt
- from mpl_toolkits.mplot3d import Axes3D
- from sklearn.cluster import KMeans
- from sklearn import datasets
- plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
- plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
-
- def visual(X, labels):
- fig = plt.figure(1, figsize=(6, 4))
- ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)
- ax.scatter(X[:, 3], X[:, 0], X[:, 2], c=labels.astype(float), edgecolor='k')
- ax.set_xticklabels([])
- ax.set_yticklabels([])
- ax.set_zticklabels([])
-
- ax.set_xlabel('花瓣宽度')
- ax.set_ylabel('萼片长度')
- ax.set_zlabel('花瓣长度')
- ax.set_title("聚类(鸢尾花的三个特征数据)")
- ax.dist = 12
- plt.show()
-
- if __name__=='__main__':
- np.random.seed(5)
- iris = datasets.load_iris()
- X = iris.data
- y = iris.target
- est = KMeans(n_clusters=3)
- est.fit(X)
- labels = est.labels_
- visual(X, labels)
对k值的选取,主要有以下几种:
一种基于滑动窗口的均值算法,用于寻找数据点中密度最大的区域。其目标是找出每一个类的中心点,并通过计算滑窗内点的均值更新滑窗的中心点。最终消除临近重复值的影响并形成中心点,找到其对应的类别。
与K均值相比最大的优点是我们无需指定指定聚类数目,聚类中心处于最高密度处也是符合直觉认知的结果。但其最大的缺点在于滑窗大小r的选取,对于结果有着很大的影响。
DBSCAN同样是基于密度的聚类算法,但其原理却与均值漂移大不相同:
在使用高斯混合模型时有两个关键的地方,首先高斯混合模型十分灵活,可以拟合任意形状的椭圆;其次这是一种基于概率的算法,每个点可以拥有属于多类的概率,支持混合属性。
层次聚类法主要有自顶向下和自底向上两种方式。其中自底向上的方式,最初将每个点看做是独立的类别,随后通过一步步的凝聚最后形成独立的一大类,并包含所有的数据点。这会形成一个树形结构,并在这一过程中形成聚类。
聚类分析是一种无监督学习方法,旨在将数据集中的对象划分为若干个不相交的子集(簇),使得同一簇内的对象之间具有较高的相似度,而不同簇之间的对象相似度较低。
参考文献
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。