MATLAB画出Kmeans聚类图
时间: 2023-10-10 18:15:09 浏览: 66
以下是使用MATLAB画Kmeans聚类图的示例代码:
```
% 生成数据
data = [randn(100,2)*0.75+ones(100,2);
randn(100,2)*0.5-ones(100,2)];
% 执行Kmeans聚类
[idx, C] = kmeans(data,2);
% 绘制聚类图
figure;
scatter(data(idx==1,1),data(idx==1,2),'r');
hold on;
scatter(data(idx==2,1),data(idx==2,2),'b');
scatter(C(:,1),C(:,2),'kx','LineWidth',3);
legend('Cluster 1','Cluster 2','Centroids');
title('Kmeans Clustering');
```
该代码将生成一个包含两个聚类的散点图,其中红色表示第一个聚类,蓝色表示第二个聚类,黑色的十字表示聚类中心。
相关问题
matlab手写实现kmeans聚类算法
以下是MATLAB手写实现kmeans聚类算法的代码:
function [idx, C] = my_kmeans(X, k, max_iter)
% X: 数据矩阵,每行表示一个样本,每列表示一个特征
% k: 聚类簇数
% max_iter: 最大迭代次数
% idx: 每个样本所属的簇编号
% C: 聚类中心
% 初始化聚类中心
[m, n] = size(X);
C = X(randperm(m, k), :);
% 迭代更新聚类中心和样本所属簇
for iter = 1 : max_iter
% 计算每个样本距离每个聚类中心的距离
dist = pdist2(X, C);
% 选择距离最近的聚类中心作为样本所属簇
[~, idx] = min(dist, [], 2);
% 更新聚类中心
for i = 1 : k
C(i, :) = mean(X(idx == i, :), 1);
end
end
end
使用示例:
% 生成数据
X = [randn(100, 2) + 2; randn(100, 2) - 2; randn(100, 2)];
% 聚类簇数
k = 3;
% 最大迭代次数
max_iter = 100;
% 调用kmeans函数
[idx, C] = my_kmeans(X, k, max_iter);
% 绘制聚类结果图
figure;
scatter(X(:, 1), X(:, 2), [], idx);
hold on;
scatter(C(:, 1), C(:, 2), [], [1:k], 'filled');
legend('Cluster 1', 'Cluster 2', 'Cluster 3', 'Centroids');
xlabel('Feature 1');
ylabel('Feature 2');
title('K-Means Clustering');
给出kmeans聚类算法matlab代码
当然,我可以为您介绍一下K-means聚类算法,并提供一个简单的MATLAB代码示例。
K-means聚类算法是一种常用的无监督学习算法,用于将数据集划分为K个不同的簇。它的基本思想是通过迭代的方式将数据点分配到最近的簇中,并更新簇的中心点,直到达到收敛条件。
以下是一个简单的MATLAB代码示例,用于实现K-means聚类算法:
```matlab
% 设置参数
K = 3; % 簇的数量
max_iters = 10; % 最大迭代次数
% 加载数据集
data = load('data.mat'); % 假设数据保存在data.mat文件中
% 随机初始化簇中心
centroids = data(randperm(size(data, 1), K), :);
% 迭代更新簇分配和簇中心
for iter = 1:max_iters
% 计算每个样本点到簇中心的距离
distances = pdist2(data, centroids);
% 将样本点分配到最近的簇中
[~, cluster_indices] = min(distances, [], 2);
% 更新簇中心为每个簇中样本点的均值
for k = 1:K
centroids(k, :) = mean(data(cluster_indices == k, :));
end
end
% 打印最终的簇中心
disp('Final centroids:');
disp(centroids);
```
请注意,上述代码仅为K-means聚类算法的简单示例,实际应用中可能需要根据具体情况进行参数调整和算法改进。