【问题标题】:Matlab kmeans clustering for non linearly separable data非线性可分数据的 Matlab kmeans 聚类
【发布时间】:2017-03-20 05:10:11
【问题描述】:

我手头有一个非线性可分的数据。我想在 matlab 中使用 K-means 实现对其进行聚类。我想为每个数据点获取集群标签,以将它们用于另一个分类问题。

问题是 k-means 没有按预期给出结果。我附上了我获得的集群图。

我希望 k-means 能够将集群作为数据看起来的同心圆,但输出是弧。我不明白为什么会这样。

您能否建议我使用其他聚类方法来实现我的目标。

【问题讨论】:

    标签: matlab k-means


    【解决方案1】:

    在使用算法之前,您应该尝试了解它:算法的目标是什么,以及它是如何实现的。对于 k-means,Wikipedia 告诉我们以下内容:

    k-means 聚类旨在将 n 个观测值划分为 k 个簇,其中每个观测值属于具有最接近均值的簇

    三个同心圆的均值完全相同,因此 k-means 不适合将它们分开。结果确实是您对 k-means 的期望。

    现在,如果您知道您的集群将始终是同心圆,您可以简单地将笛卡尔 (xy) 坐标转换为极坐标,并仅使用半径 rho 进行集群 - 如你知道theta 的角度无关紧要:

    % Create random data
    [x1,y1] = pol2cart(2*pi*rand(1000,1),rand(1000,1));
    [x2,y2] = pol2cart(2*pi*rand(1000,1),rand(1000,1)+2);
    [x3,y3] = pol2cart(2*pi*rand(1000,1),rand(1000,1)+4);
    X = [x1,y1; x2,y2; x3,y3];
    
    % Transform to polar
    [theta,rho] = cart2pol(X(:,1),X(:,2));
    
    % k-means clustering
    idx = kmeans(rho,3);
    
    % Plot results
    hold on
    plot(X(idx==1,1), X(idx==1,2), 'r.')
    plot(X(idx==2,1), X(idx==2,2), 'g.')
    plot(X(idx==3,1), X(idx==3,2), 'b.')
    

    或更一般地说:为 k-means 聚类使用合适的内核,或使用其他算法。

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 1970-01-01
      • 2019-07-17
      • 2014-01-27
      • 2021-10-09
      • 2018-02-05
      • 2019-02-14
      • 2019-01-23
      • 2013-03-23
      相关资源
      最近更新 更多