甲骨文认证体系
Vmware认证体系
AWS亚马逊
阿里云认证体系
红帽认证体系
ZStack云计算认证体系
思科认证体系
华为认证体系
CDA数据分析师认证
达梦认证体系
麒麟
定制化课程
有监督学习3--朴素贝叶斯和SVM
发布日期:2020-03-26 10:34:30阅读次数:

接着上次的笔记来学习有监督学习,首先来看朴素贝叶斯是什么?
什么是贝叶斯?
提到贝叶斯这个名称,学过概率论的一定知道,在概率论与数理统计中有一个定理,就是叫做贝叶斯定理。贝叶斯定理由英国数学家贝叶斯 ( Thomas Bayes 1702-1761 ) 发展,用来描述两个条件概率之间的关系,比如 P(A|B) 和 P(B|A)。

贝叶斯分类方法:
假定X为类标号未知的一个数据样本, H为样本X属于类别C的一个假设分类问题就是计算概率P(H|X)的问题,即给定观察样本X下假设H成立的概率有多大。
P(H)表示假设H的先验概率(prior probability) :由以往的数据分析得到的概率叫做先验概率。
P(X)表示样本数据X的先验概率:在得到信息之后再重新得到的概率叫做后验概率。
P(H|X)表示在条件X下,假设H的后验概率(posterior probability).
P(X|H)表示在给定假设H的前提条件下,样本X的后验概率。
公式关系如下:

朴素贝叶斯分类方法
朴素贝叶斯分类方法(Naïve Bayes)是利用贝叶斯定理来预测一个未知类别的样本属于各个类别的可能性,选择其中可能性最大的一个类别作为该样本的最终类别。

朴素贝叶斯分类的工作过程:



朴素贝叶斯分类算法的优点在于:
容易实现;
对小规模的数据表现好;
对缺失数据不太敏感。
缺点:
算法成立的前提是假设各属性之间互相独立。当数据集满足这种独立性假设时,分类准确度较高。而实际领域中,数据集可能并不完全满足独立性假设。
需要计算先验概率。
特点:
朴素贝叶斯是一种高偏差低方差的算法。而如果训练集很小,高偏差/低方差的分类器(如朴素贝叶斯)比低偏差/高方差的分类器更有优势,因为后者容易过拟合。
但是随着训练集的增大,高偏差的分类器并不能训练处准确的模型,所以低偏差/高方差的分类器会胜出。

什么是SVM:
Support Vector Machine (支持向量机):
支持向量:支持或支撑平面上把两类类别划分开来的超平面的向量点。
机:一个算法
SVM是基于统计学习理论的一种机器学习方法。简单地说,就是将数据单元表示在多维空间中,然后在这个空间中对数据做划分的算法。

SVM是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性之间寻求最佳折衷,以期获得最好的推广能力(或泛化能力)。所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,因此SVM解决问题的时候,和样本的维数是无关的。(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然也是因为因为引入了核函数)。

腾科教育


线性分类:
SVM就是试图把一根棍子放在最佳位置,以达到分类的目的,且让棍的两边有尽可能大的间隙,这个间隙就是球到棍的距离。

线性SVM
在保证决策面方向不变且不会出现错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过该位置就会产生错分现象),如虚线所示。虚线的位置由决策面的方向和距离原决策面最近的几个样本的位置决定。而这两条平行虚线正中间的分界线就是在保持当前决策面方向不变的前提下的最优决策面。两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。
显然每一个可能把数据集正确分开的方向都有一个最优决策面(有些方向无论如何移动决策面的位置也不可能将两类样本完全分开),不同方向的最优决策面的分类间 隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要 寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为“支持向量”。

数学建模
求解这个“决策面”的过程,就是最优化。一个最优化问题通常有两个基本的因素:
目标函数:也就是你希望什么东西的什么指标达到最好。
优化对象:你期望通过改变哪些因素来使你的目标函数达到最优。
在线性SVM算法中,目标函数显然就是那个"分类间隔”,而优化对象则是决策面。所以要对SVM问题进行数学建模,首先要对上述两个对象( "分类间隔”和“决策面”)进行数学描述。我们先描述决策面。
N维空间的超平面方程可以表示为:

约束条件:

如图所示,以二维平面为例。要求解的是W的最大化。图中红颜色的圆点标记为1 ,规定其为正样本;蓝颜色的五星标记为-1 ,我们人为规定其为负样本。
假设决策面正好处于间隔区域的中轴线上,并且相应的支持向量对应的样本点到决策面的距离为d,那么公式进一步写成:

则约束条件为:

目标函数:

拉格朗日函数优化
使用拉格朗日函数优化的目的:它将约束条件放到目标函数中,从而将有约束优化问题转换为无约束优化问题。将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数公式如下:


KKT条件:
若想得到d=p ,需要满足的条件是:
凸函数:我们已在前面进行了凸优化
KKT条件
KKT(Karush-Kuhn-Tucker)条件是最优值条件必须满足以下条件:

使用拉格朗日函数对目标函数进行了处理,生成了一个新的目标函数。通过一些条件可以求出最优值的必要条件,这个条件就是KKT条件。
KKT条件,第一个条件就是要求限制条件必须要跟我们的可行域函数有交点。可以类似于正则化的理解,正则化的本质也是给定限制的区域进行运动。

非线性分类:
假如球放为如下情况,如何分类:

当一个分类问题,数据是线性可分的,也就是用一根棍就可以将两种小球分开的时候,我们只要将棍的位置放在让小球距离棍的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。
但是,现实往往是很残酷的,一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要像大侠一样,将小球拍起,用一张纸代替小棍将小球进行分类。想要让数据飞起,我们需要的东 西就是核函数(kernel),用于切分小球的纸,就是超平面。

桌子一拍,求飞到空中。然后,用一张纸插到两种球的中间。

球叫做data, 把棍子叫做分类器(classifier), 找到最大间隙的窍门(trick)叫做最优化 (optimization), 拍桌子叫做核函数(kernel), 那张纸叫做超平面(hyperplane)。

非线性SVM
对于以上所述的SVM,处理能力还是较弱,仅仅能处理线性可分的数据。如果数据线性不可分的时候,我们就将低维的数据映射向更高的维度,以此使数据重新线性可分。这转化的关键便是核函数。

上图可以看到想找到一个直线分类面来划分是不可能的,除非是一个圆。而当你把数据点映射一下成右图所示的情况后,现在数据点明显看上去是线性可分的,那么在这个空间上的数据点我们再用前面的SVM算法去处理,就可以得到每个数据点的分类情况了,而这个分类情况也是我们在低维空间的情况。也就是说,单纯的SVM是不能处理非线性问题的,说白了只能处理线性问题,但是来了非线性样本怎么办呢?
我们把非线性样本变成线性样本,再去把变化后的线性样本拿去分类,经过这么一圈,就达到了把非线性样本分开的目的,所以只看开头和结尾的话发现,SVM竟然可以分非线性问题,其实呢还是分的线性问题。

什么是核函数:
由于从输入空间到特征空间的这种映射会使得维度发生爆炸似地增长,这给映射过程中的内积的计算带来了很大地困难,而且如果遇到无穷维的情况就根本无法计算。而且如果先将数据从低维映射到高维后,再计算两数据的内积,计算量会非常大,因此核函数就此被引入用来解决SVM分类的非线性问题。
核函数:基本作用是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量的内积。因此只需要在输入空间内就可以进行特征空间的内机。
通过上述描述,我们知道要想构造核函数,需要明确输入空间内数据的分布情况,我们并不知道自己所处理的数据的具体分布,故一般很难构造出完全符合输入空间的核函数。因此常用几种常用的核函数来代替构造核函数。
拿到非线性数据,就找一个映射ϕ(⋅),然后一股脑把原来的数据映射到新空间,再做线性SVM即可。但是在之前对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;但如果原始空间是三维,我们就会得到19维的新空间,这个数目是呈爆炸性增长的,这给映射的计算带来了很大困难,而且如果遇到无穷维的情况,就根本无从计算了,所以就需要核函数出马了。
核函数的解释:也就是说,尽管给的问题是线性不可分的,但是应当它为线性问题来求解,只不过求解的过程中,凡是要求内积的时候就用选定的核函数来算。这样求出来的α再和选定的核函数一组合就是分类器了。
常用核函数:

常用核函数特性:
线性核函数:主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,但是其参数减少速度快,对于线性可分数据,其分类效果很理想且效率更高。因此我们通常首先使用线性核函数来做分类,如果不行再换用其他核函数。
多项式核函数:多项式核函数可以实现将低维的输入空间映射到高维的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度是会大到无法计算(线性核函数可以看作多项式核函数的一种)。
高斯核函数:在常用的核函数中,使用最广泛的就是RBF核,无论低维、高维、小样本、大样本等情况,RBF核都适用,具有较宽的收敛域,是较理想的分类依据函数。
Sigmoid核函数:采用Sigmoid核函数,支持向量机实现得就是一种多层神经网络。

核函数应用广泛的原因:
核函数的引入避免了“维数灾难”,大大减小了计算量。而输入空间的维数n对核函数矩阵无影响,因此,核函数方法可以有效处理高维输入。
无需知道非线性变换函数Φ的形式和参数。
核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各种核函数方法的性能。
核函数方法可以和不同的算法相结合,形成多种不同的基于核函数技术的方法,且这两部分的设计可以单独进行,并可以为不同的应用选择不同的核函数和算法。
腾科教育