【问题标题】:Linear discriminant analysis matlab线性判别分析matlab
【发布时间】:2018-07-08 07:52:03
【问题描述】:

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

使用fitcdiscr函数后,我有一个模型,我如何可视化图中分隔两个类的线?应该将功能与录音数量一起适应fitcdiscr 的功能吗? 非常感谢!

【问题讨论】:

  • 请详细说明您的数据,在您的帖子中添加一些代码,并详细说明您的目标。

标签: matlab machine-learning statistics classification lda


【解决方案1】:

这里是一些示例数据:

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) 包含类 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

导致

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 2011-08-20
    • 2013-12-10
    • 2022-06-22
    • 2020-02-03
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多