聚类算法matlab代码
matlab% 生成一些随机数据 data = [randn(100,2)*0.75+ones(100,2);... randn(100,2)*0.5-ones(100,2)]; % 设置聚类数 k = 2; % 随机初始化聚类中心 initial_centroids = datasample(data, k, 'Replace', false); % 迭代次数 max_iters = 10; % 初始化变量 centroids = initial_centroids; previous_centroids = centroids; idx = zeros(size(data,1), 1); % 运行 k-means 算法 for i=1:max_iters % 分配数据到最近的聚类中心 idx = dsearchn(centroids, data); % 更新聚类中心 for j=1:k centroids(j,:) = mean(data(idx==j,:)); end % 如果聚类中心没有变化则停止迭代 if isequal(previous_centroids, centroids) break; end previous_centroids = centroids; end % 绘制结果 figure; scatter(data(:,1), data(:,2), 10, idx, 'filled'); hold on; scatter(centroids(:,1), centroids(:,2), 100, [1 0 0; 0 1 0], 'filled', 'MarkerEdgeColor', 'k', 'LineWidth', 2); title('K-Means 聚类结果'); legend('数据点', '聚类中心'); hold off;
这段代码首先生成一些随机数据,然后通过 k-means 算法对数据进行聚类。在这个例子中,我们假设数据具有两个聚类。您可以根据需要调整数据生成方式,以及聚类数和迭代次数。
这个示例使用了 MATLAB 中的一些内置函数和工具:
randn
: 生成服从标准正态分布的随机数。datasample
: 从数据中随机抽样。dsearchn
: 在给定的一组点中查找最近邻点。scatter
: 绘制散点图。
这个代码的主要步骤包括:
生成随机数据。设置聚类数和迭代次数。随机初始化聚类中心。执行 k-means 算法迭代过程,分配数据到最近的聚类中心并更新聚类中心。如果聚类中心没有变化则停止迭代。绘制聚类结果。