sklearn基础--『预处理』之 正则化

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

通过数据预处理,可以

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

本篇介绍的正则化 处理,主要功能是对每个样本计算其范数 ,然后对该样本中每个元素除以该范数,

这样处理的结果是使得每个处理后样本的范数(如l1-norm、l2-norm)等于1。

1. 原理

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

1.1. 范数

范数 常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小,

可以简单理解为向量的长度,或者向量到零点的距离,或者相应的两个点之间的距离。

对于向量( x = x 1 , x 2 , . . . , x m x = x_1, x_2, ...,x_m x=x1,x2,...,xm),常见的范数有:

  1. L1范数 ,向量元素绝对值之和,x 到零点的曼哈顿距离( ∥ x ∥ 1 = ∑ i = 1 m ∣ x i ∣ \parallel x \parallel_1=\sum_{i=1}^m \mid x_{i}\mid ∥x∥1=∑i=1m∣xi∣)
  2. L2范数 ,向量元素绝对值的平方和再开方,表示x到零点的欧式距离( ∥ x ∥ 2 = ∑ i = 1 m ∣ x i 2 ∣ \parallel x \parallel_2=\sqrt{\sum_{i=1}^m \mid x_{i}^2\mid} ∥x∥2=∑i=1m∣xi2∣ )
  3. p-范数 ,向量元素绝对值的p次方和的1/p次幂,表示x到零点的p阶闵氏距离( ∥ x ∥ p = ( ∑ i = 1 m ∣ x i ∣ p ) 1 p \parallel x \parallel_p=(\sum_{i=1}^m \mid x_{i}\mid^p)^\frac{1}{p} ∥x∥p=(∑i=1m∣xi∣p)p1)
  4. 无穷范数 ,所有向量元素绝对值中的最大值( ∥ x ∥ ∞ = m a x i ∣ x i ∣ \parallel x \parallel_{\infty}=max_i\mid x_i \mid ∥x∥∞=maxi∣xi∣)
  5. 等等。

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

python 复制代码
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正则化等等。
范数正则化过程中扮演了重要的角色,被用来限制优化参数的大小,帮助防止模型过拟合。

python 复制代码
from sklearn import preprocessing as pp

data = 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正则化。

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

相关推荐
wubba lubba dub dub7508 小时前
第四十九周学习周报
人工智能·算法·机器学习
装不满的克莱因瓶8 小时前
学习使用 Python 机器学习工具 sklearn
人工智能·python·学习·机器学习·ai·agent·智能体
Omics Pro10 小时前
3种蛋白结构输入方式!已申报欧洲发明专利
数据库·人工智能·python·机器学习·plotly
Omics Pro11 小时前
「自兹以往」动物肠道微生物组
数据库·人工智能·机器学习·语言模型·自然语言处理
oddsand111 小时前
pgvector 三大相似度算法
人工智能·算法·机器学习
落羽的落羽13 小时前
【项目】JsonRpc框架——开发实现1(细节功能、字段定义、抽象层、具象层)
linux·服务器·网络·c++·人工智能·算法·机器学习
keykey6.13 小时前
卷积神经网络(CNN):让AI学会“看“
开发语言·人工智能·深度学习·机器学习
升鲜宝供应链及收银系统源代码服务14 小时前
升鲜宝AI助手 E-R 图与操作说明书(三)---升鲜宝生鲜配送供应链管理系统源代码服务
大数据·人工智能·机器学习·生鲜供应链源代码·供应链源代码出售·生鲜配送源代码服务·门店连锁系统源代码
keykey6.15 小时前
用 PyTorch 训练图像分类器:完整实战
开发语言·人工智能·深度学习·机器学习
小O的算法实验室15 小时前
2025年IEEE TASE,基于双层耦合平均场博弈的大规模智能体集成任务分配与轨迹规划
人工智能·算法·机器学习