用matlab完成以下要求,自行输入一组数据,并编写代码用Kmeans算法对一组数据进行分析,不能使用matlab自带的函数
时间: 2024-02-06 08:10:42 浏览: 25
好的,以下是一个简单的 MATLAB 代码实现 Kmeans 算法对一组数据进行聚类分析:
```matlab
% 自定义数据,这里以二维数据为例
data = [1,2; 3,4; 5,6; 7,8; 9,10];
% 设置聚类数
k = 2;
% 随机初始化聚类中心
centroids = data(randperm(size(data,1),k),:);
% 迭代次数
max_iters = 10;
for iter = 1:max_iters
% 初始化空的簇
clusters = cell(1,k);
% 计算每个点到各个聚类中心的距离,将其归到距离最近的簇中
for i = 1:size(data,1)
distances = zeros(k,1);
for j = 1:k
distances(j) = norm(data(i,:) - centroids(j,:))^2;
end
[~, index] = min(distances);
clusters{index} = [clusters{index}; data(i,:)];
end
% 更新聚类中心
for i = 1:k
centroids(i,:) = mean(clusters{i});
end
end
% 可视化结果
colors = 'rgbmk';
figure;
hold on;
for i = 1:k
scatter(clusters{i}(:,1), clusters{i}(:,2), 36, colors(i), 'filled');
end
scatter(centroids(:,1), centroids(:,2), 200, 'k', 'filled', 'd');
```
解释如下:
1. 首先自定义了一个二维数据,可以根据需要改变数据维度和数量;
2. 然后设置了聚类数 k,这里设为 2;
3. 随机初始化 k 个聚类中心,这里采用了从数据中随机选取的方法;
4. 设定迭代次数 max_iters,这里设为 10;
5. 开始迭代,每次迭代分以下几步:
- 初始化空的簇,这里用 cell 数组来存放每个簇的数据;
- 计算每个点到各个聚类中心的距离,将其归到距离最近的簇中;
- 更新聚类中心。
6. 最后将结果可视化,这里用了不同颜色来表示不同簇的数据,用黑色菱形表示聚类中心。