我正在进行判别分析,并希望使用MATLAB对一些数据进行分类。在MATLAB中给出的Fisher鸢尾花数据示例中(有关详细信息,请访问www.mathworks.com/products/demos/statistics/classdemo.html),他们仅考虑前两个变量(Sepal Length&Width)。我想使用更多功能(例如“花瓣长度”和“花瓣宽度”)进行分类。

另外,MATLAB函数gscatter似乎仅包含2个变量。

gscatter(meas(:,1), meas(:,2), species,'rgb','osd');

我也想包括meas(:,3)并继续。请帮助我。谢谢

最佳答案

gscatter不能执行此操作,因为它只能绘制2D数据。如果要对3D数据执行此操作(因为要包括另一个维度),请考虑使用plot3在3D中绘制数据。但是,gscatter允许您指定每个组的颜色以及每个点的标记。我们仍然可以使用plot3进行相同的操作,但需要做更多的工作。生成一个新的空白figure,使用hold on,然后使用循环以不同的颜色和标记一次绘制属于一个特定类别的所有数据。

我们首先要做的是获取species中的分类数据,并为每个类别分配一个唯一的ID,以便我们可以分离出正确的数据进行绘制。因此,请尝试执行以下操作:

load fisheriris; %// The data that you are referring to
[~,~,id] = unique(species);
colors = 'rgb';
markers = 'osd';

for idx = 1 : 3
    data = meas(id == idx,:);
    plot3(data(:,1), data(:,2), data(:,3), [colors(idx) markers(idx)]);
    hold on;
end
grid; %// Show a grid


让我们慢慢看一下代码。如您所述,load fisheriris加载Fisher Iris数据。下一行使用unique遍历species数组,并为每个字符串分配一个唯一的ID。我们将需要此数组来分隔每个类别中存储在meas中的数据,以便我们可以使用不同的颜色和标记在我们的图形上绘制这些数据。我声明了两个字符串数组,这些数组将存储每个标记以及标记的颜色。现在,我们创建一个循环,该循环将为每个唯一标签分离出数据,使用plot3绘制此数据,然后使用相应的颜色和标记标记每个点。您需要使用hold on,以便我们可以在同一张图中绘制一组以上的点。否则,每次调用plot3都会清除图形,并仅绘制添加的最新点。作为奖励,我们添加了grid,以便可以更好地查看图形。



这是我们得到的:

10-04 11:53