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

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

通过数据预处理,可以

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

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

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

1. 原理

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

1.1. 范数

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

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

对于向量( <math xmlns="http://www.w3.org/1998/Math/MathML"> x = [ x 1 , x 2 , . . . , x m ] x = [x_1, x_2, ...,x_m] </math>x=[x1,x2,...,xm]),常见的范数有:

  1. L1范数 ,向量元素绝对值之和,x 到零点的曼哈顿距离( <math xmlns="http://www.w3.org/1998/Math/MathML"> ∥ x ∥ 1 = ∑ i = 1 m ∣ x i ∣ \parallel x \parallel_1=\sum_{i=1}^m \mid x_{i}\mid </math>∥x∥1=∑i=1m∣xi∣)
  2. L2范数 ,向量元素绝对值的平方和再开方,表示x到零点的欧式距离( <math xmlns="http://www.w3.org/1998/Math/MathML"> ∥ x ∥ 2 = ∑ i = 1 m ∣ x i 2 ∣ \parallel x \parallel_2=\sqrt{\sum_{i=1}^m \mid x_{i}^2\mid} </math>∥x∥2=∑i=1m∣xi2∣ )
  3. p-范数 ,向量元素绝对值的p次方和的1/p次幂,表示x到零点的p阶闵氏距离( <math xmlns="http://www.w3.org/1998/Math/MathML"> ∥ 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} </math>∥x∥p=(∑i=1m∣xi∣p)p1)
  4. 无穷范数 ,所有向量元素绝对值中的最大值( <math xmlns="http://www.w3.org/1998/Math/MathML"> ∥ x ∥ ∞ = m a x i ∣ x i ∣ \parallel x \parallel_{\infty}=max_i\mid x_i \mid </math>∥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正则化。

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

相关推荐
秀儿还能再秀6 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
学术搬运工6 小时前
【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
大数据·图像处理·人工智能·科技·机器学习·自然语言处理
Chatopera 研发团队8 小时前
机器学习 - 为 Jupyter Notebook 安装新的 Kernel
人工智能·机器学习·jupyter
IT古董8 小时前
【机器学习】数学知识:标准差,方差,协方差,平均数,中位数,众数
人工智能·数学·机器学习
宋一诺338 小时前
机器学习—为什么我们需要激活函数
人工智能·机器学习
B站计算机毕业设计超人9 小时前
计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬虫 机器学习 深度学习 大数据毕业设计 Django Flask
大数据·爬虫·python·深度学习·机器学习·课程设计·数据可视化
qzhqbb10 小时前
机器学习小补充(加深理解)
人工智能·机器学习
dgsiwbe11 小时前
人工智能机器学习-特征工程
人工智能·机器学习
海边散步的蜗牛11 小时前
学术论文写作丨机器学习与深度学习
人工智能·深度学习·机器学习·chatgpt·数据分析·ai写作