K-means 聚类算法

  • Syntax
  • Description
  • Input Arguments
  • Examples
    • Train a k-Means Clustering Algorithm
    • Partition Data into Two Clusters
    • Cluster Data Using Parallel Computing

全文翻译自Matlab官方文档 kmeans

Syntax

idx = kmeans(X,k)
idx = kmeans(X,k,Name,Value)
[idx,C] = kmeans(___)
[idx,C,sumd] = kmeans(___)
[idx,C,sumd,D] = kmeans(___)

Description

idx = kmeans(X,k)执行k-均值聚类,将size为(n,p)数据矩阵XXX的划分为k个簇,并返回包含每个簇索引的n*1向量idx。xxx的行为点,列为变量。默认情况下,k-means度量为平方欧氏距离和k-means++算法来初始化类中心。

idx=kmeans(X,k,Name,Value)返回具有由一个或多个(Name,Value)参数对指定的附加选项的聚类索引。例如,指定余弦距离、使用新初始值重复聚类的次数或使用并行计算。

[idx,C]=kmeans(____):C为k*p的矩阵,为k个簇的质心位置。

[idx,C,sumd]=kmeans(____):sumd为k*1向量,簇内的点到质心距离的和。

[idx,C,sumd,D]=kmeans(____):D为n*k矩阵,为每个点到每个质心的距离。

Input Arguments

  • X — Data

Examples

Train a k-Means Clustering Algorithm

采用k均值聚类数据,然后绘制聚类区域。

加载Fisher虹膜数据集,使用花瓣的长度和宽度作为预测值:

load fisheriris
X = meas(:,3:4);figure;
plot(X(:,1),X(:,2),'k*','MarkerSize',5);
title 'Fisher''s Iris Data';
xlabel 'Petal Lengths (cm)';
ylabel 'Petal Widths (cm)';

如下图:


更大的簇似乎被分成一个低方差区域和一个高方差区域。这可能表明较大的簇是两个重叠的簇,故可分为3个簇。

对数据进行聚类,指定k=3个簇:

rng(1); % 固定随机数,保证结果可复现,自己写的可去掉这行
[idx,C] = kmeans(X,3);

k means使用k-means++算法初始化质心,默认情况下使用平方欧氏距离。通过设置’Replicates’的名称-值对参数对来搜索较低的局部最小值。

idx是与xxx中的观测值相对应的预测聚类索引的向量。C是包含最终质心位置的3*2矩阵。


为可视,迭代一次k-means算法:

% 定义一个网格数据
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(:)]; % Defines a fine grid on the plot% 聚类迭代一次
idx2Region = kmeans(XGrid,3,'MaxIter',1,'Start',C);

输出:

Warning: Failed to converge in 1 iterations.

kmeans显示一个警告,指出算法没有收敛,因为k-means只进行了一次迭代。

画图:

figure;
gscatter(XGrid(:,1),XGrid(:,2),idx2Region,...[0,0.75,0.75;0.75,0,0.75;0.75,0.75,0],'..');
hold on;
plot(X(:,1),X(:,2),'k*','MarkerSize',5);
title 'Fisher''s Iris Data';
xlabel 'Petal Lengths (cm)';
ylabel 'Petal Widths (cm)';
legend('Region 1','Region 2','Region 3','Data','Location','SouthEast');
hold off;

得到如下结果:

Partition Data into Two Clusters

随机生成样本数据:

rng default; % For reproducibility
X = [randn(100,2)*0.75+ones(100,2);randn(100,2)*0.5-ones(100,2)];figure;
plot(X(:,1),X(:,2),'.');
title 'Randomly Generated Data';

得到:

图片中的数据好像是两个簇。因此将数据划分为两个簇,然后从五个不同初始化中选择最佳的结果:

opts = statset('Display','final');
[idx,C] = kmeans(X,2,'Distance','cityblock',...'Replicates',5,'Options',opts);

输出:

Replicate 1, 3 iterations, total sum of distances = 201.533.
Replicate 2, 5 iterations, total sum of distances = 201.533.
Replicate 3, 3 iterations, total sum of distances = 201.533.
Replicate 4, 3 iterations, total sum of distances = 201.533.
Replicate 5, 2 iterations, total sum of distances = 201.533.
Best total sum of distances = 201.533

默认情况下,k-means使用k-means++分别初始化初始中心。

绘制聚类和聚类质心:

figure;
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(C(:,1),C(:,2),'kx',...'MarkerSize',15,'LineWidth',3)
legend('Cluster 1','Cluster 2','Centroids',...'Location','NW')
title 'Cluster Assignments and Centroids'
hold off

输出:


通过将idx作为 silhouette的参数,可以确定簇之间的分离程度。

Cluster Data Using Parallel Computing

聚类大型数据集可能需要时间。如果你有一个并行计算工具箱™license并设置并行计算的选项,然后kmeans并行运行每个集群任务(或复制)。而且,如果Replicates>1,那么并行计算减少了收敛时间。

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

Mu = bsxfun(@times,ones(20,30),(1:20)'); % Gaussian mixture mean
rn30 = randn(30,30);
Sigma = rn30'*rn30; % Symmetric and positive-definite covariance
Mdl = gmdistribution(Mu,Sigma); % Define the Gaussian mixture distributionrng(1); % For reproducibility
X = random(Mdl,10000);

Mdl是一个包含20个分量的30维gm分布模型。X是由Mdl生成的10000乘30的数据矩阵。

指定并行计算的选项:

stream = RandStream('mlfg6331_64');  % Random number stream
options = statset('UseParallel',1,'UseSubstreams',1,...'Streams',stream);

RandStream的输入参数mlfg6331_64指定使用乘法滞后Fibonacci生成器算法。options是一个结构数组,具有指定用于控制估计的选项的字段。

使用k-means聚类对数据进行聚类。指定数据中有k=20个集群,并增加迭代次数。通常,目标函数包含局部极小值。指定10个副本以帮助查找较低的本地最小值。

tic; % Start stopwatch timer
[idx,C,sumd,D] = kmeans(X,20,'Options',options,'MaxIter',10000,...'Display','final','Replicates',10);

Starting parallel pool (parpool) using the ‘local’ profile …
connected to 6 workers.
Replicate 5, 72 iterations, total sum of distances = 7.73161e+06.
Replicate 1, 64 iterations, total sum of distances = 7.72988e+06.
Replicate 3, 68 iterations, total sum of distances = 7.72576e+06.
Replicate 4, 84 iterations, total sum of distances = 7.72696e+06.
Replicate 6, 82 iterations, total sum of distances = 7.73006e+06.
Replicate 7, 40 iterations, total sum of distances = 7.73451e+06.
Replicate 2, 194 iterations, total sum of distances = 7.72953e+06.
Replicate 9, 105 iterations, total sum of distances = 7.72064e+06.
Replicate 10, 125 iterations, total sum of distances = 7.72816e+06.
Replicate 8, 70 iterations, total sum of distances = 7.73188e+06.
Best total sum of distances = 7.72064e+06

toc % Terminate stopwatch timer

Elapsed time is 61.915955 seconds.

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

Matlab k-means相关推荐

  1. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  2. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  3. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  4. 文献记录(part89)--I-k-means-+:An iterative clustering algorithm based on an enhanced k -means

    学习笔记,仅供参考,有错必究 关键词:k均值:解决方案改进:准确的k均值:迭代改进 I-k-means-+:An iterative clustering algorithm based on an ...

  5. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  6. 为了联盟还是为了部落 | K means

    1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...

  7. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  8. matlab—— K均值聚类算法的步骤和实例

    一.K均值聚类法分为如下几个步骤: 1. 初始化聚类中心 (1)凭经验选择.根据具体问题,凭经验从样本集中选出个 K 比较合适的样本作为初始聚类中心. (2)用前 K 个样本作为初始聚类中心. (3) ...

  9. matlab k 1 2,试用MATLAB绘出f1[k]={-2,-1,0,1,2}和f2[k]={1,1,1}两离散序列乘法f1[k]×f2[k]的波形。...

    试用MATLAB绘出f1[k]={-2,-1,0,1,2}和f2[k]={1,1,1}两离散序列乘法f1[k]×f2[k]的波形. 更多相关问题 在计算股东借款余额占银行资本净额比例时不考虑股东的关联 ...

  10. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

最新文章

  1. 有了它,AI甚至可以让你知道对方是否真的爱你?
  2. Delphi下遍历文件夹下所有文件的递归算法
  3. 成人高考大学计算机基础答案,江苏省2019年成人高考大学计算机基础统考样卷...
  4. uWSGI 和 nginx 的区别?
  5. python discuz_pythonDiscuz发帖器的实现
  6. 余承东:华为腕上穿戴设备市场份额已达全球第一
  7. java编码规范文档 下载_软件项目实训及课程设计指导——制定待开发项目中各种文档的规范...
  8. 使用celery执行Django串行异步任务
  9. 零基础带你学习MySQL—Insert语句以及注意事项(七)
  10. qt的qfiledialog怎么判断打开的是不是一张图片_花瓣网画板图片一键导出 设计师速来围观...
  11. 《我也能做CTO之程序员职业规划》之四:直线定律
  12. java的基本数据类型转换。
  13. python实现sip协议_SIP协议的常见命令 - HouWeiGui的个人空间 - OSCHINA - 中文开源技术交流社区...
  14. CH9102国产USB转高速串口芯片兼容替代CP2102
  15. linux格式化u盘给win7,u盘一直显示格式化在虚拟机上安装win7系统怎么安装linux
  16. Blender导出模型到maya
  17. 洛谷-P1007-魔法少女
  18. JAVA基础(for语句的统计思想)
  19. echarts之静态与动态地图
  20. 诊所信息管理系统C语言课程设计

热门文章

  1. 【校园网代理连接问题】已解决,“该设备或资源(Web 代理)未设置为接受端口“7890”上的连接“
  2. 流媒体弱网优化之路(FEC)——FEC原理简介
  3. 作为“混合云第一股” 青云科技上市背后的逻辑
  4. 【计算机网络】1.3 ——计算机网络的定义和分类
  5. 论文解读-HybridRNAbind:预测结构注释和无序注释蛋白质的RNA相互作用残基
  6. 【笔记】NandFlash介绍
  7. WM_COMMAND介绍和用法
  8. [科普]嫦娥四号的中继卫星鹊桥,所处的拉格朗日L2点是什么?
  9. 拉格朗日乘法和L1、L2正则化
  10. solidworks二次开发