浅谈核方法
来源:互联网 发布:上国际学校的利弊知乎 编辑:程序博客网 时间:2024/04/28 14:48
说到核方法(kernel method)或者核技巧(kernel trick),了解SVM的人一定不会陌生。当数据集线性不可分时,就要用到非线性分类器。SVM采取的做法是将数据映射到更高的维度,从而将数据集在高维空间转化成线性可分的,然后再用线性SVM去训练一个线性分类器。以上做法的实现方式就是通过核方法隐式地实现的。
从上面可以看出,核方法是隐式地在高维的特征空间来计算向量的内积。但是本文要讲的是核方法的另外一个作用,也就是它的局部性原理(localization)。对于一个目标点,有时候通过拟合全部的样本点来对其做预测会造成预测的偏差,往往在目标点附近的样本点更能反映目标点的真实情况,这里,我们很容易就能想到依靠局部信息(近邻)来进行分类的K-NN。
K-NN及其改进
我们首先来看看K-NN。当K-NN用于分类时,我们需要明确三点,第一,K的取值;第二,距离度量方式;第三,分类决策规则。关于K的选取,对应于模型的选择,我们可以通过交叉验证的方式来获得最优的K值;距离度量一般采取欧氏距离;分类决策规则一般采取的是多数表决。我们可以看出,K-NN算法是一个局部性的算法,它只依靠离目标数据点最近的K个数据点的信息来对目标数据点做出分类预测。当K值过大,模型会欠拟合,因为算法始终会选择训练数据集中样本最多的类别;如果K值过小,那么模型过拟合,因为算法只看到了局部的信息,试想如果数据有噪声,那么模型在这局部就会过拟合。因此,合理的K值选择是模型成功的关键步骤之一。
以上是K-NN算法的基本操作方式,但是这样的方式在实践中可能会碰到一些问题,下面讲一个我在工程当中遇到的问题。假设我们要用K-NN做一个二分类器,K的取值为5。我们可能会遇到下图所示的情况:
上图中,三角形表示待分类的目标数据点,而矩形和椭圆形分别代表一个类别,由上可以看出三角形的5个最近邻包含两个矩形和三个椭圆形,如果按照上面讲的多数表决方法来对三角形做出分类预测,那么三角形应该属于椭圆形表示的类别,而我们从图中可以看出,三角形其实离矩形更近,它更应该属于矩形代表的类别。
上面的问题在于K-NN没有进一步去考虑数据点的局部信息。K-NN算法赋予了5个近邻同样的权重,使得它们在判断三角形的类别时做出了同样的贡献,而实际上它们的贡献应该是不一样的。因此,我们为这5个近邻赋予不同的权重,离三角形远的点,算法赋予较低的权重,反之则赋予较高的权重,权重与距离成反比。为了达到上面的效果,我们引进一个计算权重的公式。
(1)
式中,x0表示目标点。从上式可以看出,当x和x0的距离越远时,上式的值趋近于0,也就是对应x的权值越低;当x和x0的距离越近时,上式的值趋近于1,也就是对应的x的权值越高。
对于上面的例子,我们可以计算出5个近邻点相对于三角形的权值,然后将椭圆形和矩形表示的类别分别加权求和,最后取和较大的类别作为三角形的最终类别。上面的改进使得K-NN的准确率得到了提升。
上面对于K-NN算法的一个简单改进用到了更加详细的局部信息,也就是近邻点和目标点的距离。如果我们将式(1)作如下改进,就能得到一个核函数:
(2)
式(2)中的t取代了之前K-NN里的超参数K。t可以被看作是邻域(neighborhood)的大小,在t范围之外的点x与目标点x0的距离可以认为趋近于0。式(2)的形式很像高斯分布的表达式,但是这里它不表示高斯分布的任何性质,由于该核函数形式上很像高斯分布,因此我们称之为高斯核函数。
通过对核函数的引入,我们将K-NN转换成了核方法的形式。当t的值被确定后,核函数的表达式随之确定,对于待分类的目标点,由高斯核函数计算出它与每个训练样本点的距离,进而求出各个类的加权和,然后选出加权和最大的类作为目标点的类别。
通过上面对于K-NN模型的改进,我们看到了核方法具有的局部性原理,用目标点附近的训练样本点来拟合出分类模型。
局部加权线性回归(locallyweighted linear regression)
接下来简单介绍一下核函数局部性在线性回归中的应用。
上图摘自Andrew NG的课件。
现在假设给定的样本点如上图所示,我们的目标是要拟合出一个模型,使得该模型对于未知的点有很好的预测。
目前的解法是用一次函数拟合,从图中可以看出一次函数的拟合并没有完全捕获到样本点的特征,如果用该曲线来对新的点做预测,必然会有较大的偏差。注意到图中一共有6个样本点,如果我们用一个5次多项式函数,则一定可以完全拟合这些样本点,但是这样会导致拟合出的曲线方差较大。拟合出的曲线如下图:
上图摘自Andrew NG的课件。
为了解决方差较大的问题,我们可以引进正则化技术来降低模型的复杂度。这样得到的曲线就相对比较平滑,类似于下图。
上图摘自Andrew NG的课件。
从上面的分析我们可以得到一种做回归问题的思路:我们可以选取任意高次的函数或任意多的特征来拟合当前的样本点,然后用正则化技术来降低模型的复杂度,从而使得模型有较好的泛化能力。
但是这样做有一个问题,我们必须知道什么样的高次函数或者哪些特征组合才是最合适的,这都有待于我们去尝试,有时候尝试得比较准确,那么回归问题就能很好地解决,反之则可能正则化后的效果也不是很理想。因此,鉴于上述方法对特征的依赖较高,我们考虑能不能利用目标点的局部信息来对其做预测,以减少对特征的依赖。具体来说就是每当我们要预测一个目标点时,我们只用目标点附近的样本点来拟合出分类模型。对于离目标点较近的样本点,我们予以较高的权重,反之则予以较低的权重。为此,我们引入核函数来计算权重,由此可得局部加权线性回归:
(3)
其中,我们假设核函数为高斯核函数。
(4)
由式(3)可以看出,当K的值越大,那么后面平方项的值就应该越小;如果K的值越小,那么后面的值是大是小都无关紧要。这就是说,如果该样本点离目标点越近,被赋予的权值K就越大,那么越应该对该样本点进行拟合;如果该样本点离目标点比较远,被赋予的权值K就越小,证明该样本点对于预测目标点所做的贡献不大,因此可以不用在该样本点处进行拟合。
式(4)中的参数t决定了样本点的权重随它与目标点距离的变化程度。根据高斯分布的图像,我们可以把t想象成一个窗口的大小,在窗口之外的训练样本,其权值基本上可以忽略,越靠近x0的样本点,其权值越大。对于参数t的选取,可以采用交叉验证的方式。
通过局部加权线性回归,我们可以很好地利用局部信息来预测目标点。
局部加权线性回归是非参数的一种回归方法,并且是基于内存的,也就是说这类方法本身没有训练模型的过程,它的模型就是整个训练数据集,每当要预测一个样本时,都需要扫描整个训练样本来做出预测。因此,这对于时间复杂度和存储的要求都很高,对于一些实时系统,这种方法的效率将是最大的瓶颈。此外,基于核方法的这一套理论需要训练数据集足够的大,否则通过该方式得出的模型将会过拟合。
- 浅谈核方法
- 浅谈string.split()方法
- 创业赢利方法浅谈
- 浅谈反射 method方法
- 图像匹配方法浅谈
- 浅谈webshell检测方法
- 浅谈 Stream.Read 方法
- 浅谈模板方法模式
- 浅谈搜索引擎优化方法
- 浅谈方法重写 super
- 浅谈 JSON.stringify 方法
- 浅谈 JSON.stringify 方法
- 浅谈 JSON.stringify 方法
- 浅谈React应用方法
- 浅谈React.createElement()方法
- 冒泡排序方法浅谈
- 浅谈 JSON.stringify 方法
- iOS 内省方法浅谈
- android.database.sqlite.databaseobjectnotclosedexception:应用程序没有关闭的光标或数据库对象
- Win8系统设置WiFi热点的方法
- 如何使用Ping命令检查不能联网的原因
- IOS 多线程
- 地图的使用
- 浅谈核方法
- 什么是3G无线上网
- p2v
- VS2010 对象或库文件“*.lib”是使用比创建其他对象所用编译器旧的编译器创建的
- 孕妇可以吃哪些休闲食品
- Github 初尝试
- Matlab Tips
- MySQL多主机复制 (MMM)
- 深入解析ArrayList