逻辑回归与线性回归的联系与区别
联系
逻辑回归与线性回归都属于广义线性回归模型
区别
线性回归主要用来解决连续值预测的问题,逻辑回归用来解决分类的问题,输出的属于某个类别的概率。
线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重。
逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数。
线性回归的输出是连续实数,逻辑回归的输出是 $(0,1)$ 间的连续值。
逻辑回归的原理
- 逻辑回归假设数据服从伯努利分布。伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是 $p$,抛中为负面的概率是 $1−p$。在逻辑回归这个模型里面是假设 $h_\theta(x)$ 为样本为正的概率,$1−h_\theta(x)$ 为样本为负的概率。那么整个模型可以描述为
- 逻辑回归假设是假设样本为正的概率是 所以逻辑回归的最终形式为
逻辑回归损失函数推导及优化
Regression问题的常规步骤为:
- 寻找h函数(即hypothesis);
- 构造J函数(损失函数);
- 想办法使得J函数最小并求得回归参数( θ )
Logistic函数(Sigmoid函数):
对于线性边界形式:
构造预测函数为:
函数 $h_\theta(x)$ 的值有特殊意义,它表示取1的概率,因此对于x分类边界为类别1和类别0的概率为:
cost函数和J函数如下,基于最大似然估计推得:
推导过程如下:
将概率公式合起来写:
取似然函数为:
对数取似然函数为:
最大似然估计就是求使 $l(\theta)$ 取最大值时的 $\theta$ ,其实这里可以使用梯度上升法求解,求得的 $\theta$ 就是要求的最佳参数。但是,在Andrew Ng的课程中将 $J(\theta)$ 取为下式,即:
因为乘了一个负的系数 $-\frac{1}{m}$ ,所以取 $J(\theta)$ 最小值时的θ为要求的最佳参数。
梯度下降法求的最小值
开始之前插一句,sigmoid函数有个很重要的特性:
$\theta$ 更新过程:
其中:
所以 $\theta$ 更新过程可以写为:
向量化
在使用向量化之后公式 $J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)})))$ 可以写为:
公式 $\frac{\delta}{\delta_{\theta_j}}J(\theta)=\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$ 可以写为:
其中 $h=g(\theta^Tx)$ ,由于 $(h-y)$ 维度是 $m\times1$ , $X$ 也是 $m\times1$ ,所以需对 $X$ 转置
所以 $\theta$ 的更新过程可写为:
正则化与模型评估指标
正则化
正则化是选择模型的一种方法。正则化的作用是选择经验风险与模型复杂度同时较小的模型来避免过拟合。
常见的正则化策略
L1正则化
L1正则也被称为Lasso回归。就是在原始的代价函数后面加上一个L1正则化项,即所有权重$w$的绝对值的和,乘以$\frac{\lambda}{n}$。
求导:
$sgn(w)$表示$w$的符号,$w$的更新规则为:
当$w$为正时,更新后的$w$变小。当$w$为负时,更新后的$w$变大。因此,它的效果就是让$w$往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。
当w等于0时,$|w|$是不可导的,所以我们只能按照原始的未经正则化的方法去更新$w$,这就相当于去掉$\frac{\eta \lambda}{n}sgn(w)$这一项,可以规定$sgn(0)=0$,这样就把$w=0$的情况也统一进来了。
L2正则化
L2正则化也被称为权重衰减或岭回归。就是在代价函数后面再加上一个正则化项。
$C_0$代表原始的代价函数,后面那一项就是L2正则化项,是所有参数$w$的平方的和,除以训练集的样本大小$n$。$\lambda$就是正则项系数,权衡正则项与$C_0$项的比重。
求导:
可以发现L2正则化项对$b$的更新没有影响,但是对于$w$的更新有影响:
在不使用L2正则化时,求导结果中$w$前系数为1,现在$w$前面系数为 $1- \frac{\eta \lambda}{n}$ ,因为$\eta$、$\lambda$、$n$都是正的,所以 $1- \frac{\eta \lambda}{n}$ 小于1,它的效果是减小$w$,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,$w$最终的值可能增大也可能减小。
一个所谓“显而易见”的解释就是:更小的权值$w$,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀)。在实际应用中,L2正则化的效果往往好于未经正则化的效果。
过拟合的时候,拟合函数的系数往往非常大,需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
评价指标
评价指标查看之前的另一篇博客:召回率、准确率、ROC曲线、AUC、PR曲线
逻辑回归的优缺点
优点:
- 形式简单,模型的可解释性非常好;
- 模型效果不错;
- 训练速度较快;
- 资源占用小;
- 方便输出结果调整。
缺点:
- 准确率并不是很高;
- 很难处理数据不平衡的问题;
- 处理非线性数据较麻烦;
- 逻辑回归本身无法筛选特征。
样本不均衡问题解决办法
产生新数据型:过采样小样本(SMOTE),欠采样大样本。
过采样是通过增加样本中小类样本的数据量来实现样本均衡。
一种方法是直接复制小类样本,形成数量上的均衡。这种方法实现简单,但会由于数据较为单一而容易造成过拟合。也可通过经过改进的抽样方法,在少数类中加入随机噪声等生成数据。
欠采样是通过减少多数类样本的样本数量来实现样本均衡。一种方法是随机去掉一些数据减少多数类样本的规模,但可能会丢失一些重要的信息。另一种方法是,假设少数类样本数量为N,那就将多数类样本分为N个簇,取每个簇的中心点作为多数类的新样本,加上少数类的所有样本进行训练。这样保证了多数类样本在特征空间的分布特性。
对原数据的权值进行改变
在训练分类器时,为少数类样本赋予更大的权值,为多数类样本赋予较小的权值。
通过组合集成方法解决
通过训练多个模型的方式解决数据不均衡的问题,是指将多数类数据随机分成少数类数据的量N份,每一份与全部的少数类数据一起训练成为一个分类器,这样反复训练会生成很多的分类器。最后再用组合的方式(bagging或者boosting)对分类器进行组合,得到更好的预测效果。
通过特征选择
在样本数据较为不均衡,某一类别数据较少的情况下,通常会出现特征分布很不均衡的情况。可以选择具有显著区分能力的特征进行训练,也能在一定程度上提高模型的泛化效果。
sklearn参数
1 | sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’warn’, max_iter=100, multi_class=’warn’, verbose=0, warm_start=False, n_jobs=None) |
具体参数查看逻辑回归函数API