首页 > 编程知识 正文

松弛变量的值怎么求,松弛变量的作用

时间:2023-05-04 15:26:21 阅读:162079 作者:4781

我们到目前为止讨论的情况都是基于样本的线性可分假设,如果样本线性不可分,试着用核函数将特征映射到高维,很可能是可分的。 但是,映射后也不能保证100%。 那么该怎么办呢,需要调整模型,以便即使在不可分离的情况下,也能尽可能地找到分离超平面。

请看以下两幅图:

您可以看到离群点(可能是噪波)会导致超平面移动,导致间距变窄,并可以看到以前的模型对噪波非常敏感。 此外,如果离群点位于其他类中,则此时线性是必不可少的。

此时,应该允许几个点游离,在模型内违反限制条件(函数间隔大于1 )。 我们设计得到的新模型如下。

引入非负参数允许采样点(称为松弛变量)的函数间隔小于1,位于最大间隔区间内,或者函数间隔为负数,即采样点位于对方区域内。 放宽限制条件后,需要重新调整目标函数处罚离群点。 目标函数之后离群点越多,目标函数值就越大,要求尽可能小的目标函数值。

这里的c是离群点的权重,c越大离群点对目标函数的影响越大,也就是说表示不想看到离群点。 目标函数控制离群点的数量和程度,发现大多数样本点遵守限制条件。

引入松弛变量(惩罚因子)后,有一种常用的变体来解决样本在分类问题上的“偏误”问题。

首先,让我来说明一下样品的偏差。 也称为数据集偏移。 这意味着分类中涉及的两个类别(也可以指多个类别)的样本数量相差很大。 例如,如果正类有10000个样本,而负类只提供了100个,那么这将会引起很明显的问题。 请看下图。

ing-bottom:0px; font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:21px"> 方形的点是负类。,,是根据给的样本算出来的分类面,由于负类的样本很少很少,所以有一些本来是负类的样本点没有提供,比如图中两个灰色的方形点,如果这两个点有提供的话,那算出来的分类面应该是,和,他们显然和之前的结果有出入,实际上负类给的样本点越多,就越容易出现在灰色点附近的点,我们算出的结果也就越接近于真实的分类面。但现在由于偏斜的现象存在,使得数量多的正类可以把分类面向负类的方向“推”,因而影响了结果的准确性。

对付数据集偏斜问题的方法之一就是在惩罚因子上作文章,那就是给样本数量少的负类更大的惩罚因子,表示我们重视这部分样本,因此我们的目标函数中因松弛变量而损失的部分就变成了:

其中是正样本,是负样本。libSVM这个算法包在解决偏斜问题的时候用的就是这种方法。

那和怎么确定呢?它们的大小是试出来的(参数调优),但是他们的比例可以有些方法来确定。咱们先假定说是5,那确定的一个很直观的方法就是使用两类样本数的比来算,对应到刚才举的例子,就可以定为500(因为10,000:100=100:1)。

但是这样并不够好,回看刚才的图,你会发现正类之所以可以“欺负”负类,其实并不是因为负类样本少,真实的原因是负类的样本分布的不够广(没扩充到负类本应该有的区域)。所以给和确定比例更好的方法应该是衡量他们分布的程度。比如可以算算他们在空间中占据了多大的体积,例如给负类找一个超球——就是高维空间里的球啦——它可以包含所有负类的样本,再给正类找一个,比比两个球的半径,就可以大致确定分布的情况。显然半径大的分布就比较广,就给小一点的惩罚因子。

但是这样还不够好,因为有的类别样本确实很集中,这不是提供的样本数量多少的问题,这是类别本身的特征,这个时候即便超球的半径差异很大,也不应该赋予两个类别不同的惩罚因子。这样应该怎么解决呢……实际中,完美的方法是没有的,只要根据需要,选择实现简单又合用的就好了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。