过去几个月,一直在学习机器学习模型,输入只是学习的一部分,输出能够帮助本身更熟练地掌握概念和知识。把一个复杂的事物简单的讲述出来,才能表示真正弄懂了这个知识。因此我将在博客中尽可能简单地把这些模型讲述出来,以加深本身的掌握,也为他人提供一点点参考。在此感谢大神刘建平Pinard的博客,若有任何疑惑可参考该神博客,这只是个人狗尾续貂之做。算法
本篇介绍分类模型中的代数模型,分类模型我我的认为,根据基本数学方法进行分类,有代数模型,树模型,几率模型,其余。具体分类状况以下:网络
代数模型的意思是,咱们老是运用Xθ+b=y的或者相似的形式来求得分类和回归的结果。这里样本矩阵(m*n),θ是咱们要求的系数(n*1),乘积结果就是m个样本的回归结果。尽管咱们后面可能进行激活函数的变换,但基本的数学方法就是如此。机器学习
线性回归的基本思想在二维平面的展示就是:用一条直线来尽可能拟合图中的点,让全部点到这条直线的距离最小,咱们的目的是求得这样一条直线y=θx+b,在二维里θ是一个数,但在多维上,就是一个向量了。分布式
输入是样本矩阵和样本的y(这个叫标签值)。好比一个以下的样本:函数
输出是系数向量θ学习
θ的解释:在本例里θ是一个形如(θ1,θ2,θ3,θ4)的向量,他们分别与身高年龄等特征相乘最后相加,获得发量y‘(y'跟实际的y是有差距的,毕竟咱们是拟合得来的,咱们的目的就是经过损失函数的优化,让差距最小)。优化
θ的做用:当获得一个新的样本,有身高、年龄、性别、体重,咱们用θ能够预测到发量,这就是回归。atom
模型的损失咱们用均方差来度量,(y'-y)2(这个也好解释,就是预测的y值与实际y值得差距),咱们想获得一个θ让全部样本的均方差和最小,因而咱们对θ求偏导等于0。spa
损失函数:全部样本的均方差和(前面的1/2只是为了求导方便而添加的,不会影响求导结果:好比y=x2和y=2x2求导y'=0结果都同样)3d
优化方法就是求极值的方法,对于线性模型,咱们能够用梯度降低和最小二乘:
梯度降低:(随便另外一个初始θ,a是迭代步长,能够本身设定),迭代数次后θ变化不大,就能够得出结果了。
这里求梯度是标量对向量的求导,运用的到公式主以下,很是简单就能够计算出来
最小二乘:(是一种求解析解的方法,能够直接获得结果,但最小二乘有一些局限性)
输入特征矩阵X和y值
设定一个初始θ
循环
直到θ变化很小
输出θ
逻辑回归的基本思想在二维平面上借鉴线性回归,咱们想要一条线把二维平面上的两类点尽可能分开。咱们再把结果y用一个函数g(激活函数)投射到一个有限的空间(0-1)里面去,这样咱们就能经过判断g(Y)的值来判断类别。好比g(Y)>0.5是1类,g(Y)<0.5是0类。(为何要用这个激活函数?我的理解它很是适合咱们的一、0几率模型)
这个函数g咱们用sigmoid激活函数。它的基本形式是(这里z就是y的意思),这个函数形式可让y值无穷大时接近1,无穷小时接近0,y取0时接近为0.5。它的导数有很好的性质:
用矩阵形式表示(算出来是一个向量)
输入仍是X和y,这时候y就是0和1的值了,二分类嘛
咱们想获得一个θ,让分类结果尽可能正确。
因为是y是0,1构成,再也不是连续值,因此不能使用均方差了。因而咱们用最大似然法来获得损失函数,最大似然法的基本思想就是求得θ,让P(几率)尽可能大。单个样本的几率分布式为,y只能取0和1。
对全部样原本说,几率分布为:(其实就是把各个样本的几率乘起来,极其简单)
咱们要最大化这个函数,就等于最小化-L(θ)这个函数
因而损失函数为:(加了个对数,为了方便计算,由于对数能够把乘法转化为加法)
(E是全为1的向量)
(这里再说一说极大似然法,举个简单的例子,我有两个硬币(100元的硬币,1元的硬币),分别抛出,我想获得1,0的观测结果(1是正面),我用力度θ能够控制正反面的几率,因而我固然要求一个θ让100元的硬币正面几率大,让1元的反面几率大,这样相乘的结果才能最大几率接近我想要的。这就是极大似然,求出现几率最大时,θ等于多少)
(同时再说一下这里极大似然的几何意义,最大几率,也就是全部点尽量离分界线远远的)
仍是用梯度法:
输入特征矩阵X和y值
设定一个初始θ
循环
直到θ变化很小
输出θ
感知机的基本思想和逻辑回归相似,在二维平面上,用一条线分开两类,在三维平面上,用一个平面分开两类。因此使用感知机的数据必须是线性可分的数据。与逻辑回归不一样,逻辑回归让全部点尽可能远离分隔线,感知机让误分类的样本距离分隔线尽可能近,让误分类样本离超平面的距离尽可能小(当没有误分类点时,感知机存在多个超平面均可以正确分类)。而且用的激活函数也不一样,感知机用了最简单的激活函数:
(θ和x均为向量,这个激活函数有利于咱们区分误分类点)
感知机的输入,依然是X样本集,y是1和-1的标签(设立-1的标签有利于咱们设置损失函数)
获得合适的超平面的参数θ
咱们用误分类点到超平面的距离做为损失函数,并求它的最小值,那么哪些是误分类点呢:的点就是误分类点,由于对于误分类点,y和θ*x必定异号。判断好了哪些是误分类点后,把他们跟超平面的距离加起来,总的距离为:
(这个公式理解起来很容易,把-y和求和符号除开,就是点到线的距离公式,-y只是为了保证式子为正,求和符号为了求得全部误分类点距离,对了||θ||2表示2范数,就等于θ向量中每一个数的平方和求平方根)
观察式子,式子的分子分母同时存在θ,很显然当θ增大N倍,分母分子一样增大N倍,总体不变。因为咱们不关心具体求导等于多少,只关心何时是极值,因此咱们能够固定分母或者分子为1,而后求另外一个即分子本身或者分母的倒数的最小化做为损失函数,这样能够简化咱们的损失函数。
因而损失函数为:
咱们采用随即梯度降低法(SGD),每次更新只用一个误分类样本进行梯度迭代更新:
(批量迭代是这样)
(随机迭代的更新公式,yx在误分类样本中随机选择)
输入X和y(1,-1)的样本集
1.设定初始θ,迭代步长a(感知机不惟一,因此初始值和步长会影响超平面)
2.判断误分类样本集M
3.在误分类样本中随机选择1个样本
4.更新
5.检查训练集里是否还有误分类的点,若是没有,算法结束,输出。若是有,继续第2步
(感知机还有一个对偶的算法形式,能够简化算法,就是提早计算好Gram矩阵,每次调用内积就好了,因为我是讲基本原理,这里就不赘述了,有兴趣请自行搜索)
支持向量机的基本思想与感知机相似,可是在超平面的规定上进行了一些优化。感知机想要误分类点到超平面的距离最近,最好为0也就没有误分类点了。在没有误分类点时,感知机存在多个超平面均可以进行有效分类。而支持向量机则考虑在那么多个超平面中,哪一个最好呢?因而选择一个超平面,让支持向量到超平面的间隔最大。因此这里支持向量机的基础条件是不存在误分类点。
什么叫支持向量:支持向量就是正确分类后,那些距离超平面很近的点。更通俗来讲,好比一个栏杆把学生分为了男生女生,最靠近栏杆的学生就是支持向量,而这个最靠近的学生跟栏杆的垂直距离叫间隔。
(间隔的度量,这里咱们用几何间隔,几何间隔就是求点到线的正常公式,还有一个函数间隔就是只取这个公式的分子部分,分子部分就是函数间隔,函数间隔能够用来判断分类正确与否,用来作约束条件,跟感知机同样)
(中间实线为最优超平面)
输入与感知机同样,样本X和分类y(1,-1)
输出最佳的超平面参数θ
咱们要最大化,支持向量到超平面的距离(几何间隔),咱们最大化这个距离的目标函数为:
(min的目的是找支持向量,max的目的是最大化支持向量和超平面的距离,约束条件是在正确分类的点的状况下。勘误:w范数下面应该有个2,这里的分母w意思是分子的w中的元素添加上b,参看感知机用一个θ就彻底表示了)
很明显,这个函数极其难优化,由于不一样的w,咱们要选不一样的样本点的xi,可是咱们通过一系列abaaba的操做后,就能够简化为下面的式子,咱们的损失函数为:
(这里是abaaba操做,能够不看,具体操做以下:咱们注意到与感知机同样,分子上下都有w,能够同时缩放w和b而不影响求最大值,那么咱们同时放大N倍,使得N*y(wx+b)=1,因而咱们整个公式就至关于求,单看这个公式,前面的公式不要去想,公式成这样之后,1表明了函数间隔,咱们前面说了正确分类的点,距离要大于函数间隔,所以约束条件相应改变。注意,这里求距离的时候,咱们已经没有选择用哪一个点的xi了,公式里没有xi了,咱们把函数间隔就设置为1)
对于上面这个式子,它叫作不等式约束条件下的最优化,又叫KKT条件问题,解决这种问题的方法咱们有一个套路叫“拉格朗日函数法”,把有约束优化问题转化无约束优化问题:
对于上述式子,咱们经过对偶形式转换,求w,b偏导数为0来获得w,b关于a的式子,并把总方程转化为只关于ai的式子:
经过SMO算法求a向量,最终可解得w,b
这里说一下求b的方法,找出S个支持向量,判断条件是a向量(形状为m*1)里面ai>0的点对应的i这个样本,就是支持向量,对于这个支持向量有公式以下:
,因而咱们能够计算出每一个支持向量的b,而后求均值,其实这里b值应该都同样,只是为了之后算法改进软间隔的健壮性求个均值。
(这是一个解析法+迭代法的优化,求偏导为0是解析法,smo是迭代法)
输入跟感知机同样,X样本和y(1,-1)
1.构造一个约束优化问题,即上面只关于a的哪一个式子
2.用SMO法求a
3.求出w,
4.求出b:找出支持向量,运用公式求出每一个支持向量的b,求均值
输出一个w和b,也就是θ
上述算法只能应对线性彻底可分的状况,但若是数据大部分是线性可分,可是存在异常点,致使不能线性可分了,如
又或者,异常点没有达到不可分的底部,但会严重挤压间隔空间,如:
若是没有蓝点,那么个人超平面间隔就会宽且合理,有了这个异常点让分隔变得异常窄。
如何处理这两种状况呢?SVM引入软间隔的方法来解决,相对来讲,咱们上面的方法就是硬间隔
硬间隔的最大化条件为
软间隔引入一个松弛变量ξi,使得约束成为,这样对于异常点,只要咱们ξi变大,就能抵消异常点的伤害了,可是若是全部点都加大松弛变量,不就乱套了吗,因而咱们对于松弛变量的变大也要有惩罚,
,这样咱们就能够获得合适的应对误分类点的方法了。C是惩罚系数,要本身规定,C越小,就越能够容忍误分类点,具体设置能够经过网格搜索肯定。
关于软间隔的损失函数优化问题,其实与硬间隔相似,任然求偏导,获得a的表达式,用SMO求a,得解。
SVM算法内容实在是多啊
对于非线性问题,咱们的基本思想是,投影到高维平面去,增长维度,就能够变成线性的,好比y=x+x2这个非线性问题,咱们把x2设为x2,那么y=x1+x2这个线性问题,问题就获得了解决。
看看咱们的目标函数最终形态:
关于维度的问题,只出如今了xi*xj这个向量内积上,因而好比原本xi是1维非线性,咱们用一个函数把它投射到2维线性可分,因而公式变成:,可是当维数过高,好比1万维,太难以计算,因而咱们就用上了核函数!
核函数的基本思想是要让咱们能用低纬向量计算,却产生高维向量线性可分的结果。如何计算?那就涉及到咱们用哪一个核函数了,现有的核函数有:
多项式核函数:
高斯核函数:
sigmoid核函数:
其中参数都须要本身调整,以适应高维可分性。
因而咱们的目标函数变成:
代入到咱们的算法当中,就可求解,至此SVM的优化结束
本章完结撒花,后续还有神经网络,矩阵分解
找出全部的S个支持向量,即知足αs>0对应的样本(xs,ys),经过 ys(∑i=1mαiyixTixs+b)=1,计算出每一个支持向量(xx,ys)对应的b∗s,计算出这些b∗s=ys−∑i=1mαiyixTixs. 全部的b∗s对应的平均值即为最终的b∗=1S∑i=1Sb∗s