正则化:机器学习中的泛化利器

目录

​编辑

正则化简介

常见的正则化技术

L1正则化(Lasso正则化)

L2正则化(Ridge正则化)

弹性网(Elastic Net)正则化

Dropout

权重衰减

正则化的实际应用

结论


在机器学习领域,模型的泛化能力是衡量其性能的关键指标之一。一个模型如果只能在训练数据上表现良好,而在新的、未见过的数据上表现不佳,就被称为过拟合。正则化技术正是为了解决这一问题而诞生的,它通过在模型训练过程中引入额外的约束来提高模型的泛化能力。本文将详细介绍正则化的概念、常见方法以及它们在实际应用中的重要性。

正则化简介

正则化是机器学习中用于防止模型过拟合的关键技术。过拟合是指模型在训练数据上表现良好,但在未见过的数据上表现差的情况。这种情况通常发生在模型过于复杂,以至于它学习了训练数据中的噪声和细节,而不是底层的数据分布。正则化通过在模型的损失函数中添加一个惩罚项来解决这个问题,这个惩罚项通常基于模型参数的大小。这种方法限制了模型的复杂度,迫使模型学习更加泛化的特征,从而提高模型在新数据上的表现。

常见的正则化技术

L1正则化(Lasso正则化)

L1正则化,也称为Lasso正则化,通过在损失函数中添加模型参数的绝对值之和作为惩罚项。这种方法的一个显著特点是它能够产生稀疏的模型参数,即许多参数值会变为零。这种稀疏性使得L1正则化成为一种有效的特征选择工具,因为它自动地将不重要的特征权重设置为零,从而减少了模型的复杂度。在特征数量庞大或者希望模型具有更好解释性的场景中,L1正则化尤其有用。

from sklearn.linear_model import Lasso
import numpy as np
import matplotlib.pyplot as plt

# 创建一个简单的数据集作为示例
X_train = np.array([[1, 2], [2, 3], [3, 4], [4, 3]])
y_train = np.array([1, 2, 3, 4])

# 初始化 Lasso 回归模型,设置正则化强度 alpha
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)

# 输出模型的系数和截距
print("Coefficients:", lasso.coef_)
print("Intercept:", lasso.intercept_)

# 使用模型进行预测
y_pred = lasso.predict(X_train)
print("Predictions:", y_pred)

# 计算模型的系数范数,以观察正则化的效果
print("L1 Norm of Coefficients:", np.sum(np.abs(lasso.coef_)))

# 可视化模型的系数
plt.figure(figsize=(10, 6))
plt.bar(range(len(lasso.coef_)), lasso.coef_, color='blue', label='Lasso Coefficients')
plt.axhline(0, color='black',linewidth=1)
plt.xticks(range(len(lasso.coef_)), [f'Feature {i+1}' for i in range(len(lasso.coef_))])
plt.xlabel('Features')
plt.ylabel('Coefficient Value')
plt.title('Lasso Regression Coefficients')
plt.legend()
plt.show()

# 进一步分析:计算预测的均方误差
from sklearn.metrics import mean_squared_error
m
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WeeJot

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

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

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

打赏作者

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

抵扣说明:

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

余额充值