k-meansMATLAB
时间: 2023-11-30 22:41:10 浏览: 32
以下是一个简单的k-means聚类MATLAB实现的示例:
```matlab
% 生成数据
data = [randn(100,2)*0.75+ones(100,2);
randn(100,2)*0.5-ones(100,2)];
% 初始化聚类中心
center = [-1 -1; 1 1];
% 迭代聚类
for i = 1:10
% 计算每个点到聚类中心的距离
dist = pdist2(data, center);
% 找到每个点最近的聚类中心
[~, idx] = min(dist, [], 2);
% 更新聚类中心
center(1,:) = mean(data(idx==1,:));
center(2,:) = mean(data(idx==2,:));
end
% 可视化结果
figure;
gscatter(data(:,1), data(:,2), idx, 'rb', '.', 10);
hold on;
plot(center(:,1), center(:,2), 'kx', 'MarkerSize', 15, 'LineWidth', 3);
legend('Cluster 1', 'Cluster 2', 'Centroids');
```
该示例生成了一个包含200个点的数据集,并将其分为两个聚类。在迭代过程中,计算每个点到聚类中心的距离,并将每个点分配到最近的聚类中心。然后,更新聚类中心以反映新的聚类成员。最终,可视化聚类结果和聚类中心。
相关问题
k-meansMatlab程序
以下是一个简单的 k-means 算法的 Matlab 实现程序:
```matlab
function [cluster_idx, centroid] = kmeans(data, k)
% data: 数据矩阵,每一行代表一个样本,每一列代表一个特征
% k: 聚类数目
% cluster_idx: 每个样本所属的簇的索引
% centroid: 聚类中心
% Step 1: 随机选择 k 个样本作为初始聚类中心
[N, dim] = size(data);
centroid = data(randperm(N, k), :);
% Step 2: 迭代聚类
max_iter = 100;
cluster_idx = zeros(N, 1);
for iter = 1:max_iter
% Step 2.1: 将每个样本分配到最近的聚类中心
for i = 1:N
dist = sum((data(i, :) - centroid).^2, 2);
[~, cluster_idx(i)] = min(dist);
end
% Step 2.2: 更新聚类中心
for j = 1:k
centroid(j, :) = mean(data(cluster_idx == j, :), 1);
end
end
```
使用示例:
```matlab
% 生成随机数据
data = randn(100, 2);
% 聚类
k = 3;
[cluster_idx, centroid] = kmeans(data, k);
% 可视化结果
figure;
scatter(data(:, 1), data(:, 2), 10, cluster_idx, 'filled');
hold on;
scatter(centroid(:, 1), centroid(:, 2), 50, 'k', 'filled');
```
在上述示例中,我们生成了一个包含 100 个样本,每个样本有 2 个特征的随机数据集。我们使用 `kmeans` 函数将其聚类为 3 个簇,并将聚类结果可视化展示出来。
k-meansMATLAB通用代码
以下是一个简单的k-means算法的MATLAB通用代码示例:
```matlab
function [centroids, idx] = kmeans(X, K)
% 初始化聚类中心
centroids = X(randperm(size(X, 1), K), :);
% 迭代更新聚类中心直到收敛
while true
% 计算每个样本点到各个聚类中心的距离
distances = pdist2(X, centroids);
% 为每个样本点分配最近的聚类中心
[~, idx] = min(distances, [], 2);
% 更新聚类中心为每个聚类的均值
for k = 1:K
centroids(k, :) = mean(X(idx == k, :), 1);
end
% 检查聚类中心是否发生变化
if isequal(old_centroids, centroids)
break;
end
old_centroids = centroids;
end
end
```
使用方法:
```matlab
% 随机生成一些数据点
X = randn(100, 2);
% 调用k-means函数进行聚类
K = 3; % 设定聚类的数量
[centroids, idx] = kmeans(X, K);
% 可视化聚类结果
scatter(X(:, 1), X(:, 2), 10, idx, 'filled');
hold on;
scatter(centroids(:, 1), centroids(:, 2), 100, (1:K)', 'filled');
```
这个代码示例会将输入数据X聚类为K个簇,并返回每个样本点的聚类标签idx和最终的聚类中心centroids。你可以根据需要调整代码中的参数和可视化方式。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)