机器学习 - 防止过拟合方法-正则线性模型

在机器学习的过程中要防止因为参数过多或模型过于复杂导致的过拟合,减少过拟合的一个方法时对模型正则化,降低模型训练的自由度,例如降低多项式的阶数。

正则线性模型

在执行正则化之前,须对数据进行缩放(StandardScaler…)。

岭回归(Ridge Regression)

岭回归Ridge Regression的方法是在训练模型的成本函数1中添加一个等于 a/2 * Σθ^2 2的正则项,这使得在模型的训练过程中不仅仅需要拟合数据,也需要将权重保持在较小的范围内。
正则项中,超参数 a 代表对于模型正则化的程度,a = 0,模型就是线性模型,a很大的时候,所有权重接近于0,模型是一条穿过数据平均值的水平线。
成本函数: J(θ) = MSE(θ) + (a / 2) * Σ θ^2

# 使用Sklearn执行闭式岭回归
from sklearn.linear_model import Ridge
ridge_reg = Ridge(alpha=1, solver="cholesky")

# 使用随机梯度下降实现岭回归
from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(penalty = "l2")
# penalty 指使用正则化的类型,设为l2代表在成本函数中添加 权重向量的l2范数的平方的一半 ,即岭回归。

套索回归(Lasso Regression)

最小绝对收敛和选择算子回归,简称套索回归。
类似于岭回归,套索回归在成本函数中添加权重向量的L1范数,即a Σθ 2
Lasso回归的特点是倾向于消除掉最不重要的特征的权重,即会自动执行特征选择并输出一个稀疏模型。当特征数量超过训练实例数量,又或是几个特征强相关的时候,Lasso回归的表现可能不稳定。
成本函数: J(θ) = MSE(θ) + a * Σ θ

# 使用Sklearn执行闭式套索回归
from sklearn.linear_model import Lasso
ridge_reg = Ridge(alpha=0.1)

# 使用随机梯度下降实现套索回归
from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(penalty = "l1")
# penalty 指使用正则化的类型,设为l1代表在成本函数中添加 权重向量的L1范数 ,即套索回归。

弹性网络(Elastic Net)

弹性网络添加的正则项是岭回归和套索回归正则项的混合。
成本函数: J(θ) = MSE(θ) + r * a * Σ |θ| + (1-r) * (a / 2) * Σ θ^2 3

# 使用Sklearn执行闭式套索回归
from sklearn.linear_model import ElasticNet
elastic_net = ElasticNet(alpha=0.1, l1_ratio = 0.5)

总结

在正常情况下,应该避免使用纯线性回归,岭回归是个不错的选择,但如果实际用的特征较少,则应该使用Lasso回归或弹性网络,用于减少特征数量。


  1. 训练模型的成本函数与测试时的成本函数不同,此正则项不该添加在测试的成本函数中。 ↩︎

  2. 偏置项θ 0不参与正则化求和。 ↩︎ ↩︎

  3. r用于控制混合比例。 ↩︎

猜你喜欢

转载自blog.csdn.net/seek0226/article/details/108020291