Logistic Regression 以及 梯度下降法 学习笔记
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^*$
- 取初值$ x^{(0)} \in R^n $,置 k = 0
- 计算$ f(x^{(k)} ) $
- 计算梯度 $ 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) $$
- 置 $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)} $ - 否则,置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 特点总结
- 优点: 计算代价不高,容易实现
- 缺点: 容易欠拟合,分类精度不高
- 适用数据类型: 数值型和标称型数据。