这里是一些示例数据:
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 em>-by-2 结构。 Coeffs(i, j) 包含类 i 和 j 之间的线性边界。因此,我们只对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
导致