【scikit-learn基础】--『预处理』之 正则化

数据的预处理是数据分析,或者机器学习训练前的重要步骤。
通过数据预处理,可以

  • 提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性
  • 整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集
  • 提高数据性能,对数据的值进行变换,规约等(比如无量纲化),让算法更加高效

本篇介绍的正则化处理,主要功能是对每个样本计算其范数,然后对该样本中每个元素除以该范数,
这样处理的结果是使得每个处理后样本的范数(如l1-norm、l2-norm)等于1。

1. 原理

介绍正则化之前,先简单介绍下范数的概念。

1.1. 范数

范数常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小,
可以简单理解为向量的长度,或者向量到零点的距离,或者相应的两个点之间的距离。

对于向量(x=[x1,x2,...,xm]x=[x1,x2,...,xm]),常见的范数有:

  1. L1范数,向量元素绝对值之和,x 到零点的曼哈顿距离(∥x∥1=∑mi=1∣xi∣∥x∥1=∑i=1m∣xi∣)
  2. L2范数,向量元素绝对值的平方和再开方,表示x到零点的欧式距离(∥x∥2=√∑mi=1∣x2i∣∥x∥2=∑i=1m∣xi2∣)
  3. p-范数,向量元素绝对值的p次方和的1/p次幂,表示x到零点的p阶闵氏距离(∥x∥p=(∑mi=1∣xi∣p)1p∥x∥p=(∑i=1m∣xi∣p)1p)
  4. 无穷范数,所有向量元素绝对值中的最大值(∥x∥∞=maxi∣xi∣∥x∥∞=maxi∣xi∣)
  5. 等等。

numpy中已经提供了计算向量范数的函数。

import numpy as np# 范数计算arr = np.random.randint(0, 100, 10)
print("向量: {}".format(arr))L1 = np.linalg.norm(arr, 1)
print("L1范数: {}".format(L1))
L2 = np.linalg.norm(arr, 2)
print("L2范数: {}".format(L2))LInf = np.linalg.norm(arr, np.inf)
print("无穷范数: {}".format(LInf))# 运行结果
向量: [12 22 30 75 20 28 38 72  2 33]
L1范数: 332.0
L2范数: 126.72016414130783
无穷范数: 75.0

1.2. 正则化

有了范数的概念之后,再来看正则化,根据选用的范数不同,正则化也分为L1正则化,L2正则化等等。
范数正则化过程中扮演了重要的角色,被用来限制优化参数的大小,帮助防止模型过拟合。

from sklearn import preprocessing as ppdata = np.random.randint(1, 100, size=(3, 3))
L1 = pp.normalize(data, norm="l1")
L2 = pp.normalize(data, norm="l2")
LMax = pp.normalize(data, norm="max")print("L1正则化: {}".format(L1))
print("L2正则化: {}".format(L2))
print("Max正则化: {}".format(LMax))# 运行结果
L1正则化: 
[[0.29677419 0.09677419 0.60645161][0.20408163 0.46938776 0.32653061][0.05       0.67       0.28      ]]L2正则化:
[[0.43510613 0.14188244 0.88912993][0.33614632 0.77313654 0.53783412][0.06869324 0.92048947 0.38468217]]Max正则化:
[[0.4893617  0.15957447 1.        ][0.43478261 1.         0.69565217][0.07462687 1.         0.41791045]]

正则化之后,所有的数值都被压缩到了 0~1之间。
后续介绍机器学习算法时,可以看到正则化如何缓解训练结果过拟合的问题。

2. 作用

对数据进行正则化处理的主要作用有:

2.1. 防止过拟合

过拟合是指模型在训练数据上表现很好,但在测试数据上表现不佳的现象。
主要原因是模型在训练数据上学习了过多的噪声和异常值,导致对训练数据过度拟合。

正则化通过对模型的复杂性进行惩罚,使得模型在训练数据上表现良好的同时,也能够对测试数据有较好的预测能力。

2.2. 提升稳定性和鲁棒性

稳定性是指模型对于输入数据的小变化能够产生可接受的结果。
也就是说,如果输入数据在一定范围内发生微小变化,模型的输出结果也会相应地按照相同的排列顺序发生微小变化,而不是发生较大的颠覆性变化。

鲁棒性则是指模型在一定条件下对于某些性能的保持能力。
也就是说,当输入数据中存在噪声、异常值或不完全信息时,模型能够通过适当的处理和算法,保持其原有的性能表现,不会因为这些干扰因素而出现大幅度性能下降。

在实际应用中,稳定性鲁棒性往往是相互制约的。
过于强调稳定性可能导致模型过于简单,无法处理复杂的数据特征;
而过于强调鲁棒性可能导致模型过于复杂,容易受到噪声和异常值的影响。
因此,需要根据实际应用场景和数据特点来权衡考虑这两种性能指标,以实现最优的性能表现。

正则化可以通过对模型的复杂性进行惩罚,使得模型对于输入数据的小变化不会产生太大的影响,从而提高了模型的稳定性鲁棒性

2.3. 提高泛化能力

泛化能力是指模型在未曾见过的数据上的表现能力,也就是模型对于新的数据的适应能力。

正则化可以通过对模型的复杂性进行惩罚,使得模型更加专注于训练数据中的重要特征,而不是被训练数据中的噪声和异常值所迷惑。
这样可以在一定程度上提高模型的泛化能力,使得模型在未知数据上的表现更好。

3. 总结

scikit-learn中,主要有三种正则化方法,L1正则化,L2正则化和Max正则化。
实际应用中,根据数据的特征和场景对数据选择不同的正则化方法,使得训练后的模型能够有更好的精度和性能。

关注灵活就业新业态,了解更多程序员兼职项目,关注公账号:贤才宝(贤才宝https://www.51xcbw.com) 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵

目录 前言 一、子串 1. 和为 K 的子数组 2. 滑动窗口最大值 3. 最小覆盖子串 二、普通数组 4. 最大子数组和 5. 合并区间 6. 轮转数组 7. 除自身以外数组的乘积 8. 缺失的第一个正数 三、矩阵 9. 矩阵置零 10. 螺旋矩阵 11. 旋转图像 12. 搜索二维矩阵 II 前言 一、子串&#…

【Git 常用操作指令指南】

一、初始化与配置 1. 设置全局账户信息 git config --global user.name "用户名" # 设置全局用户名 git config --global user.email "邮箱" # 设置全局邮箱 --global 表示全局生效,若需针对单个仓库配置,可省略该参数 2.…

教培行业创建自己品牌的重要意义——教育培训小程序

在竞争激烈的教培行业,创建自身品牌意义重大。 拥有独特品牌能显著提升机构竞争力与辨识度。如今教培市场同质化严重,一个亮眼的品牌小程序可使机构从众多竞争者中脱颖而出,让学员和家长快速识别并记住。 品牌小程序有助于增强信任度和口碑。…

Docker 介绍 · 安装详细教程

为什么选择 Docker? ✅ 环境一致性 – 告别“在我机器上能跑”的问题,确保开发、测试、生产环境一致。 ✅ 高效轻量 – 秒级启动,资源占用远低于传统虚拟机。 ✅ 跨平台支持 – 可在任何支持 Docker 的环境中运行,包括云服务器、…

GitHub 上开源一个小项目的完整指南

GitHub 上开源一个小项目的完整指南 🚀 第一步:准备你的项目 在开源之前,确保项目是可用且有一定结构的: ✅ 最低要求 项目文件清晰、结构合理(比如:src/、README.md、LICENSE)项目能在本地正…

React 第三十节 使用 useState 和 useEffect Hook实现购物车

不使用 redux 实现 购物车案例 使用 React 自带的 useState 和 useEffect Hook 即可实现购物车 export default function ShoppingCar() {// 要结算的商品 总数 以及总价const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…

蓝桥杯第十一届省赛C++B组真题解析

蓝桥杯第十一届省赛CB组真题解析 八、回文日期https://www.lanqiao.cn/problems/348/learning 方法一&#xff1a;暴力枚举所有的日期&#xff0c;记录有多少个回文日期。 #include <bits/stdc.h> using namespace std; int month[13]{0,31,28,31,30,31,30,31,31,30,31…

Python和MicroPython的解释器区别

Python和MicroPython的解释器不是同一个&#xff0c;它们在设计目标、实现方式和运行环境上都有显著的区别。以下是它们的主要区别&#xff1a; 1. 底层实现 Python解释器&#xff08;CPython&#xff09;&#xff1a; Python的标准解释器是CPython&#xff08;C语言实现的Pyt…

Cython加密多层目录中的Python脚本方案

近期有一个VueJavaDocker项目中需要加密Python脚本的需求&#xff0c;调研后决定采用Cython。 使用Cython编译为二进制 步骤&#xff1a; 安装Cython&#xff1a;pip install cython创建setup.py&#xff1a; from distutils.core import setup from Cython.Build import c…

力扣DAY40-45 | 热100 | 二叉树:直径、层次遍历、有序数组->二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、右视图

前言 简单、中等 √ 好久没更了&#xff0c;感觉二叉树来回就那些。有点变懒要警醒&#xff0c;不能止步于笨方法&#xff01;&#xff01; 二叉树的直径 我的题解 遍历每个节点&#xff0c;左节点最大深度右节点最大深度当前节点当前节点为中心的直径。如果左节点深度更大…

头歌数据库【数据库概论】第10-11章 故障恢复与并发控制

第1关&#xff1a;数据库恢复技术 1、事务的&#xff08; A&#xff09;特性要求事务必须被视为一个不可分割的最小工作单元 A、原子性 B、一致性 C、隔离性 D、持久性 2、事务的&#xff08;C &#xff09;特性要求一个事务在执行时&#xff0c;不会受到其他事务的影响。 A、原…

windows下,cursor连接MCP服务器

1.下载并安装node 安装后&#xff0c;在cmd命令框中&#xff0c;输入命令node -v可以打印版本号&#xff0c;证明安装完成 2.下载MCP服务器项目 在MCP服务器找到对应项目&#xff0c;这里以server-sequential-thinking为例子 在本地cmd命令窗口&#xff0c;使用下面命令下载…

前端配置husky,commit-lint导致的git提交错误:git xx@0.0.0 lint:lint-staged

前端配置husky&#xff0c;commit-lint导致的git提交错误&#xff1a;git xx0.0.0 lint:lint-staged git commit -m "xxx"时出现以下报错&#xff0c;可能是前端配置husky&#xff0c;commit-lint的原因 //报错信息 git xx0.0.0 lint:lint-staged首先要知道出现这个错…

各种场景的ARP攻击描述笔记(超详细)

1、ARP报文限速 上一章我们说过ARP报文也是需要上送CPU进行处理的协议报文,如果设备对收到的大量ARP报文全部进行处理,可能导致CPU负荷过重而无法处理其他业务。因此,在处理之前需要对ARP报文进行限速,以保护CPU资源。 1.根据源MAC地址或源IP地址进行ARP限速 当设备检测到某一…

Django 创建CSV文件

Django使用Python内置的CSV库来创建动态的CSV&#xff08;逗号分隔值&#xff09;文件。我们可以在项目的视图文件中使用这个库。 让我们来看一个例子&#xff0c;这里我们有一个Django项目&#xff0c;我们正在实现这个功能。创建一个视图函数 getfile() 。 Django CSV例子 …

HTTPS为何仍有安全漏洞?解析加密协议下的攻击面

本文深度剖析HTTPS协议在传输层、证书体系、配置管理三个维度的安全盲区&#xff0c;揭示SSL/TLS加密掩盖下的11类攻击路径。基于Equifax、SolarWinds等重大事件的技术复盘&#xff0c;提供包含自动化证书巡检、动态协议升级、加密流量威胁检测的立体防御方案。 HTTPS不等于绝…

MyBatis 动态 SQL 使用详解

&#x1f31f; 一、什么是动态 SQL&#xff1f; 动态 SQL 是指根据传入参数&#xff0c;动态拼接生成 SQL 语句&#xff0c;不需要写多个 SQL 方法。MyBatis 提供了 <if>、<choose>、<foreach>、<where> 等标签来实现这类操作 ✅ 二、动态 SQL 的优点…

乐观锁与悲观锁的使用场景

悲观锁的应用场景 悲观锁的基本思想是假设并发冲突会发生&#xff0c;因此在操作数据时会先锁定数据&#xff0c;直到完成操作并提交事务后才释放锁。这种方式适用于写操作较多、并发冲突可能性较高的场景。 高写入比例的数据库操作&#xff1a;如果系统中有很多写操作&#x…

cpp(c++)win 10编译GDAL、PROJ、SQLite3、curl、libtiff

cpp&#xff08;c&#xff09;编译GDAL、PROJ、SQLite3 Sqlite3libtiffcurlprojGDAL Sqlite3 1、下载 Sqlite3 源码、工具、二进制预编译 exe Sqlite3 官网&#xff1a;https://www.sqlite.org/download.html 下载 sqlite-amalgamation-3430200.zipsqlite-dll-win64-x64-3430…

【愚公系列】《高效使用DeepSeek》062-图书库存管理

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…