You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

一维数据k-means聚类MATLAB手动实现与同步可视化问题咨询

MATLAB一维数据手动实现2类k-means聚类及可视化方案

核心实现逻辑

一维2类场景下k-means的实现逻辑非常简洁,无需复杂的矩阵运算:

  • 从输入的1x100数据中随机选取2个不重复的值作为初始聚类质心
  • 迭代计算每个数据点到两个质心的绝对距离,将点分配给距离更近的聚类
  • 用每个聚类的所有点的均值更新对应质心
  • 直到两次迭代的质心差值小于收敛阈值,或达到最大迭代次数后停止

完整可运行代码

%% 1. 数据准备(可替换为你自己的1x100一维数据)
rng(1); % 固定随机种子方便结果复现
data = [normrnd(2, 0.8, 1, 50), normrnd(6, 0.8, 1, 50)]; % 生成两个正态分布的测试数据
k = 2;
max_iter = 100; % 最大迭代次数,防止不收敛
conv_threshold = 1e-6; % 收敛判定阈值

%% 2. 初始化质心
centroids = datasample(data, k, 'Replace', false); % 从数据中选2个不重复的初始质心
prev_centroids = centroids + 10; % 初始化旧质心,保证首次迭代正常运行

%% 3. 迭代聚类
for iter = 1:max_iter
    % 计算所有点到两个质心的一维距离(绝对差即可)
    dist_to_c1 = abs(data - centroids(1));
    dist_to_c2 = abs(data - centroids(2));
    % 分配聚类标签:1为第一类,2为第二类
    labels = (dist_to_c2 < dist_to_c1) + 1;
    % 更新质心
    centroids(1) = mean(data(labels == 1));
    centroids(2) = mean(data(labels == 2));
    % 收敛判断
    if max(abs(centroids - prev_centroids)) < conv_threshold
        break;
    end
    prev_centroids = centroids;
end

%% 4. 可视化(解决质心无法显示的问题)
figure('Color','w');
hold on; % 必须加hold on,保证后续绘图不会覆盖已有内容
% 绘制两类数据点,y轴固定为1避免一维点重叠,用颜色区分聚类
plot(data(labels==1), ones(1, sum(labels==1)), 'bo', 'MarkerFaceColor','b', 'DisplayName','聚类1');
plot(data(labels==2), ones(1, sum(labels==2)), 'ro', 'MarkerFaceColor','r', 'DisplayName','聚类2');
% 绘制质心,用大尺寸菱形标记,调高Zorder保证显示在最上层不被遮挡
plot(centroids(1), 1, 'kd', 'MarkerSize',15, 'LineWidth',3, 'DisplayName','聚类质心', 'ZOrder',10);
plot(centroids(2), 1, 'kd', 'MarkerSize',15, 'LineWidth',3, 'HandleVisibility','off', 'ZOrder',10);
% 调整坐标轴样式
yticks([]); % 隐藏无意义的y轴刻度
xlabel('一维数据值');
legend('Location','best');
xlim([min(data)-1, max(data)+1]);
grid on;
hold off;

质心无法显示的常见原因

  • 未添加hold on命令,导致后绘制的质心直接覆盖了之前的数据点图像
  • 质心的y轴坐标和数据点的y轴坐标不在同一个显示区间,超出了坐标轴范围
  • 质心标记尺寸太小,或者层级比数据点低,被重叠的数点挡住,上述代码用ZOrder参数强制质心显示在最上层解决该问题

内容的提问来源于stack exchange,提问作者taru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 03:45:03