Scikit-Learn线性回归(五)

本文详细介绍了Scikit-Learn线性回归中的岭回归(Ridge Regression),包括模型复杂度与误差的关系、范数和正则化的概念,以及L1和L2正则化的差异。重点讲解了Ridge回归的原理、Scikit-Learn的API使用、交叉验证和参数调优。通过波士顿房价预测案例展示了岭回归的应用,并探讨了如何防止过拟合和选择最佳正则化参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



1、误差与模型复杂度


在第二篇文章 Scikit-Learn线性回归(二) 中,我们已经给出了过拟合与模型泛化的概念并使用案例进行了验证

在机器学习中,我们通常会将数据划分为两部分:一部分用来构建模型,然后另一部分用来检验模型的效果。构建模型所用的数据集称为训练集,而验证模型的数据集称为测试集。模型在训练集上的误差称为训练误差(或经验误差);在测试集上的误差称为泛化误差(Generalization Error)

机器学习的目的是探索隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的模型也能给出合适的输出,该能力称为泛化能力

泛化误差反映了模型对未知数据的预测能力(泛化能力),而我们采用最多的也就是通过泛化误差来评价模型的泛化能力。泛化误差刻画了模型算法的经验风险与期望风险之间的偏差和收敛速度

过拟合是指模型在训练集中表现良好,而在测试集中表现很差,即泛化误差大于经验误差,说明拟合过度,模型泛化能力降低,只能够适用于训练集,通用性不强;欠拟合则指的是模型在训练集中的表现就很差,即经验误差很大

在这里插入图片描述

如图所示,图一表示过拟合,可以看到拟合曲线完美的经过了每一个点,模型非常复杂,这种情况下,经验误差极小,但是预测值的方差(误差平方和)会很大。图二表示欠拟合,此时模型过于简单,在训练集上的误差就很大。图三则表示一个理想的拟合模型

欠拟合出现的原因是模型复杂度太低。可能是回归模型自变量(特征)较少或模型不合适。针对欠拟合,解决方案是增大模型复杂度,可以增加自变量(特征)或改变模型。例如,将一阶多元回归模型升级为多项式回归模型

过拟合出现的原因则是模型复杂度太高或训练集太少。可能是自变量(特征)过多或训练集数据量太少等。针对过拟合,除了增加训练集数据量外,还有多种优化算法可以处理。例如,正则化

一般情况下,误差与模型复杂度之间存在如下关系:

在这里插入图片描述

如上图所示,横坐标表示模型的复杂度,纵坐标表示模型的误差。其中,偏差(误差)表示真实值与预测值之间的差值;方差表示回归系数的方差,即误差平方(损失函数或误差平方和为所有样本的偏差平方之和)

泛化误差可以分解为三个部分:偏差(Bias)、方差(Variance)和噪声(Noise)。在评估学习模型性能的过程中,我们主要关注偏差与方差,因为噪声属于不可约减的误差(Irreducible Error)
泛化误差 = 偏差 + 方差 + 噪声 泛化误差=偏差 + 方差 + 噪声 泛化误差=偏差+方差+噪声

偏差表示学习模型的期望预测与测试集标签的偏离程度,即刻画了学习模型本身的拟合能力。训练模型越复杂,则偏差越小,例如,线性回归可以通过增加参数个数来提高模型的复杂度,神经网络可以通过增加隐单元个数来提高模型的复杂度

方差表示同样大小的训练数据集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。若模型处于过拟合状态,不同训练数据集产生的学习模型相差较大

噪声表示任何学习模型所能达到期望泛化误差的下界,即刻画了学习问题本身的难度。若噪声比较大,即使是最优模型,泛化误差也比较大

从图中可得,随着模型复杂度的提升,方差会不断增大,偏差会逐渐减小,而泛化误差会受偏差和方差的影响,我们的目标是找到泛化误差的最小值,这可以通过平衡偏差与方差来实现

2、范数与正则化

2.1、范数


范数(Norm)的概念来源于泛函分析与测度理论。其中的定义相当简单明了:范数是具有长度概念的函数,用于衡量一个矢量的大小(测量矢量的测度)

范数是一种距离强化概念,范数通常被用来度量某个向量空间 ∣ ∣ x ∣ ∣ ||x|| ∣∣x∣∣(或矩阵 ∣ ∣ X ∣ ∣ ||X|| ∣∣X∣∣)中的每个向量的长度或大小。范数可以简单的理解为向量的长度,即向量点到坐标零点的距离:
∣ ∣ x i ∣ ∣ 2 = ∣ x i ∣ 2 ||x_i||_2=\sqrt{|x_i|^2} ∣∣xi2=xi2

例如,向量 x x x= ( 3 , − 4 ) (3,-4) (3,4)= [ 3 , − 4 ] T [3,-4]^T [3,4]T的欧式范数 (Euclidean Norm) 为
∣ ∣ x ∣ ∣ 2 = 3 2 + ( − 4 ) 2 = 5 ||x||_2=\sqrt{3^2+(-4)^2}=5 ∣∣x2=32+(4)2 =5

这个范数也被称为L2范数,用于表示向量的长度或大小。L2范数是通常意义上的模(距离)。L2范数的本质是欧式距离,即两个向量在每个点相减后的平方和再开方(其中另一个点为坐标零点)

那么,一个向量空间或矩阵的L2范数(m个样本)可以表示为:
∣ ∣ x ∣ ∣ 2 = ∑ i = 1 m ∣ x i ∣ 2 ||x||_2=\sqrt{ {\sum_{i=1}^m}|x_i|^2} ∣∣x2=i=1mxi2

为方便统一,一般的,使用L-P范数表示向量空间或矩阵到零点的P阶闵氏距离(Minkowski Distance):
∣ ∣ x ∣ ∣ P = ( ∑ i = 1 m ∣ x i ∣ P ) 1 P ||x||_P=\left({\sum_{i=1}^m}|x_i|^P\right)^\frac{1}{P} ∣∣xP=(i=1mxiP)P1

范数实际上就是一种用于向量或矩阵距离度量的数学定义。L-P范数的数学含义是计算向量元素绝对值的p次方和的 1 P \frac{1}{P} P1次幂。范数分为向量范数(二维坐标系)和矩阵范数(多维空间),这里只讨论向量范数

根据 P P P的不同,向量范数分为多种:
在这里插入图片描述

上图表示了 P P P从无穷到0变化时三维空间中向量到零点的距离(范数)为1的点构成的图形的变化情况。例如L2范数,即欧氏距离,向量空间中到零点的欧氏距离为1的点构成了一个球面

而二维平面上(以P=2和P=1为例)的向量范数表示的图形如下:

在这里插入图片描述

从图中可以直观的得到,随着P越大,等高线围成的图型越接近正方形(正无穷范数);当P=2时,等高线围成的图型变为圆;随着P越小,等高线会越接近坐标零点(负无穷范数)

对于向量 x x x= ( x 1 , x 2 , . . . , x m ) (x_1,x_2,...,x_m) (x1,x2,...,xm),常见的范数有:

1)− ∞ \infty 范数:所有向量元素绝对值中的最小值
∣ ∣ x ∣ ∣ − ∞ = arg ⁡ min ⁡ i ∣ x i ∣ ||x||_{-\infty}=\arg\min_i|x_i| ∣∣x=argiminxi

2)L0范数:L0范数并不是一个真正的范数,L0范数主要用于度量向量中非零元素的个数
∣ ∣ x ∣ ∣ 0 ||x||_0 ∣∣x0

3)L1范数:向量元素绝对值之和,表示向量 x x x到零点的曼哈顿距离,也称街区距离(City-Block)
∣ ∣ x ∣ ∣ 1 = ∑ i = 1 m ∣ x i ∣ ||x||_1={\sum_{i=1}^m}|x_i| ∣∣x1=i=1mxi

4)L2范数:向量元素绝对值的平方和再开方,表示向量 x x x到零点的欧式距离 (Euclidean Distance)
∣ ∣ x ∣ ∣ 2 = ∑ i = 1 m ∣ x i ∣ 2 ||x||_2=\sqrt{ {\sum_{i=1}^m}|x_i|^2} ∣∣x2=i=1mxi2

5)+ ∞ \infty 范数:所有向量元素绝对值中的最大值
∣ ∣ x ∣ ∣ ∞ = arg ⁡ max ⁡ i ∣ x i ∣ ||x||_{\infty}=\arg\max_i|x_i| ∣∣x=argimaxxi

NumPy提供了常见范数的计算函数:

import numpy as np

# 向量
x = np.array([3, -4])
print(x)          # [ 3 -4]
# 负无穷范数
LNegInf = np.linalg.norm(x, -np.inf)
print(LNegInf)    # 3.0
# L0范数
L0 = np.linalg.norm(x, 0)
print(L0)         # 2.0<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值