目录
在机器学习领域,模型的泛化能力是衡量其性能的关键指标之一。一个模型如果只能在训练数据上表现良好,而在新的、未见过的数据上表现不佳,就被称为过拟合。正则化技术正是为了解决这一问题而诞生的,它通过在模型训练过程中引入额外的约束来提高模型的泛化能力。本文将详细介绍正则化的概念、常见方法以及它们在实际应用中的重要性。
正则化简介
正则化是机器学习中用于防止模型过拟合的关键技术。过拟合是指模型在训练数据上表现良好,但在未见过的数据上表现差的情况。这种情况通常发生在模型过于复杂,以至于它学习了训练数据中的噪声和细节,而不是底层的数据分布。正则化通过在模型的损失函数中添加一个惩罚项来解决这个问题,这个惩罚项通常基于模型参数的大小。这种方法限制了模型的复杂度,迫使模型学习更加泛化的特征,从而提高模型在新数据上的表现。
常见的正则化技术
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


最低0.47元/天 解锁文章

1396

被折叠的 条评论
为什么被折叠?



