机器学习-逻辑回归算法梳理
学习任务
1、逻辑回归与线性回归的联系与区别
2、 逻辑回归的原理
3、逻辑回归损失函数推导及优化
4、 正则化与模型评估指标
5、逻辑回归的优缺点
6、样本不均衡问题解决办法
7、sklearn参数
1、逻辑回归与线性回归的联系与区别
逻辑回归是基于线性回归方法的扩展,是一种广义线性模型,link function为单调可微的对数几率函数。即用线性回归模型的预测结果去逼近真实标记y的对数几率(logit)。
逻辑回归:Logistic回归,用于分类问题,label为离散型数据。无须事先假设数据分布。
线性回归:用于回归问题,label为连续型数据。假设特征变量与响应变量满足线性关系。
2、 逻辑回归的原理
以二分类任务为例,以下过程可推广至多分类任务。
通过对数几率函数(sigmoid函数),将模型输出的真实标记y与线性模型的预测值联系起来:
这样,模型就变成了:
两边取对数:
将y实为正例(y=1)的概率,1-y实为反例(y=0)的概率,两者的比值称为“几率”(odds):
对几率取对数,得到“对数几率”(log odds或logit):
代入2.1式,且将y、1-y视为后验概率,得到:
进一步,可得:
y值是一个连续的变量,逻辑回归的做法是划定一个阈值(如0.7,具体可根据实际问题调整),y>0.7划分为一类,y<0.7划分为另外一类。
3、逻辑回归损失函数推导及优化
通过极大似然估计估计逻辑回归模型参数w和b:
这样,逻辑回归模型就转化成了以对数似然函数为目标函数的最优化问题,可采用梯度下降法、迭代尺度法、牛顿法、拟牛顿法等方法求解对数似然函数的极大值。
相对地,损失函数应达到极小值,可令逻辑回归的损失函数为:loss function = -L(w),这样求解对数似然函数的极大值就等于求解损失函数的极小值。
4、 正则化与模型评估指标
4.1 正则化
过拟合的解决方法:减少模型复杂度(正则化)、增加训练集个数。
正则化以最小化损失和复杂度为目标(结构风险最小化),对逻辑回归来说可以在目标函数(经验风险)中加上一个λ*正则化项(L1或L2范数)。
以L2正则化为例:
L2 regularization term=||ω||22=ω12+ω22+…+ωn2
标量λ为正则化率,增大λ将增强正则化的效果,过高的λ也会导致欠拟合风险。
4.2 模型评估指标
错误率:分类错误的样本数/样本总数
精度:分类正确的样本数/样本总数
查准率/准确率(precision):P = TP/(TP+FP),即正确预测的正例数 /预测正例总数
查全率/召回率(recall):R = TP/(TP+FN),即正确预测的正例数 /实际正例总数
F1:F1=2PR/(P+R),即查准率和查全率的调和平均
ROC曲线:纵轴是“真正例率”(TPR = TP/(TP+FN)),横轴是“假正例率”(FPR = FP/(TN+FP))
AUC:可通过对ROC曲线下各部分面积求和而得,考虑样本预测的排序质量
其他:代价敏感错误率、代价曲线,为权衡不同类型错误所造成的不同损失,假设非均等代价
5、逻辑回归的优缺点
优点:
- 直接对分类可能性进行建模,无需事先假设数据分布(西瓜书这么写,但比如二分类任务其实假设数据服从伯努利分布),避免了假设分布不准确所带来的的问题
- 不仅预测除“类别”,还可得到近似概率预测,对许多需利用概率辅助决策的任务很有用
- 对率函数是任意阶可导的凸函数,有很好地数学性质,很多数值优化算法都可直接用于求取最优解
- 模型简单,可解释性好,从特征的权重可以判断特征对结果的影响
缺点:
- 容易欠拟合,分类精度可能不高,很难去拟合数据的真实分布,对局部数据把握力不高
- 很难处理数据不平衡问题,对极值敏感
- 不适合处理非线性数据,只能处理线性可分的数据,因为其决策边界是线性的
- 逻辑回归本身无法筛选特征
参考(2)(3)
6、样本不均衡问题解决办法
逻辑回归等分类方法的共同基本假设:不同类别的训练样例数目相当。
类别不平衡:分类任务中不同类别的训练样例数目差别很大。
存在的问题:会对学习过程造成困扰,比如样本大部分都是反例、正例很少,则训练的学习器没有价值,因为无法预测出任何正例。
解决方法:再缩放(rescaling),假设反例过多,正例很少
- 欠采样(undersampling):去除一些反例使得正、反例数目接近。不能随机丢弃反例,比如可以通过EasyEnsemble算法,利用集成学习机制将反例划分为若干个集合供不同学习器使用,这样看来对每个学习器都进行了欠采样,但是在全局看来却不会丢失重要信息。
- 过采样(oversampling):增加一些正例使得正、反例数目接近。不能简单对正例样本进行重复采样,可以通过SMOTE算法对训练集的正例进行插值来产生额外的正值
- 阈值移动(threshold-moving):直接基于原始训练集进行学习,但在用训练好的分类器进行预测时,基于样本中正反例比例对预测值进行调整
7、sklearn参数
from sklearn import linear_model.LogisticRegression
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)
其中:
1.penalty=‘l2’ : 字符串‘l1’或‘l2’,默认‘l2’,用来指定正则化参数。
2.C=1.0 : C为正则化系数λ的倒数,必须为正数,默认为1。和SVM中的C一样,值越小,代表正则化越强。
3.fit_intercept=True : 是否存在截距,默认存在。
4.solver=‘liblinear’ : solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择。
其他常用方法:
- 1.fit(X, y, sample_weight=None)
- 拟合模型,用来训练LR分类器,其中X是训练样本,y是对应的标记向量
返回对象,self - 2.predict(X)
- 用来预测样本,也就是分类,X是测试集。返回array。
- 3.score(X, y, sample_weight=None)
- 返回给定测试集合的平均准确率(mean accuracy),浮点型数值。
对于多个分类返回,则返回每个类别的准确率组成的哈希矩阵。
参考:
1.https://feisky.xyz/machine-learning/classification/logistic.html
2.https://www.cnblogs.com/ModifyRong/p/7739955.html
3.https://www.cnblogs.com/fernnix/p/4100871.html