用matlab写一段k_means代码
时间: 2023-04-06 10:01:38 浏览: 66
好的,我可以回答这个问题。以下是一个简单的 MATLAB K-Means 算法的代码示例:
% 设置数据集
data = [1 1; 1.5 2; 3 4; 5 7; 3.5 5; 4.5 5; 3.5 4.5];
% 设置聚类数
k = 2;
% 随机初始化聚类中心
centroids = data(randperm(size(data, 1), k), :);
% 迭代聚类
for i = 1:10
% 计算每个点到聚类中心的距离
distances = pdist2(data, centroids);
% 找到每个点所属的聚类
[~, clusters] = min(distances, [], 2);
% 更新聚类中心
for j = 1:k
centroids(j, :) = mean(data(clusters == j, :));
end
end
% 绘制聚类结果
figure;
scatter(data(:, 1), data(:, 2), [], clusters, 'filled');
hold on;
scatter(centroids(:, 1), centroids(:, 2), 100, 'k', 'filled');
hold off;
希望这个代码示例能够帮到你。
相关问题
用MATLAB写一段k-means聚类代码
以下是一段MATLAB中的k-means聚类代码:
% 生成随机数据
data = rand(100,2);
% 定义聚类数
k = 3;
% 随机选择初始聚类中心
centers = data(randperm(size(data,1),k),:);
% 迭代计算,直到聚类中心不再变化
while true
% 根据当前聚类中心计算每个数据点到各聚类中心的距离
distances = pdist2(data,centers);
% 找出每个数据点距离最近的聚类中心,确定其所属的聚类
[~, labels] = min(distances,[],2);
% 保存上一次的聚类中心
old_centers = centers;
% 计算新的聚类中心
for i = 1:k
centers(i,:) = mean(data(labels==i,:));
end
% 如果聚类中心不再变化,则停止迭代
if isequal(old_centers,centers)
break;
end
end
% 绘制聚类结果
figure;
scatter(data(:,1),data(:,2),10,labels);
hold on;
scatter(centers(:,1),centers(:,2),50,'k','filled');
legend('Cluster 1','Cluster 2','Cluster 3','Centroids');
title('K-means Clustering');
用matlab写一段k-means聚类分割程序
当然可以!以下是一个用MATLAB编写的简单的K-means聚类分割程序示例:
```matlab
% 生成一些随机数据作为示例
rng(1); % 设置随机种子以确保结果可复现
data = [randn(100, 2)*0.75+ones(100, 2);
randn(100, 2)*0.5-ones(100, 2)];
% 设置聚类数和迭代次数
k = 2; % 聚类数
max_iters = 10; % 最大迭代次数
% 初始化聚类中心
initial_centroids = datasample(data, k, 'Replace', false);
for iter = 1:max_iters
% 计算每个样本点与聚类中心的距离
distances = pdist2(data, initial_centroids);
% 分配每个样本点到最近的聚类中心
[~, cluster_indices] = min(distances, [], 2);
% 更新聚类中心为每个簇的平均值
for i = 1:k
points_in_cluster = data(cluster_indices == i, :);
initial_centroids(i, :) = mean(points_in_cluster);
end
end
% 绘制聚类结果
figure;
gscatter(data(:,1), data(:,2), cluster_indices);
hold on;
plot(initial_centroids(:,1), initial_centroids(:,2), 'kx', 'MarkerSize', 10, 'LineWidth', 2);
legend('Cluster 1', 'Cluster 2', 'Centroids');
title('K-means Clustering');
```
这段代码生成了一个包含两个聚类的随机数据集,并使用K-means算法将数据分为两个簇。最终结果以散点图的形式展示出来,聚类中心用黑色叉标识。
请注意,这只是一个简单的K-means聚类示例,可能无法处理更复杂的数据集。在实际应用中,你可能需要根据具体情况进行修改和优化。