K-means聚类算法Matlab代码
时间: 2023-08-31 12:39:41 浏览: 156
K-Means聚类算法 Matlab代码
5星 · 资源好评率100%
### 回答1:
下面是一个简单的K-means聚类算法的Matlab代码示例:
```matlab
% 设置数据集和聚类数目
data = [1,1; 1,2; 2,1; 2,2; 4,4; 4,5; 5,4; 5,5];
k = 2;
% 初始化聚类中心
centroids = data(randperm(size(data,1),k), :);
% 迭代聚类过程
for iter = 1:10
% 计算每个点所属的聚类中心
distances = pdist2(data, centroids);
[minDist, minIndex] = min(distances, [], 2);
% 更新聚类中心
for i = 1:k
centroids(i, :) = mean(data(minIndex==i, :));
end
end
% 可视化结果
figure;
scatter(data(:,1), data(:,2), [], minIndex, 'filled');
hold on;
scatter(centroids(:,1), centroids(:,2), 100, 'k', 'filled');
```
该代码使用了一个简单的二维数据集,并且聚类数目为2。数据集中的每个点被分配到最近的聚类中心,并且每个聚类中心被更新为其所包含的所有点的平均值。最后,聚类结果可视化成散点图。
### 回答2:
K-means是一种常见的无监督聚类算法,用于将一组数据划分为指定数量的簇。
以下是一个基于Matlab的K-means聚类算法的示例代码:
```matlab
% 数据准备
data = load('data.txt'); % 从文件读取数据
k = 3; % 指定簇的数量
max_iters = 10; % 最大迭代次数
% 初始化聚类中心
centroids = zeros(k, size(data, 2)); % 初始化簇心矩阵
randindices = randperm(size(data, 1)); % 随机选择数据点
centroids = data(randindices(1:k), :); % 选择随机的k个数据点作为初始聚类中心
% 迭代更新聚类中心
for iter = 1:max_iters
% 分配数据点到最近的聚类中心
idx = assignToCentroids(data, centroids);
% 更新聚类中心
centroids = updateCentroids(data, idx, k);
end
% 分配数据点到最近的聚类中心函数定义
function idx = assignToCentroids(data, centroids)
m = size(data, 1); % 数据点数量
k = size(centroids, 1); % 簇的数量
idx = zeros(m, 1); % 分配结果
for i = 1:m
min_dist = Inf; % 设置一个初始的最小距离
for j = 1:k
dist = sum((data(i,:) - centroids(j,:)) .^ 2); % 计算距离
if dist < min_dist
min_dist = dist;
idx(i) = j; % 分配到最近的聚类中心
end
end
end
end
% 更新聚类中心函数定义
function centroids = updateCentroids(data, idx, k)
n = size(data, 2); % 数据维度
centroids = zeros(k, n); % 簇心矩阵
for i = 1:k
indices = find(idx == i); % 找到第i个簇的数据点
if ~isempty(indices)
cluster_data = data(indices, :);
centroids(i,:) = mean(cluster_data); % 计算簇心
end
end
end
```
上述代码首先从文件读取数据,然后初始化聚类中心,接下来通过迭代更新聚类中心和分配数据点到最近的聚类中心的操作,获得最终的聚类结果。其中,`assignToCentroids`函数用于分配数据点到最近的聚类中心,`updateCentroids`函数用于更新聚类中心。
这段代码实现了一个简单的K-means聚类算法,可以根据需要进行修改和扩展,以满足不同的聚类任务和数据集。
阅读全文