机器学习算法(九): 基于线性判别模型的 LDA 手写数字分类识别
1.机器学习算法(九): 基于线性判别模型的 LDA 手写数字分类识别
本项目链接:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc
1.1 LDA 算法简介和应用
线性判别模型(LDA)在模式识别领域(比如人脸识别等图形图像识别领域)中有非常广泛的应用。LDA 是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和 PCA 不同。PCA 是不考虑样本类别输出的无监督降维技术。LDA 的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。即:将数据投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近方法。
LDA 算法的一个目标是使得不同类别之间的距离越远越好,同一类别之中的距离越近越好。那么不同类别之间的距离越远越好,我们是可以理解的,就是越远越好区分。同时,协方差不仅是反映了变量之间的相关性,同样反映了多维样本分布的离散程度(一维样本使用方差),协方差越大(对于负相关来说是绝对值越大),表示数据的分布越分散。所以上面的“欲使同类样例的投影点尽可能接近,可以让同类样本点的协方差矩阵尽可能小”就可以理解了。
如上述公式 所示,分子为投影数据后的均值只差,分母为方差之后,LDA 的目的就是使得 值最大化,那么可以理解为最大化分子,即使得类别之间的距离越远,同时最小化分母,使得每个类别内部的方差越小,这样就能使得每个类类别的数据可以在投影矩阵 的映射下,分的越开。
需要注意的是,LDA 模型适用于线性可分数据,对于上述实战中用到的 MNIST 手写数据(其实是分线性的),但是依然可以取得较好的分类效果;但在以后的实战中需要注意 LDA 在非线性可分数据上的谨慎使用。
1.2.算法应用
LDA 在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解一下它的算法原理。不过在学习 LDA 之前,我们有必要将其与自然语言处理领域中的 LDA 区分开,在自然语言处理领域,LDA 是隐含狄利克雷分布(Latent DIrichlet Allocation,简称 LDA),它是一种处理文档的主题模型,我们本文讨论的是线性判别分析,因此后面所说的 LDA 均为线性判别分析。
LDA 除了可以用于降维以外,还可以用于分类。一个常见的 LDA 分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用 LDA 进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。
2.相关流程
掌握 LDA 算法基本原理
掌握利用 LDA 进行代码实战
Part 1 Demo 实践
Step1:库函数导入
Step2:模型训练
Step3:模型参数查看
Step4:数据和模型可视化
Step5:模型预测
Part 2 基于 LDA 手写数字分类实践
Step1:库函数导入
Step2:数据读取/载入
Step3:数据信息简单查看与可视化
Step4:利用 LDA 在手写数字上进行训练和预测
3.代码实战
3.1 Demo 实践
Step1:库函数导入
Step2:模型训练
Step3:模型参数查看
Step4:数据和模型可视化
Step5:模型预测
3.2 Part 2 基于 LDA 手写数字分类实践
Step1:库函数导入
Step2:数据读取/载入
Step3:数据信息简单查看与可视化
Step4:利用 LDA 在手写数字上进行训练和预测
4.总结
LDA 算法的主要优点:
在降维过程中可以使用类别的先验知识经验,而像 PCA 这样的无监督学习则无法使用类别先验知识;
LDA 在样本分类信息依赖均值而不是方差的时候,比 PCA 之类的算法较优。
LDA 算法的主要缺点:
LDA 不适合对非高斯分布样本进行降维,PCA 也有这个问题
LDA 降维最多降到类别数 k-1 的维数,如果我们降维的维度大于 k-1,则不能使用 LDA。当然目前有一些 LDA 的进化版算法可以绕过这个问题
LDA 在样本分类信息依赖方差而不是均值的时候,降维效果不好
LDA 可能过度拟合数据,
本项目链接:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc
参考链接:https://tianchi.aliyun.com/course/278/3426
本人最近打算整合 ML、DRL、NLP 等相关领域的体系化项目课程,方便入门同学快速掌握相关知识。声明:部分项目为网络经典项目方便大家快速学习,后续会不断增添实战环节(比赛、论文、现实应用等)。
对于机器学习这块规划为:基础入门机器学习算法--->简单项目实战--->数据建模比赛----->相关现实中应用场景问题解决。一条路线帮助大家学习,快速实战。
对于深度强化学习这块规划为:基础单智能算法教学(gym 环境为主)---->主流多智能算法教学(gym 环境为主)---->单智能多智能题实战(论文复现偏业务如:无人机优化调度、电力资源调度等项目应用)
自然语言处理相关规划:除了单点算法技术外,主要围绕知识图谱构建进行:信息抽取相关技术(含智能标注)--->知识融合---->知识推理---->图谱应用
上述对于你掌握后的期许:
对于 ML,希望你后续可以乱杀数学建模相关比赛(参加就获奖保底,top 还是难的需要钻研)
可以实际解决现实中一些优化调度问题,而非停留在 gym 环境下的一些游戏 demo 玩玩。(更深层次可能需要自己钻研了,难度还是很大的)
掌握可知识图谱全流程构建其中各个重要环节算法,包含图数据库相关知识。
这三块领域耦合情况比较大,后续会通过比如:搜索推荐系统整个项目进行耦合,各项算法都会耦合在其中。举例:知识图谱就会用到(图算法、NLP、ML 相关算法),搜索推荐系统(除了该领域召回粗排精排重排混排等算法外,还有强化学习、知识图谱等耦合在其中)。饼画的有点大,后面慢慢实现。
版权声明: 本文为 InfoQ 作者【汀丶】的原创文章。
原文链接:【http://xie.infoq.cn/article/83c853d0c559dba8d38ba0ba8】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论