机器学习篇之代价函数与梯度下降

599 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

机器学习Machine Learning Note 1-1

1、代价函数(Cost Function),也称损失函数(平方误差函数、平方误差代价函数)

一、代价函数的场景引入

存在一些数据集,需要给出一条直线去拟合数据

(1)什么是线性回归函数?

线性回归函数就是一次函数,Hypothesis(假设)

Hypothesis:hθ=θ0+θ1xHypothesis: h_θ=θ_0+θ_1x

(2)代价公式解析

这个线性回归函数的θ0和θ1未知的情况下,要找到一条直线最佳拟合这些数据集,需要依靠代价函数J(θ01)

J(θ0,θ1)=12mi=1m(yi^yi)2=12mi=1m(hθ(xi)yi)2J(θ_0,θ_1)=\frac{1}{2m}\sum\limits_{i=1}^m(\hat{y_i}-y_i)^2=\frac{1}{2m}\sum\limits_{i=1}^m(h_θ(x_i)-y_i)^2

式子中yi中的i表示第i个样本点,yi表示真实值, y表示预测值,总共有m个样本点,求误差的平方得到一个正的样本值,除以m得到平均,加入1/2是为了计算梯度下降时,涉及到求导出来的2与1/2可以消去,可以不写1/2,其中式子

(hθ(xi)yi)2(h_θ(x_i)-y_i)^2

表示第i个数据与真实的第i个数据的误差,通过m个数据求出平均误差,得到:

12mi=1m(hθ(xi)yi)2\frac{1}{2m}\sum\limits_{i=1}^m(h_θ(x_i)-y_i)^2

简化线性回归函数,在θ0=0的情况下,通过取样不同的θ1,就可以得到代价函数J(θ1)的曲线图:

fe2239463ec7370f92c410a760db4327.png

**通过图表可以发现,当θ1=1时,代价函数值最小J(θ1)=0,就可以找到拟合函数hθ(x)=θ1x的最佳参数 **

两个参数的情况下,代价函数的图像用三维图像表示为:

adab7b1164d0cd6a7ef9d72ad637e3b6.png

通过梯度下降算法可以求得代价函数J(θ01)的最小值点

模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差modeling error)。

038c654ff610d1efaa27830a48e1b715.png

python代码实现:

def computeCost(X, y, theta):
    """
        @process:
            hypothesis:  h_θ(x) = ( X * θ^T )
            inner = ( h_θ(x) - y )^2
        @return: 1/2m * sum(inner)
    """
    inner = np.power((X * (theta.T) - y), 2)    # 表示第i个数据与真实的第i个数据的误差
    return np.sum(inner) / (2 * len(X))

2、相关系数

衡量线性相关性的强弱,相关系数越高,线性相关性越大

rxy=(XiXˉ)(XiXˉ)2(YiYˉ)2r_{xy}=\frac{\sum(X_i-\bar{X})}{\sqrt{\sum(X_i-\bar{X})^2\sum(Y_i-\bar{Y}})^2}

3、决定系数

用来描述非线性关系或者有两个及两个以上自变量的相关关系。它可以用来评价模型的效果。

4、梯度下降

  • 随机梯度下降法(Stochastic Gradient Descent,SGD)

  • 批量梯度下降法(Batch Gradient Descent,BGD)

所有的参数减去学习速率乘以代价函数的导数

θj:=θjαθjJ(θ0,θ1)\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)

其中α为学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大

梯度下降算法的每次迭代受到学习率的影响,如果学习率α过小,则达到收敛所需的迭代次数会非常高;如果学习率α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛

更新等式:

θ0:=θ0,θ1:=θ1\theta_0:=\theta_0, \theta_1:=\theta_1

梯度下降算法主要用于计算求出代价函数的导数

除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:

  • 共轭梯度Conjugate Gradient
  • 局部优化法(Broyden fletcher goldfarb shann,BFGS)
  • 有限内存局部优化法(LBFGS)

5、分类算法(线性回归算法)

  • 逻辑回归算法:即分类算法,它的输出值永远在0到 1 之间,它适用于标签取值离散的情况,如:[1 0 0 1]

逻辑回归模型的假设函数:

hθ=g(θTX)h_\theta=g(\theta^TX)

其中,X代表特征向量,g(z)代表逻辑函数,即一个常用的逻辑函数为S形函数(Sigmoid Function),公式为:

g(z)=11+ezg(z) = \frac{1}{1+e^{-z}}

则假设函数为:

hθ=11+eθTXh_\theta=\frac{1}{1+e^{-\theta^TX}}

python代码实现:

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

函数图像为:

image.png

sigmoid函数图

6、拟合问题

image.png

拟合状态函数图

上面三个图,图1为欠拟合,图2适合,图3为过拟合

图1模型是一个线性模型,欠拟合,不能很好地适应我们的训练集。

图2模型比较合适。

图3模型是一个四次方的模型,由于过于强调拟合原始数据,而丢失了算法的本质,不能对新数据做更好的预测,造成过拟合。

7、代价函数V2.0(正规化方程)

假设函数:

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2]J(\theta)=\frac{1}{2m}[\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum\limits_{j=1}^{n}\theta_j^2]

正则化参数λ

梯度下降:

GradientdescentRepeat{θ0:=θ0α1mi=1m(hθ(x(i))y(i))x0(i)θj:=θjα1mi=1m(hθ(x(i))y(i))xj(i)}Gradient descent\\ Repeat \{\\ \theta_0:=\theta_0-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_{0}^{(i)}\\ \theta_j:=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_{j}^{(i)}\\ \}