Matlab--k-means聚类算法实现

**

Matlab–k-means聚类算法实现

**

第一次在CSDN写自己的博客,希望开门大吉 哈哈哈
也希望分享的内容大家能够喜欢。

本次创作内容为-----k-means聚类算法实现。
自己用matlab写的时候,遇到很多问题,一些常见matlab语法等等,查找很多博主分享的知识,获益许多,由此形成了这次的完整代码,运行成功的!

本次编写内容为:
编程实现k-means聚类算法,并将实验结果显示出来。

代码如下,也欢迎大家一起交流,共同学习和进步!

E1 = [0,0]; %数学期望
sigma = [0.9,0.4; 0.4,0.3]; %协方差矩阵
data1 = mvnrnd(E1, sigma, 50);%生成50个样本
E2 = [5,0]; %数学期望
data2 = mvnrnd(E2, sigma, 50);%生成50个样本
E3 = [3,3]; %数学期望
data3 = mvnrnd(E3, sigma, 50);%生成50个样本
%合并数组
data = [data1; data2; data3];
save mydata data;%保存为.mat文件
m=load('mydata.mat');%加载.mat文件
x = m.data(:,1);%读取第一列数据
y= m.data(:,2);%读取第二列数据
plot(x,y,'.');%绘图

执行上述代码,生成如下聚类图:执行上述添加图片描述
接下来,编写程序实现k-means聚类算法,随机初始化聚类中心,显示聚类结果,不同的颜色代表不同的类别,代码如下:

load mydata
[idx,C] = kmeans(data,3);%这里k = 3
[hang, lie] = size(C); 
colo = ('rgbk'); %颜色属性,可以增加
sign = ('o*pd'); % 点标记属性,可以增加
figure
gscatter(data(:,1),data(:,2),idx,'rgbk')
hold on
for i = 1:hang
    plot(C(i,1),C(i,2),[colo(i),sign(i)],'MarkerSize',15)
end

执行上述代码,结果下如下:请添加图片描述
第一篇博客就这样结束啦!

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
1. 数据准备 在matlab,首先需要准备好待聚类数据。假设我们有一个包含n个样本的数据集X,每个样本有m个属性,那么可以用一个n×m的矩阵来表示。 2. 初始化聚类k-means聚类算法需要预先指定聚类的簇数k,然后随机生成k个聚类心。在matlab,可以用rand函数生成服从均匀分布的随机数来初始化聚类心。 3. 迭代聚类 接下来,k-means算法开始迭代。每次迭代分为两个步骤: 3.1 分配样本到最近的聚类心 对于每个样本,计算它与k个聚类心的距离,并将其分配到距离最近的聚类心所在的簇。 3.2 更新聚类心 对于每个簇,计算其所有样本的均值,将这个均值作为新的聚类心。 4. 判断停止条件 当聚类心不再发生变化时,算法停止迭代。可以定义一个阈值,当新旧聚类心之间的距离小于这个阈值时,算法停止迭代。 5. 实现代码 下面是一个简单的matlab实现代码: function [idx, centers] = kmeans(X, k) % X为待聚类数据集,k为聚类簇数 % idx为每个样本所属的簇号,centers为聚类心 [n, m] = size(X); % 初始化聚类心 centers = rand(k, m) * (max(X) - min(X)) + min(X); % 迭代聚类 while true % 分配样本到最近的聚类心 idx = zeros(n, 1); for i = 1:n dist = sum((repmat(X(i,:), k, 1) - centers).^2, 2); [minDist, idx(i)] = min(dist); end % 更新聚类心 oldCenters = centers; for j = 1:k centers(j,:) = mean(X(idx == j,:)); end % 判断停止条件 if norm(oldCenters - centers) < 1e-6 break; end end end 该代码实现k-means聚类算法,并返回每个样本所属的簇号以及聚类心。在实际使用,可以根据需要修改聚类簇数k以及停止条件的阈值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼才的凝视

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值