正则化是一种在机器学习中用于防止模型过拟合并提高泛化能力的技术。过拟合是指模型在训练数据上表现很好,但在新的未见过的数据上表现较差的情况。正则化通过在模型的损失函数中添加一个正则项,来限制模型的复杂度,从而减少过拟合的风险。
常用的正则化方法有L1正则化和L2正则化。
正则化的效果是通过在损失函数中加入正则化项,使得模型在优化过程中更倾向于选择参数较小的解,从而减少模型的复杂度。这种限制模型复杂度的方式可以有效地减少过拟合的风险,并提高模型在新数据上的泛化能力。
在实际应用中,选择使用L1正则化还是L2正则化,或者两者的结合,需要根据具体的问题和数据情况来决定。通常情况下,L2正则化是更常用的选择,因为它在参数稀疏性和平滑性之间找到了一个平衡点,而L1正则化更适用于特征选择和模型压缩等场景。
L1正则化通过在损失函数中添加L1范数(绝对值)项来约束模型参数。L1正则化鼓励模型参数稀疏化,即使得一部分参数为0,从而使模型更简单。这种稀疏性可以帮助过滤掉无关特征,减少模型的复杂度。
在损失函数中添加L1正则化项后,损失函数变为: L'(θ) = L(θ) + λ * ||θ||1
其中,L(θ)是原始的损失函数,θ是模型的参数,||θ||1表示L1范数,λ是控制正则化强度的超参数。λ越大,正则化的影响越大。
下面是使用L1正则化的示例代码,以线性回归为例:
import numpy as np
from sklearn.linear_model import Lasso
# 准备训练数据
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.array([2, 3, 4, 5])
# 创建Lasso回归模型对象
lasso = Lasso(alpha=0.1) # alpha是正则化强度参数
# 拟合模型
lasso.fit(X, y)
# 打印模型系数
print("模型系数:", lasso.coef_)
print("截距:", lasso.intercept_)
在上述示例代码中,我们使用了sklearn
库中的Lasso
类,它是使用L1正则化的线性回归模型。首先,我们准备了训练数据X
和目标变量y
,其中X
是一个2维的特征矩阵,y
是对应的目标值。
然后,我们创建了Lasso
对象,通过设置alpha
参数来控制正则化的强度。较大的alpha
值会导致更强的正则化效果。
接下来,我们使用fit
方法拟合模型,将训练数据和目标变量传入模型进行训练。
最后,我们可以通过访问coef_
属性获取模型的系数(即特征权重),通过访问intercept_
属性获取模型的截距。
请注意,L1正则化可以将一些模型系数压缩为0,从而实现特征选择的效果。因此,在实际使用中,你可以根据需要调整alpha
的值,观察模型系数的变化,选择适当的特征进行建模。
L2正则化通过在损失函数中添加L2范数(平方和)项来约束模型参数。L2正则化会使得模型的参数都很小,但不会强制为0,相对于L1正则化而言,L2正则化更倾向于均匀地减小所有参数的影响力。
在损失函数中添加L2正则化项后,损失函数变为: L'(θ) = L(θ) + λ * ||θ||2^2
其中,L(θ)是原始的损失函数,θ是模型的参数,||θ||2表示L2范数的平方,λ是控制正则化强度的超参数。
下面是使用L2正则化的示例代码,以线性回归为例:
import numpy as np
from sklearn.linear_model import Ridge
# 准备训练数据
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.array([2, 3, 4, 5])
# 创建Ridge回归模型对象
ridge = Ridge(alpha=0.1) # alpha是正则化强度参数
# 拟合模型
ridge.fit(X, y)
# 打印模型系数
print("模型系数:", ridge.coef_)
print("截距:", ridge.intercept_)
在上述示例代码中,我们使用了 sklearn
库中的 Ridge
类,它是使用 L2 正则化的线性回归模型。与L1正则化相比,代码中的主要差异在于使用的是 Ridge
类而不是 Lasso
类。
首先,我们准备了训练数据X
和目标变量y
,其中X
是一个2维的特征矩阵,y
是对应的目标值。
然后,我们创建了Ridge
对象,通过设置alpha
参数来控制正则化的强度。与L1正则化类似,较大的alpha
值会导致更强的正则化效果。
接下来,我们使用fit
方法拟合模型,将训练数据和目标变量传入模型进行训练。
最后,我们可以通过访问coef_
属性获取模型的系数(即特征权重),通过访问intercept_
属性获取模型的截距。
请注意,L2正则化倾向于使得模型的参数都很小,但不会强制为0,相对于L1正则化而言,L2正则化更倾向于均匀地减小所有参数的影响力。在实际使用中,你可以根据需要调整alpha
的值,观察模型系数的变化,以及在新数据上的性能表现,选择适当的正则化强度。