目录
-------出自火哥
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 参数估计
凸函数 |
|
优化算法 |
|
举例 | 一元凸函数利用梯度下降法求解参数 |
梯度下降法求解逻辑回归的最优参数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的博客-优快云博客_分类算法的准确率
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);}'
|
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 |