点击上方“机器学习与统计学”,选择“置顶”公众号
重磅干货,第一时间送达
作者:Ricky翘 zhuanlan.zhihu.com/p/34128571
有时碰到跟别人聊起模型的熟悉时,不免要阐述下模型的原理,但一般口头交流都比较难,因为脑海里面都是一些公式,似乎从功利角度有必要把模型原理用文字表达一遍,所以自己整理了下机器学习的部分,有遗漏或者不对的地方也请多多指教~
线性回归
首先我们会定一个函数假定y和x的关系,如y=wx+b。但实际y的值肯定会和实际有偏差,所以就有残差项。如残差项e的求和=y-(wx+b)的求和。然后把公式化开,分别对w和b求偏导数,就可以得出w和b的值。
如何是对于矩阵,原理是一样的,不会设计矩阵的转置和矩阵的求导,最后参数为delta=X的转置乘以X,这两个乘起来再求他们的逆,最后再乘X的转置和Y
![d4ff379bbd4dc269d6b8228e09c9105e.png](https://i-blog.csdnimg.cn/blog_migrate/41c6881614765539da256aeb775f15ea.jpeg)
逻辑回归
首先引进sigmoid函数,形如1+e的负x次方分之一(这个大家都知道这个公式是什么),我们这里称sigmoid为h(x)然后对于每个样本,对于给定X和参数delta后,其对于y的后验概率为h(x)的y次方乘以(1-h(x))的1-y次方,这个分别对应y是0和1的情况。所以扩展到所有样本的话就把各样本的概率连乘起来,这里就像极大似然求解那样,连乘后再作对数处理,而一作对数处理,连乘就变成log相加求和了。对这个新得到的函数用梯度下降就能够不断更新参数delta了。
k-mean
1、从D中随机取k个元素,作为k个簇的各自的中心。
2、分别计算剩下的元素到k个簇中心的距离,将这些元素分别划归到距离最短的簇。
3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
4、将D中全部元素按照新的中心重新聚类。
5、重复第4步,直到聚类结果不再变化。
决策树
首先从根节点开始,计算所有变量的信息增益,主要有ID3和C4.5这两个算法。然后选择信息增益最大的作为结点的特征,确定了具体节点变量后,就要计算在变量里面具体哪个位置做切割,一般是在不同的切割点下的组别计算熵或者信息增益进行比较,选择最佳切割点。对子节点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或者没有特征可选时为止。
随机森林
可以抽象理解为很多颗决策树放在一起,然后各自产生的结果投票产生最终的结果,就是bagging的框架。但在细节上,就是每颗树通过有放回的方法抽取一定的数据量和一定的变量属性再去做分裂。
GBDT
首先先说GB这边,就是Gradient
Boost,在梯度上进行boost。每一次的计算是为了减少上一次的残差(residual),而为了消除残差,我们可以在 残差减少的梯度(Gradient)方向 上建立一个新的模型。所以说,在Gradient Boost中,每个新的模型的遍历是为了使得之前模型的残差往梯度方向减少。与传统Boost对正确、错误的样本进行加权有着很大的区别。从公式上,就是下一个函数等于上一个函数+拟合了残差的函数(实际上这个残差函数会乘以一个乘数,是让目标函数最小化,这个乘数怎么来不作展开)。
而DT就是cart树,结合GB后做法上,比如说是3分类问题,每轮训练实际上就是训练3颗树,如(0,1,0)就是对应(X,0)(X,1) (X,0),作为样本得到3个预测值,进而可以得到残差(残差为=0-f(x)),然后下一轮迭代就可以输入(x,f(x))。在每次迭代中计算目标函数(由树权重函数和结构函数组成),选择最优解。
XGboost
在GBDT的基础上,xgboost不仅有cart分类器,还有线性分类器。
xgboost的目标函数优化用到二阶泰勒展开,还有一阶和二阶导数,而且代价函数里面加了正则项。列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
SVM
想得到一个超平面如wx+b=0,如果对于y=正负1的话,margin距离为w的绝对值分之2,所以我们要最大化它就是最小化w的绝对值,一般写为二分之一w平方。其约束条件为y(wx+b)-1>=0。
这个其实是一个规划问题,SVM里面引入拉格朗日乘子式进行转化。式子就可以变成二分之一w平方减去本来拉格朗日乘子乘以约束条件(y(wx+b)-1),就可以转化为最大最小对偶问题(maxmin)。对转化后的公式分别对w和b求偏导数。解出来的东西再代回去原式就变成一个单求拉格朗日乘子最大化的问题,里面含alpha-i,alpha-j,yi,yj,xi,xj。来到这步,线性可分的话可以直接求解,不可分的可以引入核函数,将xi,xj映射到高纬。至于怎么求解,SVM里面用了SMO算法,做法上就是通过选择两个alpha,其他的固定起来,因为之前朗格朗日式中求出一个约束条件,是alpha*y的求和=0。所以固定n-2的乘子,不断试剩下2个的可能性,直至目标函数收敛。
推荐阅读
统计学最全思维导图,值得收藏!
现代统计学的发展史
机器学习算法之岭回归、Lasso回归和ElasticNet回归
整理一份详细的数据预处理方法
资源|《Python数据分析与数据化运营》PDF高清+数据+代码
机器学习算法优缺点对比及选择(汇总篇)
Python sklearn模型选择
从概率角度,5局3胜和3局2胜,哪个胜算更大?
数据预处理|关于标准化和归一化的一切
14 幅思维导图 | Python 编程核心知识体系
![2d12539c44783302e0254a67b144ccc0.png](https://i-blog.csdnimg.cn/blog_migrate/f77d06fafa821547df360ee4afd60bff.png)
![af7885f2bfb27079c65fc314dc769e19.gif](https://i-blog.csdnimg.cn/blog_migrate/3ac915c0c19713e315dd133211987446.gif)