逻辑回归
初学逻辑回归的时候就只是简单地认为sigmoid函数可以把线性函数映射到(0,1)的区间上,因此选用了sigmoid模型作为逻辑回归的模型函数。
其实是学的太简单了,直到面试的时候被问到这个问题,才想到需要来把坑填一下。
- 事实上可以把线性函数映射到(0,1)上的函数有无穷多个,而逻辑回归使用sigmoid函数并不是随便选的,而是通过理论推导得到的。
这里挂上我觉得解释得最清楚的文章:https://www.cnblogs.com/wallacup/p/6024855.html?utm_source=itdadao&utm_medium=referral
下面是我个人的理解和总结:
这里以二项逻辑回归为例子,即分类只有两种(y),记为0和1。
在这个分类问题上,我们知道y的先验分布实际上是一个伯努利分布(有可能y=1且概率为p,或者有可能y=0且概率为1-p)。即:
推导得到:
这符合指数分布族的标准形式:
其中,η是分布的自然参数(natural parameter)或典范参数(canonical parameter),T(y)叫做充分统计量(sufficient statistic)。
通常情况下T(y)=y;a(η)是对数分配函数(log partition function),而a、b与T一般都是给定的,随着η的变化,会得到不同的分布。
引进广义线性模型(GLM)的概念:
广义线性模型:
应用到上面的逻辑回归中:
(1) 由上述内容已知:
(2)
(3)
其中,w就是广义线性模型中的线性模型系数θ
由此,
得到逻辑回归模型:
- 推导出分类问题——逻辑回归的模型之后,如何评估这个模型
我们就得想想怎么基于样本,得到最理想的模型。一般的流程是我们需要找到一个评估模型的指标,再设法优化这个指标,来得到最好的模型参数。
在回归问题中,我们通常使用损失函数来评估,不断缩小残差方。
在分类问题中,对于逻辑回归,可以使用最大似然函数来评估。
最大似然函数的意思,就是最大程度上的相似。长这个样子:
其中, 指的是我们想要拟合的这个模型,当输入xi的时候,输出的Y=1的概率。
相应地,,
其实就是这个逻辑回归的模型。
指数上的yi则指的是样本的y。
举个栗子: 如果你有一组训练样本(xi,yi),得到了一个训练模型。
如果训练模型告诉你,。
情况1(这组样本预测正确): 你的yi此时正是1,那么
情况2(这组样本预测错误): 你的yi此时正是0,那么
可以看到当累乘,乘以0.1的时候,即模型和样本不fit的时候,相比于预测正确,乘上0.9,会使得似然函数变得更小。
因此我们的目的就是极大化最大似然函数
- 有了评估指标后,怎么求似然函数的极大值:
取对数!
得到对数似然函数:
其中,
得到了只有一个未知数w的函数,于是可以用梯度下降或者拟牛顿法来求得最优解。
-------------------------------------分割线-----------------------------------------
XGBoost
主要是说XGBoost在GBDT的基础上,和GBDT有什么区别。有两大方面:
- XGBoost在GBDT上做了许多工程方面的优化(本菜鸡非CS出生,对于工程的研究较少)
- 算法上面的优化(这是以下主要展开阐述的内容)
算法的优化:
- XGBoost加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
- GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
二阶泰勒展开的具体说明:XGBoost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准.
使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了.
这种去耦合增加了XGBoost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。 - XGB并行计算:XGB的并行计算是特征颗粒度的,不是树的颗粒度;
XGB会使用block结构先对数据先做排序并存储,block结构使并行计算成为可能;
每次节点分割的时候,并行地去计算每个特征带来的增益,选择增益最大的特征进行分割; - 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
- 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。
- 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略