主要内容

威彻斯

K.- 梅尔集群

描述

示例

idx= kemans(X.K.执行K.- 梅尔集群划分观察N-P.数据矩阵X.进入K.群集,并返回一个N1向量(idx)包含每个观察的集群指数。行X.对应于分列对应的变量。

默认情况下,威彻斯采用平方欧氏距离度量和K.-means ++算法对于聚类中心的初始化。

示例

idx= kemans(X.K.名称,值使用一个或多个指定的其他选项返回群集索引名称,值对论点。

例如,指定余弦距离,使用新初始值重复群集的次数,或使用并行计算。

示例

[idxC.) = kmeans (___返回K.集群质心位置K.-P.矩阵C.

示例

[idxC.sum) = kmeans (___返回群集点对心距离内的群集群K.-By-1矢量sum

示例

[idxC.sumD.) = kmeans (___函数中每个点到每个质心的距离N-K.矩阵D.

例子

崩溃

使用群集数据K.- 群集聚类,然后绘制群集区域。

装载Fisher的Iris数据集。使用花瓣长度和宽度作为预测器。

加载渔民X = MEAS(:,3:4);图;plot(x(:,1),x(:,2),'k *''Markersize'5);标题'fisher'的虹膜数据';XLabel.“花瓣长度(厘米)”;ylabel.“花瓣宽度(厘米)”;

图包含轴。具有标题Fisher的IRIS数据的轴包含类型线的对象。

较大的聚类似乎分成了一个低方差区域和一个高方差区域。这可能表明较大的星团是两个重叠的星团。

集群中的数据。指定K.= 3个簇。

rng (1);重复性的%[idx C] = kmeans (X, 3);

idx是对应于观察的预测集群指数的矢量X.C.是一个包含最终质心位置的3×2矩阵。

使用威彻斯计算从每个质心从网格上点点的距离。为此,通过质心(C.),并在网格上,以点威彻斯并实现算法的一个迭代。

x1 = min(x(:,1)):0.01:max(x(:,1));x2 = min(x(:,2)):0.01:max(x(:,2));[x1g,x2g] = meshgrid(x1,x2);xgrid = [x1g(:),x2g(:)];%在图上定义了一个细网格idx2Region = kmeans (XGrid 3“麦克斯特”,1,“开始”,C);
警告:未能收敛于1个迭代。
%将网格中的每个节点分配给最接近的质心

威彻斯显示警告,说明算法没有收敛,因为软件只实现了一次迭代,您应该期望的算法。

绘制集群区域。

图;gscatter (XGrid (: 1) XGrid (:, 2), idx2Region,......[0,0.75,0.75; 0.75,0,0.75; 0.75,0.75,0]'..');hold;plot(x(:,1),x(:,2),'k *''Markersize'5);标题'fisher'的虹膜数据';XLabel.“花瓣长度(厘米)”;ylabel.“花瓣宽度(厘米)”;传说('地区1''地区2''地区3''数据''位置''东南');hold关闭;

图包含轴。具有标题Fisher的IRIS数据的轴包含4个类型的类型。这些对象表示区域1,区域2,区域3,数据。

随机生成样本数据。

RNG.默认;重复性的%x = [randn(100,2)* 0.75 + +(100,2);Randn(100,2)* 0.5  -  ofon(100,2)];图;plot(x(:,1),x(:,2),'');标题'随机生成的数据';

图包含轴。具有标题随机生成的数据的轴包含类型线的对象。

数据中似乎有两个群集。

将数据分组为两个群集,并选择最佳排列在五个初始化中。显示最终输出。

OPTS = statset(“显示”“最后一次”);[idx,c] = kmeans(x,2,'距离''CityBlock'......'复制',5,“选项”、选择);
复制1,3次迭代,距离= 201.533的总和。复制2,5次迭代,距离= 201.533的总和。复制3,3迭代中,距离= 201.533的总和。复制4,3次迭代,距离= 201.533的总和。复制5,2次迭代,距离= 201.533的总和。距离= 201.533的最好的总和

默认情况下,软件初始化重复使用分开K.-means ++。

绘制集群和集群质心。

图;绘图(x(idx == 1,1),x(idx == 1,2),'r。''Markersize',12)持有绘图(x(idx == 2,1),x(idx == 2,2),'B'。'Markersize'12)情节(C (: 1), C (:, 2),'kx'......'Markersize'15岁的“线宽”,3)传奇('集群1''集群2''质心'......'位置''nw')标题“集群分配和质心”hold关闭

图包含轴。与标题集群分配和质心轴包含型线的3个对象。这些对象表示簇1,分类2,质心。

您可以通过传递来确定集群的分离程度idx轮廓

聚类大型数据集可能需要一段时间,特别是如果你使用在线更新(默认设置)。如果你有一个并行计算工具箱™许可证并设置并行计算的选项,然后威彻斯并行地运行每个集群任务(或复制)。而且,如果重复> 1,则并行计算减少的时间来收敛。

随机生成从高斯混合模型的大型数据集。

亩= bsxfun(@倍,酮(20,30),(1:20)');%高斯混合物的意思rn30 = randn(30、30);σ= rn30 ' * rn30;%对称正定协方差MDL = gmdistribution(亩,Sigma公司);%定义高斯混合分布rng (1);重复性的%X =随机(MDL,10000);

MDL.是30维的GMDistribution.模型有20个组件。X.是10000×30的数据矩阵MDL.

指定并行计算选项。

流= RandStream ('mlfg6331_64');%随机数流选项= statset('UseParallel',1,'userubstreams',1,......“流”,流);

输入论点'mlfg6331_64'ofrandstream.指定要使用的乘法滞后斐波那契数生成器算法。选择是与指定用于控制估计选项字段的结构阵列。

使用群集数据K.-means集群。指定存在K.=数据中20个簇,增加迭代次数。通常,目标函数包含局部最小值。指定10个复制以帮助查找更低的本地最小值。

tic;%开始秒表计时(sumd idx, C, D) = kmeans (X, 20,“选项”选项,“麦克斯特”,10000,......“显示”“最后一次”'复制',10);
开始使用“本地”的个人资料...连接到6名工人并行池(parpool)。复制5,72次迭代,距离= 7.73161e + 06的总和。复制1,64次迭代,距离= 7.72988e + 06的总和。复制3,68次迭代,距离= 7.72576e + 06的总和。复制4,84次迭代,距离= 7.72696e + 06的总和。复制6,82次迭代,距离= 7.73006e + 06的总和。复制7,40次迭代,距离= 7.73451e + 06的总和。复制2,194次迭代,距离= 7.72953e + 06的总和。复制9,105次迭代,距离= 7.72064e + 06的总和。复制10,125次迭代,距离= 7.72816e + 06的总和。 Replicate 8, 70 iterations, total sum of distances = 7.73188e+06. Best total sum of distances = 7.72064e+06
TOC.%终止秒表计时
运行时间为61.915955秒。

在命令窗口中显示,六名工人可用。职工人数可能会在系统上会有所不同。命令窗口显示的迭代次数和每个复制终端目标函数值。输出参数不包含重复9的结果,因为它有距离的最低总和。

威彻斯执行K.- 群集群集将数据分区K.集群。当你有一个新的数据集簇,您可以创建新的集群,通过使用包括现有数据和新数据威彻斯.当威彻斯功能支持C / C金宝app ++代码生成,所以可以生成代码,接收训练数据和返回的聚类结果,然后将代码部署到设备。在这个工作流程,你必须通过训练数据,它可以是具有相当规模。要保存在设备上存储,您可以通过使用单独的训练和预测威彻斯pdist2分别。

使用威彻斯创造MATLAB®和使用集群pdist2在生成的代码中为现有群集分配新数据。对于代码生成,定义接受群集质心位置和新数据集的入口点函数,并返回最近群集的索引。然后,为入口点函数生成代码。

生成C/ c++代码需要MATLAB®Coder™。

表演K.- 梅尔集群

使用三个分布生成培训数据集。

RNG(“默认”重复性的%x = [randn(100,2)* 0.75 + +(100,2);Randn(100,2)* 0.5-(100,2);Randn(100,2)* 0.75];

通过使用将培训数据分为三个集群威彻斯

[idx C] = kmeans (X, 3);

绘制集群和集群质心。

图gscatter(X(:,1),X(:,2),IDX,'BGM'抱紧图(C(:,1),C(:,2),'kx')传说('集群1''集群2''群3'聚类质心的

图包含轴。轴包含型线的4个对象。这些对象表示簇1,簇2,簇3,聚类质心。

分配新的数据到现有集群

生成测试数据集。

XTEST = [RANDN(10,2)* 0.75 +(10,2);Randn(10,2)* 0.5-(10,2);Randn(10,2)* 0.75];

使用现有群集对测试数据设置分类。通过使用从每个测试数据点找到最近的质心pdist2

[〜,idx_test] = pdist2(c,xtest,'euclidean'“最小”,1);

绘制测试数据,并使用标记的测试数据idx_test.通过使用g箭偶

g箭头(xtest(:,1),xtest(:,2),idx_test,'BGM''ooo')传说('集群1''集群2''群3'聚类质心的......'分类为群集1'的数据'分类为群集2'的数据......'数据分类为群集3'

图包含轴。轴包含7个类型的类型。这些对象表示群集1,群集2,群集3,群集质心,分类为群集1的数据,分类为群集2的数据,分类为群集3的数据。

生成代码

生成C代码,将新数据分配给现有的集群。请注意,生成C/ c++代码需要MATLAB®Coder™。

定义命名的入口点函数findNearestCentroid接受质心位置和新数据,然后通过使用找到最近的集群pdist2

添加%#codegen.编译器指令(或Pragma)到函数签名后的入门点函数,表示您打算为Matlab算法生成代码。添加此指令指示MATLAB代码分析仪帮助您诊断和修复在代码生成期间会导致错误的违规。

类型findNearestCentroid%显示findnearestcentroid.m的内容
功能IDX = findNearestCentroid(C,X)%#代码生成[〜,IDX] = pdist2(C,X, '欧几里德', '最小',1);%查找最近重心

注意:如果你点击这个页面右上角的按钮,并在MATLAB®中打开这个示例,那么MATLAB®将打开示例文件夹。这个文件夹包括入口点函数文件。

通过使用代码生成Codegen.(MATLAB编码器).因为C和c++都是静态类型语言,所以必须在编译时确定入口点函数中所有变量的属性。的输入的数据类型和数组大小findNearestCentroid,通过MATLAB表达式,该表达式表示具有某个数据类型和数组大小的一组值,通过使用-args选项。有关详细信息,请参阅指定代码生成的变量大小参数

Codegen.findNearestCentroid-args{C, Xtest}
代码生成成功。

Codegen.生成MEX函数findnearestcentroid_mex.具有平台依赖的扩展。

验证生成的代码。

myindx = findnearestcentroid(c,xtest);myIndex_mex = findnearestcentroid_mex(c,xtest);verifymex = isequal(idx_test,myindx,myindex_mex)
验证ex =.逻辑1

是的返回逻辑1(真实),这意味着所有输入都是相等的。比较证实了pdist2函数,findNearestCentroid功能和MEX函数返回相同的索引。

您还可以生成使用GPU编码器™CUDA®优化代码。

CFG = coder.gpuConfig('MEX');Codegen.-Config.CFGfindNearestCentroid-args{C, Xtest}

有关代码生成的更多信息,请参阅通用代码生成流程.有关GPU编码器的更多信息,请参见GPU编码器开始(GPU编码器)金宝app支持的功能(GPU编码器)

输入参数

崩溃

数据,指定为数字矩阵。的行X.对应观察值,列对应变量。

如果X.是数值向量,则威彻斯把它视为一个N×1数据矩阵,而不管其方向如何。

该软件把为NaNin.X.为丢失数据,并删除任何行X.包含至少一个为NaN.去除行X.降低了样本大小。当威彻斯函数返回为NaN对于输出参数中的相应值idx

数据类型:单身|双人间

数据中的集群数量,指定为正整数。

数据类型:单身|双人间

名称值对参数

指定可选的用逗号分隔的对名称,值参数。的名字是参数名称和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:'距离', '余弦', '重复测试',10, '选项',statset( 'UseParallel',1)指定余弦距离,10.以不同的起始值复制集群,并使用并行计算。

在命令窗口中显示的输出级别,指定为逗号分隔对组成“显示”以及以下选项之一:

  • “最后一次”—显示最后一次迭代的结果

  • 'ITER'- 显示每次迭代的结果

  • “关闭”- 没有显示

例子:“显示”、“最后”

距离度量,P.维空间中,用于最小化,指定为逗号分隔的一对组成的'距离''sqeuclidean''CityBlock''余弦'“相关”或者“汉明”

威彻斯计算质心簇不同所支持的距离度量。金宝app此表总结了可用的距离度量。式中,X.是一个观察结果(即一排)X.)和C.为质心(行向量)。

距离度量 描述 惯例
'sqeuclidean'

平方欧几里德距离(默认)。每个质心都是该群集中的点的平均值。

D. X. C. = X. - C. X. - C. '

'CityBlock'

绝对差的和,即L.1距离。每个质心都是该群集中点的分量中位数。

D. X. C. = σ. j = 1 P. | X. j - C. j |

'余弦'

一个减分之间的夹角(如载体处理的)的余弦值。每个质心是平均该群集中的点的,这些点标准化为单位欧几里德长度后。

D. X. C. = 1 - X. C. ' X. X. ' C. C. '

“相关”

一减点之间的样本相关(作为值的序列处理的)。每个质心是该群集中的点的逐个分量平均值,定心和归一化的那些点,以零均值和单位标准差之后。

D. X. C. = 1 - X. - X. ¯ C. - C. ¯ ' X. - X. ¯ X. - X. ¯ ' C. - C. ¯ C. - C. ¯ '

在哪里

  • X. ¯ = 1 P. σ. j = 1 P. X. j 1 P.

  • C. ¯ = 1 P. σ. j = 1 P. C. j 1 P.

  • 1 P. 是的行向量P.那些。

“汉明”

该度量是仅适合于二进制数据。

它是不同的比例的比例。每个质心都是该群集中的分量中位数。

D. X. y = 1 P. σ. j = 1 P. { X. j y j }

在哪里是指示符函数。

例子:“距离”、“cityblock”

要采取的行动,如果一个集群失去其所有成员的观察,指定为逗号分隔的一对组成的'EmptyAction'和下列选项之一。

价值 描述
“错误”

将空集群视为错误。

“下降”

删除变成空的任何集群。威彻斯设置相应的回报值C.D.为NaN

'ingleton'

创建一个新的群集,该群集由Firedroid(默认)最远的一点组成。

例子:'空洞','错误'

最大迭代次数,指定为逗号分隔的一对组成的“麦克斯特”和一个正整数。

例子:'MAXITER',1000

数据类型:双人间|单身

在线更新标志,指定为逗号分隔对组成“OnlinePhase”“关闭”或者'开'

如果OnlinePhase那么威彻斯执行除了批量更新阶段的在线更新阶段。在线阶段可能很耗时大型数据集,但保证了解决方案,它是距离标准的局部最小值。换言之,软件找到在其中移动任何单点到一个不同的簇增加距离的总和的数据的分区。

例子:'关于' OnlinePhase',

用于控制迭代算法的选项,以最小化拟合标准,指定为逗号分隔的对组成“选项”和结构数组返回由实例化.金宝app结构阵列的支持字段指定用于控制所述迭代算法的选择。

此表总结了支持的字段。金宝app需要注意的是支持的字段需要并金宝app行计算工具箱™。

田野 描述
“流”

A.randstream.这样的对象的对象或单元阵列。如果没有指定溪流威彻斯使用默认流或流。如果您指定溪流,除非下列所有条件都存在,否则使用单个对象:

  • 你有一个开放的并行池。

  • UseParallel真实

  • UseSubstreams

在这种情况下,使用一个单元阵列相同的大小作为平行池。如果并行游泳池不开放,那么溪流必须提供单个随机数流。

'UseParallel'
  • 如果真实重复> 1,那么威彻斯实现K.-means并行地对每个重复算法。

  • 如果未安装并行计算工具箱,然后计算发生在串行模式。默认为,表示串行计算。

'userubstreams' 设定为真实以可重复的方式并行计算。默认为.计算可重复的,设置溪流到允许子流的类型:'mlfg6331_64'或者'MRG32K3A'

为确保更可预测的结果,使用parpool(并行计算工具箱)并在调用之前显式创建并行池威彻斯和设置'选项',statset( 'UseParallel',1)

例子:'选项',statset( 'UseParallel',1)

数据类型:塑造

次数重复使用新的初始聚类质心位置聚类,指定为逗号分隔的一对组成的'复制'和一个整数。威彻斯返回具有最低的溶液sum

你可以设置'复制'隐含地通过向3-D阵列提供作为值的值来实现“开始”名称 - 值对的参数。

例子:“复制”,5

数据类型:双人间|单身

选择初始集群质心位置的方法(或种子),指定为逗号分隔的配对组成“开始”“集群”“+”“样本”'制服',数字矩阵或数字数组。此表总结了选择种子的可用选项。

价值 描述
“集群”

在随机的10%子样本上执行初步聚类阶段X.当子样本中的观测次数大于K..这种初步阶段本身是初始化的“样本”

如果观察的在随机的10%的子样本数小于K.,然后软件进行选择K.观察X.随机。

“+”(默认) 选择K.通过实施种子K.-means ++算法对于聚类中心的初始化。
“样本” 选择K.观察X.随机。
'制服' 选择K.从范围内随机均匀地点X..不适用于汉明距离。
数字矩阵 K.-P.矩阵形心的起始位置。的行开始对应于种子。软件infers.K.从第一个维度开始,所以你可以通过[]对于K.
数字数组 K.-P.-R.质心起始位置数组。每个页面的行对应于种子。第三个维度调用群集例程的复制。页面j包含用于复制的一组种子j.该软件推断复制的数量(由'复制'名称值对参数)从第三维度的大小。

例子:'开始','样本'

数据类型:char||双人间|单身

输出参数

崩溃

群集指数,作为数字列向量返回。idx有多达行的X.,每一行表示相应观测的聚类分配。

聚类中心位置,返回一个数字矩阵。C.是一个K.-P.矩阵,其中行j是集群的质心j

在群集点对点距离的集群范围内,作为数字列向量返回。sum是一个K.-by-1向量,其中元素j是群集中的点对点距离的总和j.默认情况下,威彻斯采用欧氏距离平方(见'距离'指标)。

从每个点到每一个质心的距离,返回一个数字矩阵。D.是一个N-K.矩阵,其中元素(jm)为观测距离j以质心m.默认情况下,威彻斯采用欧氏距离平方(见'距离'指标)。

更多关于

崩溃

K.- 梅尔集群

k均值聚类,或Lloyd的算法[2],是分配的迭代,数据分区算法N观察结果正好是K.由质心定义的簇,其中K.在算法开始之前被选中。

该算法如下进行:

  1. 选择K.初始集群中心(形心)。例如,选择K.随机观察(通过使用'开始','样本'),或使用K.-means ++算法用于群集中心初始化(默认值)。

  2. 计算所有观测到每个质心的点到簇质心的距离。

  3. 有两种方法可以继续(指定OnlinePhase):

    • 批处理更新 - 将每个观察分配给群集的最接近质心。

    • 在线更新-如果重新分配减少了簇内点到簇心距离的平方和和,则单独将观测值分配到不同的质心。

    有关更多详细信息,请参阅算法

  4. 计算每个集群中的观测的平均值K.新心位置。

  5. 重复步骤2到4,直到群集分配不会更改,或者达到最大迭代次数。

K.-means ++算法

K.-means ++算法使用启发式寻找质心种子K.-means集群。据亚瑟和Vassilvitskii[1]K.-means ++提高了英国劳氏算法的运行时间,并最终解决方案的质量。

K.-means++算法选择种子如下,假设集群数量为K.

  1. 从数据集随机选择一个观察,X..选择的观察是第一质心,并表示为C.1

  2. 从每个观察到计算距离C.1.记之间的距离C.j和观察mas. D. X. m C. j

  3. 选择下一个重心,C.2从随机X.的概率

    D. 2 X. m C. 1 σ. j = 1 N D. 2 X. j C. 1

  4. 选择中心j

    1. 计算从每个观察到每个质心的距离,每个观测分配给其最接近的质心。

    2. 对于m= 1,…,NP.= 1,…,j- 1,选择质心j从随机X.的概率

      D. 2 X. m C. P. σ. { H. ; X. H. C. P. } D. 2 X. H. C. P.

      在哪里C.P.是最接近质心的所有观察的集合C.P.X.m属于C.P.

      也就是说,选择的概率成正比,从自身到最近的中心,你已经选择了距离每个后续中心。

  5. 重复步骤4直到K.选上的重心。

亚瑟和Vassilvitskii[1]使用仿真研究进行几个群化方向演示K.-means ++实现更快的融合到群集中的较低之和,比LLOYD算法的规范距离较低。

算法

  • 威彻斯采用两阶段迭代算法最小化点到质心距离的和,求和K.集群。

    1. 第一阶段使用批量更新,每次迭代包括将点全部重新分配到它们最近的簇心,然后重新计算簇心。这个阶段有时不收敛于局部最小解。也就是说,在数据的分区中,将任何一个点移动到不同的集群中,都会增加距离的总和。这对于小数据集来说更有可能。批处理阶段是快速的,但可能只近似于作为第二阶段起点的解决方案。

    2. 第二阶段使用在线更新如果执行此操作,则单独重新分配点,从而减少距离之和,并且在每个重新分配后重新计算群集质心。在此阶段的每次迭代都是由所有点传递的。该阶段会聚到局部最小值,尽管可能存在其他局部最小值,但距离较低。通常,通过详尽的起点选择来解决全局最小值,但是使用随机起点的几个复制通常会导致作为全局最小的解决方案。

  • 如果重复=R.> 1和开始(默认值),则该软件选择R.根据的可能不同的种子K.-means ++算法

  • 如果你启用UseParallel选项选项重复> 1,然后每个工作人员并行选择种子和簇。

参考文献

[1]亚瑟,大卫和Sergi Vassilvitskii。“K-Means ++:仔细播种的优势。”SODA '07:离散算法十八届ACM-SIAM研讨会论文集.2007年,页1027 - 1035。

[2] LLOYD,STUART P.“PCM中最小二乘量化”。信息理论上的IEEE交易.卷。28,1982,第129-137页。

[3] SEBER,G. A. F.多变量观察.John Wiley & Sons, Inc., 1984。

[4] Spath, H。集群解剖和分析:理论,FORTRAN程序,实例.由J. Goldschmidt翻译。纽约:Halsted Press,1985年。

扩展功能

在R2006A之前介绍