gpt4 book ai didi

非线性可分数据的 Matlab kmeans 聚类

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:42 25 4
gpt4 key购买 nike

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

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

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

你能建议我任何其他聚类方法来实现我的目标吗? My cluster plot

最佳答案

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

k-means clustering aims to partition n observations into k clusters in which each observation belongs to the cluster with the nearest mean

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

现在,如果您知道您的簇总是是同心圆,您可以简单地将笛卡尔 (x-y) 坐标转换为极坐标,并且仅使用半径 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.')

result

或者更一般地说:使用合适的内核进行 k 均值聚类,或者使用其他算法。

关于非线性可分数据的 Matlab kmeans 聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40455334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com