线性判别分析matlab

时间:2018-01-29 15:07:07

标签: matlab machine-learning statistics classification lda

我想对我的数据进行LDA分类。我的数据有6个功能,我想找出哪个具有最佳的分类性能。所以我的想法是分别评估所有特征,每次我只在matlab函数fitcdiscr中将一个特征装入LDA分类器。
我的问题是我如何可视化分类的输出,如下图所示:

enter image description here

使用函数fitcdiscr后,我有一个模型,我如何可视化图中分隔两个类的行?该功能是否应与功能fitcdiscr的录音数量一致? 非常感谢你!

1 个答案:

答案 0 :(得分:0)

以下是一些示例数据:

x = [1, 1.5] .* randn(100, 2);
x(51:end, :) = [1, 2] .* x(51:end, :) + [2, 4];
y = [ones(50, 1); 2*ones(50, 1)];

如果您符合

的LDA模型
mdl = fitcdiscr(x, y);

这将返回一个ClassificationDiscriminant对象,其中包含字段Coeffs,其中存储了所有LDA系数。这是 k -by- k 结构,其中 k 是类的数量,即这里有 2 -by- 2 结构。 Coeffs(i, j)包含类ij之间的线性边界。因此,我们只对Coeffs(1, 2)感兴趣,即1级和2级之间的边界。

如文档中所述,两个类之间的边界方程是(简化为忽略二次部分,因为我们处理LDA而不是QDA)

Const + Linear * x = 0,

因此,我们可以用

计算线的函数
x(2) = -(Const + Linear(1) * x(1)) / Linear(2)

我们可以使用gscatter创建散点图,并通过查找当前轴(gca)的最小和最大x值并使用等式计算相应的y值来添加线上方。

figure(1)
gscatter(x(:, 1), x(:, 2), y);
hold on

lx = get(gca, 'Xlim');
ly = -(mdl.Coeffs(1, 2).Const + mdl.Coeffs(1, 2).Linear(1) .* lx) / mdl.Coeffs(1, 2).Linear(2);
plot(lx, ly, '-b', 'DisplayName', 'LDA')

hold off

导致

Resulting plot: scatter plot of both classes and the LDA line