【问题标题】:Clustering of 1 dimensional data一维数据的聚类
【发布时间】:2021-08-24 11:22:37
【问题描述】:

我正在尝试在不使用内置 k-means 函数的情况下学习 MATLAB 中的 k-means 聚类算法。假设我有大小为 1x100 的数据,我想将它们分成两个集群。那么我该怎么做。我想在 MATLAB 中将两个质心和数据一起可视化。 注意:当我在 MATLAB 中绘图时,我只能看到数据,但不能同时看到数据和两个质心。

非常感谢您在这方面的任何帮助。

【问题讨论】:

  • 一维聚类减少到定义一个阈值,不是吗?
  • 好的。这意味着在超过 1 维的情况下会出现聚类效果,对于 1 维,我们将使用阈值。我的理解正确吗?
  • 我在聚类方面没有很多经验,但是是的,当您拥有超过 1 个维度时,聚类是有意义的。对于 1 维,您希望以两个间隔拆分(聚类)数据。参见例如here
  • 好的。明白了。

标签: matlab cluster-analysis k-means


【解决方案1】:

matlab 中的最小 K-means 聚类算法可以是:

p = rand(100,2); % rand(number_of_points,number_of_dimension)
c = p(1:3,:);    % We create 3 centroids

% We run this minimal KNN algorithm:
for ii = 1:10
    % Which centroids is the closest for each points ? min(Euclidian_distance):
    [~,idx] = min(sum((permute(p,[3,2,1])-c).^2,2),[],1);
    % We calculate the new centroids (the center of mass of the corresponding points)
    c = splitapply(@mean,p,idx(:))
end

如果需要,我们可以绘制结果:

hold on
scatter(p(:,1),p(:,2),[],idx(:))
scatter(c(:,1),c(:,2),[],'red')

我们得到:

我们的 3 个质心为红色,簇具有不同的颜色。 请注意,在此示例中,数据的维度为 2,但它也适用于任何其他维度。

3 个初始质心对应于数据集的 3 个点(随机选择),它确保每个质心至少是 1 个点的最接近的质心。

在此示例中,有 10 次迭代。但是最好定义一个容差并在质心收敛时停止迭代。

【讨论】:

  • 很好的实现。不知道 splitapply,我使​​用 Matlab 多年。但是,以“我正在努力学习......”开头的问题我想知道是否最好只完成提问者试图完成的任务。至少你是在 2D 中完成的,所以 1D 的应用留作练习。 :)
  • 好的。会做的。
猜你喜欢
  • 2017-01-26
  • 2013-05-17
  • 2012-01-02
  • 2021-08-02
  • 2012-07-15
  • 1970-01-01
  • 2019-07-17
  • 2015-06-30
  • 2021-05-25
相关资源
最近更新 更多