逻辑回归算法梳理
1 逻辑回归与线性回归的区别
线性回归 | 逻辑回归 | |
目的 | 预测 | 分类 |
未知 | {0,1} | |
函数 | 拟合函数 | 预测函数 |
参数计算 | 最小二乘 | 最大似然估计 |
- 1 (分类和回归):逻辑回归与线性回归都属于广义线性回归模型,回归模型就是预测一个连续变量(如降水量,价格等)。在分类问题中,预测属于某类的概率,可以看成回归问题。这可以说是使用回归算法的分类方法。
- 2(输出):直接使用线性回归的输出作为概率是有问题的,因为其值有可能小于0或者大于1,这是不符合实际情况的,逻辑回归的输出正是[0,1]区间
- 3 (参数估计方法):
一. 线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重——问题:假如使用线性回归对{0,1}二分类问题做预测,则一个真值为1的样本,其预测值为50,那么将会对其产生很大的惩罚,这也和实际情况不符合,更大的预测值说明为1的可能性越大,而不应该惩罚的越严重。
二.逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数,这就不存在上述问题
三:也正是因为使用的参数估计的方法不同,线性回归模型更容易受到异常值(outlier)的影响,有可能需要不断变换阈值(threshold)
参考:逻辑回归与线性回归的区别与联系
2 逻辑回归原理
是一种‘’函数,它将值转化为一个接近0或者1的值
本质:在线性回归模型的预测结果去逼近真实标记的对数几率
3 逻辑回归损失函数推导及优化
逻辑回归公式:
的取值有特殊的含义,它表示结果取1的概率,因此对于输入分类结果为类别1和类别0的概率分别为:
将两公式合成一个:
利用最大似然估计,假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积
为了方便求解,这里我们用对数似然函数最大化,对数似然函数取反即为我们的损失函数。
损失函数对求导(这里只以一个训练样本为例)
则对于的更新方式:
- 线性回归和逻辑回归对参数有相同的更新方式
ps:线性回归的梯度方向
4 正则化与模型评估指标
- 惩罚高阶参数,使它们趋近于0,这样就会得到较为简单的假设,也就是得到简单的函数,这样就不易发生过拟合。但是在实际问题中,并不知道哪些是高阶多项式的项,所以在代价函数中增加一个惩罚项/正则化项,将代价函数中所有参数值都最小化,收缩每一个参数。
- 实现参数的稀疏有什么好处吗?
1.简化模型,避免过拟合 ——因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据表现性能极差
2.参数变少可以使整个模型获得更好的可解释性 - 参数值越小代表模型越简单
因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大 - 正则化方法
1范数:向量中非零元素的个数()
若用L_0范数来规则化参数矩阵,就是希望参数矩阵大部分元素都为0,使特征矩阵稀疏。但是很难优化求解。
2范数:向量中各个绝对值元素之和
3 范数:各参数的平方和再求平方根
模型评估指标
- 回归任务常用的性能度量:均方误差
- 分类问题中:
1 错误率和精度
2 查准率、查全率、F1
3 ROC和AUC
4 代价敏感错误率与代价曲线
5 逻辑回归的优缺点
- 优点:
- 适合需要得到一个分类概率的场景
- 计算代价不高,容易理解实现。逻辑回归在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。
- 逻辑回归对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征)
- 缺点:
- 容易欠拟合,分类精度不高
- 据特征有缺失或者特征空间很大时表现效果并不好。
6 样本不均衡问题解决方向
样本不平衡:指分类任务中不同类别的训练样例数目差别很大的情况(假设正样本较少,反类样例较多)
- 欠采样:直接对训练集中的反类样例进行‘欠采样’,即除去一些反例,使正、反例数目接近
- 过采样:增加一些正例,使正、反数目接近
- 阈值移动
7 sklearn 参数
class 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=’liblinear’, max_iter=100, multi_class=’ovr’, verbose=0,warm_start=False, n_jobs=1)
参数 | |
惩罚项,str类型,默认为l2 | |
对偶或原始方法,bool类型,默认为False | |
停止求解的标准,float类型,默认为1e-4 | |
正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化 | |
是否存在截距或偏差,bool类型,默认为True | |
仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1 | |
用于标示分类模型中各种类型的权重 | |
随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用 | |
优化算法选择参数,只有五个可选参数,即newton-cg,lbfgs,liblinear,sag,saga | |
算法收敛最大迭代次数,int类型,默认为10。仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。 | |
分类方式选择参数,str类型,可选参数为ovr和multinomial,默认为ovr。ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上 | |
日志冗长度,int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。 | |
热启动参数,bool类型。默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化) | |
并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序 |