主要内容

聚类分析

这个例子展示了如何检查相似与相异的观察或对象使用聚类分析统计和机器学习的工具箱™。数据经常会自然分成小组(或集群)的观测,对象在同一集群的特征是相似的和对象在不同的集群的特点是不同的。

k - means和分层集群

统计和机器学习工具箱包括k -均值聚类和层次聚类函数来执行。

k - means聚类是一种划分方法,将观测数据作为对象中有相互位置和距离。它分区对象到K互斥的集群,这样在每个集群对象尽可能接近彼此,和尽可能远离其他集群中的对象。每个集群的特点是它的质心,或中心点。当然,通常用于聚类的距离并不代表空间距离。

层次聚类是一种调查数据分组,同时在各种距离的尺度,通过创建一个集群树。树不是一个单一的组群,在k - means,而是一个多级层次结构,集群在某种程度上也加入了集群上一级。这允许您决定什么集群的规模和水平是最适合您的应用程序。

在这个例子中所使用的一些功能调用MATLAB®内置的随机数生成函数。复制的结果显示在这个例子中,您应该执行下面的命令,设置随机数发生器到一个已知状态。如果你不设置状态,在琐碎的方面你的结果可能不同,例如,您可能会看到集群以不同的顺序编号。还有一个机会,一个次优的集群解决方案可能导致(非最优解决方案的例子包括一个讨论,包括如何避免它们)。金宝搏官方网站

rng (6,“旋风”)

费雪的虹膜数据

在1920年代,植物学家收集测量花萼长度,宽度萼片,花瓣长度,和花瓣宽度150虹膜的标本,从每个三个物种的50。测量被称为费雪的虹膜数据集。

每个观测在这个数据集来自已知物种,所以已经有一个明显的方式对数据进行分组。目前,我们将忽略该物种信息和集群数据只使用原始的测量。当我们完成的时候,我们可以比较结果集群实际物种,是否三种类型的虹膜具有独特的特点。

集群费舍尔的虹膜数据使用k - means聚类

这个函数kmeans执行k - means聚类,使用迭代算法,分配对象集群,这样距离的总和每个对象聚类质心,在所有集群,是一个最小值。用于费雪的虹膜数据,它会找到虹膜样本之间的自然分组,根据他们的萼片和花瓣测量。使用k - means聚类,您必须指定您想要创建的集群的数量。

首先,加载数据和调用kmeans所需数量的集群设置为2,并使用平方欧氏距离。了解如何布置得井然有序的集群,您可以做一个轮廓图。轮廓图显示距离的测量在一个集群中每个点是点邻近的集群。

负载fisheriris[cidx2, cmeans2] = kmeans(量2“距离”,“sqeuclidean”);[silh2 h] =轮廓(cidx2量,“sqeuclidean”);

从轮廓图中,您可以看到,大多数分在两个集群有一个大的轮廓值,大于0.8,这表明这些点从邻近的集群布置得井然有序。然而,每个集群还包含几个点轮廓值较低,表明他们附近的点与其他集群。

事实证明第四测量这些数据,花瓣宽度、高度与第三测量,花瓣长度,所以前三的三维图测量数据的很好表示,没有求助于四维空间。如果你画出数据,为每个集群由使用不同的符号kmeans,你可以识别出点小轮廓值作为那些接近点的点与其他集群。

ptsymb = {“废话”,“r ^”,“医学博士”,“去”,“c +”};我找= 1:2 clust = (cidx2 = =我);plot3(量(clust 1)量(clust 2)量(clust 3) ptsymb{我});持有结束plot3 (cmeans2 (: 1) cmeans2 (:, 2), cmeans2 (:, 3),“柯”);plot3 (cmeans2 (: 1) cmeans2 (:, 2), cmeans2 (:, 3),“kx”);持有包含(“花萼长度”);ylabel (萼片宽的);zlabel (“花瓣长度”);视图(-137年,10);网格

每个集群的重心是绘制使用X盘旋。三个点的降低集群(绘制三角形)非常接近点上集群(绘制正方形)。因为集群上分散,这三个点的重心更接近集群低于上部的集群,即使点分开的点在自己的集群由一个缺口。因为k - means聚类算法只考虑距离,而不是密度,这种结果可能发生。

你可以增加数量的集群,看看kmeans可以找到进一步分组结构的数据。这一次,使用可选的“显示”名称-值对参数打印信息在每个迭代聚类算法。

[cidx3, cmeans3] = kmeans(量3“显示”,“通路”);
iter阶段num 144.333和1 1 150 146.424 - 2 5 3 1 4 4 1 3 5 1 143.542 143.61 143.924 143.414 6 1 2 7 1 2 143.023 8 1 2 142.823 9 1 1 142.786 10 1 1 142.754 = 142.754的距离最好的总额

在每个迭代中,kmeans算法(见算法)抽调点集群减少point-to-centroid距离的总和,然后再计算集群的质心集群作业。注意距离的总和,在每次迭代中重新分配的数量减少,直到算法达到最低。使用的算法kmeans由两个阶段组成。在这里的例子中,第二阶段的算法不做任何工作分配,表明第一阶段只有几个迭代后达到最小。

默认情况下,kmeans开始聚类过程使用一个随机选择的组初始质心的位置。的kmeans算法能收敛到一个解决方案,是一个局部最小值;也就是说,kmeans可以分区数据,这样任何单点移动到另一个集群增加距离的总和。然而,与许多其他类型的数值最小化,该解决方案kmeans达到有时取决于起始点。因此,其他解决方案(局部最小值),金宝搏官方网站总额较低的距离可以存在数据。您可以使用可选的“复制”名称-值对参数测试不同的解决方案。金宝搏官方网站当你指定多个复制,kmeans重复聚类过程从不同的随机选择质心为每个复制。kmeans然后返回最低的解决方案之间的距离总和所有的复制。

[cidx3, cmeans3 sumd3] = kmeans(量3“复制”5,“显示”,“最后一次”);
复制1 9迭代,总额= 78.8557的距离。复制2 10迭代,总额= 78.8557的距离。复制3 8迭代,总额= 78.8557的距离。复制4、8迭代,总额= 78.8557的距离。复制5 1迭代,总额= 78.8514的距离。最好的总金额= 78.8514的距离

输出显示,甚至是对于这个相对简单的问题,非全局最小值确实存在。这五个复制开始从一个不同的组初始质心。根据是从哪里开始的,kmeans两种不同的解决方案。金宝搏官方网站然而,最终的解决方案kmeans返回一个总额最低的距离,对所有复制。第三输出参数包含距离的总和在每个集群的最佳解决方案。

总和(sumd3)
ans = 78.8514

轮廓图,这三个集群解决方案表明,有一个集群布置得井然有序,但其他两个集群不是很明显。

[silh3 h] =轮廓(cidx3量,“sqeuclidean”);

同样的,你可以画出原始数据,看看kmeans指定指向集群。

我找= 1:3 clust = (cidx3 = =我);plot3(量(clust 1)量(clust 2)量(clust 3) ptsymb{我});持有结束plot3 (cmeans3 (: 1) cmeans3 (:, 2), cmeans3 (:, 3),“柯”);plot3 (cmeans3 (: 1) cmeans3 (:, 2), cmeans3 (:, 3),“kx”);持有包含(“花萼长度”);ylabel (萼片宽的);zlabel (“花瓣长度”);视图(-137年,10);网格

你可以看到,kmeans把上两个集群的集群解决方案,和这两个集群非常接近对方。取决于你打算怎么处理这些数据聚类后,这三个集群解决方案可能比以前或多或少地有用,两个集群解决方案。第一个输出参数轮廓包含每个点的轮廓值,您可以使用定量比较两个解决方案。金宝搏官方网站的平均轮廓值较大的两个集群解决方案,表明它是一个更好的答案纯粹从的角度创建不同的集群。

(平均(silh2)平均(silh3))
ans = 0.8504 - 0.7357

你也可以集群这些数据使用不同的距离。余弦距离可能会对这些数据有意义,因为它无视绝对大小的测量,并且只考虑他们的相对大小。因此,两个不同大小的花朵,但同样形状的花瓣和萼片,可能不会对平方欧氏距离,但会对余弦距离。

[cidxCos, cmeansCos] = kmeans(量3“距离”,“因为”);

从轮廓图,这些集群似乎略为分开比使用平方欧氏距离。

[silhCos h] =轮廓(cidxCos量,“因为”);[意味着(silh2)是(silh3)是(silhCos)]
ans = 0.8504 0.7357 0.7491

注意到集群的顺序是不同的在前面的轮廓图。这是因为kmeans随机选择初始集群作业。

通过绘制的原始数据中,您可以看到在集群中的不同形状创建使用两种不同的距离。两种解决方案都是金宝搏官方网站类似的,但两个集群上细长的原点在使用的方向余弦距离。

我找= 1:3 clust = (cidxCos = =我);plot3(量(clust 1)量(clust 2)量(clust 3) ptsymb{我});持有结束持有包含(“花萼长度”);ylabel (萼片宽的);zlabel (“花瓣长度”);视图(-137年,10);网格

这个情节不包括集群重心,因为重心对余弦距离对应于半句从原点在原始数据的空间。不过,您可以做一个平行坐标图的归一化数据可视化聚类质心之间的区别。

lnsymb = {“b -”,的r -,“m -”};名称= {“SL”,“西南”,“PL”,“PW”};meas0 =量。/ repmat (√sum(量。^ 2,2)),1、4);ymin = min (min (meas0));ymax = max (max (meas0));i = 1:3次要情节(1、3、我);情节(meas0 (cidxCos = =我,:),lnsymb{我});持有;情节(cmeansCos(我,:),“k -”,“线宽”2);持有;标题(sprintf (“集群% d ',我));xlim ([。9日,4.1]);ylim ([ymin ymax]);甘氨胆酸h_gca =;h_gca。XTick = 1:4;h_gca。XTickLabel =名称;结束

从这个情节很明显,标本的三个集群有截然不同的平均相对大小的花瓣和萼片。第一个集群严格小于萼片的花瓣。第二个两个集群的花瓣和萼片重叠,然而,那些来自集群重叠超过第二第三。您还可以看到,第二个和第三个集群包括一些标本非常相似。

因为我们知道每个物种的观测数据中,你可以发现集群进行比较kmeans实际的物种,看看这三个物种可不同的物理特性。事实上,如以下图所示,创建的集群使用余弦距离不同物种组只有5的花朵。这五个点,策划着星星,都是上两个集群的边界附近。

次要情节(1 1 1);我找= 1:3 clust = (cidxCos = =我);plot3(量(clust 1)量(clust 2)量(clust 3) ptsymb{我});持有结束包含(“花萼长度”);ylabel (萼片宽的);zlabel (“花瓣长度”);视图(-137年,10);网格sidx = grp2idx(物种);小姐=找到(cidxCos ~ = sidx);plot3(量(小姐,1),量(小姐,2),(小姐,3),“k *’);传奇({“setosa”,“多色的”,“virginica”});持有

集群费舍尔的虹膜数据使用层次聚类

k - means聚类产生单个分区的虹膜数据,但是您可能还想调查不同尺度的分组数据。层次聚类可以让你做到这一点,通过创建一个层次树的集群。

首先,创建一个集群树使用观察虹膜数据之间的距离。首先使用欧氏距离。

eucD = pdist(量,“欧几里得”);clustTreeEuc =连杆(eucD,“平均”);

同表象相关是一种验证集群树是一致的与原来的距离。大值表明,树适合的距离,在某种意义上,两两之间的联系的观察与实际两两距离。这棵树似乎是一个相当不错的适合的距离。

cophenet (clustTreeEuc eucD)
ans = 0.8770

可视化集群的层次,你可以画出一个系统树图。

[h,节点]=系统树图(clustTreeEuc 0);甘氨胆酸h_gca =;h_gca。TickDir =“出”;h_gca。TickLength = [。002 0];h_gca。XTickLabel = [];

这棵树的根节点是远高于其余节点,确认你看到从k - means聚类:有两个大,不同组的观察。在这两组中,可以看到,低水平的组织成为你考虑在距离越来越小的尺度。有许多不同的群体,不同的大小,不同程度的不同。

基于k - means聚类的结果,cos距离测量的也可能是一个不错的选择。产生的分层树截然不同,这表明一个非常不同的方式来看待组织结构在iris数据。

cosD = pdist(量,的余弦);clustTreeCos =连杆(cosD,“平均”);cophenet (clustTreeCos cosD)
ans = 0.9360
[h,节点]=系统树图(clustTreeCos 0);甘氨胆酸h_gca =;h_gca。TickDir =“出”;h_gca。TickLength = [。002 0];h_gca。XTickLabel = [];

这棵树的最高水平分离虹膜样本分为两个截然不同的组。系统树图表明,对余弦距离,类内差异较小相对差异比欧氏距离。这正是你希望这些数据,因为余弦距离计算零两两距离对象在同一起源的“方向”。

与150年的观察,情节是凌乱的,但你可以做一个简化的系统树图不显示树的最低水平。

[h,节点]=系统树图(clustTreeCos 12);

这棵树中最高的三个节点分离出三个同等大小的群体,再加上一个样本(标记为叶子节点5)附近没有任何其他人。

(和(ismember(节点,[11 12 9 10]))和(ismember(节点,[6 7 8]))sum (ismember(节点,(1 2 3 4)))和(节点= = 5)]
ans = 54 46 49 1

对许多目的,系统树图可能是足够的结果。然而,你可以更进一步,使用集群函数显式地把树和观测分割成特定的集群,与k - means。使用余弦距离的层次结构来创建集群,指定一个链接高度,将下面的树最高的三个节点,并创建四个集群,集群的原始数据进行绘制。

hidx =集群(clustTreeCos,“标准”,“距离”,“截止”,.006);我找= 1:5 clust = (hidx = =我);plot3(量(clust 1)量(clust 2)量(clust 3) ptsymb{我});持有结束持有包含(“花萼长度”);ylabel (萼片宽的);zlabel (“花瓣长度”);视图(-137年,10);网格

这图显示与余弦距离层次聚类的结果定性与k - means结果相似,使用三个集群。然而,创建一个层次聚类树允许您可视化,同时,需要相当多的实践与不同的K值K - means聚类。

层次聚类还允许您尝试不同的联系。例如,集群单键的虹膜数据,往往联系在一起对象比平均距离较大的距离,提供了一个非常不同的解释的结构数据。

clustTreeSng =连杆(eucD,“单一”);[h,节点]=系统树图(clustTreeSng 0);甘氨胆酸h_gca =;h_gca。TickDir =“出”;h_gca。TickLength = [。002 0];h_gca。XTickLabel = [];