-
2022-03-23 15:06:51
这次以Logistic回归作为基础,将再次复习Logistic回归,对Logistic回归将有更深的理解。通过对比未进行正则化的Logistic回归与正则化的Logistic回归在相同数据集上的表现来理解正则化缓解过拟合现象的作用。
首先,我们导入这次实验所需要使用的Python库,以及辅助函数
import numpy as np import matplotlib.pyplot as plt from utils import *
实际应用中容易出现过拟合,其原因则在于模型已经足够复杂,但是我们往往根本就不知道设计的模型的复杂程度是否刚好满足要求。
这就需要我们去判断模型是否刚刚好,如何判断是否出现了过拟合或欠拟合呢?我们一般通过将数据分为3个部分,训练集(train set),验证集(validation set)和测试集(test set)。所谓过拟合就是指模型的泛化能力不强,那么,我们就在验证集上测试模型的泛化能力。如下图所示,我们可以看到,过拟合的时候在验证集上表现不好(即泛化能力不强)。而对于欠拟合,往往在训练集上的表现就可以看出表现不好。
更多相关内容 -
机器学习正则化
2020-05-24 20:18:11机器学习正则化笔记概要 正则化(regularization)是用于抑制过拟合的方法的统称,它通过动态调整估计参数的取值来降低模型的复杂度,以偏差的增加为代价来换取方差的下降。 在线性回归里,最常见的正则化方式就是在...机器学习正则化笔记概要
正则化(regularization)是用于抑制过拟合的方法的统称,它通过动态调整估计参数的取值来降低模型的复杂度,以偏差的增加为代价来换取方差的下降。
在线性回归里,最常见的正则化方式就是在损失函数(loss function)中添加正则化项(regularizer),而添加的正则化项 R(λ) 往往是待估计参数的 p- 范数。将均方误差和参数的范数之和作为一个整体来进行约束优化,相当于额外添加了一重关于参数的限制条件,避免大量参数同时出现较大的取值。由于正则化的作用通常是让参数估计值的幅度下降,因此在统计学中它也被称为系数收缩方法(shrinkage method)。
总结起来:利用贝叶斯概率来确定最优参数的步骤可以归纳如下:求解的对象是已知训练数据时,测试数据的条件概率 p(y∗|y),要计算这个条件概率就要对所有未知的参数和超参数进行积分,以消除这些变量。而在已知的数据和未知的超参数之间搭起一座桥梁的,正是待估计的参数 w,它将 p(y∗|y) 的求解分解成两部分,一部分是根据已知数据推断参数,另一部分是根据参数推断未知数据。
而在根据已知数据推断参数时,又要先推断超参数,再利用超参数和数据一块儿推断参数。对超参数的推断则可以通过边际似然概率简化。
正则化的作用是抑制过拟合,通过增加偏差来降低方差,提升模型的泛化性能;
正则化项的作用是对解空间添加约束,在约束范围内寻找产生最小误差的系数;
频率视角下的正则化与贝叶斯视角下的边际化作用相同;
边际化对未知的参数和超参数进行积分以消除它们的影响,天然具有模型选择的功能。
-
机器学习-正则化
2021-12-03 16:20:00我们知道机器学习是从数据中学习的,所以足够的训练数据最重要。其次简单的模型也有助于防止过拟合的情况。我们现在需要着重介绍的是正则化的方法: 首先我们要理解使用正则化产生的效果。我们知道无论回归还是分类...5.7正则化
上次我们提到模型对训练数据过度的优化拟合,使模型能够很好的对训练数据进行拟合,但却对测试数据的预测或者分类效果很差,这种状态被称为过拟合。一般过度增加函数的次数会导致过拟合的情况。我们有哪些方法可以避免过拟合的情况呢?一般情况下:
- 增加全部训练数据的训练量
- 使用简单的模型
- 正则化
我们知道机器学习是从数据中学习的,所以足够的训练数据最重要。其次简单的模型也有助于防止过拟合的情况。我们现在需要着重介绍的是正则化的方法:
首先我们要理解使用正则化产生的效果。我们知道无论回归还是分类,参数θ是对模型的拟合产生影响的最主要因素,一般模型的过拟合就是由于参数的影响过大。而正则化的效果就是防止参数的影响过大,在训练时对参数施加的一些“惩罚”,让参数对模型的影响变小一点,从而达到防止过拟合的效果。
5.7.1回归的正则化
我们现在对这个新的目标函数进行最小化,这种方法称为正则化。正则项里的m表示正则化的对象参数的个数,θ0被称为偏置项,一般不对θ0正则化,所以j的取值是从1开始的。举个例子,假设预测函数的表达式为f(x)=θ0+θ1x+θ2x2,那么m=2就是表示正则化的对象参数为θ1和θ2。而λ是决定正则化影响程度的正的常数,这个值需要我们根据情况自己决定,后面会再提及。
只看表达式不容易理解正则化是如何防止过拟合的,我们可以结合图来理解:
我们首先把新组合成的目标函数拆开:
我们将这两个函数分别画出来后再加起来看看,不过参数过多的话就画不出图来了,所以假设f(x)=θ0+θ1x,而且为了方便理解,先不考虑λ,或令λ=1。在将回归的时候我们提到过这个目标函数C(θ)开口向上,所以我们假设一个开口向上的函数即可,R(θ)是一个标准的二次函数表达式1/2*θ12。则将两个函数的图形画出,如图5-7-2所示:
图5-7-2
新的目标函数是这两个函数之和E(θ)=C(θ)+R(θ),如何画出E(θ)的图形呢?我们这里只需要将C(θ)和R(θ)在横坐标θ1上各点的值相加映射到坐标轴上即可,如图5-7-3所示:
图5-7-3
本来目标函数在θ1=4.5处最小,加上正则项后,现在θ1=0.9处最小,我们可以发现θ1跟接近0了。这个就是正则化的效果,它可以防止参数变得过大,有助于参数接近最小的值。虽然我们只考虑了θ1,但是其它θj参数的情况也是类似的。参数的值变小了,那么意味着该参数的影响也会相应的变小。比如有这样的一个预测函数f(x)=θ0+θ1x+θ2x2。极端一点,假设θ2=0了,那么表达式就从二次变成了一次了。这正是通过减小不需要的参数的影响,将复杂的模型替换为简单的模型来防止过拟合的方式。之前提到的λ就是控制正则化惩罚强度的一个正的常数,是根据实际情况来决定的,如λ=0时相当于不使用正则化,反过来λ越大正则化的惩罚就越厉害。
5.7.2分类的正则化
分类的正则化与回归的正则化类似,就是在目标函数的基础上增加正则项。我们之前提到过逻辑回归的目标函数是对数似然函数:
我们只需要在这个目标函数的基础上增加正则项就可以了,但是对数似然函数是以最大化为目标,我们要把它变成和回归的目标函数一样处理最小化问题,所以前面加一个负号即可:
5.7.3 包含正则项表达式的微分
刚才我们把回归的目标函数分成C(θ)和R(θ)。这是新的目标函数的形式,我们要对它进行微分:E(θ)=C(θ)+R(θ)。由于是加法,所以我们对各部分进行偏微分:
首先对第一部分进行微分,具体微分步骤如下图5-7-4。
图5-7-4
所以,第一部分微分表达式如下:
先对第一个部分即原目标函数进行微分,微分具体步骤如图5-7-5:
图5-7-5
之前提到考虑的是最小化问题,所以在前面加上负号,所以将括号内的数进行反转:
刚才我们已经求过R(θ)的微分了,直接使用即可。与回归的正则化一样,θ0不参与正则化,所以要将参数的更新表达式“分段”:
这就是我们要求的逻辑回归正则化的参数更新表达式了。
我们这里讲的正则化方法其实叫L2正则化,除了L2正则化,还有一个叫L1正则化,L1正则化项是这样的:
虽然有两种正则化方法,但是我们可以根据实际情况来进行选择。L1正则化的特征是被判定为不需要的参数会变为0,从而减少变量的个数,而L2正则化不会把参数变为0。换句话说,L2正则化会抑制参数,使变量影响不会太大,而L1会直接去除不要的变量。
既然知道了正则化的表达式,我们就很好理解代码了,下面是应用正则化和没有使用正则化的对比:
import numpy as np
import matplotlib.pyplot as plt
# 真正的函数
def g(x):
return 0.1 * (x ** 3 + x ** 2 + x)
# 随意准备一些向真正的函数加入了一点噪声的训练数据
train_x = np.linspace(-2, 2, 8)
train_y = g(train_x) + np.random.randn(train_x.size) * 0.05
# 标准化
mu = train_x.mean()
sigma = train_x.std()
def standardize(x):
return (x - mu) / sigma
train_z = standardize(train_x)
# 创建训练数据的矩阵
def to_matrix(x):
return np.vstack([
np.ones(x.size),
x,
x ** 2,
x ** 3,
x ** 4,
x ** 5,
x ** 6,
x ** 7,
x ** 8,
x ** 9,
x ** 10
]).T
X = to_matrix(train_z)
# 参数初始化
theta = np.random.randn(X.shape[1])
# 预测函数
def f(x):
return np.dot(x, theta)
# 目标函数
def E(x, y):
return 0.5 * np.sum((y - f(x)) ** 2)
# 正则化常量
LAMBDA = 0.5
# 学习率
ETA = 1e-4
# 误差
diff = 1
# 重复学习(不应用正则化)
error = E(X, train_y)
while diff > 1e-6:
theta = theta - ETA * (np.dot(f(X) - train_y, X))
current_error = E(X, train_y)
diff = error - current_error
error = current_error
theta1 = theta
# 重复学习(应用正则化)
theta = np.random.randn(X.shape[1])
diff = 1
error = E(X, train_y)
while diff > 1e-6:
reg_term = LAMBDA * np.hstack([0, theta[1:]])
theta = theta - ETA * (np.dot(f(X) - train_y, X) + reg_term)
current_error = E(X, train_y)
diff = error - current_error
error = current_error
theta2 = theta
# 绘图确认
plt.plot(train_z, train_y, 'o')
z = standardize(np.linspace(-2, 2, 100))
theta = theta1 # 未应用正则化
plt.plot(z, f(to_matrix(z)), linestyle='dashed')
theta = theta2 # 应用正则化
plt.plot(z, f(to_matrix(z)))
plt.show()
运行结果如下:
截图和代码引自《白话机器学习的数学》
-
机器学习之正则化
2020-07-20 18:59:591 正则化 正则化(regularization)是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term)。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如...1 正则化
正则化(regularization)是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term)。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如,正则化项可以是模型参数向量的范数。
正则化一般具有如下形式:
其中,第一项是经验风险,第二项是正则化项,λ是调整经验风险和正则化间的系数,称为正则化系数。
正则化项可以取不同的形式。例如,回归问题中,损失函数是平方损失,正则化项可以是参数向量的L2范数:
这里,||w||2表示参数向量w的L2范数,L2范数为向量w中各个元素的平方和。
正则化项也可以是参数向量的L1范数:
这里, ||w||1表示参数向量w的L1范数,L1范数为数向量w中各个元素的绝对值之和。
第1项的经验风险较小的模型可能较复杂(有多个非零参数),这时第2项的模型复杂度会较大。正则化的作用是选择经验风险与模型复杂度同时较小的模型。
正则化符合奥卡姆剃刀(Occam's razor)原理。奥卡姆剃刀原理应用于模型选择时变为以下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较小的先验概率,简单的模型有较大的先验概率。
在机器学习回归问题中如果我们的模型是:
可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于0的话,我们就能很好的拟合了。
1.1 正则化项参数λ的选择
在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能会正则化的程度太高或太小了,即我们在选择λ的值时也需要思考与选择多项式模型次数类似的问题。
选择一系列的想要测试的λ值,通常是0-10之间的呈现2倍关系的值(如:0,0.01、0.02、0.04、0.08、0.15、0.32、0.64、1.28、2.56、5.12、0共12个)。把数据分为训练集、交叉验证集和测试集。
选择λ的方法为:
1、 使用训练集训练出12个不同程度正则化的模型;
2、 用12个模型分别对交叉验证集计算得到交叉验证误差;
3、 选择交叉验证误差最小的模型;
4、运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上。
当λ较小时,训练集误差较小(过拟合)而交叉验证集误差较大。
随着λ的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加。
1.2 正则化分类
正则化分为L1正则化和L2正则化,具体表达式如下图所示。
在逻辑回归模型中,L1正则化模型亦称为LASSO回归;L2正则化模型亦称为岭回归。
1.3 正则化的演化
优化函数:
1.4 L1与L2正则化的选择
L1/L2范数让模型变得稀疏,加了模型的可解析性。但L1范数的稀疏性强,因此,L1正则化可用于特征选择。
L2范数让模型变得更简单,经常用于防止过拟合问题。
L1正则化比L2正则化更容易得到稀疏解,因此,L1与L2正则化的选择有:
1.5 正则化的直观理解
1、上面正则化演化中提到L1正则化有助于生成一个稀疏权值矩阵,进而可以用于特征选择。为什么要生成一个稀疏矩阵?
稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0。通常机器学习中特征数量很多,例如文本处理时,如果将一个词组(term)作为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,或者贡献微小(因为它们前面的系数是0或者是很小的值,即使去掉对模型也没有什么影响),此时我们就可以只关注系数是非零值的特征。这就是稀疏模型与特征选择的关系。
2、 为什么L1正则化可以产生稀疏模型
(L1是怎么让系数等于零的)假设有如下带L1正则化的损失函数:
L1正则化
类似,假设有如下带L2正则化的损失函数:
通用可以画出它在二维平面的图形,如下图所示;
L2正则化
3、为什么L2正则化可以防止过拟合?
拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。
那为什么L2正则化可以获得值很小的参数?
最开始也提到L1正则化一定程度上也可以防止过拟合。之前做了解释,当L1的正则化系数很小时,得到的最优解会很小,可以达到和L2正则化类似的效果。
1.6 优缺点
提高了模型的泛化能力,但损失了模型的精度。
1.7 应用
在监督性机器学习中,每个模型基本用到正则化项,就以线性模型为例,则有:
1、 线性回归中的正则化
线性回归的代价函数J(θ)表达式如下:
正则化后,代价函数J(θ)表达式如下,注意j从1开始:
我们的目标依然是求J(θ)最小值,我们还是用梯度下降算法和正规方程求解最小化J(θ)。
1) 梯度下降算法(注意需要区分θ0和其它参数的更新等式)
2) 正规方程
2、逻辑回归中的正则化
和线性回归模型类型相似,逻辑回归也可以通过正则化来解决过拟合问题。逻辑回归的代价函数J(θ)表达式如下:
2 改进算法性能的方法
之前讲过,当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。
若交叉验证集或测试集误差远大于训练集误差时,模型的方差较大,处于过拟合状态。模型过拟合时,可使用L2正则化来减少过拟合。当增大正则化系数λ时,则对模型参数以大的惩罚,减少模型的复杂度,减缓模型的过拟合。当正则化系数λ增加过大时,模型处于欠拟合状态。此时,可以适当的调整正则化系数λ,即减少λ以避免欠拟合。因此,我们可以通过以下方法来解决偏差与方差及过拟合问题,从而提高算法的性能。
3 参考资料
[1].《机器学习》 ---周志华
[2].《统计学习方法》---李航
[3]. DeepLearning.ai笔记
[4]. https://blog.csdn.net/jinping_shi/article/details/52433975
[5].https://blog.csdn.net/zouxy09/article/details/24971995
关注微信号,了解更多信息 -
吴恩达 机器学习 正则化 学习笔记
2019-09-14 20:05:41正则化解决/缓解 过拟合 问题 首先,介绍几个概念 “欠拟合”与“刚刚好”与“过拟合” “欠拟合”其实相对容易解决,通过不断地调参,总可以使拟合度逐渐提高 而“过拟合”的问题则相对麻烦一些 Q:什么情况会... -
AI:机器学习的正则化 (Regularization)
2021-01-01 08:57:00机器学习之正则化 (Regularization) 1.参数正则化 1.1 L2 Regularization(Ridge Regression,权重衰减) 1.2 L1 Regularization:将噪点相关权重系数设为0(也叫稀疏正则化) 1.3 L1/L2对比: 2. 经验正则化(早停... -
机器学习中的正则化(Regularization)
2019-12-16 18:25:13我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当你用比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象(训练集表现很好,测试集表现较差),这会导致模型的泛化... -
机器学习正则化:为什么减小参数大小能防止过拟合
2021-09-16 10:15:17首先贴一张吴恩达老师机器学习课程里的图: 这张图里,可以看出 第三张图千方百计去拟合已有数据,但这会在遇到新数据时导致泛化能力很差。而拟合曲线的复杂在于引入了高次项,相比于图二,也就是θ3和θ4。 ... -
[转载]什么是机器学习正则化?L1正则化?L2正则化?
2020-04-29 14:26:29什么是机器学习正则化?什么是机器学习正则化?L1正则化?L2正则化? 机器学习中,如果参数过多,模型过于复杂,容易造成过拟合(overfit)。即模型在训练样本数据上表现的很好,但在实际测试样本上表现的较差,不... -
L2正则化python实现案例(附代码)
2019-02-09 12:32:29L2正则化python实现案例(附代码),含图形展示,对于正则化理解又直观帮助 -
python机器学习——正则化
2020-08-25 13:58:13范数正则化理论及具体案例操作1、正则化(1)什么是正则化(2)为什么要进行正则化(3)正则化原理2、范数(1)L0 范数(2)L1 范数参考文献 1、正则化 (1)什么是正则化 正则化( Regularization )就是对最小化... -
什么是机器学习中的正则化(Regularization)
2019-06-09 10:40:59[2]:机器学习中常常提到的正则化到底是什么意思? [3]:Difference between L1 and L2 regularization, implementation and visualization in Tensorflow [4]:... -
python机器学习——正则化实例
2020-08-26 08:35:15正则化实例 还是使用前面“比萨饼价格预测”的例子: (1)L1 范数正则化—— Lasso 模型在 4 次多项式特征上的拟合表现 # 输入训练样本的特征以及目标值,分别存储在变量 X_train 与 y_train 之中 X_train = [[6], ... -
常见的机器学习模型正则化的方式
2022-03-10 22:17:08请列举常见的机器学习模型正则化的方式,简述自己对不同方法的理解。 答: 第一类:引入参数范数惩罚项 通过在损失函数中添加一个参数范数惩罚,限制模型的学习能力。其中,常见的有:L1正则化与L2正则化。 这种正则... -
机器学习正则化概述
2017-11-18 21:33:30机器学习正则化 -
机器学习正则化相关讲解
2017-05-12 16:00:05讲解了三个范数以及范数在机器学习中的作用 jhttp://blog.csdn.net/zouxy09/article/details/24971995 -
机器学习:正则化的原理
2020-04-01 20:42:55今天看了B站一位up主解释L1和L2正则化,感觉讲解的很不错,自己总结一下。 面试常见问题: 如何防止模型过拟合。 为什么正则化可以防止过拟合? 为什么L1得到的多是稀疏解? 这三个问题,明显是一套组合拳。 4. ... -
7.机器学习之正则化(李宏毅)
2020-10-28 12:16:34我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。接下来了解... -
吴恩达机器学习之神经网络小节-正则化项
2022-02-28 16:30:49学习机器学习时,看到一个我自己感觉不容易理解的东西,对于多分类任务中神经网络的代价函数: 这个大括号里面还好看一些,主要就是这个正则化项,这里大家可能被lecture8里面的权重函数定义给搞糊涂了。 这里只是... -
机器学习正则化、偏差和误差理解总结
2018-04-04 17:44:57:机器学习模型,可以理解为在已知数据和模型的情况下,求模型参数的过程,即: Af = g 其中g是数据,A是模型,f参数;然而实际生活中,这个求解过程是一个不适定问题,存在多个解,或者说无法求解。因此,我们就... -
机器学习正则化解读
2022-04-16 00:05:17正则化 -
机器学习学习笔记—正则化的理解
2020-08-10 09:22:58这几天在学习李航的统计学习方法,来谈谈我对于机器学习中正则化的理解: 什么是正则化 如何理解正则化 正则化的作用 第一个问题,什么是正则化? 正则化就是在损失函数后加上一个正则化项(惩罚项... -
机器学习——正则化 (Regularizaiton-Regular-Regularize)
2022-01-10 19:02:28什么是正则化? 1、从使用正则化的目的角度:正则化是为了防止过拟合。 我们先对该数据做线性回归,也就是左边第一张图。如果这么做,我们可以获得拟合数据的这样一条直线,但是,实际上这并不是一个很好的... -
【机器学习基础】范数与正则化
2021-03-18 17:41:47前言本文讨论了机器学习中正则化这个话题,对于L1正则项为什么稀疏也是面试中经常涉及的。概要正则化是机器学习中防止过拟合的一种重要技术。从数学上讲,它增加了一个正则化项,以防止系数如此完美地... -
机器学习--模型复杂度及正则化
2020-05-06 20:14:36逻辑回归会倾向于学习到ω\omegaω最大的值,怎么解决这个问题 在损失函数中引入正则项: L(θ)=∑i=1Nyilog(11+exp(−ωTx))+(1−yi)log(exp(−ωTx)1+exp(−ωTx)+12λω2L(\theta) = \sum_{i=1}^N y_{i}log... -
机器学习—回归算法—正则化(原理及代码实现)
2019-07-25 07:54:271、问题由来 1、线性回归过拟合(房价预测) 由上图可看, 第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集; 第三个模型是一个四次方的...2、正则化 在事例中看出,由于那些高次项导致了过拟合的产... -
机器学习正则化与过拟合
2017-05-26 00:00:00楼主从零学习机器学习,作为一个小白玩家,今天去面试被问到正则化的问题,我居然表示不知道,于是回来赶紧恶补,发现是过拟合的问题,百度了一下之后,发现还是比较简单的。。分享这篇文章,觉得把正则化讲的很清楚... -
机器学习-正则化方法及原理
2019-03-06 10:51:49正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合)。其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐... -
【机器学习】正则化&损失函数和梯度下降法
2022-01-14 19:48:59一、正则化 1.概念 正则化就是说给损失函数加上一些限制,通过这种规则去规范他们再接下来的循环迭代中,不要自我膨胀。 我们可以看到,第一张图片拟合程度过低,导致测试结果不尽人意; 第二张图片是刚刚...