特征缩放(归一化)
对于一个线性回归式子
y
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
⋯
+
θ
n
x
n
y=\theta_0+\theta_1x_1+\theta_2x_2+\cdots+\theta_nx_n
y=θ0+θ1x1+θ2x2+⋯+θnxn
若某两个特征值
x
i
,
x
j
x_i,x_j
xi,xj之间取值范围相差悬殊,比如
x
i
∈
[
0
,
2000
]
x_i\in[0,2000]
xi∈[0,2000]而
x
j
∈
[
−
0.5
,
0.5
]
x_j\in[-0.5,0.5]
xj∈[−0.5,0.5],那么相应的
θ
i
\theta_i
θi的范围就会远小于
θ
j
\theta_j
θj,在轮廓图中呈现出两个维度比例失衡的情况。
在这种情况下,运行梯度下降算法时会让我们的求解过程十分漫长,求解点会在范围较大的那个维度向着最低点艰难跋涉,伴随着范围较小的维度的不断震荡,使得求解效率低下。
为了优化这个问题,我们就对特征值进行预处理,设特征值 x i x_i xi的平均值为 μ \mu μ,范围为 [ a , b ] [a,b] [a,b],则定义一个新的特征值 x i ′ = x i − μ b − a x_i'=\frac{x_i-\mu}{b-a} xi′=b−axi−μ,使得新特征值的取值范围基本落在 [ − 1 , 1 ] [-1,1] [−1,1]范围内,这样各维度的比例就会更加均匀,提升求解效率。
图片来自吴恩达机器学习
学习率调整
很显然,学习率太小,收敛速度会很慢,而学习率太大有可能根本收敛不了。
在实际运行梯度下降算法时,我们主要观察迭代次数-代价函数曲线,通过代价函数值随迭代次数的变化来判断我们选择的学习率是否合理。也可以设定一个阈值 ε \varepsilon ε,当一次迭代后代价函数值的变化小于 ε \varepsilon ε时认为已经收敛,但在实际运用中 ε \varepsilon ε很难确定。
当不确定到底该选多少学习率时,可以先 1 , 0.1 , 0.01 , ⋯ 1,0.1,0.01,\cdots 1,0.1,0.01,⋯这样试验,再根据经验做出调整。
非直线拟合
很多时候,数据点往往并不像一条直线,这时候我们会希望用一个多项式或者其他函数去拟合数据,为了能套用线性回归的方法,需要对特征值做一些处理。
比如果想拟合的是
y
=
θ
0
+
θ
1
x
+
θ
2
x
2
+
⋯
+
θ
n
x
n
y=\theta_0+\theta_1x+\theta_2x^2+\cdots+\theta_nx^n
y=θ0+θ1x+θ2x2+⋯+θnxn
我们可以令
x
1
=
x
,
x
2
=
x
2
,
⋯
,
x
n
=
x
n
x_1=x,x_2=x^2,\cdots,x_n=x^n
x1=x,x2=x2,⋯,xn=xn,这样就又可以套用线性回归的梯度下降方法。
需要注意的是,这样操作过后各特征值的取值范围差距通常会变得很大,所以一般要搭配特征缩放使用。