主要内容:
- logistic Regression,牛顿方法。
- 指数分布族(exponential family)
- 广义线性模型(GLMs:Generalized Linear Models)
1. 回归上一篇:
上一篇讲了 Logistic Regression 模型,它是一个分类算法,模型表示为: P ( y = 1 ∣ x ; θ ) = h θ ( x ) P( y = 1 | x; \theta) = h_\theta(x) P(y=1∣x;θ)=hθ(x),其中 h θ ( x ) h_\theta(x) hθ(x)表示为: h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^{T}x}} hθ(x)=g(θTx)=1+e−θTx1。 其对数似然率表示为: l ( θ ) = l o g L ( θ ) = ∑ i = 1 m y ( i ) l o g h ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h ( x ( i ) ) ) l(\theta) = log L(\theta) = \sum_{i=1}^m y^{(i)} log h(x^{(i)}) + (1 - y^{(i)}) log (1 - h(x^{(i)})) l(θ)=logL(θ)=i=1∑my(i)logh(x(i))+(1−y(i))log(1−h(x(i))),对它进行求导:
, 使用梯度上升的规则来进行极大似然估计,得出 Logistic Regression 中的参数 θ \theta θ: θ j : = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j := \theta_j + \alpha (y^{(i)} - h_\theta(x^{(i)})) x_j^{(i)} θj:=θj+α(y(i)−hθ(x(i)))xj(i), 这里使用梯度上升的规则,即一次更新只使用一个训练样本。
2. 牛顿方法:
它是用来进行模型拟合的算法,对 Logistic Regression 进行拟合,而且运行速度比梯度上升算法快。
2.1 描述牛顿方法:
假设函数 f ( θ ) f(\theta) f(θ),为了找到 θ \theta θ,使得 f ( θ ) = 0 f(\theta) = 0 f(θ)=0。思考问题,并将问题演化为算法,用极大似然估计的模型对这个函数进行拟合,如图表示,其演算过程:
解释:先初始化参数 θ \theta θ(图上横轴),记作 θ ( 0 ) \theta^{(0)} θ(0),牛顿方法在这点运行,并在这点上对 f f f 函数求值,再计算这点上的导数。 之后对这一点上的 f f f 值进行线性逼近,作这点上的切线,交于 x x x 轴,标记为 θ ( 1 ) \theta^{(1)} θ(1)。同样,在牛顿方法下一次迭代时,在 θ ( 1 ) \theta^{(1)} θ(1) 上做同样的事情。
推出: θ ( 1 ) = θ ( 0 ) − f ( θ ( 0 ) ) f ′ ( θ ( 0 ) ) \theta^{(1)} = \theta^{(0)} - \frac{f(\theta^{(0)})}{f^{'}(\theta^{(0)})} θ(1)=θ(0)−f′(θ(0))f(θ(0))。更一般的说,对于牛顿方法的一次迭代有: θ ( t + 1 ) = θ ( t ) − f ( θ ( t ) ) f ′ ( θ ( t ) ) \theta^{(t + 1)} = \theta^{(t)} - \frac{f(\theta^{(t)})}{f^{'}(\theta^{(t)})} θ(t+1)=θ(t)−f′(θ(t))f(θ(t))。 对于上面这个算法来说,它能找到一个 θ \theta θ,使得 f ( θ ) = 0 f(\theta) = 0 f(θ)=0。 同理,采用对数似然率,使函数最大化来求值。 假设函数 l ( θ ) l(\theta) l(θ),要使它最大化,令导数值为0,即需要找到一个点,使导数值为0,则表示为: θ ( t + 1 ) = θ ( t ) − l ′ ( θ ( t ) ) l ′ ′ ( θ ( t ) ) \theta^{(t + 1)} = \theta^{(t)} - \frac{l^{'}(\theta^{(t)})}{l^{''}(\theta^{(t)})} θ(t+1)=θ(t)−l′′(θ(t))l′(θ(t))。这个式子一定能找到一个局部最优值使函数最大化。
实际上,牛顿方法是一个收敛速度快的算法,收敛速度术语称为:二次收敛。 即它的每一次迭代都会使函数的解的有效数字的数目加倍,且不考虑常量因子,如:一次迭代中,函数解距离最优解还差 0.01,误差即即为 0.01,一次迭代过后,误差的量级编程 0.001的次方,以此类推; 这样的性质只有当函数解距离最优解的值足够近时才会出现; 但由于常熟因子或其他因素可能会使得收敛速度减慢。
算法的一般化表示为:
θ ( t + 1 ) = θ ( t ) − H − 1 ∇ θ l \theta^{(t +1)} = \theta^{(t)} - H^{-1} \nabla_\theta l θ(t+1)=θ(t)−H−1∇θl, ∇ θ l \nabla_\theta l ∇θl 是目标函数的梯度,<