MATLAB K-means聚类的介绍与使用

本文详细介绍了K-means聚类算法的基本原理及其实现过程,包括如何通过优化目标函数进行迭代,选择不同的距离测度和初始质心位置,以及如何评估聚类效果。并提供了MATLAB实现K-means算法的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K-means算法是硬聚类算法 ,是典型的基于原型的目标函数 聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以偶是距离 作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和 准则函数作为聚类准则函数
    K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小。
使用方法:
      Idx=Kmeans(X,K)
      [Idx,C]=Kmeans(X,K) 
      [Idx,C,sumD]=Kmeans(X,K) 
      [Idx,C,sumD,D]=Kmeans(X,K) 
      […]=Kmeans(…,’Param1’,Val1,’Param2’,Val2,…)
各输入输出参数介绍:
       X :N*P的数据矩阵
       K: 表示将X划分为几类,为整数
       Idx :N*1的向量,存储的是每个点的聚类标号
       C: K*P的矩阵,存储的是K个聚类质心位置
      sumD 1*K的和向量,存储的是类间所有点与该类质心点距离之和
      D N*K的矩阵,存储的是每个点与所有质心的距离
      […]=Kmeans(…,'Param1',Val1,'Param2',Val2,…)
      这其中的参数Param1、Param2等,主要可以设置为如下:
      1. ‘Distance’(距离测度)
        ‘sqEuclidean’ 欧式距离(默认时,采用此距离方式)
        ‘cityblock’ 绝度误差和,又称:L1
        ‘cosine’ 针对向量
        ‘correlation’  针对有时序关系的值
        ‘Hamming’ 只针对二进制数据
      2. ‘Start’(初始质心位置选择方法)
        ‘sample’ 从X中随机选取K个质心点
        ‘uniform’ 根据X的分布范围均匀的随机生成K个质心
        ‘cluster’ 初始聚类阶段随机选择10%的X的子样本(此方法初始使用’sample’方法)
         matrix 提供一K*P的矩阵,作为初始质心位置集合
      3. ‘Replicates’(聚类重复次数)  整数
                   这个博客很好,忘记了就参考这个!

深入浅出K-Means算法-CSDN.NET  http://www.csdn.net/article/2012-07-03/2807073-k-means

使用Matlab自带K-means的示例:

%随机获取150个点
X = [randn(50,2)+ones(50,2);randn(50,2)-ones(50,2);randn(50,2)+[ones(50,1),-ones(50,1)]];
opts = statset('Display','final');

%调用Kmeans函数
%X N*P的数据矩阵
%Idx N*1的向量,存储的是每个点的聚类标号
%Ctrs K*P的矩阵,存储的是K个聚类质心位置
%SumD 1*K的和向量,存储的是类间所有点与该类质心点距离之和
%D N*K的矩阵,存储的是每个点与所有质心的距离;

[Idx,Ctrs,SumD,D] = kmeans(X,3,'Replicates',3,'Options',opts);

%画出聚类为1的点。X(Idx==1,1),为第一类的样本的第一个坐标;X(Idx==1,2)为第二类的样本的第二个坐标
plot(X(Idx==1,1),X(Idx==1,2),'r.','MarkerSize',14)
hold on
plot(X(Idx==2,1),X(Idx==2,2),'b.','MarkerSize',14)
hold on
plot(X(Idx==3,1),X(Idx==3,2),'g.','MarkerSize',14)

%绘出聚类中心点,kx表示是圆形
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)

legend('Cluster 1','Cluster 2','Cluster 3','Centroids','Location','NW')

Ctrs
SumD
程序结果:


### 使用 MATLAB 实现 K-means 聚类 #### 准备工作 为了在 MATLAB 中执行 K-means 聚类,需准备数据集并决定所需的簇数 \( k \)[^2]。 #### 数据预处理 通常,在应用 K-means 前要对原始数据做标准化处理。这一步骤不是必需的,但对于某些特征尺度差异较大的情况尤为重要: ```matlab % 加载样本数据 load fisheriris; X = meas; % 对数据进行标准化 (可选) X standardized = zscore(X); ``` #### 执行 K-means 算法 MATLAB 提供了内置 `kmeans` 函数来简化这一过程。下面是一个简单的例子展示如何调用该函数来进行聚类分析[^1]: ```matlab % 设定参数 numClusters = 3; % 用户定义的簇数量 maxIterations = 100; % 迭代次数上限 distanceMetric = 'sqEuclidean'; % 平方欧几里得距离作为默认度量方式 % 应用 k-means 方法 [idx, C] = kmeans(X_standardized, numClusters,... 'MaxIter', maxIterations,... 'Distance', distanceMetric); % idx 是一个向量,表示每个观测所属类别索引; % C 则包含了各中心点坐标矩阵。 ``` #### 结果评估可视化 完成聚类之后可以绘制散点图以便直观理解分类效果: ```matlab figure(); gscatter(X(:,1), X(:,2), idx); % 绘制前两维上的分布状况 hold on; plot(C(:,1),C(:,2),'o','MarkerSize',12,'LineWidth',2); legend('Cluster 1','Cluster 2','Cluster 3','Centroids'); title('K-Means Clustering Results with Three Clusters'); xlabel('Feature Dimension 1'); ylabel('Feature Dimension 2'); grid on; ``` 上述代码片段展示了完整的流程——从加载数据到最终的结果呈现。通过调整输入参数还可以探索不同设置下的性能变化[^3]。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值