算法系列——有监督学习——2.正则化

一、概述

正则化是防止过拟合的一种方法,与线性回归等算法配合使用。通过向损失函数增加惩罚项的方式对模型施加制约,有望提高模型的泛化能力。

过拟合是模型在验证数据上产生的误差比在训练数据上产生的误差(训练误差)大得多的现象。过拟合的一个原因是机器学习模型过于复杂。正则化可以降低模型的复杂度,有助于提高模型的泛化能力。

在详细了解正则化的方法之前,先看一下使用了正则化的模型如何防止过拟合。如图所示:训练数据(灰色的数据点)和验证数据(黑色的数据点)。这些数据点是对函数y=sin(2πx) 添加了遵循高斯分布的随机数而生成的。

下面尝试用线性回归对这份数据建模。不断在线性回归中加入一次项、二次项……观察随着多项式的次数越来越大,训练误差和验证误差会如何变化。

在回归模型中,选择多项式次数的核心依据是‌平衡模型的拟合能力与泛化能力‌,既要避免欠拟合(模型过于简单),也要防止过拟合(模型过于复杂)。可以通过观察数据分布‌——通过散点图或残差图观察数据点的分布趋势。若数据呈现明显的非线性关系(如曲线、周期性波动),可能需要较高次数的多项式。若数据近似线性分布,1次(线性)或2次多项式即可。

不同次数的训练误差和验证误差如表所示。可以看出随着函数次数的增加,训练误差渐渐变小了。如果只看训练误差,那么六次线性回归的误差0.024是最小的,但此时的验证误差是3.472,比训练误差大了很多。六次线性回归是一个复杂的模型,虽然它减小了训练误差,但是由于过拟合,它的泛化能力很低。

接下来看一下对线性回归应用正则化后的结果,如下所示。正则化可以通过向损失函数增加惩罚项的方式防止过拟合。从图中可以看出,正则化抑制了模型的复杂度,次数增加后验证误差也被抑制,从而防止了过拟合的出现。

二、算法说明

复杂模型 过拟合的一个原因是学习参数wi 的值太大(或太小)。表中列出了不同次数的线性回归的学习参数。随着次数的增加,学习参数的绝对值变大。

应用正则化后的不同次数的学习参数

为什么正则化可以抑制学习参数变大呢?这里以下面的岭回归的误差函数为例进行说明。简单起见,这里考虑对二次线性回归应用正则化的情况:

学习参数的绝对值越大,损失函数整体的值就越大。由此可知,惩罚项具有“对绝对值大的学习参数给予损失变大的惩罚”的作用,这个作用可以抑制学习参数变大。

三、示例代码

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
train_size = 20        # 训练集 生成20个在 [0, 1.2] 范围内均匀分布的随机数
test_size = 12         # 测试集 生成12个在 [0.1, 1.3] 范围内均匀分布的随机数。
train_X = np.random.uniform(low=0, high=1.2, size=train_size)
test_X = np.random.uniform(low=0.1, high=1.3, size=test_size)
train_y = np.sin(train_X * 2 * np.pi) + np.random.normal(0, 0.2, train_size)
test_y = np.sin(test_X * 2 * np.pi) + np.random.normal(0, 0.2, test_size)
poly = PolynomialFeatures(6)  # 次数为6
train_poly_X = poly.fit_transform(train_X.reshape(train_size, 1))
test_poly_X = poly.fit_transform(test_X.reshape(test_size, 1))
model = Ridge(alpha=1.0)
model.fit(train_poly_X, train_y)
train_pred_y = model.predict(train_poly_X)
test_pred_y = model.predict(test_poly_X)
print(mean_squared_error(train_pred_y, train_y))  # 训练误差
print(mean_squared_error(test_pred_y, test_y)) # 实际测试误差

输出

通过α控制正则化强度
下面来详细看一下控制正则化强度的超参数α。如图是使用不同的α值时模型的可视化图形。当α增大时,可以看出学习参数被抑制,图形变得简单。相反,当α变小时,对学习参数的绝对值变大的惩罚力度变缓,模型变复杂。另外,当α=0时,惩罚项始终为0,因此等同于不使用正则化的线性回归。一般来说,应一边验证误差一边对α进行调整,最终得到合适的α。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿梭的编织者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值