我想对我的数据进行LDA分类。我的数据有6个功能,我想找出哪个具有最佳的分类性能。所以我的想法是分别评估所有特征,每次我只在matlab函数fitcdiscr
中将一个特征装入LDA分类器。
我的问题是我如何可视化分类的输出,如下图所示:
使用函数fitcdiscr
后,我有一个模型,我如何可视化图中分隔两个类的行?该功能是否应与功能fitcdiscr
的录音数量一致?
非常感谢你!
答案 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)
包含类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
导致