编写一段matlab代码用C均值聚类算法对下列样本进行分类,要求可以更改类别数目和初始聚类中心data = [0.5 0.5 1 0.2 1 0 1 1 5 5 6 5.5 6 6 7 0 6 0.5 7 -1 8 -0.5];
时间: 2024-01-01 07:03:28 浏览: 70
以下是一段使用C均值聚类算法对给定数据进行聚类的MATLAB代码:
```
% 数据初始化
data = [0.5 0.5 1 0.2 1 0 1 1 5 5 6 5.5 6 6 7 0 6 0.5 7 -1 8 -0.5];
k = 3; % 聚类的类别数目
centers = [1 0.5; 5 5; 7 -1]; % 初始聚类中心点
% 初始化变量
[m, n] = size(data);
labels = zeros(m, 1);
distances = zeros(m, k);
% 迭代聚类过程
while true
% 计算每个数据点到聚类中心的距离
for i = 1:k
distances(:, i) = sqrt(sum((data - repmat(centers(i, :), m, 1)).^2, 2));
end
% 标记每个数据点属于哪个聚类中心
[~, labels] = min(distances, [], 2);
% 更新聚类中心点
new_centers = zeros(k, n);
for i = 1:k
new_centers(i, :) = mean(data(labels == i, :));
end
% 判断聚类中心是否变化
if isequal(centers, new_centers)
break;
end
centers = new_centers;
end
% 可视化结果
scatter(data(:, 1), data(:, 2), [], labels, 'filled');
```
其中,`data`表示要聚类的数据,`k`表示聚类的类别数目,`centers`表示初始聚类中心点的坐标。你可以根据需要修改这些参数,然后运行代码即可得到新的聚类结果。
阅读全文