python sklearn数据预处理之正则化详解
数据的预处理是数据分析,或者机器学习训练前的重要步骤。
通过数据预处理,可以
- 提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性
- 整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集
- 提高数据性能,对数据的值进行变换,规约等(比如无量纲化),让算法更加高效
本篇介绍的正则化处理,主要功能是对每个样本计算其范数,然后对该样本中每个元素除以该范数,
这样处理的结果是使得每个处理后样本的范数(如l1-norm、l2-norm)等于1。
1. 原理
介绍正则化之前,先简单介绍下范数的概念。
1.1. 范数
范数常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小,
可以简单理解为向量的长度,或者向量到零点的距离,或者相应的两个点之间的距离。
对于向量(x=[x1,x2,...,xm]),常见的范数有:
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 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正则化。
实际应用中,根据数据的特征和场景对数据选择不同的正则化方法,使得训练后的模型能够有更好的精度和性能。
到此这篇关于python sklearn数据预处理之正则化详解的文章就介绍到这了,更多相关sklearn数据预处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Matplotlib 调用 pyplot 模块中 figure() 函数处理 figure图形对象
这篇文章主要介绍了基于Matplotlib 调用 pyplot 模块中 figure() 函数处理 figure图形对象,matplotlib.pyplot模块能够快速地生成图像,但如果使用面向对象的编程思想,我们就可以更好地控制和自定义图像,下面就来详细介绍其内容,需要的朋友可以参考下2022-02-02python按照行来读取txt文件全部内容(去除空行处理掉\t,\n后以列表方式返回)
这篇文章主要介绍了python按照行来读取txt文件全部内容 ,去除空行,处理掉\t,\n后,以列表方式返回,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下2023-06-06Windows下pycharm安装第三方库失败(通用解决方案)
这篇文章主要介绍了Windows下pycharm安装第三方库失败(通用解决方案),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
最新评论