正则化方法拟合曲线c语言,过拟合(Overfitting)和正则化(Regularized)

在应用线性回归和逻辑回归去解决某些机器学习的实际应用时,它们可能会出现一种叫做“过度拟合”(Overfitting)的问题。这会使得学习的结果很糟糕。

什么是过拟合

用预测房价的线性回归的例子:

f0f219a83fb2

线性回归图表

最左边一张图片用一条直线来拟合数据,这种情况下随着x轴的变大,房价增长的幅度一直不变,这样的结果误差很大,这意味这该算法没有很好的拟合训练数据,

这种称之为 “欠拟合”;

中间一张图用的二次曲线来拟合数据,拟合情况良好,稍有偏差;

右边一张图用了四次项,拟合的更好,在图中,它贯穿了所有样本,但是它的曲线很扭曲,这不是一个很好的预测房价的模型,这称之为 “过拟合”;

定义

过拟合: 假如有很多特征值,且学习算法能够很好的拟合训练集,但是在新的样本上却表现的性能很差。

数据拟合有两个极端,当预测函数过于简单或者使用的相关特征值过少,就会出现欠拟合(高偏差high bias)的情况。

另一个极端,当函数过于复杂,使用的非常多的特征值,使得学习算法在训练样本上非常适合,但是不能推广到新的样本集上,这就是过拟合(高方差high variance)

过拟合问题除了出现在线性回归问题上,也会出现在逻辑回归上。

解决办法

减少特征值的数量

可以通过观察手动删掉一些特征值,或者用模型选择算法来达到目的。

正则化

保留所有特征值,但是减少参数

math?formula=%5Ctheta_j的大小,因为似乎每个特征值都或多或少的在预测函数起了作用。

这两种方法的本质类似,就是弱化不必要的特征值,从而解决过拟合。

代价函数

假设线性回归的预测函数为:

math?formula=h(%5Ctheta)%20%3D%20%5Ctheta_0%2B%5Ctheta_1x%2B%5Ctheta_2x%5E2%2B%5Ctheta_3x%5E3%2B%5Ctheta_4x%5E4

这是一个四次项的公式,通过上面的可以知道这是一个过拟合的预测函数,需要解决过拟合,需要忽略后面的三次和四次项,这要改一下代价函数:

math?formula=J(%5Ctheta)%20%3D%20%5Cfrac%7B1%7D%7B2m%7D%20%5Csum_%7Bi%3D0%7D%5Em(h_%5Ctheta(x%5E%7B(i)%7D)-y%5E%7B(i)%7D)%5E2%20%2B1000%5Ccdot%20%5Ctheta_3%5E2%20%2B1000%5Ccdot%20%5Ctheta_4%5E2

在原油的代价函数上我们添加了

math?formula=1000%5Ccdot%20%5Ctheta_3%5E2

math?formula=1000%5Ccdot%20%5Ctheta_4%5E2这两个,为了使代价函数尽量小,我们就需要让

math?formula=%5Ctheta_3

math?formula=%5Ctheta_4尽量小,接近于零。

这样就给了一个正则化的思路。将关联小的特征值的参数趋向于0,使得预测函数从过拟合的状态修正过来。

正则化后的代价函数为:

math?formula=J(%5Ctheta)%3D%20%5Cfrac%7B1%7D%7B2m%7D%20%5B%5Csum_%7Bi%3D0%7D%5Em%20(h_%5Ctheta(x%5E%7B(i)%7D)-y%5E%7B(i)%7D)%5E2%20%2B%20%5Clambda%20%5Csum_%7Bj%3D1%7D%5En%5Ctheta_j%5E2%20%5D

其中

math?formula=%5Clambda为正则化参数,为了平衡代价函数。

math?formula=%5Clambda需要选择合适的值。

可以看到,在代价函数后面添加了

math?formula=%5Clambda%20%5Csum_%7Bj%3D1%7D%5En%5Ctheta_j%5E2 这一项。注意,这一项中的

math?formula=j 是从1到m的,因为

math?formula=x_0固定为0,不需要修正,所以参数

math?formula=%5Ctheta_0,不需要添加进来。

线性回归正则化

梯度下降算法:

重复 {

math?formula=%5Ctheta_0%20%3D%20%5Ctheta_0-%5Calpha%5Cfrac%7B1%7D%7Bm%7D%5Csum_%7Bi%3D1%7D%5Em%20(h_%5Ctheta(x%5E%7B(i)%7D)-y%5E%7B(i)%7D)x_0%5E%7B(i)%7D

math?formula=%5Ctheta_j%20%3D%20%5Ctheta_j%20-%5Calpha%20%5B%5Cfrac%7B1%7D%7Bm%7D%5Csum_%7Bi%3D1%7D%5Em%20(h_%5Ctheta(x%5E%7B(i)%7D)-y%5E%7B(i)%7D)x_j%5E%7B(i)%7D%20%2B%5Cfrac%7B%5Clambda%7D%7Bm%7D%5Ctheta_j%20%5D%2C%20j%20%5Cin%20%5B1%2C2%2C3%2C...%2Cn%5D

}

同样的

math?formula=%5Ctheta_0不需要修正

下面的式子可以稍作调整:

math?formula=%5Ctheta_j%20%3D%20%5Ctheta_j(1-%5Calpha%5Cfrac%7B%5Clambda%7D%7Bm%7D)%20-%5Calpha%5Cfrac%7B1%7D%7Bm%7D%5Csum_%7Bi%3D1%7D%5Em%20(h_%5Ctheta(x%5E%7B(i)%7D)-y%5E%7B(i)%7D)x_j%5E%7B(i)%7D%2C%20j%20%5Cin%20%5B1%2C2%2C3%2C...%2Cn%5D

可以看出

math?formula=%5Ctheta_j是在原来梯度下降的基础上又减去了

math?formula=%5Calpha%5Cfrac%7B%5Clambda%7D%7Bm%7D%5Ctheta_j

逻辑回归正则化

代价函数:

math?formula=J(%5Ctheta)%3D-%5Cfrac%7B1%7D%7Bm%7D%20%5Csum_%7Bi%3D1%7D%5Em%20%5By%5E%7B(i)%7D%20%5Clog(h_%5Ctheta(x%5E%7B(i)%7D))%20%2B%20(1-y%5E%7B(i)%7D)%20%5Clog(1-h_%5Ctheta(x%5E%7B(i)%7D))%5D%20%2B%20%5Cfrac%7B%5Clambda%7D%7B2m%7D%20%5Csum_%7Bj%3D1%7D%5En%20%5Ctheta_j%5E2

同样的

math?formula=%5Ctheta_0不需要修正

它的梯度下降算法是:

重复 {

math?formula=%5Ctheta_0%20%3D%20%5Ctheta_0-%5Calpha%5Cfrac%7B1%7D%7Bm%7D%20%5Csum_%7Bi%3D1%7D%5Em%20(h_%5Ctheta(x%5E%7B(i)%7D)-y%5E%7B(i)%7D)x_0%5E%7B(i)%7D

math?formula=%5Ctheta_j%20%3D%20%5Ctheta_j%20-%5Calpha%5B%5Cfrac%7B1%7D%7Bm%7D%5Csum_%7Bi%3D1%7D%5Em%20(h_%5Ctheta(x%5E%7B(i)%7D)-y%5E%7B(i)%7D)x_j%5E%7B(i)%7D%20%2B%5Cfrac%7B%5Clambda%7D%7Bm%7D%5Ctheta_j%20%5D%2C%20j%20%5Cin%20%5B1%2C2%2C3%2C...%2Cn%5D

}

正规方程(Normal Equation)

在求解线性回归时,除了梯度下降,还有一种正规方程的方式直接求解出

math?formula=%5Ctheta。使用正规方程的也需要正则化。

正规方程的公式为:

math?formula=%5Ctheta%3D(X%5ETX)%5E%7B-1%7DX%5ETy

需要作出修改:

math?formula=%5Ctheta%3D(X%5ETX%20%2B%20%5Clambda%5Ccdot%20L)%5E%7B-1%7DX%5ETy

其中L是一个

math?formula=n%2B1的方阵

math?formula=L%3D%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%200%26%26%26%26%20%5C%5C%5C%20%261%26%26%26%20%5C%5C%5C%20%26%261%26%26%20%5C%5C%5C%20%26%26%26...%26%20%5C%5C%5C%20%26%26%26%261%20%5Cend%7Bmatrix%7D%20%5Cright%5D,L是一个对角线矩阵,对角线第一个元素为0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值