机器学习—回归算法—正则化(原理及代码实现)

一、问题由来

1、线性回归过拟合(房价预测)

在这里插入图片描述
由上图可看,
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;
第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据;
中间的模型似乎最合适。

2、逻辑回归过拟合(分类问题)

在这里插入图片描述
就以多项式理解,x的次数越高,拟合的越好,但相应的预测的能力就可能变差。

二、L2正则化

在事例中看出,由于那些高次项导致了过拟合的产生,所以如果我们让这些高次项的系数接近于 0 的话,我们就能很好的拟合了。
所以我们要做的就是在一定程度上减小这些参数 θ 的值,这就是正则化的基本方法。
θ0不参与其中的任何一个正则化。

1、正则化线性回归

正则化线性回归的代价函数为
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190724224200645.pn
由于没有对θ(0)进行正则化,梯度下降算法分为两种情形:
在这里插入图片描述
正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令θ值减少了一个额外的值,减少参数θ的大小。

2、正则化逻辑回归

逻辑回归的代价函数为
在这里插入图片描述
要最小化该代价函数,通过求导,得出梯度下降算法为:

在这里插入图片描述
虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,但
由于两者的 h(x)不同所以还是有很大差别。

三、python代码实现(逻辑回归为例)

1、代价函数
#代价函数后加了个正则化项
def costFunc(h,y,R):
    m = len(y)
    J = -(1/m)*np.sum(y*np.log(h)+(1-y)*np.log(1-h))+R
    return J
2、梯度下降 参数更新后多减额外的正则化项
def graDesc(x,y,alpha=0.15,lamda=1.5,iter_num=6000):
    m,n = x.shape
    theta = np.zeros((n,1))
    J_history = []

    for i in range(iter_num):
        h = model(x,theta)
        #初始化θ
        theta_r = theta.copy()
        #由于θ(0)不参与更新 因此每次循环初始化θ(0)为0
        theta_r[0] = 0
        #加入正则化项R
        R = lamda/(2*m)*np.sum(np.square(theta_r))
        
        J_history.append(costFunc(h,y,R))
        #正则化项对θ求导
        deltaTheta = 1.0/m*(np.dot(x.T,h-y)+lamda*theta_r)
        theta -= alpha*deltaTheta
    return J_history,theta
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值