什么时候使用PCA和LDA? 举报 理由 举报 取消 在机器学习进行特征选择的时候,我们花很大的力气去挑选变量。但是为什么还需要进行降维呢? 到底什么时候应该用PCA这样的工具? 是当变量数量达到一定的数目么? 2017年9月30日 10 条回复 1419 次浏览 人工智能,分析,学习,数据,数据挖掘,机器,自然语言
回复 ( 10 )
如果不降维,将导致 数据分布在一个极小的区域内。也叫维度灾难。
比如说,球的体积是 v 正比于 R^3。在R/2的同心球,体积正比于(R/2)^3。同心小球是全球的体积八分之一。
如果是多维球,球的大部分体积 分布在球表面内侧的“很薄”的一层,比如千/万维的话….
所以要降维。不降维,高维特征没啥用,比如人脸识别….
PCA是无类别信息,不知道样本属于哪个类,用PCA,通常对全体数据操作。
LDA有类别信息,投影到类内间距最小and类间间距最大…
也有一些算法,先用PCA搞一遍,再用LDA搞一遍,也有相反。反正有论文是这么搞的,至于是不是普适,要看具体问题。
具体问题具体分析,这是最重要的…
当你的特征数量p过多,甚至多过数据量N的时候,降维是必须的。
为什么是必须的?有个东西叫curse of dimensionality,维度越高,你的数据在每个特征维度上的分布就越稀疏,这对机器学习算法基本都是灾难性的。
你说特征数量过多,砍一点就行了嘛?但是对不起,就有这样的问题存在,砍不了。
你要研究某个罕见病跟什么基因有关?基因很多哦,人类已知的基因有几千个,可是病例通常也就几百个,有时连几百个都没有……
当你的特征有比较明显的自相关的时候,也可以考虑降维。
自相关会让很多模型的效果变差,主要是线性模型。这些模型效果不好,但是算的快,很多时候很有用。先降维再算会好的多。
还有的应用跟降维没多大关系,纯粹只是去杂音而已。这是一个典型的应用:
分析篮球攻防组合的表现。就是给定一个篮球进攻球员,和他的对位防守球员,求出在一次进攻中这名进攻球员的(1)出手概率(2)如果出手,得分期望
根据篮球知识,我们容易知道,如果一个人防“射手A”防的好,但是防“突破手B”防的差,那他防“射手C”也防的好的可能性大过防“突破手D”防的好的可能性。于是这里有必要把进攻球员(防守球员也类似)做个相似度出来,根据这个相似度再来构建模型(比如可以用Bayes Net)。
相似度怎么构建?PCA就可以了,把选手的出手位置的分布做成特征,然后PCA之,取前若干维的相似度即可。(为啥不直接用出手位置的分布来做呢?效果不好呗,去掉杂音会好的多,而且PCA出来的还是正交的,可以直接求距离)
“花很大力气挑选变量”
这个说法比较外行, 变量不是个机器学习的用词。
按通常情况理解,变量,是个一维特征,
如果你“花了很大力气挑选变量”,那不会有很多个特征,直接拿去分类就好了。
特征、特征维度是不同的概念, 一个特征提取出来,可能是个n维数据,无法直接分类操作。
所以要降维。
建模描述数据也好,描述自然现象也好,一个很重要的原则就是奥卡姆剃刀(Occam’s razor),也就是简单化原则。大部分时候,一两个主要因素,可以解释80%的数据。降维可以抽离出问题的本质,而且一定程度上抗噪。
能用10维描述的东西我们就不要用50维描述,因为多出来的40维大都是冗余信息,而且高维数据处理有诸多问题,比如传说中的维数灾难(curse of dimensionality),高维空间要达到同样的效果需要的数据量呈指数级增长。
你的特征相互间有相关性而且分布上是椭圆的,这会带来复杂性,会更容易造成模型过拟合。
PCA用一组正交基重构你的表达,然后还把分布拉圆,这就相当于找到了数据的结构性,利用这些先验去简化问题。这对模型来说是帮了大忙。
你可以试试把一个椭圆分布的样本集直接塞给SVM;再白化后(拉成圆)试试。
至于降维,你也可以不降维啊。当你确定信息量少的那些维度对你的问题确实没帮助,降维肯定是好的,这又使问题简化了,而且去掉这些没用信息可以防过拟合。但是信息少往往不意味着没用,有时候信息少的那部分信息甚至是关键信息。举个例子,比如你招人打篮球,只看身高这一项,普通人的身高是集中分布在一段里的,而且天赋异禀的身高只有极少数,而这极少数恰好是你需要的。
首先应该明白这两个算法的原理是不一样的,pca是选择投影后使得数据方差最大的方向来投影,假设就是方差越大,信息量越多,pca是一种无监督算法,没有类别信息,而lda是选择投影后使得类内方差小而类间方差大的方向来投影,用到了类别信息,所以选择用哪种算法来降维应该是根据具体的目的和场景来的,如果你的目的就是分类,那么显然lda的选择标准更合理,如果你没有类别信息(无监督),那就只能选pca,总之,两者选择投影的方向的标准是不一样的,看哪个和你的需要更契合。
在机器学习中,如果都能够挑选出少而精的特征了,那PCA等降维算法确实没有必要。但一些情况下原始数据维度非常高,然而我们又没有办法想出有效的特征,这个时候就需要用PCA等工具来降低数据的维度,使得数据可以用于统计学习的算法。
我之前所在的一个研究小组就把PCA用在了文字数据上。文字数据处理 (vectorize) 后一个样本的每一维对应这一个词。然而可以想象在一个文本数据集中,总的不同的词的个数是非常多的,因此样本维度常常上万。这样高维度的数据如果直接用来训练统计学习的算法得到的模型通常不具有统计学上的显著性。因此,我们将sparse PCA应用在原始数据上,找到不同的词之间的线性相关性,将高相关的词合并为一个特征,这就是所谓的话题模型 (topic modeling)。
挑选特征无法消除特征之间的相关性,PCA可以得到一组不相关(正交)的特征。
反过来思考,数据有A和B两个不相关的特征,你可以通过A和B的线性变换得到无数个新特征,且这些新特征都是有相关性的。
不考虑可解释性,那一堆新的特征显然都不如最初的A和B更能体现数据分布情况。
在这里用PCA就相当于是通过一堆相关特征的线性组合还原出正交特征A和B。
除了A和B,数据的正交特征可能还有C、D、E、F……
忽略那些数据分布过窄(不具有良好区分性)的特征,留下少数具有较好区分能力的,就完成了降维。
以前上学做聚类算法的时候也有同样的疑虑,觉得50维已经够高了,怎么会有上万维的数据?
“在机器学习进行特征选择的时候,我们花很大的力气去挑选变量。”
虽然特征选择是很重要的一环,但事实上很多情况下,如果特征太多你是很难去选取合适的特征的,而且特征的选择也是需要经验。
但是为什么还需要进行降维呢? 到底什么时候应该用PCA这样的工具? 是当变量数量达到一定的数目么?
我就简单举个例子,假设要分类的是数据类型是图片,那么每一个像素就代表一个特征,100*100的图片就有10000个特征了,特征太多就难发现模式的规律,你很难发现到底哪个像素对分类是有效的,并且它们可能是相关的,这个时候就需要降维处理。
可以搜索看一下人脸识别的特征脸eigen face,算是比较简单的人脸识别算法,希望对你有帮助。
我用过信息熵的方法来降维