如何使用 matlab 在 K-means 算法后绘制不同颜色聚类的 PCA 散点图?
How to plot as PCA scatter with different color of clusters after K-means algorithm by using matlab?
我正在尝试使用 matlab 构建 k-means 算法的实现代码。我正在学习并且不熟悉在这里使用 matlab。我通过谷歌搜索观看 matlab 函数的 youtube 以某种方式构建了 k-means 算法的实现代码。我设置了最初的 3 个初始质心并拥有 iris 数据集,当我检查它时,这三个质心向右方向移动以形成 3 个聚类。但是,我不太了解也无法从网上找到我想要的来源。任何人都可以帮助我如何绘制具有三个簇的每种不同颜色的二维 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有很大的帮助。
谢谢..
错误在这里:
[coeff.score.latent] = pca(DataSet);
您正在使用点分隔参数。这些应该是 逗号.
[coeff,score,latent] = pca(DataSet);
我正在尝试使用 matlab 构建 k-means 算法的实现代码。我正在学习并且不熟悉在这里使用 matlab。我通过谷歌搜索观看 matlab 函数的 youtube 以某种方式构建了 k-means 算法的实现代码。我设置了最初的 3 个初始质心并拥有 iris 数据集,当我检查它时,这三个质心向右方向移动以形成 3 个聚类。但是,我不太了解也无法从网上找到我想要的来源。任何人都可以帮助我如何绘制具有三个簇的每种不同颜色的二维 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有很大的帮助。
谢谢..
错误在这里:
[coeff.score.latent] = pca(DataSet);
您正在使用点分隔参数。这些应该是 逗号.
[coeff,score,latent] = pca(DataSet);