06 逻辑回归

目录

1. LR逻辑回归

1.1 需要解决的问题

1.2 问题的抽象/本质

2. 解决方案

2.1 建模

2.1.1 原理

2.1.2 决策边界                 

2.2 目标函数——最大似然估计

2.3 参数估计

2.4 过拟合和欠拟合

2.4.1 逻辑回归的过拟合现象

2.4.2 避免过拟合方法——正则化

2.4.3 逻辑回归使用正则化,避免过拟合

2.5 模型结果评估

2.5.1 混淆矩阵 准确度 & 精确率 & 召回率

2.5.2 PR曲线

2.5.3 ROC & AUC

3. 逻辑回归实践

3.1 逻辑回归的简单案例

3.2 个性化排序


-------出自火哥

1. LR逻辑回归

1.1 需要解决的问题

信用舆情预测:根据一个人的特征,怎么判断该人是否会逾期呢?

 年龄

 工资

 学历

 是否逾期

 20

 4000

 本

 1

 25

 5000

 专

 0

 21

 6000

 本

 0

 25

5000

 专

1

 28

 8000

 本

 0

 27

 7000

 本

 ???

1.2 问题的抽象/本质

学习输入到输出的映射:Y=f(x)

  • X:输入
  • Y:输出,“是” “否”两种情况,即二分类问题

2. 解决方案

使用逻辑回归解决二分类问题

2.1 建模

2.1.1 原理

定义一个条件概率:p(Y|X),相当于用模型来捕获输入X和输出Y之间的关系

2.1.2 决策边界                 

决策边界:即p(y=1 | x, w) == p(y=0 | x, w)

2.2 目标函数——最大似然估计

2.3 参数估计

凸函数

  • 逻辑回归是凸函数

优化算法

  • GD(Gradient Descent)
  • SGD(Stochastic Gradient Descent)

举例

一元凸函数利用梯度下降法求解参数

梯度下降法求解逻辑回归的最优参数w,b

对W求导

对b求导

迭代更新,找到使得目标函数最小的w,b(即最优的w,b)

优化算法总结

GD(Gradient Descent)

SGD(Stochastic Gradient Descent)

2.4 过拟合和欠拟合

2.4.1 逻辑回归的过拟合现象

2.4.2 避免过拟合方法——正则化

(1)L1正则和L2正则

(2) 弹性网

弹性网结合了L1正则和L2正则,是一种优化的正则方法(类比随机批量梯度下降法:结合了批量梯度和随机梯度下降的优点)。

2.4.3 逻辑回归使用正则化,避免过拟合

目标:避免w过大,避免w过大的最主要的原因是:容易导致梯度更新波动大

2.5 模型结果评估

可参考博客:分类算法中准确率的一些问题_zhao_crystal的博客-CSDN博客_分类算法的准确率

2.5.1 混淆矩阵 准确度 & 精确率 & 召回率

例子:

混淆表

分类器预测的类别

军事

科技

实际

类别

军事(60)

50

10

科技(40)

5

35

准确度Accuracy:(50 + 35) / (35 + 5 + 10  + 50) = 85%

军事

科技

精确率(Precision)

预测为某类,且实际也是某类的概率

50 /(50+5)

35/(10+35)

召回率(Recall)

实际是某类,且预测为某类的概率

50 /(50+10)

35 /(5 + 35)

2.5.2 PR曲线

PR曲线即 precision recall curve, 横坐标为precision,纵坐标为 recall。根据不同的阈值,得到不同的precision,recall 对,从而绘制而成的曲线

2.5.3 ROC & AUC

视频讲解:https://wq1myhtg4r.feishu.cn/minutes/obcn3edm716436jrm8466i6g

(1) ROC曲线

(2) AUC指标

负样本排在正样本前面的概率

# cat auc.raw | sort -t$'\t' -k2g |awk -F'\t' '($1==-1){++x;a+=y;}($1==1){++y;}END{print 1.0-a/(x*y);}'

  • x*y:正负样本pair对
  • a:错误的pair对
  • a/x*y:错误的概率
  • 1-a/x*y:正确的概率

3. 逻辑回归实践

3.1 逻辑回归的简单案例

Python

# 梯度下降(GD)

% python GD.py

# 随机梯度下降(SGD)

% python SGD.py

# 预测代码

% predict.py

3.2 个性化排序

3.2.1 基本逻辑

 

3.2.2 具体实现步骤

Python

 # data

 # # music_meta [itemid, name, desc, total_timelen, location, tags] item 信息

 # # user_profile.data [userid, gender, age, salary, location] user 信息

 # # user_watch_pref.sml [userid, itemid, watch_len, hour] user关于item的行为

 # 将多个文件合并成一个文件

 % python gen_base.py

 # 产生模型数据

 % python gen_samples.py

 # 模型训练,并保存模型

 % python lr.py

 # 得到 真实值 T.txt 预测的概率 P.txt (其中,第一列是为0的概率,第二列是为1的概率)

 % python lr_auc.py

 # 取出 p.txt 的第二列, 预测为1的概率

 % cat P.txt| awk -F'\]' '{print $1}' | awk '{print $2}' > P_2.txt

 # 将T.txt 和 P_2.txt 粘贴在一起,输出auc.raw

 % paste T.txt P_2.txt > auc.raw

 # 评估auc

 % cat auc.raw | sort -t$'\t' -k2g |awk -F'\t' '($1==0){++x;a+=y;}($1==1){++y;}END{print 1.0-a/(x*y);}'

 # 评估 PR

 % python pr.py

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值