学习
实践
活动
专区
工具
TVP
写文章

机器学习算法系列——LDA

闲话

拖着疲惫的身躯强行更新一波。最近的事情会很多,也许2-3天才能更新一篇,毕竟临近毕业,工作之前需要做很多的准备,望理解啊。

最近,在边看些机器学习算法边接触深度学习的东西,感觉keras这个框架对初学者很友好啊、很好用,个人超级喜欢,比较有py的味道。但和大牛交流后,发现keras也有很多局限性,都建议后期多搞搞Tensorflow,以后肯定得深入学习TF的。初学阶段还是多以理解和实现算法为主,小的不是很复杂的项目还是keras更方便。在公众号后面的文章里面,会慢慢介绍keras的用法和深度学习的基础

LDA 思想

本文要介绍的算法为LDA(线性判别分析),有别于NLP中的LDA(隐含狄利克雷分布)。LDA属于监督学习的一种,主要是用来降维和提取关键信息。说人话就是,用来减少输入数据中的特征数量,用尽量少的特征来反映出影响y的输出。

举个例子,我们在之前做的一些手写数字识别的项目中,一张图片像素为28*28,每个像素都是一个特征,而且数据集中有70000万张图片,特征的维度大的可怕,已经远远超过样本数量。根据常识我们也可能会想到,这么多的特征总有一些是不那么重要的,对于结果的影响很小,所以我们可以只保留一些最佳特征(降维)。

LDA的基本思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点中心尽可能远离。一句话概括就是:

投影后类内方差最小,类间方差最大。

为了更形象地理解LDA,看看周志华老师的西瓜书对于二类数据利用LDA进行分类的图像:

LDA一般步骤

这里只讲二分类的情况:

说人话就是,先算个不同类中心点之间的方差(最大化),再计算类内的样本点之间的方差(最小化)。

综合两个要求之后的目标就是,最大化以下部分:

然后,我们只需要寻找使上述目标函数最大的 w 就行了,对应步骤中 的6-8步。具体推倒也不是很难,感兴趣小伙伴参考西瓜书上的推倒哈。

sklearn中的LDA

LDA在Sklearn中的描述是:

具有线性决策边界的分类器,通过将类别条件密度拟合到数据并使用贝叶斯规则生成。假定所有类别共享相同的协方差矩阵,该模型对每个类别都适合高斯密度。拟合的模型也可用于数据通过投影到最具辨别性的方向来降低输入的维度。

其实,我没懂前面是啥意思。可能是LDA推倒的角度不同,所以描述也不尽相同(先不管了)。

先看看一个简单的例子吧,sklearn文档里的:

毕竟sklearn调用算法的步骤很简单,就不详细说明了。这里我们重点看看LDA分类器的主要参数solver在实战中该怎么设置。

solver参数的使用

sklearn中提供了3种solver:svd 、 lsqr 、eigen

svd:奇异值分解,也是默认值。特点是不需要计算协方差矩阵,推荐用于具有大量特征的数据。

lsqr: 最小二乘方法,可以结合特征缩减。

eigen:特征值分解,可以结合特征缩减。

下面对比一下不同的solver用于哪些不同的情况:

默认的求解器是’svd’。它可执行分类和变换,也不依赖于协方差矩阵的计算。在特征数量很大的情况下,这可能是一个优点。但是,’svd’求解器不能用于降维。

‘lsqr’求解器是一种仅用于分类的高效算法,它支持特征缩减。

‘eigen’求解器需要计算协方差矩阵,所以它可能不适用于具有大量特征的情况。

写公众号也差不多一个月了,说实话挺累的。我个人的目的很简单,第一是为了保持学习状态,第二是和有相同目标的你们一起努力吧。人人都想赚钱,我也一样,但我始终记得一句话:带着功利的心去学习永远都学不好。所以,对于年轻的我们来说,该认真的时候、该学的时候就多努力一些。

希望志同道合的你们多多关注和支持我的个人公众号:

如果想和更多有趣的小伙伴(包括我)一起交流,可以通过以下操作进入:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180604G02MIM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券