LDA(Linear Discriminant Analysis)

本文深入浅出地介绍了LDA算法的基本思想,即“投影后类内方差最小,类间方差最大”。并通过实例详细解释了如何计算均值、类内散度矩阵(Sw)、类间散度矩阵(Sb),以及如何求解特征值和特征向量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大

 

分子 即为 类间距离,采用协方差

分母即为类内距离

根据广义瑞丽商,

扩展到多类LDA

仔细观察上式最右边,这不就是广义瑞利商嘛!最大值是矩阵的最大特征值,最大的d个值的乘积就是矩阵的最大的d个特征值的乘积,此时对应的矩阵W为这最大的d个特征值对应的特征向量张成的矩阵。

https://www.cnblogs.com/pinard/p/6244265.html      理论

https://blog.youkuaiyun.com/jnulzl/article/details/49894041   实例+理论

http://people.revoledu.com/kardi/tutorial/LDA/Numerical%20Example.html   实例

https://blog.youkuaiyun.com/warmyellow/article/details/5454943   实例

以下为实例

1.计算均值

2.计算Sw

3.计算Sb

4.通过Sb跟Sw计算特征值以及特征向量

或者:

5.转换坐标

 

 

 

 

 

 

 

 

抱歉,您提到的是LDALinear Discriminant Analysis),这与上文提到的文本主题建模(Latent Dirichlet Allocation)不同。LDA是用于自然语言处理中的主题模型,而Linear Discriminant Analysis(线性判别分析)则是一种统计学方法,用于二分类或多分类问题,通过最大化类别间的方差和最小化类别内的方差来进行特征转换。 下面是一个简单的C++代码示例,展示了如何实现基于高斯分布的LDA: ```cpp #include <iostream> #include <Eigen/Dense> // 假设我们有观测矩阵 X 和类别标签 y MatrixXd X; // 观测值矩阵 VectorXd y; // 类别标签向量 // 按类别划分数据 std::vector<MatrixXd> X_train; std::vector<MatrixXd> X_test; std::vector<VectorXd> y_train; std::vector<VectorXd> y_test; // Linear Discriminant Analysis 函数 MatrixXd computelda() { int d = X.cols(); // 特征维度 int n = X.rows(); // 样本总数 int k = unique(y).size(); // 类别数目 // 计算先验概率 VectorXd pi(n, 0); for (int i = 0; i < n; ++i) { pi(i) = count(y.begin(), y.end(), y[i]) / static_cast<double>(n); } // 计算均值和协方差矩阵 MatrixXd mu(k, d), Sigma(k, d, d); for (int c = 0; c < k; ++c) { MatrixXd X_c = X.rowwise().select(y == c); mu(c, :) = X_c.colwise().mean(); Sigma(c, :, :) = X_c.colwise().cov(); } // 解线性组合 MatrixXd W = (Sigma.fullPivLu().solveDiagonal().asDiagonal() - inv(pi)).inverse(); return W; } int main() { // 对数据进行预处理 // ... // 计算W MatrixXd W = computelda(); // 应用到新样本上 MatrixXd transformed_data = X * W; // 使用transformed_data进行后续分类 return 0; } ``` 请注意,这个例子非常基础,实际应用中可能需要处理缺失值、正则化等问题,并且可能需要依赖更专业的机器学习库如MLPack或Shogun等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值