我正在进行一个基于MATLAB的拇指识别系统项目。我已经实现了K均值算法并得到了结果。现在我想像这里展示的那样绘制结果,但我尝试后未能成功。我使用的代码如下。
load training.mat; % 加载以获取trainingData变量labelData = zeros(200,1);labelData(1:100,:) = 0; labelData(101:200,:) = 1;k=2;[trainCtr, traina] = kmeans(trainingData,k);trainingResult1=[];for i=1:k trainingResult1 = [trainingResult1 sum(trainCtr(1:100)==i)];endtrainingResult2=[];for i=1:k trainingResult2 = [trainingResult2 sum(trainCtr(101:200)==i)];endload testing.mat; % 加载以获取testingData变量c1 = zeros(k,1054);c1 = traina;cluster = zeros(200,1);for j=1:200 testTemp = repmat(testingData(j,1:1054),k,1); difference = sum((c1 - testTemp).^2, 2); [value index] = min(difference); cluster(j,1) = index;endtestingResult1 = [];for i=1:k testingResult1 = [testingResult1 sum(cluster(1:100)==i)];endtestingResult2 = [];for i=1:k testingResult2 = [testingResult2 sum(cluster(101:200)==i)];end
在上述代码中,trainingData
是一个200 x 1054的矩阵,其中200代表拇指图像,1054代表列。实际上,每张图像的尺寸为25 x 42。我将每张图像重塑为行矩阵(1 x 1050),并添加了4个其他特征列,因此每张图像总共有1054列。同样,testingData
的制作方式与trainingData
相同,尺寸也是200 x 1054。现在我的问题只是如何像这里展示的那样绘制结果。
回答:
选择两个特征后,您可以按照示例进行操作。启动一个图形窗口,使用hold on
,然后使用plot
或scatter
来绘制中心点和数据点。例如:
selectedFeatures = [42,43];plot(trainingData(trainCtr==1,selectedFeatures(1)), trainingData(trainCtr==1,selectedFeatures(2)), 'r.','MarkerSize',12)
这将绘制聚类1中数据点的选定特征值。