function y=kMeansCluster(m,k,isRand)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% kMeansCluster - Simple k means clustering algorithm %
% Author: Kardi Teknomo, Ph.D. %
% %
% Purpose: classify the objects in data matrix based on the attributes %
% Criteria: minimize Euclidean distance between centroids and object points %
% For more explanation of the algorithm, see http://people.revoledu.com/kardi/tutorial/kMean/index.html %
% Output: matrix data plus an additional column represent the group of each object %
% %
% Example: m = [ 1 1; 2 1; 4 3; 5 4] or in a nice form %
% m = [ 1 1; %
% 2 1; %
% 4 3; %
% 5 4] %
% k = 2 %
% kMeansCluster(m,k) produces m = [ 1 1 1; %
% 2 1 1; %
% 4 3 2; %
% 5 4 2] %
% Input:
% m - required, matrix data: objects in rows and attributes in columns %
% k - optional, number of groups (default = 1)
% isRand - optional, if using random initialization isRand=1, otherwise input any number (default)
% it will assign the first k data as initial centroids
%
% Local Variables
% f - row number of data that belong to group i
% c - centroid coordinate size (1:k, 1:maxCol)
% g - current iteration group matrix size (1:maxRow)
% i - scalar iterator
% maxCol - scalar number of rows in the data matrix m = number of attributes
% maxRow - scalar number of columns in the data matrix m = number of objects
% temp - previous iteration group matrix size (1:maxRow)
% z - minimum value (not needed)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin<3, isRand=0; end
if nargin<2, k=1; end
[maxRow, maxCol]=size(m)
if maxRow<=k,
y=[m, 1:maxRow]
else
% initial value of centroid
if isRand,
p = randperm(size(m,1)); % random initialization
for i=1:k
c(i,:)=m(p(i),:)
end
else
for i=1:k
c(i,:)=m(i,:) % sequential initialization
end
end
temp=zeros(maxRow,1); % initialize as zero vector
while 1,
d=DistMatrix(m,c); % calculate objcets-centroid distances
[z,g]=min(d,[],2); % find group matrix g
if g==temp,
break; % stop the iteration
else
temp=g; % copy group matrix to temporary variable
end
for i=1:k
f=find(g==i);
if f % only compute centroid if f is not empty
c(i,:)=mean(m(find(g==i),:),1)
end
end
end
y=[m,g];
end
clustering的经典k-mean算法源程序,matlab
需积分: 0 159 浏览量
更新于2023-03-19
收藏 132KB RAR 举报
K-Means聚类算法是数据挖掘领域中最常用的无监督学习方法之一,它主要用于将数据集划分成不同的群组或类别,每个群组内部的数据点相互接近,而群组间的数据点相对较远。该算法简单易懂且在处理大规模数据时效率较高,尤其在MATLAB环境中,有丰富的库支持实现这一算法。
MATLAB是一种广泛使用的数学计算软件,它提供了丰富的工具箱和函数来处理各种计算任务,包括数据分析和机器学习。在这个场景中,"clustering的经典k-mean算法源程序,matlab"很可能是一个包含MATLAB代码的文件,用于实现K-Means算法。
K-Means算法的基本步骤如下:
1. **初始化**:选择k个初始质心(cluster centers),通常随机从数据集中选取k个点作为初始的聚类中心。
2. **分配数据点**:对每一个数据点,计算其与所有质心的距离,然后将其分配到最近的质心所在的簇。
3. **更新质心**:重新计算每个簇的质心,即取该簇内所有点的均值作为新的质心。
4. **迭代检查**:重复步骤2和3,直到质心不再显著移动或达到预设的最大迭代次数。
5. **结束**:当满足停止条件时,算法结束,输出k个簇及其对应的质心。
在MATLAB中实现K-Means,可以使用内置的`kmeans`函数,该函数接受数据矩阵和聚类数目k作为输入,并返回数据点的簇归属和质心。例如:
```matlab
data = ...; % 数据矩阵
k = ...; % 聚类数目
[labels, centroids] = kmeans(data, k);
```
`labels`表示每个数据点的簇归属,`centroids`是最终得到的质心矩阵。
K-Means算法的优点包括:
- **简单快速**:算法实现简单,适合大规模数据集。
- **可解释性强**:每个簇的代表是质心,易于理解。
缺点有:
- **对初始质心敏感**:不同的初始质心可能导致不同的结果。
- **需要预先指定k值**:合适的k值往往需要通过尝试和领域知识来确定。
- **假设簇为凸形状**:不适用于非凸或重叠的簇结构。
- **对异常值敏感**:异常值可能会影响质心的计算。
为了改进K-Means,有许多变种算法,如K-Means++,它通过更智能的初始化策略减少对初始质心的依赖,或者DBSCAN,这是一种基于密度的聚类算法,无需预先指定k值。
在实际应用中,K-Means常用于市场细分、图像分割、文本分类等领域。通过对数据进行聚类分析,可以发现数据的内在结构,为进一步的分析和决策提供依据。因此,理解和掌握K-Means算法及其MATLAB实现对于数据科学和机器学习领域的专业人士来说非常重要。
dannychenqs
- 粉丝: 1
- 资源: 7
最新资源
- 石家庄2005-2024年近20年历史气象数据下载
- 几何物体检测50-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 几何物体检测44-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 几何物体检测43-YOLO(v5至v9)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 基于cruise的燃料电池功率跟随仿真,按照丰田氢能源车型搭建,在wltc工况下跟随效果好,最高车速175,最大爬坡30,百公里9s均已实现 1.模型通过cruise simulink联合仿真,策略
- C#源码 上位机 联合Visionpro 通用框架开发源码,已应用于多个项目,整套设备程序,可以根据需求编出来,具体Vpp功能自己编 程序包含功能 1.自动设置界面窗体个数及分布 2.照方式以命令触
- 程序名称:悬架设计计算程序 开发平台:基于matlab平台 计算内容:悬架偏频刚度挠度;螺旋弹簧,多片簧,少片簧,稳定杆,减震器的匹配计算;悬架垂向纵向侧向力学、纵倾、侧倾校核等;独立悬架杠杆比,等效
- 华为OD+真题及解析+智能驾驶
- jQuery信息提示插件
- 基于stm32的通信系统,sim800c与服务器通信,无线通信监测,远程定位,服务器通信系统,gps,sim800c,心率,温度,stm32 由STM32F103ZET6单片机核心板电路、DS18B2