Regularization——正则化

2023-12-16 13:30
文章标签 正则 regularization

本文主要是介绍Regularization——正则化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.过拟合问题

        这是使用不同的模型根据房子的大小对于房价的预测

        第一张图的模型距离数据点的平均距离仍然比较大,拟合效果并不是特别好,也叫欠拟合(underfitting)

        第二张图的模型对于训练集数据的拟合的不错,也能预测数据的趋势,这是我们需要的模型

        第三张图的模型拐来拐去,甚至的拟合了训练集的每一个数据点,损失函数接近于0,但如果给一个新的数据,它的效果是很差的,这种模型是过拟合(overfitting)的。可能会疑惑难道这不是最好的模型吗,但评判一个模型的优劣在于其泛化能力,也就是对于新的模型没见过的数据的预测能力,因为这必然是和训练集不一样的。

        在分类问题中也存在此问题

        

  1. 欠拟合:泛化能力差,训练样本集准确率低,测试样本集准确率低。
  2. 过拟合:泛化能力差,训练样本集准确率高,测试样本集准确率低。
  3. 合适的拟合程度:泛化能力强,训练样本集准确率高,测试样本集准确率高

        如果我们使用更多特征让模型去学习,模型的参数也就越多,则模型也就会越复杂,过拟合的问题也会越容易产生。

如何解决过拟合:

1.减少特征的数量

  • 人为选择保留重要的特征
  • 使用特征选择算法(PCA)

2.正则化

    正则化会保留所有的特征,但通过添加惩罚项来限制参数的大小

2. 正则化

        这里介绍正则化也叫L2 regularization

2.1 修改损失函数

       上例产生过拟合的模型是

        我们可以发现正是高次项让模型产生过拟合,所以如果我们能够让那些高次项的系数接近于0的话,就能够减轻过拟合现象。

        回顾线性回归损失函数

        min_{\theta }J(\theta )=min_{\theta }\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta }(x)^{i}-y)^{2}

        如果我们修改成下面这样

        让后面两项(也叫惩罚项)也加入损失函数,1000的系数会让我们在最小化损失函数的时候\theta _{3}\theta _{4}取值变小,这时候\theta _{3}\theta _{4}对结果的影响就会大大降低

        假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让损失函数最优化过程中自动来选择对这些系数的惩罚的程度

        于是这就是线性回归加入惩罚项的模型

        (不会对\theta _{0}进行惩罚)

        范数形式

                

       其中 

        其中 \lambda 又被称为正则化参数,(同学习率一样是一个超参数(hyper-parameters),需要手动设置)。加入惩罚项后对比效果如下图,可以看到过拟合现象有效缓解

                                

         如果我们令 \lambda的值很大的话,为了使损失函数尽可能的小,所有的\theta的值(不包括 \theta _{0})都会在一定程度上减小。

        如果 \lambda取值过于大的话,那么除了 \theta _{0} 之外的所有参数都趋近于0,模型接近一条直线,此时不会过拟合了,但反而会欠拟合,损失值一直会很大,梯度下降算法难以收敛。

2.2 惩罚项运行的机理

        加入惩罚项后损失函数会分成两个部分

        第一部分和之前一样去更好的拟合数据集,

        第二部分限制参数的大小,让模型变得更简单

        两者相互平衡,从而达到一种相互制约的关系,最终找到一个平衡点,从而在更好地拟合训练集的同时具有良好的泛化能力。

2.3 在线性回归中使用正则化

2.3.1 模型

        加入惩罚项的模型在上面已经给出

2.3.2 梯度下降

此时梯度会稍有不同

        \frac{\delta J(\theta )}{\delta \theta }=\frac{1}{m}\sum_{m}^{i=1}(h_{\theta }(x^{i}-y^{i})x^{i})+\frac{1}{m}\lambda\sum_{j=1}^{n}\theta_{j}

更新参数

        

                   ==

        

        \lambda取值常常小于m,因此

对比一下未加入惩罚项的

        

        \theta会每次基础上减少了一个额外的值

从另一个方面理解相互制约:

        当模型过拟合时,会接近0,即接近于0,\theta会比较大,此时梯度会消失,随着迭代的继续,一项仍在继续减小着\theta的值,随着\theta的减小,值会逐渐变大,梯度又会重新出现

2.3.3 正规方程正则化

        原本求解\theta

 

        加入正则化后

,其中I为单位矩阵

        此时不会出现不可逆的现象

2.4 在逻辑回归中使用正则化

2.4.1 模型

2.4.2 梯度下降

3.正则化实例

        ex2data2.txt数据集前两列为特征,最后一列为类标签(1/0)

1.读取数据

data = pd.read_csv('ex2data2.txt',names=['feature1','feature2','label'])
data.head()

2.数据预处理

X = data.iloc[:,0:-1].values
y = data.iloc[:,-1].values
y.reshape(y.shape[0],1)
# 生成特征多项式,最高次为4次方
poly = PolynomialFeatures(degree=4)
X = poly.fit_transform(X)
# 8:2划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3.模型训练

        未使用正则化

model = LogisticRegression(penalty=None,max_iter=1000)
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
train_accuracy = accuracy_score(y_train, y_train_pred)
print("train Acc without regularization:",train_accuracy)
y_test_pred = model.predict(X_test)
test_accuracy = accuracy_score(y_test, y_test_pred)
print("test Acc without regularization:",test_accuracy)

        使用l2正则化,C为λ的倒数(0-1),故C越小,正则化强度越高

model_l2 = LogisticRegression(penalty='l2',max_iter=1000,C=0.7)
model_l2.fit(X_train, y_train)
y_train_pred = model_l2.predict(X_train)
train_accuracy = accuracy_score(y_train, y_train_pred)
print("train Acc with regularization:",train_accuracy)
y_test_pred = model_l2.predict(X_test)
test_accuracy = accuracy_score(y_test, y_test_pred)
print("test Acc with regularization:",test_accuracy)

 

        可以看出未使用正则化的模型在训练集表现出了良好的性能,远高于使用了正则化的模型,而未使用正则模型的在测试集的正确率低于使用了正则化的模型

这篇关于Regularization——正则化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500645

相关文章

python进阶篇-day07-高级语法与正则

day07-python其他高级语法 一. with(上下文管理) 介绍 概述 一个类只要实现了__ enter __ () 和 __ exit __ ()方法, 这个类就是一个上下文管理器类, 该类的对象 = 上下文管理器对象 目的 节约资源, 提高效率, 避免手动释放资源, 且出bug的时候, 也会自动尝试释放资源 特点 上下文管理器对象, 可以结合with语句使用

JavaScript中使用正则判断一个值是否是数字,包含正负,小数点

使用正则表达式来判断: if(/^[+-]?\d*\.?\d*$/.test(str)){//为数字} 实际情况中可以将+去掉,

优化算法与正则化

目录 一:优化问题 1.梯度消失和爆炸 2.局部最优  3.指数加权平均 4.动量梯度下降法  5.RMSProp算法 6.Adam算法 二:学习率衰减 三:标准化  都看到这里了,点个赞呗!!!!! 一:优化问题 1.梯度消失和爆炸 在梯度函数上出现指数级递增或者递减的情况下分别称为梯度爆炸或者梯度消失 假设g(z)=z,对于目标输出:y=w^n*w^n-

6. 深度学习中的正则化技术:防止过拟合

引言 过拟合是深度学习模型在训练过程中常遇到的挑战。过拟合会导致模型在训练数据上表现良好,但在新数据上表现不佳。为了防止过拟合,研究者们提出了多种正则化技术,如L1/L2正则化、Dropout、数据增强等。这些技术通过约束模型的复杂度或增加数据的多样性,有效提高了模型的泛化能力。本篇博文将深入探讨这些正则化技术的原理、应用及其在实际深度学习任务中的效果。 1. 过拟合的原因与影响 过拟合通常

013.Python爬虫系列_re正则解析

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

【机器学习 sklearn】模型正则化L1-Lasso,L2-Ridge

#coding:utf-8from __future__ import divisionimport sysreload(sys)sys.setdefaultencoding('utf-8')import timestart_time = time.time()import pandas as pd# 输入训练样本的特征以及目标值,分别存储在变量X_train与y_train之中。

nginx 正则路径匹配

更多请参考:https://liuhuiyao.blog.csdn.net/article/details/119459183 Nginx路径匹配符号 = 表示精确匹配^~ 表示uri以某个常规字符串开头,大多情况下用来匹配url路径,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。~ 正则匹配(区分大

JS常见正则方法整理

JS常见正则方法整理 目录 文章目录 前言1. 使用测试方法 - `test`2. 同时用多种模式匹配文字字符串 - `x|y`3. 匹配时忽略大小写 - `/x/i`4. 提取匹配项 - `match`5. 全局匹配 - `/x/g`6. 用通配符`.`匹配任何内容 - `/hu./`7. 将单个字符与多种可能性匹配 - `[aiu]`8. 匹配字母表中的字母 - `[a-z]`9. 匹配

正则 正整数bug

/^[0-9]{1,}(\.[0-9]{1,}){0,1}$/ 有一个情况是 要验证的数字是整数 但是实际上是 1.0这种形式, 如果是1.0的形式 使用这个正则是会报错的 /^[0-9]*[1-9][0-9]*$/ 可能是不认1.0 但是用最上面的那个正则就没事,可能是多了一层判断。 其实也是要注意把数字改了1.0为0就好了。

【Get深一度】小波分析概念3——正则性是什么意思,通俗解释

正则性英文是regularity,正则性一般用来刻画函数的光滑程度,正则性越高,函数的光滑性越好。通常用Lipschitz指数k来表征函数的正则性。 度量函数的正则性时,消失矩的概念是重要的,若消失矩的阶数小于正则性指数,这是小波度量不出该