认识
是一个经典的二元(y=0 或 y=1) 分类算法, 不是回归
输入特征还是线性回归, 输出是 [0,1] 的一个概率值, 其判别函数的形式为:
(P(y=1|x) = frac {1}{1+e^{- heta ^Tx}})
至于为什么是这样的形式, 上篇的logist 函数推导已经说明了,不在赘述啦
(x = [x_1, x_2, x_3...x_n])
( heta = [ heta_0, heta_1, heta_2...])
( heta ^T x = heta _0 + heta _1x_1 + heta_2x_2 + heta_3x_3...)
里面的一大坨就是妥妥的线性模型呀.
判别: 当 (P(y=1|x)) 的值 大于0.5, 输出 1; 否则输出 0;
分类 vs 回归
对目标函数做一个推演:
(P(y=1|x) = P= frac {1}{1+e^{- heta^T x}}) 则:
(P(y=0|x) = 1-P = 1 - frac {1}{1+e^{- heta^T x}} = frac {1+e^{- heta^T x}-1}{1+e^{- heta^T x}} = frac {1}{1+e^{ heta^Tx}}) (注意, 负号没了,别化简错哦)
则两个类别概率的比值:
(frac {P(y=1)}{P(y=0)} = frac {P}{1-P} = frac { frac {1}{1+e^{- heta^T x}}}{ frac {1}{1+e^{ heta^Tx}}})
(=frac {1+e^{ heta^Tx}} {1+e^{- heta^Tx}})
(=frac {1+e^{ heta^T x}}{frac {e^{ heta^Tx + 1}}{e^{ heta ^T}}})
(=e^{ heta^T x})
则 log(两个类别概率的比值):
(ln(frac {P}{1-P}) = heta ^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, heta) = frac {1}{1+e^{ heta'x}})
求解出: ( heta_0 = -0.04, heta_1 = -0.2, heta_2 = 0.92)
即模型: (P(y=1|x, heta) = frac {1}{1+e^{-0.04 -0.2 x_1 + 0.92x_2}})
- 预测 : 现在来了一个 22岁, 收入是 8的人, 买车的概率为: 0.23 < 0.5 即输出 0 不买 (瞎算的哈)
- 参数1: 年龄 -0.2 表示, 如果年龄增加 1岁, 买车和不买车的概率比值 与之前 降低 (e^{-0.2} =0.82) 倍
- 参数2: 收入 0.92 表示, 如果收入 增加1(万), 买与不买的概率比值 比之前 增加 (e^{0.92} =2.58)倍
统一形式
从上知逻辑回归是二元(0, 1) 分类嘛, 因此:
(P(y=1| heta, x) = frac {1}{1+e^{- heta'x}})
(P(y=0| heta, x) = 1- frac {1}{1+e^{- heta'x}} =frac {1+e^{ heta^Tx}} {1+e^{- heta^Tx}})
将上面两个式子结合起来可写为:
(P(y| heta, x) = [P(y=1| heta, x)]^y + [1-P(y=y| heta, x)]^{1-y})
( heta ^T, heta') 都表示转置, 不是求导哈, 这样写一来是可以, 二是为了写latex 方便,编辑公式太难了.
y = 1 或 y= 0
目标函数(Loss)
既然是概率问题, 而优化的参数是 theta, 当然采用 极大似然 啦
即将每一个样本点都考虑进来, 概率之积最大的情况下, 对参数 做优化.
(max L( heta, x) = prod limits _{i=i}^n P(y_i | heta, x_i)), 标准化后, 等价于:
(min L( heta, x) =- prod limits _{i=i}^n P(y_i | heta, x_i)) 将之前的合并形式展开得:
(L( heta, x) = - prod limits _{i=1} ^n [P(y_i=1| heta, x_i)]^y [1-P(y_i=1| heta, x_i)]^{1-y_i})
对其取 log, 乘法变加法, 利于推导和能让计算机运算, 毕竟存储 小数是有 "精度的嘛".
(log[L( heta, x)] = -sum limits_{i=1}^n y logP(y_i=1| heta, x_i) + (1-y_i)log(1-P(y_i=1| heta, x_i)))
- y = 0 或 1, 因此将 y 从"次方" 拿下来是合理的
- 目的是最优, 做log变换也是也是成立的
将其写得简洁一波.
令 (phi(x) = frac {1}{1+e^{-x}} 即本例的 P(y=1 | x, heta) = frac{1}{1+e^{- heta ^Tx}} 可写为 phi( heta'x))
则最终loss 可简写为:
(L( heta, x) = -sum limits _{i=1}^n [y_i log phi( heta'x_i)] +[(1-y_i)log(1- phi( heta'x_i))])
对 theta 求一阶偏导数(求解)
(sum) 表示i..n 求和, 体谅一波 latex 有些难编写
(phi(x)' = phi(x) (1-phi(x))) 分数求导即可轻易证明
注意求导的链式法则哦
( abla_{ heta} = (-sum y_i frac {phi( heta'x_i)(1-phi( heta'x_i)) x_i}{phi( heta'x_i)} + (1-y_i) frac {-phi( heta'x_i)(1-phi( heta'x_i))x_i}{1- phi( heta' x_i)}))
(=-sum (x_i[y_i-phi( heta' x_i) - (1-y_i)(phi( heta'x))]))
(=-sum (x_i[y_i- y_i phi( heta' x_i) - phi( heta'x_i) + y_i phi( heta'x_i)]))
(=sum phi( heta'x_i - y_i)x_i)
其中: (phi(x) = frac {1}{1+e^{-x}} 而 phi(x)' = phi(x) (1-phi(x)))
如需求解参数 theta, 将 (phi(x)) 反代回去即可
即: (sum limits _{i=1}^n frac {x_i}{1+e^{(y_i - heta'x_i)}} = 0)
...
就这样吧, 不想整了, 此处的目的主要在于能求解出 theta 的 一阶偏导数的形式.
证明 loss 函数是凸函数
-
定义证明: (f(ax + (1-a)y) le af(x) + (1-a)f(y))
-
一阶展开: (f(x + a) > f(x) + af(x)' + e_i)
-
求二阶导: 海塞矩阵 Hessian Matrix 是 半正定即可.
Hessian: 对多元函数求二阶偏导数构成的矩阵啦.
栗子: 二元函数 f(x, y) 的Hessian: [[二阶偏x, 偏x偏y], [偏y偏x, 偏y]], 组成2x2的矩阵
半正定: (forall _x 满足x^TAx ge 0) , 则A是半正定
简单证明
( 由上L( heta, x) = frac {-1}{n} sum ylogphi( heta^tx) + (1-y)log(1-phi( heta^tx)) \ 其中 phi(x) = frac{1}{1+e^{-x}}, phi(x)^{'} = phi(x)(1-phi(x)) \ 里面是一个复合函数, 只需证明 log(phi(theta^x))的二阶导数"ge0" \ 对于 F(x) = logphi( heta^tx) \ F( heta)^{'} = frac{phi( heta^tx)(1-phi( heta^tx))}{phi( heta^tx)} = 1-phi( heta^tx) >= 0 \ F( heta)^{''} = (frac{1}{1+e^{- heta^tx}})' = frac{e^{- heta^tx}}{(1+e^{- heta^tx)^2}} >= 0 \ 因此目标函数是凸函数. )
严格证明
已知损失函数为:
(L( heta, x) = -sum limits _{i=1}^n [y_i log phi( heta'x_i)] +[(1-y_i)log(1- phi( heta'x_i))])
(phi(x) = frac {1}{1+e^{-x}}), 易推得 (phi(x)' = phi (x) (1-phi(x)))
y = 1或0
其实,只需考虑 (f( heta, x) = -log phi( heta'x)) , 第二项 其实跟第一项是一样的(log 的性质, 展开, 不信自己推).
先对 theta 求一阶导:
( abla _ heta = -frac {phi( heta' x)(1-phi( heta'x))}{phi( heta'x)}x = [phi( heta' x) -1]x)
再对 theta 求二阶导:
( abla^2_ heta = abla _ heta([phi( heta'x) -1]x))
跟 x 没有关系,看作常数, 只跟 theta 相关
注意求导的链式法则哦
x 是向量
(=phi( heta'x)(1- heta'x)xx)
(=phi( heta'x)(1- heta'x)xx^T)
用半正定判别式: (z^T Az 的符号)
(forall_z z^T phi( heta'x)(1-phi( heta'x))xx^T z)
其中,
(phi( heta'x)(1-phi( heta'x))) 是实数, 可以移动位置
x, z 都是列向量
即调换下位置可为:
(phi( heta'x)(1-phi( heta'x)) z^T xx^T z)
(z^Tx 和 xz^T 是相等的 表示内积, 是个实数,)
即可再化简为:
(phi( heta'x)(1-phi( heta'x))( z^T x)^2)
因为 (phi(x) in [0,1]) 所以该式子 大于或等于0 恒成立, 第二项也类似, 两个半正定的线性组合, 也是半正定, 即证海塞矩阵是半正定的, 即证 loss 是 凸函数
总体感觉, 逻辑回归的推导, 相对于 SVM 还是要简单许多的呀, 都不用对偶, 直接偏导就可以了, 难度也不大, 但用处却是非常大的, 结合了线性模型, 同时, 它是凸函数, 意味着求解时, 可以通过梯度下降法来找到全局最优解 . 毕竟是我最喜欢的三个算法之一了, 另两个是 SVM 和 决策树, 当然 LR已经包含了呀.
逐步将经典的ML算法都手推一遍, 才本质上来认识世界, 真的能到达
**随心所欲不逾矩呢? **
还是,
万物并作,吾以观复?