Logistic Regression 编程实现


[toc]

1. Logistic Regression 介绍

首先阅读一下 Logistic Regression的 wiki页面

关于Logistic Regression的方方面面wiki上总结的很好很强大了,我没有必要再重复。直接记录一下编程实现过程吧。


梯度下降法

当我们把问题转化成了目标函数的最优化问题后,我们就要对目标函数求极小值或者极大值,就要用到最优化理论中的方法,求最小值最常用的就是梯度下降方法。

梯度wiki

梯度是什么?

将一维函数中 微分 概念推广到多维函数中对应的概念就是梯度

假设在笛卡尔坐标系和欧几里得空间的定义内有一个函数$f(x_0,x_1,…,x_n)$,它可微分,并且函数值是标量值,那么这个函数的梯度就是一个 vector,这个vector里存储了$n$个变量的偏导数,即vector (partial_derivatives),如果对应于一元函数$f(x)$,那么梯度就是它的导数$\frac {df(x)} {dx}$

Gradient Decent wiki页面

梯度下降法是一种最优化方法,它是一种迭代算法,选取适当的初始值$x^{(0)}$,迭代的每一步,更新$x$的值,进行目标函数的极小化,直到收敛。由于梯度方向是使目标函数值下降最快的方向,在迭代的每一步,以负梯度方向更新x的值,从而达到减少函数值的目的。

算法描述:

  • 输入: 目标函数$f(x)$,梯度函数 $g(x) = \nabla f(x) $,计算精度 $\mathcal{E}$;
  • 输出: $f(x)$的极小值点$x^*$
  1. 取初值$ x^{(0)} \in R^n $,置 k = 0
  2. 计算$ f(x^{(k)} ) $
  3. 计算梯度 $ g_k = g( x^{(k)}) $,
    • a) 当$ \left \lVert g_k \right \rVert $ $\lt \mathcal{E} $ 时,停止迭代,令 $ x^* = x ^{(k)}$
    • b) 否则 令$p_k = -g(x^{(k)})$ ,求 $ \lambda_k $,使得 $$ f(x^{(k)}+\lambda_kpk = \min{\lambda \ge 0 } f(x^{(x)} + \lambda p_k) $$
  4. 置 $x^{(k+1)} = x ^{(k)} + \lambda_k p_k$, 计算$f(x^{(k+1)})$
    当$\left \lVert f(x^{(k+1)}) - f(x^{(k)}) \right\rVert \lt \mathcal{E}$ 或者 $ \left\lVert x^{(k+1)}- x^{(k)} \right\rVert \lt \mathcal{E} $的时候,停止迭代,令 $x^* = x^{(k+1)} $
  5. 否则,置k = k+1 ,跳转到 3

当目标函数是凸函数的时候,梯度下降法的解是全局最优解,一般情况下,起解部保证是全局最优解,梯度下降法的收敛速度也未必是很快的。

梯度下降编程分类

  • “batch” gradient descent 批处理梯度下降
    “ Batch” : each step of gradient descent uses all the training examples.

    每一步计算用到了所有的样本点

  • stochastic gradient descent 随机梯度下降

    每一步计算使用一个随机选取的样本点来计算


2. 编程实现过程

数据集选取

编程实现

3. Logistic Resgression 特点总结

  • 优点: 计算代价不高,容易实现
  • 缺点: 容易欠拟合,分类精度不高
  • 适用数据类型: 数值型和标称型数据。

Comments

⬆︎TOP