美文网首页
ML-模型正则化

ML-模型正则化

作者: 倪桦 | 来源:发表于2023-02-06 13:48 被阅读0次

模型正则化 Regularization 是通过 约束模型参数值的大小 实现解决模型方差过大(过拟合)问题的一种 标准处理手段。通过模型正则化处理可以在保持模型具有较高复杂度的前提下 提高模型的泛化能力

关于向量的Lp范数

Lp范数: 数学上表达为向量各个元素绝对值p次方和的1/p次方 \|\vec x\|_{p} = (\sum_{i=1}^{n}|x_{i}|^{p})^{\frac {1}{p}}
该数学形式与 明可夫斯基距离 :(\sum_{i=1}^{n}{|X_i^{(a)} - X_i^{(b)}|^{p }})^{\frac{1}{p}} 一致,当p取不同值时明可夫斯基距离可以具体化为不同的类型。

对于向量的Lp范数,其实度量的是 空间中向量到坐标原点的距离:

  • p=1 时,L1范数 度量了向量到原点的 曼哈顿距离
  • p=2 时,L2范数 度量了向量到原点的 欧氏距离

一般数据分析领域几乎不会涉及 p \gt 2 的距离。

1、L2正则项-岭回归 Ridge Regression

在线性回归任务中,寻找最优参数的优化目标为
\small {\bf 使得}\ \ \sum _{i= 1 }^{m}{(y^{(i) - \hat y^{(i)}})} \rightarrow \sum _{i= 1 }^{m}{(y^{(i)}{ - \theta _{0} - \theta _{1}x^{(i)}_{1} -...- \theta _{n}x^{(i)}_{n} })} \rightarrow MSE(y^{(i)},\hat y^{(i)};\theta) \ \ \small {\bf 尽可能小。}

加入模型正则化 约束模型参数值大小的 L2正则项 \alpha\frac {1}{2}\sum_{i=1}^{n}{\theta^2_i} 使得优化目标变为 :
\small {\bf 使得}\ \ J(\theta)= MSE(y^{(i)},\hat y^{(i)};\theta) + \alpha\frac {1}{2}\sum_{i=1}^{n}{\theta^2_i} \ \ \small {\bf 尽可能小。}
参数值约束条件里的常量 \alpha 代表在模型正则化下模型参数的约束强度; 当\alpha = 0 ,表示不对模型参数值大小进行任何约束;当\alpha \to \infty,模型正则化的任务将使得每一个\theta_{i}都尽可能小,极端情况下所有\theta 将取零。 在实际情况中,\alpha作为模型的超参数,可通过搜索获得。优化目标使用这种添加了参数大小约束的 线性回归 又称 岭回归 Ridge Regression

1.2 scikit-learn 框架下的岭回归

岭回归 Ridge Regression 是一种添加了模型参数值大小约束的 线性回归方法 Linear Regression

### Prepare datasets
import numpy as np
x = np.random.uniform(-3,3,size = 100).reshape((-1,1))
y = .5 * x ** 2 + 1*x + 2 + np.random.normal(size =(100,1))

### PolynomialFeatures
from sklearn.preprocessing import PolynomialFeatures ### 特征构造
poly = PolynomialFeatures(degree=3) ### 构造三次幂样本特征
poly.fit(x)
X = poly.transform(x) ### 返回添加了构造特征的特征矩阵,分别是 x^0,x^1,X^2 钩爪

### Ridge Regression - 参数值大小约束下的线性回归
from sklearn.linear_model import Ridge
ridge_reg = Ridge(alpha= .00001) ### 多项式回归得到的特征系数Θ 通常会非常大,约束值α可以选个小一些的值;α 越大会使得拟合曲线变得平滑。
ridge_reg.fit(X,y)
ridge_reg.coef_

1.3 sklearn 岭回归 管道封装

### 岭回归 流程管道
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures  
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_errorn
def RidgeRegressor(degree,alpha):
    return Pipeline([
        ("poly",PolynomialFeatures(degree=degree)), ### 格式为 管道名,当前管道需执行的函数
        ("std_scaler",StandardScaler()),
        ("ridge_reg",Ridge(alpha = alpha))
    ])

#### Usage of scikit-learn Pipline
ridge_reg = RidgeRegressor(degree=3,alpha=0.0001)
ridge_reg.fit(x,y)
y_predict = ridge_reg.predict(x)
mean_squared_errorn(y,y_predict) ### MSE

2、L1正则项-LASSO 回归

LASSO 模型正则化 (Least Absolute Shrinkage and Selection Operator Regression) 的本质与 岭回归 一样,区别在于使得模型参数值最小化的约束条件的描述方式为 L1正则项 \alpha \sum_{i=1}^{n}{|\theta_i|}

LASSO Regression 的优化目标:
\small {\bf 使得}\ \ J(\theta)= MSE(y^{(i)},\hat y^{(i)};\theta) + \alpha \sum_{i=1}^{n}{|\theta_i|}\ \ \small {\bf 尽可能小。}

2.1 Lasso 的特征选择作用

对于岭回归 ,当参数值约束\alpha趋于无穷的时候,目标函数 J(\theta) = MSE(y^{(i)},\hat y^{(i)};\theta) + \alpha\frac {1}{2}\sum_{i=1}^{n}{\theta^2_i} 中的约束 \alpha\frac {1}{2}\sum_{i=1}^{n}{\theta^2_i} 的权重将变的无穷大,寻找最优\theta 的目标函数变为 f(\theta) = \alpha\frac {1}{2}\sum_{i=1}^{n}{\theta^2_i} 。对于函数 \theta ^2 在梯度下降的过程中,很难使得 \theta 完全落在函数中心点 0 ,通常只能落在一个趋近于0 的区间上。

对于Lasso 回归 ,同样当参数值约束\alpha趋于无穷的时候,目标函数变为 f(\theta) = \alpha\frac {1}{2}\sum_{i=1}^{n}{|\theta_i|} 。使用梯度下降法搜索绝对值函数的极小值的时候,由于绝对值函数上的导数仅分为三种情况 (\frac {\partial \theta}{\partial J} = 1,\theta \gt 0; \frac {\partial \theta}{\partial J} = 0,\theta =0; \frac {\partial \theta}{\partial J} = -1,\theta \lt0; );所以 Lasso 回归的时候,很容易搜索到 \theta = 0 的参数结果。


因此用绝对值的方式作为\theta 的约束衡量,使得LASSO 趋向于使得一部分 \theta_{i} 的值变为 0,实现在多项式-线性回归中的 特征选择 作用。但是这种特征选择,很可能会错误的丢弃原本有用的特征,从计算准确度而言 Ridge Regression会更准确些。

2.2 scikit-learn 框架下的 LASSO 回归流程管道封装

### lasso回归 流程管道
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error
def LassoRegressor(degree,alpha):
    return Pipeline([
        ("poly",PolynomialFeatures(degree=degree)), ### 格式为 管道名,当前管道需执行的函数
        ("std_scaler",StandardScaler()), 
        ("lasso_reg",Lasso(alpha = alpha))
    ])

#### Usage of scikit-learn Pipline
lasso_reg = RidgeRegressor(degree=3,alpha=0.01)
lasso_reg.fit(x,y)
y_predict = lasso_reg.predict(x)
mean_squared_error(y,y_predict) ### MSE

3、L0 正则项

线性回归的 L0 正则项 约束条件表达为尽量使得非零 \theta 参数的个数尽可能小:

\small {\bf 使得}\ \ J(\theta)= MSE(y^{(i)},\hat y^{(i)};\theta) +min \{number-of-non-zero-\theta \}\ \ \small {\bf 尽可能小。}

L0正则化 一般使用也非常少,min \{number-of-non-zero-\theta \} 本身是一个离散项,从而求解该目标函数的最优化结果需要通过穷举组合所有的 \theta_i 来计算 J(\theta) 才能判断最优组合。实际使用由L1 正则项 代替。

4、弹性网 Elastic Net

联合使用了参数约束项 L1 正则项和L2正则项 ,由超参数 r 指定 L1 正则项L2 正则项 的约束强度。结合了岭回归和Lasso 回归的优势)。如果计算资源充足,并且特征数目不算特别膨胀的时候优选考虑使用计算精度有保障的岭回归 ;只有在特征数特别膨胀的时候考虑使用 弹性网,一定程度上实现了 特征选择和精度 的保证。

\small {\bf 使得}\ \ J(\theta)= MSE(y^{(i)},\hat y^{(i)};\theta) + r\alpha\sum_{i=1}^{n}{|\theta _{i}|} + (1-r)\frac{1}{2}\alpha\sum_{i=1}^{n}{\theta_i^2} \ \ \small {\bf 尽可能小。}

相关文章

  • ML-模型正则化

    模型正则化 Regularization 是通过 约束模型参数值的大小 实现解决模型方差过大(过拟合)问题的一种 ...

  • ml-正则化(regularization)

    过拟合(over-fitting) 过拟合:过于强调拟合原始数据,而丢失了算法的本质:预测新数据。 分类问题中也存...

  • ML-模型泛化

    1、过拟合与欠拟合 对于包含噪音的数据集,进行数据拟合的时候,总能找到一条曲线穿过所有样本点,使得模型的预测结果与...

  • 深度学习的正则化

    正则化是为了降低模型的复杂度,和损失函数一起作用于模型中来避免模型过拟合。主要有L1正则化和L2正则化。L1正则化...

  • 机器学习 - 线性回归中的正则化

    为什么要正则化? 正则化的本质是什么? 正则化有哪些方法? 1.为什么要正则化? 正则化可以解决模型过拟合的问题,...

  • 正则化、Dropout与交叉验证2018-04-26

    1. 正则化 正则化项的作用是选择经验风险与模型复杂度同时较小的模型,防止过拟合,提升模型泛化能力(general...

  • 学习笔记-L1与L2正则化

    当模型过拟合时,我们常常使用正则化去减轻模型的复杂度。它主要在损失函数后添加正则项去约束模型。 L1与L2正则化 ...

  • 正则化

    1 TensorFlow优化模型之正则化疑问: 为什么复杂度和模型的权重有关, 通过限制 权重的大小来正则化 loss

  • 正则化

    一、正则化基础 正则化等价于结构风险最小化,就是在经验风险后面加上了表示模型复杂度的正则化项或惩罚项。 正则化的作...

  • Xgboost PPT解析

    监督学习基本元素 模型 参数 目标函数 = 损失函数+正则化项:优化损失函数为了拟合预测模型,而正则项负责简化模型...

网友评论

      本文标题:ML-模型正则化

      本文链接:https://www.haomeiwen.com/subject/kkbnhdtx.html