3 寻找θ向量
前面介绍了如何在实际场景中使用预测函数计算概率,但是关键在于如何找到合适的 θ
3.1 最大似然公式
不过一般情况下,我们是没有办法轻易获得θ的。所以需要一些方法来推导出θ。如果训练集 T 为 {(x1,y1)(x2,y2)(x3,y3)(x4,y4)(x5,y5)...}
,其中:
xi 为自变量,
yi 为自变量对应的分类(1 或者 0), 可以应用对数似然估计法估计参数θ
3.1.1 先建立概率公式
P(y|x;θ)=(hθ(x))y(1−hθ(x))1−y(2)
这里 y=0 或者 1,这是一个常用的技巧,通过 y=0 或者 1 将两个概率公式组合在一起。
3.1.2 建立似然公式
L(θ|x1,x2,…,xn)=∏i=1nP(yi|xi;θ)=∏i=1n(hθ(x))yi(1−hθ(x))1−yi(3)
这个公式这样理解
- 1 批样本中每个样本的特征向量 x1,x2,…,xn
的和权重
θ 向量作为输入参数后面用 x 表示特征向量对每一个样本的预测值的效果评分
分数这么表示:概率>0.5 的判定为预测为 1, 分数就取 hθ(x)y, 概率<=0.5 的判定为预测为 0, 分数就取
1−hθ(x)1−y
获得这批样本的总评分
把每个样本的评分相乘就得到这批样本在取 θ 向量值时的总评分这里,连乘公式用到的 i=1..n, i 是样本编号,不是特征编号。需要用数学方式找到一个 θ3.1.3 建立最大对数似然公式
最大似然公式通常用对似然公式取对数来简化计算,因为
- 对数函数是单调递增的,可以用它来找似然公式的最大值
- 对数可以将乘法转换成加法,参考对数运算法则,从而简化计算
对上式采用最大对数似然公式
l(θ)=lnL(θ|x1,x2,…,xn)=ln∏i=1n(hθ(x))yi(1−hθ(x))1−yi=∑i=1n[yilnhθ(xi)+(1−yi)ln(1−hθ(xi))](4)
需要找到使得这个 l 函数为最大值时的 θ
3.2 损失函数
引入 J 函数把上面的求最大值问题被转换成了求 J 函数的最小值问题,J 函数也就是损失函数,损失自然越小越好.
J(θ)=−1nl(θ)(5)
的值。推导过程用到了偏导
J(θ)=−1nl(θ)=−1n∑i=1n[yilog(hθ(x))+(1−yi)log(1−hθ(x))](6)
现在需要通过多轮迭代,找到 θ
向量,使得 J 函数最小。迭代的梯度下降公式为:(这里 x 有偏导计算)
θj:=θj−α∂∂θjJ(θ)(7)
是新一轮计算得到的
θ 向量的第 j 个分量, 所以每轮迭代都会要计算
θ 向量的每个分量α 是下降步长∂∂θjJ(θ) 是对
J(θ) 的
θj对 J(θ)
求偏导的推演为
∂∂θjJ(θ)=∂∂θj(−1n∑i=1n[yilog(hθ(x))+(1−yi)log(1−hθ(x))])(8)
=−1n∂∂θj(∑i=1n[yilog(hθ(x))+(1−yi)log(1−hθ(x))])(9)
=−1n∑i=1n[∂∂θjyilog(hθ(x))+∂∂θj(1−yi)log(1−hθ(x))](10)
=−1n∑i=1n[yi1hθ(x)∂∂θjhθ(x)+(1−yi)11−hθ(x)∂∂θj(1−hθ(x))](11)
=−1n∑i=1n[yi1hθ(x)∂∂θjhθ(x)−(1−yi)11−hθ(x)∂∂θjhθ(x)](12)
继续推导
∂∂θjJ(θ)=−1n∑i=1n[yi1hθ(x)∂∂θjhθ(x)−(1−yi)11−hθ(x)∂∂θjhθ(x)]=−1n∑i=1n[yi1hθ(x)−(1−yi)11−hθ(x))]∂∂θjhθ(x)(13)
最后,将逻辑回归公式代入,进行推导
∂∂θjJ(θ)=−1n∑i=1n[yi1hθ(x)−(1−yi)11−hθ(x))]∂∂θjhθ(x)=−1n∑i=1n[yi1g(θTx)−(1−yi)11−g(θTx))]∂∂θjg(θTx)=−1n∑i=1n[yi1g(θTx)−(1−yi)11−g(θTx))]g(θTx)(1−g(θTx))∂∂θjθTx(14)
是复合函数求导,先对外层函数求导,再对内层函数求导,最后相乘外层函数是 sigmoid 函数,sigmoid 函数求导后就是 g(θTx)(1−g(θTx))∂∂θjJ(θ)=−1n∑i=1n[yi1g(θTx)−(1−yi)11−g(θTx))]g(θTx)(1−g(θTx))∂∂θjθTx=−1n∑i=1n[yi(1−g(θTx))−(1−yi)g(θTx)]∂∂θjθTx=−1n∑i=1n[yi−g(θTx)]∂∂θjθTx=−1n∑i=1n[yi−g(θTx)]xj=1n∑i=1n[hθ(xi)−yi)]xji(15)
最终求 θ
的梯度迭代公式为:
θj:=θj−α1n∑i=1n[hθ(xi)−yi)]xji(16)
- 说明
- 一般通过观察的大小来判断是否已经收敛到了极小点附近
- 那迭代多少次停止呢,spark ML 可以指定迭代次数和比较两次梯度变化或者 cost 变化小于一定值时停止
- 几何意义
此时 θ
向量就是多维线性函数的多个自变量, 几何上也是 n 维坐标系,每一轮迭代就是找到最新的下降点的 n 维坐标系的坐标,也就是
θ3.3.2 计算优化
- 向量化 Vectorization
Vectorization 是使用矩阵计算来代替 for 循环,以简化计算过程,提高效率
- 参考
3.4 正则化
3.4.1 用途
在样本数量小,特征数量多的情况下,容易出现过拟合。可以通过正则化来减轻过拟合的现象。正则化的方法,就是给代价函数后面加个“惩罚项”……来降低它对数据的拟合能力。
3.4.2 正则项
其实就是在损失函数里加上一个正则项,
J(θ)=−1nl(θ)=−1n∑i=1n[yilog(hθ(x))+(1−yi)log(1−hθ(x))]+λ2m∑j=1nθ2j(17)
现在的梯度下降公式是:
θj:=θj−α[1n∑i=1n[hθ(xi)−yi)]xji+1nλθj](18)
变大,就是惩罚多点,可以减轻过拟合问题,但是要小心造成欠拟合正则化参数
λ 变大,就是惩罚小点,可以减轻欠拟合问题,但是无法解决过拟合