系列文章目录
一、模型描述
第一个算法是线性回归(一种常见的监督学习问题)。
m表示训练样本的数量
x表示输入变量,即特征
y表示输出变量,即要预测的目标变量
(x,y)表示一个训练样本
(
x
(
i
)
x^{(i)}
x(i),
y
(
i
)
y^{(i)}
y(i))表示特定的第i个训练样本
h代表假设函数,即用来进行预测的函数,是一个引导从x得到y的函数。
最初的假设函数表示为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x)=\theta_0+\theta_1x
hθ(x)=θ0+θ1x。
h
θ
(
x
)
h_{\theta}(x)
hθ(x)有时简写为
h
(
x
)
h(x)
h(x)。
要预测y是一个关于x的线性函数,这种函数被称为线性回归,有一个输入变量x的时候是一元线性回归,又称为单变量线性回归。
二、代价函数
引入代价函数的定义有助于弄清楚如何把最有可能的直线与数据相拟合。
θ 0 \theta_0 θ0、 θ 1 \theta_1 θ1等 θ i \theta_i θi被称为模型参数。
那么如何选择 θ 0 \theta_0 θ0、 θ 1 \theta_1 θ1这两个参数值呢?
选择不同的参数值会得到不同的假设以及不同的假设函数。
我们的目标是选择 θ 0 \theta_0 θ0、 θ 1 \theta_1 θ1,使得我们的假设函数可以尽量的与数据点很好的拟合,即选择可以使 h θ ( x ) h_{\theta}(x) hθ(x)最接近样本对应的y的参数 θ 0 \theta_0 θ0、 θ 1 \theta_1 θ1。
之后这个问题变成:找到能使训练集中的预测值和真实值的差的平方的和的1/2m最小的
θ
0
\theta_0
θ0、
θ
1
\theta_1
θ1。
由此,定义一个代价函数cost function:
这种代价函数也被称为平方误差函数或平方误差代价函数,这对于大多数线性回归问题是合理的。
其他的代价函数也可很好的发挥作用,但是平方误差代价函数是解决回归问题的最常用手段
三、代价函数(一)
本节为了更好的理解代价函数,对假设函数进行了简化,也可以理解为是
θ
0
\theta_0
θ0=0的假设函数。
代价函数
J
(
θ
1
)
J(\theta_1)
J(θ1)是关于参数
θ
1
\theta_1
θ1的函数,控制直线的斜率。
当
J
(
θ
1
)
J(\theta_1)
J(θ1)最小时,
h
θ
(
x
)
h_\theta(x)
hθ(x)的图像预测最为准确,所以我们要选取合适的
θ
1
\theta_1
θ1进行
J
(
θ
1
)
J(\theta_1)
J(θ1)的最小化。
四、代价函数(二)
等高线图
本节不进行简化,保留
θ
0
\theta_0
θ0
θ
1
\theta_1
θ1两个参数,则
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)仍是碗装函数,但是将是一个3D曲面图,可能如下:
θ
0
\theta_0
θ0,
θ
1
\theta_1
θ1为横轴
曲面的高度就是
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)的值。
也可以用等高线图或称为等高图像来表示,例如:
五、梯度下降
由于多个参数之后可能会经常出现代价函数图像无法绘制的情况,且绘制出图像后手动读取数据也很麻烦。所以我们采取函数算法来获取最小化的代价函数以及相应参数。梯度下降法可以将代价函数J进行最小化。
梯度下降法广泛应用于机器学习的众多领域,可以最小化很多函数,不仅仅是最小化线性回归的代价函数。
本节讲解用梯度下降算法最小化任意函数J。
从
θ
0
\theta_0
θ0=0,
θ
1
\theta_1
θ1=0的初始值开始,一点点改变
θ
0
\theta_0
θ0,
θ
1
\theta_1
θ1,来减小
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)的值,直到我们得到了想要的最小值。
梯度下降法的一个特点是:如果从不同的起点出发,可能会得到不同的局部最优解。
梯度下降法的定义如下图所示:
:
=
:=
:=表示赋值运算符,
a
:
=
b
a:=b
a:=b表示取b的值赋给a。
α
\alpha
α表示学习率/学习速率,用来控制梯度下降时,迈出多大的步子。
对于该表达式,需要同步更新
θ
0
\theta_0
θ0和
θ
1
\theta_1
θ1,即同时减去某项。
六、梯度下降知识点总结
偏导数
α \alpha α过小会导致梯度下降很慢,收敛速度很慢; α \alpha α过大可能会导致梯度下降越过最低点,甚至可能无法收敛或发散。
梯度下降的运行方式:梯度下降法中,越接近局部最低点,梯度下降法将会自动采取更小的幅度。
到达局部最低点的时候导数为0,所以在接近局部最低点的时候,导数值会自动变越来越小。