然后我们接着上一节再来看一下这里我们说有个min_faces_per_person = 0 这个可以看到如果我们写上0,就意味着要加载所有的人脸图片,就会花费的时间久对吧
我们可以试试,这里我们min_faces_per_person = 0 改成0然后
我们等一会加载完了以后,我们用display(X.shape,faces.shape,y.shape)显示一下,可以看到 13233 个人脸图片对吧,这个是所有的,可以看到 人脸图片很多对吧.
然后这里我们如果min_faces_per_person = 0 我们可以看看一共现在有多少人len(traget_names) 可以看到有5749个,名人对吧
如果我们这里做一下筛选,添加上:min_faces_per_person = 70 可以看到这个时候,也就是一个人有70张照片的时候,才保留那么这个时候,我们再去执行一下代码len(target_names) 可以看到就只有7个人了,这个时候就少多了对吧这样,加载数据快,有利于我们学习
然后我们再来看一下之前说的软间隔,回顾一下,我们说上面这个C参数和,软间隔有关对吧,
可以看到我们说比较理想的情况,就是一条线可以把,两种数据完全分开,而现实生活中,往往没有这么顺利
往往是这种的,怎么都找不到一个线可以分开两种数据这种才是现实生活中常见的
比如可以看到,上面圆圈中的点,就是属于不好分割的,而我们,需要让我们的模型允许这种情况的出现,可以兼容这种情况
可以看到我们的条件是上面这个y.(WT.xi+b)>=1对吧,这个是我们之前使用公式推导出来的,也就是当(WT.xi+b)>=1 是一个类别当(WT.xi+b)
可以看到,我们知道l3,l1,l2 l2是超平面,然后l1是下方的点也就是=1的时候而,因为我们把条件合并了,就是当y.(WT.xi+b)>=1的时候就是完全分开数据的时候.
这时候,为了,允许我们有误差点,并且衡量,我们模型的容忍度,我们引入了一个松弛变量
也就是kesei可以看到这个时候我们的约束条件变成了:y.(WT.xi+b)>=1-kesei 了对吧而kesei是=0和>0 就是在0到1之间,也就是,可以看到图中的蓝色点,没有超过x1的那个点这个时候都是正常的,如果kesei>=1的时候可以看到y.(WT.xi+b)>= -负数了对吧,这个时候 就会出现误差点了
所以可以看到,上面显示的误差点
可以看到对应的正确的误差点和错误的误差点.
然后我们继续看,这里,为了优化目标函数,我们加入了松弛变量以后,我们可以看到又引入了一个C这个变量,这个可以理解为是 错误样本的惩罚程度 如果C越大,那么说明,对错误样本的惩罚程度越大,那么就相当于kesei,就越小,因为当C越大,只有kesei越小的时候,才能保证,整体损失函数:
变小对吧.所以,当C越大,惩罚越大,对错误样本的惩罚越大,说明,越能把数据分开,当,完全C E kesei =0的时候,这个时候就相当于把数据完全分开了.这个时候就会出现过拟合了
可以看到这是比较理想的情况,当然过拟合的时候,有可能用一个,曲里拐弯的线把数据分开的.
所以有了这个C以后,我们就可以借助这个C,比对调整C,减小C,来减小对错误数据的惩罚,那么kesei就会变大,那么 对错误数据的容忍程度就会上升对吧
有了这两个条件以后,我们就可以对这个条件进行构造,拉格朗日乘函数,可以看到下面的函数,我们+了E lamadai.... 和后面的E u kesei 对吧这分别对应上面的,两个条件对吧. 具体拉格朗日函数如何构建可以看之前 拉格朗日乘数法的博文
可以看到上面,因为有两个条件,所以对应lamada 和u 是两个对应的拉格朗日乘子,然后 w,b ,kesei是我们要计算的参数
然后再去利用对偶关系转换,然后让转换后的公式,满足KKT条件
然后对w,b,kesei求导数,然后并领导数为0
可以看到上面最后一个KTT条件,对应的西格玛L/kesei = C E 1- Elamada -Eu = 0 就表示,完全分割开的哪些kesei为0的那些点了.
然后可以看到求导以后就得到了上面的W = E lamadai yi xi 对吧,然后0 = ..这3个公式,然后我们把这3个公式,带入到下面的,对偶公式中,然后进一步化简,可以看到最后得到的公式,里面就一个lamadai未知数了对吧.
只剩下一个lamadai了可以看到这个时候就可以使用SMO进行求解了,然后我们进行求解可以看到简化后的公式,也是有约束的这里的lamadai>=0 ui>=0 C-lamadai -ui = 0对吧那么这里的lamadai 和ui为什么必须要>=0 ? 因为之前我们KTT条件已经说的很清楚了可以去看看.因为我们从导数和梯度方向上,分析了,如果能找到最优解,那么梯度一定相反,所以lamadai必须大于=0
然后因为我们有C= lamadai+ui 所以可以说,我们求max lamada u L跟u没有关系,所以就可以把u消除掉,然后就得到了最终的目标函数,可以看到上面
然后可以看到我们先去看一下硬间隔的,损失函数,上面的d公式
与我们求得的软间隔的损失公式可以看到几乎是一样的,就是多了约束条件对吧
当然软间隔跟硬间隔一样的约束条件
然后我们利用SMO算法对,最终得到的L 这个软间隔,硬间隔的,损失函数进行求解,就可以得到w和b的解对吧.
这样我们就把C这个参数就说清楚了.
这个惩罚误差点的,引入参数.
领取专属 10元无门槛券
私享最新 技术干货