正则化教程

正则化(Regularization)是机器学习中用于防止模型过拟合的一种技术,通过增加对模型复杂度的约束,使模型在训练数据和未见数据上都有更好的泛化能力。常用的正则化方法包括 L1 正则化(Lasso)、L2 正则化(Ridge)、以及更复杂的 Dropout 等方法。

这里我为你提供一个关于 L1 和 L2 正则化的详细教程,包括代码示例。

1. 正则化原理

L1 正则化(Lasso)

L1 正则化会在损失函数中加入权重系数绝对值的和,鼓励稀疏模型(即部分权重为 0)。其损失函数为:
[ Loss = \text{MSE} + \lambda \sum_{i=1}^{n} |w_i| ]
其中,( \lambda ) 是正则化参数,用于控制正则化的强度,( w_i ) 是模型的权重。

L2 正则化(Ridge)

L2 正则化则是将权重的平方和加入到损失函数中,鼓励模型的权重较小,但不会使权重完全为 0。其损失函数为:
[ Loss = \text{MSE} + \lambda \sum_{i=1}^{n} w_i^2 ]

2. L1 和 L2 正则化的实现(使用 Scikit-learn)

我们将通过 Python 的 Scikit-learn 库来演示如何实现 L1 和 L2 正则化。

数据准备

我们使用一个简单的线性回归问题进行演示,首先加载并准备数据。

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression# 生成样本数据
X, y = make_regression(n_samples=100, n_features=10, noise=0.1, random_state=42)# 拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
L1 正则化(Lasso)

L1 正则化可以使用 Scikit-learn 的 Lasso 模型进行实现。

from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error# L1 正则化
lasso = Lasso(alpha=0.1)  # alpha 为正则化强度,类似于 λ
lasso.fit(X_train, y_train)# 预测
y_pred_lasso = lasso.predict(X_test)# 评估
mse_lasso = mean_squared_error(y_test, y_pred_lasso)
print(f"Lasso MSE: {mse_lasso}")# 查看模型的系数(部分系数会被压缩为 0)
print(f"Lasso Coefficients: {lasso.coef_}")
L2 正则化(Ridge)

L2 正则化可以使用 Scikit-learn 的 Ridge 模型进行实现。

from sklearn.linear_model import Ridge# L2 正则化
ridge = Ridge(alpha=0.1)
ridge.fit(X_train, y_train)# 预测
y_pred_ridge = ridge.predict(X_test)# 评估
mse_ridge = mean_squared_error(y_test, y_pred_ridge)
print(f"Ridge MSE: {mse_ridge}")# 查看模型的系数(权重更小但不会为 0)
print(f"Ridge Coefficients: {ridge.coef_}")
L1 和 L2 的区别
  • L1 正则化倾向于产生稀疏解,即部分特征的权重会被压缩为零,因此适用于特征选择。
  • L2 正则化会均匀地减小权重,但不会使它们完全为零,更适用于需要控制模型复杂度但不希望稀疏解的场景。

3. 结合 L1 和 L2 正则化(ElasticNet)

有时,我们希望同时结合 L1 和 L2 正则化,这可以通过 ElasticNet 模型实现。

from sklearn.linear_model import ElasticNet# L1 + L2 正则化
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)  # l1_ratio 控制 L1 与 L2 的比例
elastic_net.fit(X_train, y_train)# 预测
y_pred_en = elastic_net.predict(X_test)# 评估
mse_en = mean_squared_error(y_test, y_pred_en)
print(f"ElasticNet MSE: {mse_en}")# 查看模型的系数
print(f"ElasticNet Coefficients: {elastic_net.coef_}")

4. 正则化参数的选择

选择合适的正则化强度 ( \lambda )(即 alpha)非常重要。可以使用交叉验证(cross-validation)来调节这个参数。

from sklearn.model_selection import GridSearchCV# 定义参数范围
param_grid = {'alpha': [0.001, 0.01, 0.1, 1, 10]}# 使用 GridSearch 进行超参数调优
grid = GridSearchCV(Ridge(), param_grid, cv=5)
grid.fit(X_train, y_train)print(f"Best alpha: {grid.best_params_}")

总结

正则化可以有效防止模型过拟合,使模型具有更好的泛化能力。在实际项目中,L1 正则化适合特征选择,而 L2 正则化适合控制模型复杂度。结合 L1 和 L2 的 ElasticNet 则提供了更灵活的选择。

如果你有特定的项目或者问题想要进一步探讨,可以告诉我,我可以帮助你更深入地学习和应用正则化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1551809.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

百度百科 X-Bk-Token 算法还原

声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! 文章目录 声明案例地址参数分析X-Bk-Token算法追踪X-Bk-Token后缀算法还原c 值跟踪与算法还原往期逆向文章推荐最近太忙了,博客摆烂了好…

Zabbix自动发现SNMP主机

前言 利用Zabbix监控DELL R740主机硬件,监控通过自动发现主机,链接SNMP监控模板 一、配置自动发现 自动发现脚本 cat discovery_host.pyfrom os.path import abspath, dirname, join import json import sysreload(sys) sys.setdefaultencoding(utf-8…

击破壁垒,融合共生,Matter技术点爆智能家居万亿市场!

“爆改”家居生态,点亮万亿蓝海,Matter够格吗? 在万物互联的时代浪潮中,智能家居已加速从单品智能发展至全屋智能,然而之前Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home、Aqara Home、TuYa与HomeA…

开放式耳机什么品牌好?精选无差评开放式耳机推荐!

市场上开放式耳机的日益增多为用户带来了丰富的选择,但也使得一些人在众多产品中难以做出决定,不知道开放式耳机哪个牌子的好?为了帮助解决这个问题,我挑选了五款既实用又获得好评的开放式耳机,目的是为大家提供方便&a…

详细指南:如何有效解决Windows系统中msvcp140.dll丢失的解决方法

如果你在使用Windows系统时遇到“msvcp140.dll丢失”的错误提示,通常是因为你的计算机上缺少或损坏了msvcp140.dll文件。msvcp140.dll是Microsoft Visual C Redistributable包的一部分,许多应用程序和游戏需要它来正常运行。以下是几种解决msvcp140.dll丢…

Jetbrains 推出 CodeCanvas:云开发时代的未来已来

人们不大愿意相信事实 只愿意相信故事 你信仰什么 就会怎样生活 近期 jetbrains 悄悄的推出了新的产品 CodeCanvas,这个产品的推出具有划时代的意义。 CodeCanvas 的定位是一个云 IDE 。想一想 jetbrains 从 2000 年开始就专注于 IDE 的开发,准确来说是…

当前用户添加到 [uucp ]组

archlinux使用tabby 查看当前用户:将当前用户添加到 uucp 组验证组成员身份重新登录 /dev/ttyUSB0 设备的所有者是 root,而所属组是 uucp,如果您想以当前用户身份访问此设备,您可以将当前用户添加到 uucp 组中。 以下是将当前用户添加到 uucp…

基于Springboot+Vue的c语言学习辅导网站的设计与实现 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

HarmonyOS/OpenHarmony Audio 实现音频录制及播放功能

关键词:audio、音频录制、音频播放、权限申请、文件管理 在app的开发过程中时常会遇见一些需要播放一段音频或进行语音录制的场景,那么本期将介绍如何利用鸿蒙 audio 模块实现音频写入和播放的功能。本次依赖的是 ohos.multimedia.audio 音频管理模块&am…

待办事项应用SideQuests

赶在国庆长假前,自驾🚗出去玩了几天。 国庆前的错峰出游简直是太香了!一路上🛣️畅通无阻,停车🅿️不用抢,吃饭🍔不用等,景点🏞️不用排队,拍照&…

热门录屏工具详细介绍及上手攻略

如果你的公司业务范围比较广,那应该会频繁进行远程会议吧。对于远程会议最方便的记录方式就是录屏啦。但对于很多人来说,如何选择合适的录屏方法以及使用相关软件可能还存在一些困惑。接下来,就让我们一起深入探讨如何录屏以及了解一些优秀的…

[Notepad++] 文本编辑器的下载及详细安装使用过程(附有下载文件)

程序员常用的文本编辑器Notepad,用于修改配置文件等 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压文件,得到 双击exe文件 选择简体中文,点击OK 点击下一步 点击“我接受” 更改安装目录,不…

Arthas sm(查看已加载类的方法信息 )

文章目录 二、命令列表2.2 class/classloader相关命令2.2.6 sm(查看已加载类的方法信息 )举例1:显示类加载的方法举例2:显示类加载的executeTask方法详细信息 本人其他相关文章链接 二、命令列表 2.2 class/classloader相关命令 …

如何使用SCCMSecrets识别SCCM策略中潜在的安全问题

关于SCCMSecrets SCCMSecrets是一款针对SCCM策略的安全扫描与检测工具,该工具旨在提供一种有关 SCCM 策略的全面安全检测方法。 该工具可以从各种权限级别执行,并将尝试发现与策略分发相关的潜在错误配置。除了分发点上托管的包脚本外,它还将…

如何让每一次销售都成为顾客心中的温馨记忆

舒适,乃交往之至高艺术,亦渗透于买卖交易的每一环节。 在这个体验为王的时代,消费者追求的早已超越了物质本身,转而寻觅那份独特的“心灵触动”。他们购买的,实则是一种情感的共鸣,一种被重视与信赖的“感觉…

分糖果C++

题目&#xff1a; 样例解释&#xff1a; 样例1解释 拿 k20 块糖放入篮子里。 篮子里现在糖果数 20≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 13≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 6<n7&#xf…

git 报错git: ‘remote-https‘ is not a git command. See ‘git --help‘.

报错内容 原因与解决方案 第一种情况&#xff1a;git路径错误 第一种很好解决&#xff0c;在环境变量中配置正确的git路径即可&#xff1b; 第二种情况 git缺少依赖 这个情况&#xff0c;网上提供了多种解决方案。但如果比较懒&#xff0c;可以直接把仓库地址的https改成ht…

Python从0到100(六十):机器学习-模型选择与交叉验证

1、为什么需要交叉验证 交叉验证目的&#xff1a;为了让被评估的模型更加准确可信 在机器学习中&#xff0c;模型的性能评估至关重要。如果仅使用训练数据进行模型训练&#xff0c;然后直接在测试集上进行评估&#xff0c;可能会出现模型对训练数据过拟合的问题。过拟合的模型…

python7_标识符

标识符 关键字 说明 1和java一样&#xff0c;python也有关键字&#xff0c;不允许以以下字段作为方法名和类名 2标识符是区分大小写的&#xff0c;例如A和a是不一样的 3标识符第一个数字必须是字母或者下划线&#xff0c;之后可以是字母、数字、下划线 4以双下划线开头或者结…

828华为云征文|华为云 Flexus X 实例初体验

一直想有自己的一款的服务器&#xff0c;为了更好的进行家庭娱乐&#xff0c;甚至偶尔可以满足个人搭建开发环境的需求&#xff0c;直到接触到了华为云 Flexus X 云服务器。Flexus 云服务器 X 实例是面向中小企业和开发者打造的轻量级云服务器。提供快速应用部署和简易的管理能…