Python逻辑回归原理及实际案例应⽤
前⾔
⽬录
1. 逻辑回归
2. 优缺点及优化问题
3. 实际案例应⽤
4. 总结
正⽂
在前⾯所介绍的线性回归, 岭回归和Lasso回归这三种回归模型中, 其输出变量均为连续型, ⽐如常见的线性回归模型为:
其写成矩阵形式为:
现在这⾥的输出为连续型变量, 但是实际中会有'输出为离散型变量'这样的需求, ⽐如给定特征预测是否离职(1表⽰离职, 0表⽰不离职). 显然这时不能直接使⽤线性回归模型, ⽽逻辑回归就派上⽤场了.
1. 逻辑回归
引⽤百度百科定义
逻辑(logistic)回归, ⼜称logistic回归分析,是⼀种⼴义的线性回归分析模型,常⽤于数据挖掘,疾病⾃动诊断,经济预测等领域。
也就是说逻辑回归是从线性回归模型推⼴⽽来的, 我们从假设函数开始说起.
1. 假设函数
现假设因变量取值0和1, 在⾃变量X的条件下因变量y=1的概率为p, 记作p=P(y=1|X), 那么y=0的概率就为1-p, 把因变量取1和取0的概率⽐值p/(1-p)称为优势⽐, 对优势⽐取⾃然对数, 则可以得到Sigmoid函数:
令Sigmoid(p)=z, 则有:
⽽Logistic回归模型则是建⽴在Sigmoid函数和⾃变量的线性回归模型之上(这可能就是为什么带有'回归'⼆字的原因吧), 那么Logistic回归模型可以表⽰为:正则化最小二乘问题
上式也常常被称为逻辑回归模型的假设函数, 其函数图像为:
通过图像可以看出
的取值范围为
, h(x)的取值范围为[0, 1], 对于⼆分类问题来说, h(x)>=0.5则y=1, h(x)<0.5则y=0, ⽽且通过图像得知:="">
时, h(x)>=0.5, 因此
时y=1, 否则y=0.
模型的假设函数知道了, 接下来看看损失函数.
2. 损失函数
既然逻辑回归是建⽴在线性回归模型之上, 那么我们先来回顾线性回归的损失函数:
如果将我们逻辑回归的假设函数代⼊上式损失函数, 绘制出来的图像则是⾮凸函数, 其很容易产⽣局部最优解, ⽽⾮全局最优解, 为了到使得全局最优解, 我们需要构造⼀个凸函数.
由于对数函数能够简化计算过程, 因此这⾥也是通过对数函数来构建, 先来回归下对数函数的图像(原图来⾃百度百科):
通过上图可以发现绿线部分与我们要构造的凸函数较接近. 当a=e时, 绿线部分可以分别表⽰为: -log e(x)和-log e(1-x). 现将x替换为h(x)并同时加⼊输出变量y (取值为1或0), 则有:
当上式中的y=1时, 其结果为-log e h(x); 当y=0时, 其结果-log e[1-h(x)].
最后, 将上式代⼊我们的损失函数中, 则有:
当然, 也可以⽤统计学中的极⼤似然法构造出上式损失函数. 损失函数有了, 下⼀步则是求解损失函数最⼩的算法了.
3. 算法
常⽤的求解算法有梯度下降法, 坐标轴下降法, 拟⽜顿法. 下⾯只介绍梯度下降法(其他⽅法还未涉及)
你也许会有疑问, 既然是线性回归模型推⼴⽽来, 那么为什么没有最⼩⼆乘法呢? 最⼩⼆乘法是⽤来求解最⼩误差平⽅和的算法, ⽽误差的平⽅和正是我们上⾯提到的线性回归的损失函数, 通过其构造出来的逻辑回归的损失函数是⾮凸的不容易到全局最优解, 故不选⽤最⼩⼆乘法, ⽽通过极⼤似然法则可以构造出凸函数, 进⽽可以使⽤梯度下降法进⾏求解.
对于梯度下降法的理解在这节, 这⾥直接给出其表⽰:
具体的求解过程:
因此, 我们的梯度下降法可以写成(其中, x0=1):
上式也被称为批量梯度下降法, 另外两种: 随机梯度下降法和⼩批量梯度下降法分别表⽰为:
2. 优缺点及优化问题
1. 优点
1) 模型简单, 训练速度快, 且对于输出变量有很好的概率解释
2) 可以适⽤连续型和离散型⾃变量.
3) 可以根据实际需求设定具体的阀值
2. 缺点
1) 只能处理⼆分类问题.
2) 适⽤较⼤样本量, 这是由于极⼤似然估计在较⼩样本量中表现较差.
3) 由于其是基于线性回归模型之上, 因此其同样会出现多重共线性问题.
4) 很难处理数据不均衡问题
3. 优化
1) 可以在⼆分类上进⾏推⼴, 将其推⼴到多分类回归模型
2) 对于多重共线性问题, 也可以通过删除⾃变量, 进⾏数据变换, 正则化, 逐步回归, 主成分分析等⽅法改善, 对于正则化逻辑回归同样有两种: L1和L2,其分别表⽰为:
L1正则化
L2正则化
3. 实际案例应⽤
1. 数据来源及背景
数据来源: www.kaggle/jiangzuo/hr-comma-sep/version/1
该数据集包含14999个样本以及10个特征, 通过现有员⼯是否离职的数据, 建⽴模型预测有可能离职的员⼯.
2. 数据概览
1) 查看前2⾏和后2⾏数据
import pandas as pddf = pd.read_csv(r'D:\Data\HR_comma_sep.csv')pd.set_option('display.max_rows', 4)df
10个字段分别是: 员⼯对公司满意度, 最新考核评估, 项⽬数, 平均每⽉⼯作时长, ⼯作年限, 是否出现⼯作事故, 是否离职, 过去5年是否升职, 岗位, 薪资⽔平.
员⼯岗位有10种, 其中最多的是销售, 多达4140.薪资⽔平共有3个等级, 最多的是低等, 多达7316.
2. 对公司满意度与是否离职的关系
3. 最新考核评估与是否离职的关系
boxplot = Boxplot('最新评估与是否离职关系图', title_pos='center')x_axis = ['在职', '离职']y_axis = [df[df.left == 0].evaluation.values, df[df.left == 1].evaluation.values]boxplot.add('', x_axis, boxplot.prepare_data(y_axis))der()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论