机器学习基础---支持向量机SVM
Posted ssyfj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习基础---支持向量机SVM相关的知识,希望对你有一定的参考价值。
到目前为止,你已经见过一系列不同的学习算法。在监督学习中,许多监督学习算法的性能都非常类似。因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所使用的数据量。这就体现了你应用这些算法时的技巧。比如:你为学习算法所设计的特征量的选择,以及如何选择正则化参数,诸如此类的事。还有一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine)。
与逻辑回归和神经网络相比,支持向量机,或者简称SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。因此,接下来,会探讨这一算法。在稍后的课程中,也会对不同的监督学习算法进行简要的总结。
当然,仅仅是作简要描述。但对于支持向量机,鉴于该算法的强大和受欢迎度,会花许多时间来学习它。它也是我们所介绍的最后一个监督学习算法。
一:优化目标(代价函数)
(一)逻辑回归
为了描述支持向量机,事实上,我将会从逻辑回归开始展示我们如何一点一点修改来得到本质上的支持向量机。
逻辑回归代价函数如下:
如果你进一步观察逻辑回归的代价函数,你会发现每个样本(x,y)都会为总代价函数,增加这里的一项。
因此,对于总代价函数通常会有对所有的训练样本求和,并且这里还有一个1/m项。
但是,在逻辑回归中,这里的这一项就是表示一个训练样本所对应的表达式。
现在,如果我将完整定义的假设函数代入这里。那么,我们就会得到每一个训练样本都影响这一项。
现在,先忽略1/m这一项,但是这一项是影响整个总代价函数中的这一项的。
现在,一起来考虑两种情况:
y=1:
y=0:
(二)引入支持向量机
1.y=1
我们会从这个代价函数开始,也就是
一点一点修改,让我取这里的z=1点,我先画出将要用的代价函数。
新的代价函数将会水平的从z=1这里到右边之后都是平的,然后我再画一条同逻辑回归非常相似的直线,但是,在这里是一条直线,也就是我用紫红色画的直线。
那么,到了这里已经非常接近逻辑回归中使用的代价函数了。只是这里是由两条线段组成,即位于右边的水平部分和位于左边的直线部分,先别过多的考虑左边直线部分的斜率,这并不是很重要。
但是,这里我们将使用的新的代价函数,是在y=1的前提下的。
你也许能想到,这应该能做同逻辑回归中类似的事情。但事实上,这会使得支持向量机,拥有计算上的优势,并使得之后的优化问题变得简单。例如,更容易计算股票交易的问题等等。
2.y=0
目前,我们只是讨论了y=1的情况,另外一种情况是当y=0时,此时如果你仔细观察代价函数只留下了第二项,因为第一项被消除了。如果当y=0时,那么这一项也就是0了。所以上述表达式只留下了第二项。因此,这个样本的代价或是代价函数的贡献。将会由这一项表示。并且,如果你将这一项作为z的函数,那么,这里就会得到横轴。现在,你完成了支持向量机中的部分内容,同样地,我们要替代这一条蓝色的线,用相似的方法。
3.总结y=1和y=0
现在让我给这两个方程(紫色)命名,左边的函数,我称之为cost_1(z),同时,右边函数我称它为cost_0(z)。这里的下标是指在代价函数中,对应的y=1和y=0的情况,拥有了这些定义后,现在,我们就开始构建支持向量机。
(三)支持向量机代价函数
这是我们在逻辑回归中使用代价函数J(θ)。也许这个方程看起来不是非常熟悉。这是因为之前有个负号在方程外面,但是,这里我所做的是,将负号移到了表达式的里面,这样做使得方程看起来有些不同。
对于支持向量机而言,实质上我们要将这替换为cost_1(z),也就是cost_1(θTX),同样地,我也将这一项替换为cost_0(z),也就是代价cost_0(θTX)。因此,对于支持向量机,我们得到了这里的最小化问题,即:
现在,按照支持向量机的惯例,事实上,我们的书写会稍微有些不同,代价函数的参数表示也会稍微有些不同:
1.首先我们去掉前面的常数项1/m,因为他并不影响我们的参数求解最优解。
2.令C=1/入,获得支持向量机的一般形式:(总体优化目标)
(四)支持向量机假设函数
最后有别于逻辑回归输出的概率。在这里,我们的代价函数,当最小化代价函数,获得参数θ时,支持向量机所做的是它来直接预测y的值等于1,还是等于0。因此,这个假设函数会预测1。当θTx大于或者等于0时,或者等于0时,所以学习参数θ就是支持向量机假设函数的形式。那么,这就是支持向量机数学上的定义。
注意:逻辑函数假设函数是这个:
他会在后面根据我们从代价函数中求得的θ参数值,获取一个概率值。
这就是和支持向量机的不同之处。
二:支持向量机(大间距分类器)---假设函数理解
(一)如何使得代价函数变得更小:
1.正样本y=1:则当z>=1时,代价函数cost_1(z)=0---θTX>=1
2.负样本y=0,则当z<=-1时,代价函数cost_0(z)=0---θTX<=-1
(二)对比逻辑回归代价函数:
逻辑函数中我们只需要θTX>=0或者θTX<0就可以区分正负样本。
而在支持向量机中,我们需要通过TX>=1和θTX<-1才能区分正负样本,那么这中间就嵌入了一个额外的安全因子(安全的间距因子)
(三)支持向量机中的决策边界
让我们看一下,在支持向量机中,这个因子会导致什么结果。具体而言,我接下来会考虑一个特例。我们将这个常数C设置成一个非常大的值。比如我们假设C的值为100000或者其它非常大的数,然后来观察支持向量机会给出什么结果?
如果C非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解。因此,让我们尝试在代价项的第一项为0的情形下理解该优化问题。比如我们可以把C设置成了非常大的常数,这将给我们一些关于支持向量机模型的直观感受。
1.对于一个训练样本标签为y=1,你想令第一项为0,你需要做的是找到一个θ,使得θTx>=1
2.对于一个训练样本标签为y=0,为了使cost_0(z)函数的值为0,我们需要θTx<=-1。
因此,现在考虑我们的优化问题。选择参数,使得第一项等于0,就会导致下面的优化问题:
因为我们将选择参数使第一项为0,因此这个函数的第一项为0,因此是C乘以0加上二分之一乘以第二项。这里第一项是乘以0,因此可以将其删去,因为我知道它是0。
根据上面信息,我们可以得到下面的优化函数:
这样当你求解这个优化问题的时候,当你最小化这个关于变量θ的函数的时候,你会得到一个非常有趣的决策边界。
具体而言,如果你考察这样一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的。我的意思是,存在一条直线把正负样本分开。当然有多条不同的直线,可以把正样本和负样本完全分开。
这些决策边界看起来都不是特别好的选择,支持向量机将会选择这个黑色的决策边界,相较于之前我用粉色或者绿色画的决策界。这条黑色的看起来好得多,黑线看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。数学上来讲,这是什么意思呢?这条黑线有更大的距离,这个距离叫做间距(margin)。
当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器,而这其实是求解上面优化问题的结果。
总之支持向量机模型的做法,就是努力将正样本和负样本用最大的间距分开。
也可以这样理解:样本点到超平面的最小距离l最大 (距离越大越容易分类)而这个能得到最小距离l的样本点就叫做支持向量。
(四)正则化常数C
我们将这个大间距分类器中的正则化因子常数C设置的非常大,将其设置为了100000,因此对这样的一个数据集,也许我们将选择这样的决策界,从而最大间距地分离开正样本和负样本。
那么在让代价函数最小化的过程中,我们希望找出在y=1和y=0两种情况下都使得代价函数中左边的这一项尽量为零的参数。
如果我们找到了这样的参数,则我们的最小化问题便转变成:
实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,你的学习算法会受异常点(outlier) 的影响。
比如我们加入一个额外的正样本:
在这里,如果你加了这个样本,为了将样本用最大间距分开,也许我最终会得到一条类似粉色这样的决策边界。
仅仅基于一个异常值,仅仅基于一个样本,就将我的决策界从这条黑线变到这条粉线,这实在是不明智的。
而如果正则化参数C,设置的非常大,那么SVM会将决策界,从黑线变到了粉线,但是如果C设置的小一点,如果你将C设置的不要太大,则你最终会得到这条黑线。
当然数据如果不是线性可分的,如果你在这里有一些正样本或者你在这里有一些负样本,则支持向量机也会将它们恰当分开。
因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数C非常大的情形,同时,要提醒你C的作用类似于1/入,入是我们之前使用过的正则化参数。这只是C非常大的情形,或者等价地入非常小的情形。你最终会得到类似粉线这样的决策界,但是实际上应用支持向量机的时候,当C不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。
回顾C=1/入,因此:
C较大时,相当于入较小(泛化能力不好),可能会导致过拟合,高方差。
C较小时,相当于入较大(平滑,泛化能力好),可能会导致欠拟合,高偏差。
三:大间隔分类器的数学原理
忽略掉截距,令θ_0=0,这样更容易画示意图。我将特征数n置为2,因此我们仅有两个特征x_1,x_2,现在我们来看一下目标函数,支持向量机的优化目标函数。
我们使用p^(i).||θ||代替θTX^(i),同时继续使得θ_0=0,来看SVM会选择什么样的决策边界。
1.反例讲解
我们假设支持向量机会选择这个绿色决策边界。这不是一个非常好的选择,因为它的间距很小(所以后面我们求得的p^(i)就是到这个决策边界的举例,会比较小)。这个决策界离训练样本的距离很近。我们来看一下为什么支持向量机不会选择它。
对于这样选择的参数θ,可以看到参数θ向量事实上是和决策界是90度正交的,(因为决策边界这条线就是(theta‘)*X=0时候的,內积等于0所以垂直)因此这个绿色的决策界对应着一个参数向量θ这个方向,顺便提一句θ_0的简化仅仅意味着决策界必须通过原点(0,0)--当然我们可以设置θ_0不为0,但是讲解不方便。现在让我们看一下这对于优化目标函数意味着什么。
因为从上面可以知道:p^(i)是x^(i)在参数θ向量上的投影
所以,对于我们的每一个样本x^(i),约束条件p^(i)||θ||在坐标轴表示如下:
我们会发现这些p^(i)将会是非常小的数,因此当我们考察优化目标函数的时候:
对于正样本(×)而言,我们需要p^(i)||θ||>=1,但是如果p^(1)在这里非常小,那就意味着我们需要θ的范数非常大.因为如果 很小,而我们希望,令其实现的唯一的办法就是这两个数较大。如果p^(1)小,我们就希望θ的范数大。
对于负样本(?)而言,我们需要p^(2)||θ||<=-1。我们已经在这个样本中看到p^(2)会是一个非常小的数,因此唯一的办法就是θ的范数变大。但是我们的目标函数是希望找到一个参数θ,它的范数是小的。
因此,这看起来不像是一个好的参数向量的选择。
2.正例讲解
注意到现在p^(1)和p^(2)这些投影长度是变大许多的。
如果我们仍然要满足这些约束,p^(i)||θ||>1,则因为p^(1)和p^(2)变大了,所以θ的范数就可以变小了。
因此这意味着通过选择这里的决策界,而不是上面的那个,支持向量机可以使参数的范数变小很多。
因此,如果我们想令的范数变小,从而令范数的平方变小,就能让支持向量机选择这里的决策界。这就是支持向量机如何能有效地产生大间距分类的原因。
总之:
如果我们希望支持向量机最终可以找到一个较小的θ范数(这正是支持向量机中最小化目标函数的目的),
我们就应该让正样本和负样本投影到θ的值足够大。
要做到这一点的唯一方式就是选择一个合适的决策边界(比如上面正解中的绿线)。
这是大间距决策界来区分开正样本和负样本这个间距的值。
这个间距的值就是p^(1),p^(2),p^(3)等等的值。
通过让间距变大,即通过这些等等的值,支持向量机最终可以找到一个较小的范数。
以上就是为什么支持向量机最终会找到大间距分类器的原因。
因为它试图极大化这些p^(i)的范数,它们是训练样本到决策边界的距离。
补充:
即便Θ_(0)不等于0,支持向量机要做的事情都是优化这个目标函数对应着C值非常大的情况,但是可以说明的是,即便θ_(0)不等于0,支持向量机仍然会找到正样本和负样本之间的大间距分隔。
四:核函数(1)---改造支持向量机算法来构造复杂的非线性分类器
(一)多项式模型引出核函数
回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类问题:
为了获得上图所示的判定边界,我们的模型可能是:
为了和后面知识结合,我们用一系列的新的特征变量f来替换模型中的每一项。
得到新的假设函数:
然而,除了对原有的特征进行组合以外,有没有更好的方法来构造f1、f2、f3、...、fn?
我们可以利用核函数来计算出新的特征。
(二)案例讲解---构造新特征f_1,f_2,f_3(实际中可以定义更多特征)
给定一个训练实例x,我们利用x的各个特征与我们预先选定的地标(landmarks)l^(1),l^(2),l^(3)的近似程度来选取新的特征f_1,f_2,f_3。(这里我们只是定义了这3个新特征)
例如:将第一个特征f_1定义为一种相似度的度量,即度量训练样本X与第一个标记的相似度
这个我们用于相似度度量的这个特殊公式是上面这个:
其他的相似函数:
相似度函数就是核函数---上面的是高斯核函数
概括来说,这些不同的相似度函数就叫做核函数。我们可以有不同的相似度度量的函数。
我们更合规的写法是:
(三)核函数做了什么?
为什么这些相似度函数/表达式是有意义的?
1.先来看第一个标记l^(1)
假设X与其中一个标记点非常接近:(一个训练实例x与地标l^(1)之间的距离近似于0)
那么x与标记点之间的欧氏距离就会接近于0
那么f_1就是个简单的特征:
如果X离标记点很远:
所以:
这些特征就是衡量x到标记l的相似度。
如果x非常接近于标记,那么特征f非常接近于1。
如果x和标记l非常远,那么特征f会接近于0。
对于上面我们定义的3个标记l_1,l_2,l_3。每一个标记都会定义一个新的特征,即f_1,f_2,f_3。
也就是说,给定一个训练样本x,我们可以计算3个新的特征f_1,f_2,f_3。这基于之前的3个标记
(四)图像理解核函数---x和l、σ
图中水平面的坐标为x_1,x_2,而垂直坐标轴代表f。可以看出,只有当x与l^(1)重合时f才具有最大值。随着x的改变f值改变的速率受到σ^2的控制。
从图中我们可以看到,如果我们x远离l^(1)点越远,f_1的值就越接近0.这就是特征值f_1,他衡量了x到第一个标记有多近。这个值在0到1之间。
下面图像显示了σ对f值改变的速率影响:
可以看出,随着σ的增大,下降速率明显减小。
(五)获得什么样的预测函数
给定一个训练样本x,我们准备计算出3个特征变量f_1,f_2,f_3
如果满足上面图中,预测函数>=0,则预测函数的预测值将等于1。
假设我们获得θ参数值如下:
我们选取的x点如下:
因为x点与l_1接近,所以f_1为1.其他l_2,l_3相差较远,所以f_2,f_3=0
将参数带入预测函数中:
因为预测函数的值>=0,所以我们预测的y值是1。
同样,当我们选取的一点(蓝色)如下:远离所有标记
此时,所有的f_1,f_2,f_3都是0,最终预测函数值为-0.5,所以预测的y值是0.
如果对大量的点,进行这样的相应处理。应该可以确定,如果你有一个训练样本,它非常接近l^(2)这个标记点。那么通过这个点预测的y值就是1
实际上,最后的结果是:
根据我们的假设函数可以知道,当我们训练样本x接近于l^(1),l^(2)时,我们的预测值是1。对于远离这个两个标记点的点,预测结果是等于0的。
我们最终会得到这个预测函数的判别边界:
在这个红色的决策边界里面,预测的y值等于1。在其外面预测的y值等于0
这就是我们如何定义标记点和核函数来训练出非常复杂的非线性决策边界的方法。
核函数---用于在支持向量机中定义新的特征变量
五:核函数(2)---标记点选取、其他核函数
如何得到这些标记点?如何选择?其他的相似度方程是什么样的?
SVM如何通过核函数来高效的学习复杂非线性函数?
(一)如何选择标记点?
我们如何选取这些标记点?在实际应用中,我们也会需要更多的标记点,如何进行合理的选取?
假设我们有一个训练集,包含一些正样本和负样本:
如何选取标记点?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有m个实例,则我们选取m个地标,并且令:l^(1)=x^(1),l^(2)=x^(2),...,l^(m)=x^(m)。
这样做的好处在于:现在我们得到的新特征是在描述每一个样本距离样本集中其他样本的距离(是建立在原有特征与训练集中所有其他特征之间距离的基础之上的),即:
所以:这个向量就是我们用于描述训练样本的特征向量。
(二)当给定核函数和相似度函数后,我们如何使用简单的支持向量机
下面我们将核函数运用到支持向量机中,修改我们的支持向量机假设为:
给定x,计算新特征f,当θTf>=0时,预测y=1,否则反之。
参数向量是m+1维向量,这里m是标记点的个数(也是训练集的大小)
以上就是当已知参数θ时,怎样做出预测的过程。但是怎么得到参数θ?
当我们解决下面这个最小化问题时,就已经最小化了参数θ:
在C倍的该代价函数中,我们并没有用原始特征X^(i),而是使用新的特征f^(i)来代替:
θ参数的变化:
在具体实施过程中(大多数支持向量机运算中),我们还需要对最后的正则化项进行些微调整,
在计算时,我们用θTMθ代替θTθ,其中M是根据我们选择的核函数来确定的一个矩阵。这样做的原因是为了简化计算。
我们用一种略有变化的距离度量来取代θ的模的平方。意味着我们最小化了一种类似的度量,这是参数向量θ的缩放版本,并且取决于核函数。这使得支持向量机可以更有效率的运行。并且这种修改可以使它应用于更大的训练集。
例如:当你的训练集有10000个样本时,按照我们之前的说明,我们最终会有10000个对应的标记点。其中θ也会是10000维的向量。当m变得非常非常大的时候,那么求解这么多参数(50000或者100000),对于支持向量机的优化程序而言,这时求解这么多参数的最小化问题的代价会非常高。
理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用M来简化计算的方法不适用与逻辑回归,因此计算将非常耗费时间。
在此,我们不介绍最小化支持向量机的代价函数的方法,你可以使用现有的软件包(如liblinear,libsvm等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。
另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采用这种不带核函数的支持向量机。
(三)支持向量机的两个参数C和σ的影响:
C较大时,相当于入较小,---不进行正则化,可能会导致过拟合,高方差;
C较小时,相当于入较大,可能会导致欠拟合,高偏差;
σ较大时---变化较为平滑,可能会导致低方差,高偏差;
σ较小时,可能会导致低偏差,高方差。
六:SVM的使用
目前为止,我们已经讨论了SVM比较抽象的层面,在这里将要讨论到为了运行或者运用SVM。
不建议自己写软件来求解参数,我们只需要知道去调用库函数来实现这些功能。
同样的,用以解决SVM最优化问题的软件很复杂,且已经有研究者做了很多年数值优化了。
因此只需要调用好的软件库和好的软件包来实现这些功能。所以,强烈建议使用高度优化好的软件库中的一个,而不是尝试自己去实现。
有许多好的软件库,用得最多的两个是liblinear和libsvm,但是真的有很多软件库可以用来做这件事儿。你可以找到许多你可能会用来编写学习算法的软件库。
(一)参数选择、核函数选择
尽管你不去写你自己的SVM的优化软件,但是你也需要做几件事:
1、是提出参数C的选择。---前面有提及C和σ的选择分析
2、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的SVM(支持向量机),这就意味这他使用了不带有核函数的SVM(支持向量机)。
注意:这里对于线性核函数时,条件是θTx>=0,而对于核函数来说,满足条件是θTf>=0。
我们可以把线性核函数看着另外一个版本的SVM,他只是提供给你一个标准的线性分类器
(二)核函数选取之后
如果决定使用高斯函数,那么接下来需要做的就是:
根据所使用的SVM软件包要求,可能需要你实现一个核函数或者实现相似函数。
因此,如果你用octave或者Matlab来实现支持向量机的话,那么就需要你提供一个函数来计算核函数的特征值。
注意:第二个输入参数是标记值
你所需要做的是写一个可以将这些X1,X2进行输入的相似函数
并用它们来计算,之后返回一个实数。
因此一些支持向量机的包所做的是期望你能提供一个核函数能够输入X1, X2 并返回一个实数。
从这里开始,它将自动地生成所有特征变量,自动利用特征变量X,并用你写的函数对应到f1,f2 一直到f(m)
注意: 特征变量归一化
一个实现函数的注意事项,如果你有大小很不一样的特征变量(比如房价预测)。
在使用高斯函数之前,将这些特征变量的大小按比例归一化
(三)其他核函数
在高斯核函数和线性核函数(主要还是这两个使用的最多)之外我们还有其他一些选择,如:
多项式核函数(Polynomial Kernel)
除了基本传参之外,还要有一个常数项和一个指数项。
如果X和l相互之间很接近,那么这个内积就会很大。
这是一个有些不常用的核函数。
多项式核函数几乎总是或者经常执行的效果都比较差。
通常它用在当X和l都是严格的非负数时,这样以保证这些内积值永远不会是负数。
这就可以得到,X和l之间非常相似,当它们之间的内积很大的时候。
它们也有其他的一些性质,但是人们通常用得不多。
字符串核函数(String kernel)
卡方核函数( chi-square kernel)
直方图交集核函数(histogram intersection kernel)
....
这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足Mercer‘s定理,才能被支持向量机的优化软件正确处理。
不是所有你可能提出来的相似函数,都是有效的核函数。
高斯核函数和线性核函数以及其你有时可能会用到的核函数,所有的这些函数都需要满足一个技术条件,它叫作默塞尔定理。
需要满足这个条件的原因是:
这个定理所做的是确保所有的SVM包,所有的SVM软件包能够用大类的优化方法并很快得到参数θ。
(四)多类分类问题
假设我们利用之前介绍的一对多方法来解决一个多类分类问题。如果一共有K个类,则我们需要K个模型,以及K个参数向量θ(逻辑回归和神经网络解决过多类分类问题)。
我们同样也可以训练K个支持向量机来解决多类分类问题。但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。
(五)逻辑回归和SVM比较
假设n是一个特征变量,m是一个训练样本。那么我们什么时候用哪一个呢?
1.如果n相对于你的训练数据集大小m较大的时候
比如说:
有一个文本分类的问题,在这里特征向量的维数有可能是1万
而如果你的训练集的大小有可能是10-1000范围内
想象一下垃圾邮件的分类问题,在这个问题中
你有10,000个与10,000(1万)个单词对应的特征向量
但是你可能有10训练样本 也可能有多达 1000个训练样本
那么这种情况下,我们通常使用:
逻辑回归或者用不带核函数的SVM(线性核函数)
因为,如果你有许多特征变量,而有相对较小的训练集。
线性函数可能会工作得很好,而且你也没有足够的数据来拟合非常复杂的非线性函数
2.现在如果n较小,m大小适中
比如:在这里n可能是1-1000之间的任何数 ,训练样本的数量可能是从10到10,000中的任何一个数值也许多达(5万)50,000个样本。
如果m做够大 如可能是(一万)10,000 但是不是一百万
因此如果m是一个大小合适的数值 ,那么通常使用高斯核函数的支持向量机。
3.如果n较小,而m较大
例如n在1-1000之间,而m大于50000,甚至100w,则使用高斯函数支持向量机会非常慢,
解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。
逻辑回归和线性核函数是非常相似的算法。
(六)和神经网络比较
和神经网络比较,SVM如果运用的好的话,比神经网络快得多。
SVM具有的优化问题,是一种凸优化问题。因此,好的SVM优化软件包总是会找到全局最小值,或者接近它的值。对于SVM你不需要担心局部最优。
在实际应用中,局部最优不是神经网络所需要解决的一个重大问题,所以这是你在使用SVM的时候不需要太去担心的一个问题。根据你的问题,神经网络可能会比SVM慢,尤其是在这样一个体系中,至于这里给出的参考,看上去有些模糊,如果你在考虑一些问题,这些参考会有一些模糊,但是我仍然不能完全确定,我是该用这个算法还是改用那个算法,这个没有太大关系,当我遇到机器学习问题的时候,有时它确实不清楚这是否是最好的算法,但是就如在之前的视频中看到的算法确实很重要。但是通常更加重要的是:你有多少数据,你有多熟练是否擅长做误差分析和排除学习算法,指出如何设定新的特征变量和找出其他能决定你学习算法的变量等方面,通常这些方面会比你使用逻辑回归还是SVM这方面更加重要。但是,已经说过了,SVM仍然被广泛认为是一种最强大的学习算法,这是一个体系,包含了什么时候一个有效的方法去学习复杂的非线性函数。因此,实际上与逻辑回归、神经网络、SVM一起使用这些方法来提高学习算法,我认为你会很好地建立很有技术的状态。(编者注:当时GPU计算比较慢,神经网络还不流行。)
以上是关于机器学习基础---支持向量机SVM的主要内容,如果未能解决你的问题,请参考以下文章