步骤1:模型假设,如何选择模型;这里选一维线性模型
$y=w.x+b$
步骤2:模型评估,如何判断哪个模型好坏;一般是通过损失函数
$L(w,b)=\Sigma_{i}^{n}(\widehat{y_{i}}-(w.x_{i}+b))^2$,其中$\widehat{y_{i}}$是真实值
步骤3:模型优化,如何筛选出最优的模型;梯度下降是方法之一,这里用这个
$\frac{\partial{L(w,b)}}{\partial{w}}=\Sigma_{i}^{n}2.(\widehat{y_{i}}-(w.x_{i}+b)).(-x_{i})$
$\frac{\partial{L(w,b)}}{\partial{b}}=\Sigma_{i}^{n}2.(\widehat{y_{i}}-(w.x_{i}+b)).(-1)$
$w^{j+1}\leftarrow w^{j}-\eta.\frac{\partial{L(w,b)}}{\partial{w}}\vert w=w^{j},b=b^{j}$
$b^{j+1}\leftarrow b^{j}-\eta.\frac{\partial{L(w,b)}}{\partial{b}}\vert w=w^{j},b=b^{j}$
步骤4:必要的调整,如有
1,多模型组合
2,更多的输入参数,如输入x从一维变成n维,此时,步骤1模型假设为$y=\Sigma_i^{n}{w_{i}.x_{ji}}+b$,其中某个输入$x_{j}=[x_{j0},x_{j1}…]$
3,加入正则化,对于多维线性模型,L1正则化步骤2模型评估有$L(w,b)=\Sigma_{i}^{n}(\widehat{y_{i}}-(\Sigma w_{i}.x_{ji}+b))^2+\lambda.\Sigma\vert w_{i} \vert$
L2正则化步骤2模型评估有$L(w,b)=\Sigma_{i}^{n}(\widehat{y_{i}}-(\Sigma w_{i}.x_{ji}+b))^2+\lambda.\Sigma (w_{i})^2$
4,选择性使用AdaptiveGradient,或 StochasticGradient
5,多维度特征时,特征的归一化到同一范围,进行特征缩放,比如$x_{j}^{i}\leftarrow \frac{x_{j}^{i}-m_{i}}{\sigma_{i}}$,其中$x_{j}^{i}$是第j个训练数据的第i维特征值,$m_{i}$是所有训练数据的第i维特征值的均值,$\sigma_{i}$是所有训练数据第i维特征值的标准差
以前三个步骤为例,coding如下
raw python 版本 demo
1 | #! /usr/bin/python |
numpy 版 demo,
1 | #! /usr/bin/python |
tensorflow 版demo
1 | import numpy as np |