matlab k-means代码 可以设置初始聚类中心,并计算迭代次数,可视化结果。
时间: 2024-03-06 13:46:55 浏览: 141
下面是一个示例Matlab代码,包含了设置初始聚类中心、计算迭代次数和可视化结果的功能:
```matlab
% 生成随机数据
data = randn(100, 2);
% 设置初始聚类中心
initial_centroids = [0.1, 0.3; -0.5, -0.7];
% 计算聚类
[cluster_idx, centroids, sumd] = kmeans(data, 2, 'Start', initial_centroids, 'MaxIter', 100);
% 可视化结果
figure;
scatter(data(:, 1), data(:, 2), 10, cluster_idx, 'filled');
hold on;
scatter(centroids(:, 1), centroids(:, 2), 50, [1, 2], 'filled', 'MarkerEdgeColor', 'k', 'LineWidth', 2);
title('K-means Clustering Results');
```
在上面的代码中,我们首先生成了一个大小为100x2的随机数据集。然后,我们使用`initial_centroids`变量指定了两个初始聚类中心。接下来,我们使用`kmeans`函数计算聚类,其中`'MaxIter'`参数设置为100,表示最大迭代次数为100。最后,我们使用`scatter`函数将聚类结果可视化出来,其中不同聚类用不同颜色表示,聚类中心用黑色实心圆点表示。
相关问题
K-means聚类matlab代码,附上可视化分析的代码
以下是K-means聚类的MATLAB代码和可视化分析的代码:
```matlab
% K-means聚类
clear all; close all; clc;
% 载入数据
load('data.mat');
% 初始化聚类中心
k = 3;
centroids = initCentroids(X, k);
% 迭代次数
max_iters = 10;
% 计算聚类结果
[centroids, idx] = runkMeans(X, centroids, max_iters);
% 可视化聚类结果
plotDataPoints(X, idx, k);
```
其中,`data.mat`是一个.mat文件,存储了要聚类的数据,它的格式为:变量X是一个矩阵,每一行代表一个数据点,变量y是一个向量,每个元素代表X中对应数据点的类别。
以下是初始化聚类中心的函数`initCentroids`的代码:
```matlab
function centroids = initCentroids(X, k)
% 随机初始化聚类中心
% X: 数据矩阵
% k: 聚类中心个数
rand_idx = randperm(size(X, 1));
centroids = X(rand_idx(1:k), :);
end
```
以下是计算聚类结果的函数`runkMeans`的代码:
```matlab
function [centroids, idx] = runkMeans(X, initial_centroids, max_iters)
% 运行K-means聚类
% X: 数据矩阵
% initial_centroids: 初始化聚类中心
% max_iters: 迭代次数
[m, n] = size(X);
k = size(initial_centroids, 1);
centroids = initial_centroids;
idx = zeros(m, 1);
for i = 1:max_iters
% 计算每个样本点属于哪个聚类中心
idx = findClosestCentroids(X, centroids);
% 重新计算聚类中心
centroids = computeCentroids(X, idx, k);
end
end
```
以下是计算每个样本点属于哪个聚类中心的函数`findClosestCentroids`的代码:
```matlab
function idx = findClosestCentroids(X, centroids)
% 计算每个样本点属于哪个聚类中心
% X: 数据矩阵
% centroids: 聚类中心
K = size(centroids, 1);
idx = zeros(size(X,1), 1);
for i = 1:size(X,1)
dists = zeros(K, 1);
for j = 1:K
dists(j) = sum((X(i,:) - centroids(j,:)).^2);
end
[~, idx(i)] = min(dists);
end
end
```
以下是重新计算聚类中心的函数`computeCentroids`的代码:
```matlab
function centroids = computeCentroids(X, idx, K)
% 重新计算聚类中心
% X: 数据矩阵
% idx: 每个样本点属于哪个聚类中心
% K: 聚类中心个数
[m n] = size(X);
centroids = zeros(K, n);
for i=1:K
centroids(i,:) = mean(X(idx==i,:));
end
end
```
以下是可视化聚类结果的函数`plotDataPoints`的代码:
```matlab
function plotDataPoints(X, idx, K)
% 可视化聚类结果
% X: 数据矩阵
% idx: 每个样本点属于哪个聚类中心
% K: 聚类中心个数
figure; hold on;
% 设置颜色和标记
color = hsv(K);
markers = {'o', 'x', '^'};
% 绘制每个聚类中心和属于该聚类的样本点
for i=1:K
plot(X(idx==i,1), X(idx==i,2), markers{i}, ...
'MarkerSize', 5, 'MarkerEdgeColor', color(i,:), 'MarkerFaceColor', color(i,:));
plot(X(i,1), X(i,2), markers{i}, ...
'MarkerSize', 10, 'MarkerEdgeColor', color(i,:), 'MarkerFaceColor', 'none');
end
xlabel('X1'); ylabel('X2'); title('K-means Clustering');
legend('Cluster 1', 'Cluster 2', 'Cluster 3', 'Centroids');
end
```
以上就是K-means聚类的MATLAB代码和可视化分析的代码。
matlabK-means聚类
在 MATLAB 中,可以使用 `kmeans` 函数来进行 K-means 聚类。下面是一个简单的示例代码,演示了如何使用 MATLAB 进行 K-means 聚类:
```matlab
% 生成示例数据
data = [randn(100,2)+1.5; randn(100,2)-1.5];
% 设置聚类的数量
k = 2;
% 执行 K-means 聚类
[idx, centroids] = kmeans(data, k);
% 可视化聚类结果
gscatter(data(:,1), data(:,2), idx);
hold on;
plot(centroids(:,1), centroids(:,2), 'k*', 'MarkerSize', 10);
legend('Cluster 1', 'Cluster 2', 'Centroids');
hold off;
```
在上面的示例中,我们首先生成了一个包含两个簇的示例数据。然后,我们使用 `kmeans` 函数对数据进行 K-means 聚类。`kmeans` 函数的第一个参数是数据集,第二个参数是聚类的数量。函数返回两个结果:`idx` 表示每个样本所属的聚类索引,`centroids` 表示每个聚类的中心点。
最后,我们使用 `gscatter` 函数将数据点按照聚类结果进行可视化,使用 `plot` 函数将聚类中心点标记出来。
需要注意的是,K-means 聚类算法对初始聚类中心的选择敏感,因此可能会得到不同的结果。在实际应用中,可以通过多次运行 K-means 算法并选择最佳结果来增加稳定性。
希望对您有所帮助!如果还有其他问题,请随时提问。
阅读全文