认识
是一个经典的二元(y=0 或 y=1) 分类算法, 不是回归
输入特征还是线性回归, 输出是 [0,1] 的一个概率值, 其判别函数的形式为:
P(y=1|x)=11+e−θTx
至于为什么是这样的形式, 上篇的logist 函数推导已经说明了,不在赘述啦
-
x=[x1,x2,x3...xn]
-
θ=[θ0,θ1,θ2...]
-
θTx=θ0+θ1x1+θ2x2+θ3x3...
里面的一大坨就是妥妥的线性模型呀.
判别: 当 P(y=1|x) 的值 大于0.5, 输出 1; 否则输出 0;
分类 vs 回归
对目标函数做一个推演:
P(y=1|x)=P=11+e−θTx 则:
P(y=0|x)=1−P=1−11+e−θTx=1+e−θTx−11+e−θTx=11+eθTx (注意, 负号没了,别化简错哦)
则两个类别概率的比值:
P(y=1)P(y=0)=P1−P=11+e−θTx11+eθTx
=1+eθTx1+e−θTx
=1+eθTxeθTx+1eθT
=eθTx
则 log(两个类别概率的比值):
ln(P1−P)=θTx
这不就是最熟悉的 线性模型了嘛, 也可以这样说:
逻辑回归, 可看作对线性模型做了一个车 "逻辑" 变换, 输出是将值映射到 [0,1], 以0.5为界, 达到分类效果
也就说, 可以用线性的方式来, 研究 logist 这样 非线性的 问题.
模型应用case
年龄(x1) |
收入(x2) |
是否买车(1,0) |
20 |
3 |
0 |
23 |
7 |
1 |
31 |
10 |
1 |
42 |
13 |
1 |
50 |
7 |
0 |
60 |
5 |
0 |
模型定义为:
P(y=1|x,θ)=11+eθ′x
求解出: θ0=−0.04, θ1=−0.2,θ2=0.92
即模型: P(y=1|x,θ)=11+e−0.04−0.2x1+0.92x2
- 预测 : 现在来了一个 22岁, 收入是 8的人, 买车的概率为: 0.23 < 0.5 即输出 0 不买 (瞎算的哈)
- 参数1: 年龄 -0.2 表示, 如果年龄增加 1岁, 买车和不买车的概率比值 与之前 降低 e−0.2=0.82 倍
- 参数2: 收入 0.92 表示, 如果收入 增加1(万), 买与不买的概率比值 比之前 增加 e0.92=2.58倍
统一形式
从上知逻辑回归是二元(0, 1) 分类嘛, 因此:
P(y=1|θ,x)=11+e−θ′x
P(y=0|θ,x)=1−11+e−θ′x=1+eθTx1+e−θTx
将上面两个式子结合起来可写为:
P(y|θ,x)=[P(y=1|θ,x)]y+[1−P(y=y|θ,x)]1−y
θT, θ′ 都表示转置, 不是求导哈, 这样写一来是可以, 二是为了写latex 方便,编辑公式太难了.
y = 1 或 y= 0
目标函数(Loss)
既然是概率问题, 而优化的参数是 theta, 当然采用 极大似然 啦
即将每一个样本点都考虑进来, 概率之积最大的情况下, 对参数 做优化.
max L(θ,x)=n∏i=iP(yi|θ,xi), 标准化后, 等价于:
min L(θ,x)=−n∏i=iP(yi|θ,xi) 将之前的合并形式展开得:
L(θ,x)=−n∏i=1[P(yi=1|θ,xi)]y[1−P(yi=1|θ,xi)]1−yi
对其取 log, 乘法变加法, 利于推导和能让计算机运算, 毕竟存储 小数是有 "精度的嘛".
log[L(θ,x)]=−n∑i=1y logP(yi=1|θ,xi)+(1−yi)log(1−P(yi=1|θ,xi))
- y = 0 或 1, 因此将 y 从"次方" 拿下来是合理的
- 目的是最优, 做log变换也是也是成立的
将其写得简洁一波.
令 ϕ(x)=11+e−x 即本例的P(y=1|x,θ)=11+e−θTx可写为ϕ(θ′x)
则最终loss 可简写为:
L(θ,x)=−n∑i=1[yilogϕ(θ′xi)]+[(1−yi)log(1−ϕ(θ′xi))]
对 theta 求一阶偏导数(求解)
∑ 表示i..n 求和, 体谅一波 latex 有些难编写
ϕ(x)′=ϕ(x)(1−ϕ(x)) 分数求导即可轻易证明
注意求导的链式法则哦
∇θ=(−∑yiϕ(θ′xi)(1−ϕ(θ′xi))xiϕ(θ′xi)+(1−yi)−ϕ(θ′xi)(1−ϕ(θ′xi))xi1−ϕ(θ′xi))
=−∑(xi[yi−ϕ(θ′xi)−(1−yi)(ϕ(θ′x))])
=−∑(xi[yi−yiϕ(θ′xi)−ϕ(θ′xi)+yiϕ(θ′xi)])
=∑ϕ(θ′xi−yi)xi
其中: ϕ(x)=11+e−x 而ϕ(x)′=ϕ(x)(1−ϕ(x))
如需求解参数 theta, 将 ϕ(x) 反代回去即可
即: n∑i=1xi1+e(yi−θ′xi)=0
...
就这样吧, 不想整了, 此处的目的主要在于能求解出 theta 的 一阶偏导数的形式.
证明 loss 函数是凸函数
-
定义证明: f(ax+(1−a)y)≤af(x)+(1−a)f(y)
-
一阶展开: f(x+a)>f(x)+af(x)′+ei
-
求二阶导: 海塞矩阵 Hessian Matrix 是 半正定即可.
Hessian: 对多元函数求二阶偏导数构成的矩阵啦.
栗子: 二元函数 f(x, y) 的Hessian: [[二阶偏x, 偏x偏y], [偏y偏x, 偏y]], 组成2x2的矩阵
半正定: ∀x 满足xTAx≥0 , 则A是半正定
简单证明
由上L(θ,x)=−1n∑ylogϕ(θtx)+(1−y)log(1−ϕ(θtx))其中ϕ(x)=11+e−x, ϕ(x)′=ϕ(x)(1−ϕ(x))里面是一个复合函数,只需证明log(ϕ(thetax))的二阶导数"≥0"对于F(x)=logϕ(θtx)F(θ)′=ϕ(θtx)(1−ϕ(θtx))ϕ(θtx)=1−ϕ(θtx)>=0F(θ)′′=(11+e−θtx)′=e−θtx(1+e−θtx)2>=0因此目标函数是凸函数.
严格证明
已知损失函数为:
L(θ,x)=−n∑i=1[yilogϕ(θ′xi)]+[(1−yi)log(1−ϕ(θ′xi))]
ϕ(x)=11+e−x, 易推得 ϕ(x)′=ϕ(x)(1−ϕ(x))
y = 1或0
其实,只需考虑 f(θ,x)=−logϕ(θ′x) , 第二项 其实跟第一项是一样的(log 的性质, 展开, 不信自己推).
先对 theta 求一阶导:
∇θ=−ϕ(θ′x)(1−ϕ(θ′x))ϕ(θ′x)x=[ϕ(θ′x)−1]x
再对 theta 求二阶导:
∇2θ=∇θ([ϕ(θ′x)−1]x)
跟 x 没有关系,看作常数, 只跟 theta 相关
注意求导的链式法则哦
x 是向量
=ϕ(θ′x)(1−θ′x)xx
=ϕ(θ′x)(1−θ′x)xxT
用半正定判别式: zTAz的符号
∀z zTϕ(θ′x)(1−ϕ(θ′x))xxTz
其中,
ϕ(θ′x)(1−ϕ(θ′x)) 是实数, 可以移动位置
x, z 都是列向量
即调换下位置可为:
ϕ(θ′x)(1−ϕ(θ′x))zTxxTz
zTx 和xzT是相等的表示内积,是个实数,
即可再化简为:
ϕ(θ′x)(1−ϕ(θ′x))(zTx)2
因为 ϕ(x)∈[0,1] 所以该式子 大于或等于0 恒成立, 第二项也类似, 两个半正定的线性组合, 也是半正定, 即证海塞矩阵是半正定的, 即证 loss 是 凸函数
总体感觉, 逻辑回归的推导, 相对于 SVM 还是要简单许多的呀, 都不用对偶, 直接偏导就可以了, 难度也不大, 但用处却是非常大的, 结合了线性模型, 同时, 它是凸函数, 意味着求解时, 可以通过梯度下降法来找到全局最优解 . 毕竟是我最喜欢的三个算法之一了, 另两个是 SVM 和 决策树, 当然 LR已经包含了呀.
逐步将经典的ML算法都手推一遍, 才本质上来认识世界, 真的能到达
**随心所欲不逾矩呢? **
还是,
万物并作,吾以观复?
耐心和恒心, 总会获得回报的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通