matlab LDA linear dicriminant analysis 实现

本文介绍了如何在MATLAB中实现线性判别分析(LDA),并探讨了与OpenCV LDA结果的差异。作者通过参考多个资源和理论知识,最终得到与OpenCV一致的LDA实现。同时提到了MATLAB的数据降维工具箱drtoolbox,虽然其计算结果不同,但通过调整部分代码,可以得到与作者实现相同的结果。
摘要由CSDN通过智能技术生成

LDA 中文名称线性判别分析

最近用到LDA,因为不是数学方面出生,所以只管结果正确,不太追究具体的原理,在网上找到了一些别人的实现以及参考资料,自己实现了以下,但和OpenCV里面的LDA[1]结果相差较大,后来经过参考多个版本以及理论知识,最终实现版本如下,与OpenCV的LDA结果一致且与LDA的公式相符:

function [coeff, latent]= myLDA(data, labels)
% Make sure labels are nice
	[classes, bar, labels] = unique(labels);
    nc = length(classes);
    
    dataMean = mean(data, 1);
    Sb = 0;%类间
    for i = 1:nc
         cur_X = data(labels == i,:);
         meanTemp = mean(cur_X, 1);
         Sb = Sb + size(cur_X,1)*(meanTemp'-dataMean')*(meanTemp'-dataMean')';
    end
    
    Sw = 0;%类内
    for i = 1:nc
        cur_X = data(labels == i,:);
         meanTemp = mean(cur_X, 1);
        for j = 1:size(cur_X,1)
            dataTemp = cur_X(j, :);
            Sw =  Sw + (meanTemp' - dataTemp&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值