K.- 梅尔集群
执行K.- 梅尔集群划分观察N-P.数据矩阵idx
= kemans(X.
那K.
)X.
进入K.
群集,并返回一个N1向量(idx
)包含每个观察的集群指数。行X.
对应于分列对应的变量。
默认情况下,威彻斯
采用平方欧氏距离度量和K.-means ++算法对于聚类中心的初始化。
使用群集数据K.- 群集聚类,然后绘制群集区域。
装载Fisher的Iris数据集。使用花瓣长度和宽度作为预测器。
加载渔民X = MEAS(:,3:4);图;plot(x(:,1),x(:,2),'k *'那'Markersize'5);标题'fisher'的虹膜数据';XLabel.“花瓣长度(厘米)”;ylabel.“花瓣宽度(厘米)”;
较大的聚类似乎分成了一个低方差区域和一个高方差区域。这可能表明较大的星团是两个重叠的星团。
集群中的数据。指定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关闭;
随机生成样本数据。
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关闭
您可以通过传递来确定集群的分离程度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'那聚类质心的)
分配新的数据到现有集群
生成测试数据集。
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')
生成代码
生成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.
对应观察值,列对应变量。
如果X.
是数值向量,则威彻斯
把它视为一个N×1数据矩阵,而不管其方向如何。
该软件把为NaN
in.X.
为丢失数据,并删除任何行X.
包含至少一个为NaN
.去除行X.
降低了样本大小。当威彻斯
函数返回为NaN
对于输出参数中的相应值idx
.
数据类型:单身
|双人间
K.
-簇数量数据中的集群数量,指定为正整数。
数据类型:单身
|双人间
指定可选的用逗号分隔的对名称,值
参数。的名字
是参数名称和价值
是相应的价值。的名字
必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家
.
'距离', '余弦', '重复测试',10, '选项',statset( 'UseParallel',1)
指定余弦距离,10.
以不同的起始值复制集群,并使用并行计算。
“显示”
-显示输出水平“关闭”
(默认)|“最后一次”
|'ITER'
在命令窗口中显示的输出级别,指定为逗号分隔对组成“显示”
以及以下选项之一:
“最后一次”
—显示最后一次迭代的结果
'ITER'
- 显示每次迭代的结果
“关闭”
- 没有显示
例子:“显示”、“最后”
'距离'
-距离度量'sqeuclidean'
(默认)|'CityBlock'
|'余弦'
|“相关”
|“汉明”
距离度量,P.
维空间中,用于最小化,指定为逗号分隔的一对组成的'距离'
和'sqeuclidean'
那'CityBlock'
那'余弦'
那“相关”
或者“汉明”
.
威彻斯
计算质心簇不同所支持的距离度量。金宝app此表总结了可用的距离度量。式中,X.是一个观察结果(即一排)X.
)和C.为质心(行向量)。
距离度量 | 描述 | 惯例 |
---|---|---|
'sqeuclidean' |
平方欧几里德距离(默认)。每个质心都是该群集中的点的平均值。 |
|
'CityBlock' |
绝对差的和,即L.1距离。每个质心都是该群集中点的分量中位数。 |
|
'余弦' |
一个减分之间的夹角(如载体处理的)的余弦值。每个质心是平均该群集中的点的,这些点标准化为单位欧几里德长度后。 |
|
“相关” |
一减点之间的样本相关(作为值的序列处理的)。每个质心是该群集中的点的逐个分量平均值,定心和归一化的那些点,以零均值和单位标准差之后。 |
在哪里
|
“汉明” |
该度量是仅适合于二进制数据。 它是不同的比例的比例。每个质心都是该群集中的分量中位数。 |
在哪里我是指示符函数。 |
例子:“距离”、“cityblock”
“麦克斯特”
-最大迭代次数100.
(默认)|正整数最大迭代次数,指定为逗号分隔的一对组成的“麦克斯特”
和一个正整数。
例子:'MAXITER',1000
数据类型:双人间
|单身
“OnlinePhase”
-在线更新标志“关闭”
(默认)|'开'
在线更新标志,指定为逗号分隔对组成“OnlinePhase”
和“关闭”
或者'开'
.
如果OnlinePhase
是上
那么威彻斯
执行除了批量更新阶段的在线更新阶段。在线阶段可能很耗时大型数据集,但保证了解决方案,它是距离标准的局部最小值。换言之,软件找到在其中移动任何单点到一个不同的簇增加距离的总和的数据的分区。
例子:'关于' OnlinePhase',
“选项”
-为最小化拟合准则而控制迭代算法的选项[]
(默认)|返回的结构阵列实例化
用于控制迭代算法的选项,以最小化拟合标准,指定为逗号分隔的对组成“选项”
和结构数组返回由实例化
.金宝app结构阵列的支持字段指定用于控制所述迭代算法的选择。
此表总结了支持的字段。金宝app需要注意的是支持的字段需要并金宝app行计算工具箱™。
田野 | 描述 |
---|---|
“流” |
A.
在这种情况下,使用一个单元阵列相同的大小作为平行池。如果并行游泳池不开放,那么 |
'UseParallel' |
|
'userubstreams' |
设定为真实 以可重复的方式并行计算。默认为假 .计算可重复的,设置溪流 到允许子流的类型:'mlfg6331_64' 或者'MRG32K3A' . |
为确保更可预测的结果,使用parpool
(并行计算工具箱)并在调用之前显式创建并行池威彻斯
和设置'选项',statset( 'UseParallel',1)
.
例子:'选项',statset( 'UseParallel',1)
数据类型:塑造
'复制'
-使用新的初始集群质心位置重复聚类的次数1
(默认)|正整数次数重复使用新的初始聚类质心位置聚类,指定为逗号分隔的一对组成的'复制'
和一个整数。威彻斯
返回具有最低的溶液sum
.
你可以设置'复制'
隐含地通过向3-D阵列提供作为值的值来实现“开始”
名称 - 值对的参数。
例子:“复制”,5
数据类型:双人间
|单身
“开始”
-群集初始质心位置的选择方法“+”
(默认)|“集群”
|“样本”
|'制服'
|数字矩阵|数字数组选择初始集群质心位置的方法(或种子),指定为逗号分隔的配对组成“开始”
和“集群”
那“+”
那“样本”
那'制服'
,数字矩阵或数字数组。此表总结了选择种子的可用选项。
价值 | 描述 |
---|---|
“集群” |
在随机的10%子样本上执行初步聚类阶段 如果观察的在随机的10%的子样本数小于 |
“+” (默认) |
选择K. 通过实施种子K.-means ++算法对于聚类中心的初始化。 |
“样本” |
选择K. 观察X. 随机。 |
'制服' |
选择K. 从范围内随机均匀地点X. .不适用于汉明距离。 |
数字矩阵 | K. -P.矩阵形心的起始位置。的行开始 对应于种子。软件infers.K. 从第一个维度开始 ,所以你可以通过[] 对于K. . |
数字数组 | K. -P.-R.质心起始位置数组。每个页面的行对应于种子。第三个维度调用群集例程的复制。页面j包含用于复制的一组种子j.该软件推断复制的数量(由'复制' 名称值对参数)从第三维度的大小。 |
例子:'开始','样本'
数据类型:char
|串
|双人间
|单身
idx
- 集群指数群集指数,作为数字列向量返回。idx
有多达行的X.
,每一行表示相应观测的聚类分配。
C.
- 集群质心位置聚类中心位置,返回一个数字矩阵。C.
是一个K.
-P.矩阵,其中行j是集群的质心j.
k均值聚类,或Lloyd的算法[2],是分配的迭代,数据分区算法N观察结果正好是K.由质心定义的簇,其中K.在算法开始之前被选中。
该算法如下进行:
选择K.初始集群中心(形心)。例如,选择K.随机观察(通过使用'开始','样本'
),或使用K.-means ++算法用于群集中心初始化(默认值)。
计算所有观测到每个质心的点到簇质心的距离。
有两种方法可以继续(指定OnlinePhase
):
批处理更新 - 将每个观察分配给群集的最接近质心。
在线更新-如果重新分配减少了簇内点到簇心距离的平方和和,则单独将观测值分配到不同的质心。
有关更多详细信息,请参阅算法.
计算每个集群中的观测的平均值K.新心位置。
重复步骤2到4,直到群集分配不会更改,或者达到最大迭代次数。
当K.-means ++算法使用启发式寻找质心种子K.-means集群。据亚瑟和Vassilvitskii[1]那K.-means ++提高了英国劳氏算法的运行时间,并最终解决方案的质量。
当K.-means++算法选择种子如下,假设集群数量为K..
从数据集随机选择一个观察,X..选择的观察是第一质心,并表示为C.1.
从每个观察到计算距离C.1.记之间的距离C.j和观察mas. .
选择下一个重心,C.2从随机X.的概率
选择中心j:
计算从每个观察到每个质心的距离,每个观测分配给其最接近的质心。
对于m= 1,…,N和P.= 1,…,j- 1,选择质心j从随机X.的概率
在哪里C.P.是最接近质心的所有观察的集合C.P.和X.m属于C.P..
也就是说,选择的概率成正比,从自身到最近的中心,你已经选择了距离每个后续中心。
重复步骤4直到K.选上的重心。
亚瑟和Vassilvitskii[1]使用仿真研究进行几个群化方向演示K.-means ++实现更快的融合到群集中的较低之和,比LLOYD算法的规范距离较低。
威彻斯
采用两阶段迭代算法最小化点到质心距离的和,求和K.
集群。
第一阶段使用批量更新,每次迭代包括将点全部重新分配到它们最近的簇心,然后重新计算簇心。这个阶段有时不收敛于局部最小解。也就是说,在数据的分区中,将任何一个点移动到不同的集群中,都会增加距离的总和。这对于小数据集来说更有可能。批处理阶段是快速的,但可能只近似于作为第二阶段起点的解决方案。
第二阶段使用在线更新如果执行此操作,则单独重新分配点,从而减少距离之和,并且在每个重新分配后重新计算群集质心。在此阶段的每次迭代都是由所有点传递的。该阶段会聚到局部最小值,尽管可能存在其他局部最小值,但距离较低。通常,通过详尽的起点选择来解决全局最小值,但是使用随机起点的几个复制通常会导致作为全局最小的解决方案。
如果重复
=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年。
使用说明和限制:
金宝app支持的语法是:
idx = kmeans(x,k)
[IDX,C] = k均值(X,k)的
[idx C sumd] = kmeans (X, k)
(___) = kmeans(___、名称、值)
金宝app受支持的名称-值对参数及其区别如下:
“显示”
- 默认值'ITER'
.
“麦克斯特”
“选项”
—仅金宝app支持“TolFun”
创建的结构数组的字段实例化
.默认值“TolFun”
是1的军医
.当威彻斯
函数使用的值“TolFun”
作为集更点距离内的群集距离的终止公差。例如,您可以指定'选项',statset('tolfun',1e-8)
.
'复制'
“开始”
- 金宝app仅支持“+”
那“样本”
和数字阵列。
有关更多信息,请参阅用于内存不足数据的高数组.
使用说明和限制:
如果是开始
方法采用随机选择,初始质心簇位置可能与MATLAB不匹配®.
如果行的数量X.
是固定的,代码生成不删除的行X.
包含一个为NaN
.
集群质心位置C.
可以有不同的顺序与MATLAB。在这种情况下,集群中的索引idx
有相应的差异。
如果您提供显示
,它的价值必须是“关闭”
.
如果您提供溪流
,它必须是空的UseSubstreams
必须是假
.
当你设置UseParallel
选择真实
:
有些计算可以并行执行,即使重复
是1
.对于大数据集,何时重复
是1
,考虑设置UseParallel
选择真实
.
威彻斯
用途议案
(MATLAB编码器)创建在支持的共享内存多核平台上并行运行的循环。金宝app并行运行的循环可能比在单个线程上运行的循环更快。如果您的编译器不支持打开的多处理(OpenMP)应用金宝app程序界面或禁用OpenMP库,Matlab Coder™对待议案
-loops为对于
- 砍伐。要查找支持的编译金宝app器,请参阅金宝app支持的编译器.
要在部署生成代码的设备上保存内存,可以通过使用分离培训和预测威彻斯
和pdist2
分别。使用威彻斯
在matlab中创建群集并使用pdist2
在生成的代码中为现有群集分配新数据。对于代码生成,定义接受群集质心位置和新数据集的入口点函数,并返回最近群集的索引。然后,为入口点函数生成代码。例如,看到将新数据分配给现有群集并生成C / C ++代码.
从R2020A开始,威彻斯
返回整数类型(INT32.
)指数,而不是双重精度指数,在生成的独立C / C ++代码中。因此,当您使用单精度输入时,该功能允许更严格的单精度支持。金宝app对于MEX代码生成,该函数仍然返回双重精度索引以匹配MATLAB行为。
要并行运行,请指定“选项”
名称 - 值参数在调用此功能,并设置'UseParallel'
选项结构的领域真实
使用实例化
.
例如:'选项',statset('deverypallellel',true)
有关并行计算的更多信息,请参见使用自动并行支持运行MATLAB功能金宝app(并行计算工具箱).
此功能完全支持GPU阵列。金宝app有关更多信息,请参阅在GPU上运行matlab函数(并行计算工具箱).
clusterdata
|GMDistribution.
|kmedoids
|联系
|轮廓
|实例化
|parpool
(并行计算工具箱)
您单击了与此MATLAB命令对应的链接:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。金宝app
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。