正则化后的线性回归模型
模型
[{h_ heta }left( x ight) = { heta _0} + { heta _1}x + { heta _2}{x^2} + { heta _3}{x^3} + { heta _4}{x^4}]
[Jleft( heta ight) = frac{1}{{2m}}left[ {sumlimits_{i = 1}^m {{{left( {{h_ heta }left( {{x^{left( i ight)}}} ight) - {y^{left( i ight)}}} ight)}^2}} + lambda sumlimits_{j = 1}^n { heta _j^2} } ight]]
当正则化参数λ很大时
[{h_ heta }left( x ight) approx { heta _0}]
这时处于“高偏差(High bias)”(underfit)的情况
当正则化参数很小(λ=0)时
[{h_ heta }left( x ight) = { heta _0} + { heta _1}x + { heta _2}{x^2} + { heta _3}{x^3} + { heta _4}{x^4}]
这时处于“高方差(High variance)”(overfit)
当正则化参数λ适当时
模型处于“Just right”状态
如何选择正确的λ呢?
除了以下两个公式
[{h_ heta }left( x ight) = { heta _0} + { heta _1}x + { heta _2}{x^2} + { heta _3}{x^3} + { heta _4}{x^4}]
[Jleft( heta ight) = frac{1}{{2m}}left[ {sumlimits_{i = 1}^m {{{left( {{h_ heta }left( {{x^{left( i ight)}}} ight) - {y^{left( i ight)}}} ight)}^2}} + lambda sumlimits_{j = 1}^n { heta _j^2} } ight]]
再定义
[egin{array}{l}
{J_{train}}left( heta
ight) = frac{1}{{2{m_{train}}}}sumlimits_{i = 1}^{{m_{train}}} {{{left( {{h_ heta }left( {{x^{left( i
ight)}}}
ight) - {y^{left( i
ight)}}}
ight)}^2}} \
{J_{CV}}left( heta
ight) = frac{1}{{2{m_{CV}}}}sumlimits_{i = 1}^{{m_{CV}}} {{{left( {{h_ heta }left( {x_{CV}^{left( i
ight)}}
ight) - y_{CV}^{left( i
ight)}}
ight)}^2}} \
{J_{test}}left( heta
ight) = frac{1}{{2{m_{test}}}}sumlimits_{i = 1}^{{m_{test}}} {{{left( {{h_ heta }left( {{x^{left( i
ight)}}}
ight) - {y^{left( i
ight)}}}
ight)}^2}}
end{array}]
分别表示“训练误差”、‘“交叉验证误差”和“测试误差”
选择λ
尝试如下λ
- λ=0----------->minJ(θ)----->Θ(1)------>JCV(Θ(1))
- λ=0.01------->minJ(θ)----->Θ(2)------>JCV(Θ(2))
- λ=0.02------->minJ(θ)----->Θ(3)------>JCV(Θ(3))
- λ=0.04------->minJ(θ)----->Θ(4)------>JCV(Θ(4))
- .
- .
- .
- λ=10--------->minJ(θ)----->Θ(12)------>JCV(Θ(12))
运用不同的λ去最小化“代价函数”得到不同的Θ;
不同的Θ带入h(x)中得到不同的模型,然后用“交叉验证集”验证;
取“交叉验证误差”最小的那个模型;
将最终得到的模型运用于测试集,测试模型的表现。
下图为不同λ下“训练误差”和“交叉验证误差”的变化
可以得到
- 当λ很小时,模型处于“高方差”状态,“训练误差”很小,“交叉验证误差”较大
- 当λ很大时,模型处于“高偏差”状态,“训练误差”和“交叉验证误差”都很大