如何使用matlab在K-means算法后绘制具有不同颜色簇的PCA散点图?

Posted

技术标签:

【中文标题】如何使用matlab在K-means算法后绘制具有不同颜色簇的PCA散点图?【英文标题】:How to plot as PCA scatter with different color of clusters after K-means algorithm by using matlab? 【发布时间】:2016-02-01 05:23:11 【问题描述】:

我正在尝试使用 matlab 构建 k-means 算法的实现代码。我在这里学习和使用matlab。不知何故,我通过谷歌搜索观看 matlab 函数的 youtube 构建了 k-means 算法的实现代码。我设置了最初的 3 个初始质心并拥有 iris 数据集,当我检查它时,这三个质心会朝着正确的方向形成 3 个集群。但是,我不太了解,也无法从网络上找到我想要的来源。谁能帮我看看如何用三个集群的每种不同颜色绘制 2D PCA 散点图?

这是我的 k-mean 代码实现,

clear; clc; close all;
load iris.xls
DataSet = iris;
Dim = size(DataSet);

load Iris_Initial_Centroids.xls
Centroid = Iris_Initial_Centroids;
Dim_Cen = size(Centroid);

Centroid1 = Centroid(1,:);
Centroid2 = Centroid(2,:);
Centroid3 = Centroid(3,:);

n = input('Enter the number of Iteration : ');

for i=1:1:n
    count1 = 0;
    Mean1 = zeros(1,4);
    count2 = 0;
    Mean2 = zeros(1,4);
    count3 = 0;
    Mean3 = zeros(1,4);

    for j=1:1:Dim(1,1)
        Pattern1(j)=sqrt((Centroid1(1,1)-DataSet(j,1))^2+(Centroid1(1,2)-DataSet(j,2))^2+(Centroid1(1,3)-DataSet(j,3))^2+(Centroid1(1,4)-DataSet(j,4))^2);
        Pattern2(j)=sqrt((Centroid2(1,1)-DataSet(j,1))^2+(Centroid2(1,2)-DataSet(j,2))^2+(Centroid2(1,3)-DataSet(j,3))^2+(Centroid1(1,4)-DataSet(j,4))^2);
        Pattern3(j)=sqrt((Centroid3(1,1)-DataSet(j,1))^2+(Centroid3(1,2)-DataSet(j,2))^2+(Centroid3(1,3)-DataSet(j,3))^2+(Centroid1(1,4)-DataSet(j,4))^2);
        closestDistance = [Pattern1(j) Pattern2(j) Pattern3(j)];
        minimum = min(closestDistance);
    if (minimum == Pattern1(j))
        count1 = count1+1;
        Mean1 = Mean1 + DataSet(j,:);
    else if (minimum == Pattern2(j))
            count2 = count2 + 1;
            Mean2 = Mean2 + DataSet(j,:);
        else
            count3 = count3+1;
            Mean3 = Mean3 + DataSet(j,:);
        end
    end
    end

    Centroid1 = Mean1/count1;
    Centroid2 = Mean2/count2;
    Centroid3 = Mean3/count3;
    %plot(i, Centroid1, '.');
    %plot(i, Centroid2, '.');
    %plot(i, Centroid3, '.');
end

**[coeff.score.latent] = pca(DataSet);
newDataSet = score(:,1:2);
plot(newDataSet(:,1),newDataSet(:,2),'.');**

在代码的三行末尾,我在 PCA 中绘制散点图时出错。我正在尝试为具有不同颜色(例如 rgb 颜色)的每个集群绘制简化的 2D PCA 散点图。我的问题是什么?任何人都可以帮我解决这个问题吗?这可能对我理解和学习 matlab 有很大帮助。

谢谢..

【问题讨论】:

【参考方案1】:

错误在这里:

[coeff.score.latent] = pca(DataSet);

您正在使用点来分隔参数。这些应该是逗号

[coeff,score,latent] = pca(DataSet);

【讨论】:

感谢您回复我并帮助我! :) 我还有一个问题,如果我想绘制 3 个不同颜色的 3 个簇,例如 RGB,那么我必须如何编写代码? @Bow_Wow 您当前的代码仅计算质心。它不计算每个点的集群成员资格。您是否在某处有执行此操作的代码,或者您是否希望执行此操作? 嗯.. 我只是想完成并想知道它是如何工作的每个集群显示为 rgb.. 呃哦.. 我不知道我必须计算每个点的所有集群成员资格.. 哦,我的.. 我没有计算每个点的集群成员资格的代码.. 好吧,你计算了质心,所以这是一个开始。您只是想以不同颜色绘制质心吗?....数据集中的每个点都必须属于一个集群。离特定质心最近的点,就是它所属的地方。鉴于您当前的代码和您的问题,我不确定您真正想要什么。你能澄清一下吗? 嗯...我不想只绘制计算出的质心。我想用不同颜色绘制所有集群成员和计算出的质心。例如,如果有 3 个集群,则 plot 应该有 3 种颜色的集群。嗯..我想我必须更多地工作..

以上是关于如何使用matlab在K-means算法后绘制具有不同颜色簇的PCA散点图?的主要内容,如果未能解决你的问题,请参考以下文章

图像分割基于matlab粒子群算法和OSTU和分水岭和K-means脂肪肝水平识别含Matlab源码 2397期

图像识别基于k-means聚类的手势识别matlab 源码

图像识别基于k-means聚类的手势识别matlab 源码

K-means算法的matlab程序(初步)

Matlab--k-means聚类算法实现

数学建模MATLAB应用实战系列(106)-机器学习算法:K-means聚类(附MATLAB代码)