赞
踩
让我们来简单了解一下主成分分析(PCA)吧。
之前我们提到过,如果我们想要评价一个城市的等级,可以从人均GDP、人均消费水平、人均收入水平、用电量、用水量、绿化面积、就学人数、景点数量、空气质量、水源质量等多个方面对城市进行评价,每一个评价指标就构成了一类特征。
所以有些时候,我们会遇到这么一类问题,即我们感兴趣的指标实在是太多了,而且部分指标之间存在着较为显著的相关性。例如评价城市,只要愿意,可以找到许许多多的指标,绝不仅是上面提到的那几种。而且部分指标之间,如人均消费和人均收入,乃至和GDP,都会有一定的相关性,也就是存在着信息的重复。
当特征较多时,无论是分析问题,还是建立模型,都会相对比较复杂。一个泛化能力比较好的模型,往往不会有太高的复杂度。可想而知,当你不断引入新的特征,模型的复杂度就会慢慢提高,过拟合的现象也会越来越明显。例如对于线性回归来说,我们的评价指标是,当我们不断引入新的变量,其几乎是必然有所提升的。但我们用这个模型去预测新的样本,结果很可能并不如人意。
因此,能不能找到一种方法,既保留样本的大部分信息,又减小特征的数量,压缩数据量以方便进行处理呢?有的,这就是主成分分析(PCA)。
主成分分析通过采用几个综合因子来代表原来众多的特征,使这些综合因子尽可能地反映原始数据的信息,并且彼此之间相关性较弱,从而达到压缩数据、简化问题的目的。举个例子,当我们评价城市时,我们可以把之前提到的所有指标归结为几个大的综合性因子。GDP、消费水平、收入水平等全部视为经济因素,空气质量、水源质量、绿化面积可以视为环境因素,用电用水人口等可以视为发展因子,教育教学,人文景点等可以视为文化因素。这样,我们就可以把之前的众多指标归结为几个具有代表性,又包含了大部分原始信息的综合性指标。
上面关于城市评价指标的“降维”,是我们根据自己的了解去构造的。而PCA可以使用数学的方法,帮助我们得到一系列由原始特征线性组合而成,彼此之间相关性较弱且可以反映大部分原始信息的综合特征。
如果有个样本,每个样本有个指标(特征),经过主成分分析,将他们组合成个综合指标,即
且满足
到这里会存在一定的疑问,根据上述公式,综合而成的指标好像依然有个,并没有达到作为降维的目的。
在实际应用中,我们挑选的第一个主成分是的一切满足的线性组合中方差最大的;第二个主成分是与不相关的线性组合中方差最大者;以此类推,第个主成分是与都不相关的线性组合中方差最大者。
由上可知,各个综合变量在总方差中所占的比重是依次递减的,我们在选择时一般只会选择前几个方差较大的主成分,从而达到降维的目的。
那为什么要选择方差较大的呢?从某种角度来说,方差不仅代表着数据的波动程度,也在一定程度上表征着数据的信息量,如果方差为0,则是一个常数,其信息很少;如果方差较大,说明数据较为分散,也就代表着更多的信息。而我们正是希望,我们选择的几个主成分能更好地保留原始数据的信息。
以上只是一种通俗的理解,更加严谨的解释、以及到底选择几个主成分、如何实践等问题,这里暂且不提。感兴趣的朋友请自行查阅,或者等我有机会来更新hhh
下面进入因子分析部分。
因子分析同样是一种数据简化、数据降维的技术。只不过主成分分析是通过外在特征的线性组合,得到主成分。而因子分析通过研究众多变量之间的内部依赖关系,探求观测数据的基本结构,并用少数几个假想变量来表示其基本的数据结构。这几个假想变量能够反映原来众多变量的主要信息。原始变量是可以观测的显性变量,而假象变量是不可以直接观测到的潜在变量,称为因子。
例如运动会中的各个项目的成绩,包括100米、跳远、铅球、跳高、400米、110米跨栏、铁饼、撑杆跳、标枪、1500米等。毫无疑问,一个人同时参与这些项目的表现是具有相关性的,比如铅球和铁饼的成绩,跳高和跳远的成绩等等。这种相关性往往会反映在运动员的得分上,也是我们可以直接观察到的变量。
而通过因子分析,我们可以把其表现从四个角度进行解释,分别是短跑速度、爆发性臂力、爆发性腿力、耐力。这四个特征是无法直接观测的,但我们知道它切实存在,并且影响着运动员各个项目的得分。因子分析,就是希望找到这种潜在的因子,更加深入地解释事物发生的内在原因。
因子分析的一般模型为
其中为原始的个指标,为的均值,称之为公共因子,即反映了指标之间的共性。分别代表的特殊因子,反映了每个指标的个性。无论是公共因子还是特殊因子,都是无法观测到的。而则是第个特征在因子上的载荷,反映了某个因子对于特征外在表现的影响程度。
以上就是因子分析的基本概念啦。如果想要了解具体的实现过程以及实际应用,就先自行查阅吧~
下面进入支持向量机(SVM)的部分。
我们之前提到过,SVM是一种经典又强大的分类模型。不过在了解SVM之前,有必要先了解一下感知机模型。
感知机是一种用于二分类的线性分类模型,其输入为样本的特征向量,输出为实例的类别,一般取。感知机模型对应于输入空间中将样本分为正负两类的线性超平面。如下图所示,对于二维平面上的正类点和负类点,我们可以找到一条直线将其有效分开。这条直线记为,训练样本中,所有正类点满足,负类点满足。于是,当一个新的样本的特征向量确定了,我们将其输入到中去,如果结果大于0,就预测它为正类;如果结果小于0,就预测它为负类。
一般而言,感知机模型可以用一个函数关系来表达,即。
对于上述情况,可以想象,我们能求解出的感知机模型是无限数量的。
因为在这么一大片区域中,存在着无数条直线可以将正类和负类分开。那么问题来了,这么多感知机,我们选择哪一个作为我们的最终模型呢?
感知机模型所代表的是一个超平面,正类点和负类点分布在平面的两侧。可以想象,如果我们训练出的感知机模型距离某个样本点特别近,那么当出现一个新的样本点,恰巧在该样本点附近,感知机模型犯错的概率就会比较大。而如果训练得到的超平面距离所有的样本点都比较远,那么当训练样本周围再出现新的样本,其被分类错误的概率就大大降低了。
如下图所示,蓝色感知机代表的直线距离某两个样本十分接近,所以当这两个样本周围出现很多同类样本的时候,蓝色感知机很可能会将他们分错类。即正类的点跑到了直线的下面而负类的点跑到了线的上面。而对于红色感知机所代表的直线,由于它距离所有样本点都比较远,所以某些样本点周围出现的一圈新样本,都能够被正确的分类。
而根据统计学规律,当我们的训练样本数目足够多时,其分布往往呈现出正态分布的规律。因此新的样本有很大概率会出现在训练样本的周围,如果感知机代表的超平面距离所有的样本都比较远,那么它对于“周围”这一距离描述的容忍度就会比较大,即使出现了某些较“远”的样本,其分类的错误率也会比较低,模型的鲁棒性会更好。
所以,我们希望在所有的感知机模型中,找到模型容忍度最大的那一个。
对于每一个确定的超平面,都存在一个与他距离最近的样本点,可以记为,所以,我们的目标就变成了在所有的中,找到最大的一个,即。这样的一个感知机模型,就代表着容忍度最大的超平面,也是最简单的一种支持向量机,即线性支持向量机。
接下来推导一下线性可分支持向量机的策略函数。首先需要对间隔的大小作出度量。
上文提到,线性的SVM就是使得最大的那一个感知机模型。所以我们有必要定义一下样本点与超平面之间的距离。
函数间隔:对于给定的超平面和训练数据集,定义超平面关于样本点的函数间隔为
定义超平面关于训练数据集的函数间隔为超平面关于中所有样本的函数间隔的最小值,即
这里就是我们上文提到的。
为什么可以表达间隔的概念呢?
如果在超平面上,那么必然有。所以只要不在平面上,就不等于0,也就是存在间隔。而当为正类时,,此时是正的;而当为负类时,,此时依然是正的。如果存在小于0,则说明该超平面无法做到对所有训练样本都正确分类。此时,如果训练样本线性可分,那么继续训练模型使得它对于所有的样本都有,如果训练样本线性不可分,那么就需要引入松弛量或者核函数到达完全分类的目的。
因此,对于正确分类的训练集,样本点越靠近超平面,其函数间隔就越小,最小是0,越远离超平面,其函数间隔就越大。
函数间隔的问题在于,如果我们把变为,超平面和在空间中是一样的,而函数间隔却由变为,扩大了一倍。因此,我们有必要对函数间隔进行规范化处理,使其可以更加准确的度量距离,这就引入了几何间隔的概念。
几何间隔:对于给定的超平面和训练数据集,定义超平面关于样本点的几何间隔为
定义超平面关于训练数据集的几何间隔为超平面关于中所有样本的几何间隔的最小值,即
当样本正确分类时,几何间隔就是数学中标准的点到平面距离公式。其中是向量的二范数。
因此函数间隔与几何间隔的关系为
当成比例改变时,函数间隔也成比例改变,而几何间隔不变。
下面我们来正式推导线性可分SVM的模型。
在所有的中,我们希望得到间隔最大的用于分离正负类的超平面,这里的间隔使用几何间隔衡量。
所以问题可以表示成以下的约束最优化问题:
考虑到几何间隔和函数间隔的关系,问题可以转化为:
对于上述问题,的取值并不影响最优化问题的解。事实上,倘若我们把同时变为原来的倍,函数间隔自然变为,不等式约束变为
实质上没有任何变化。
目标函数变为了
也没有实质性的变化。
因此,我们不妨设,则问题变为了
而与是等价的,所以我们就得到了经典的SVM模型:
我们来看一个已经训练好的支持向量机模型。
如图所示,我们得到了使得间隔最大的线性超平面,左右两边各有一条最大间隔线。而在这条线上,刚好有三个样本,也就是距离超平面最近的三个样本。如果我们去掉其他所有样本,仅保留这三个样本作为我们的训练集,我们会发现得到的超平面与原训练集得到的超平面是完全一致的。这三个样本是训练集中真正有意义的样本,其他样本在训练中并没有发挥实际的作用。由于样本是由特征向量表示的,因此我们称其为“支持向量”。
对于线性支持向量机而言,支持向量就是距离超平面最近的样本点。而更加严谨的说法则是:从训练集中选择一组特征子集,使得对特征子集的线性划分等价于对整个数据集的线性划分。这组特征子集称之为支持向量。
也就是对于训练真正起到支撑作用的特征向量。
关于支持向量机还有很多很多内容,毕竟是占领机器学习领域好多年的经典模型。比如如何求解这个模型,如何处理线性不可分情况,如何处理复杂的分类问题,核函数核方法等等。事实上,同神经网络一样,支持向量机也可以以任意精度逼近任何一个,但是其计算开销要比神经网络大很多。
不过这些就暂且都不提了,大家有兴趣可以自己了解。如果有一天我可以一定程度上掌握这一工具了,再回来聊这个事情。
以上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。