【scikit-learn基础】--『预处理』之 正则化
数据的预处理是数据分析,或者机器学习训练前的重要步骤。
通过数据预处理,可以
- 提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性
- 整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集
- 提高数据性能,对数据的值进行变换,规约等(比如无量纲化),让算法更加高效
本篇介绍的正则化处理,主要功能是对每个样本计算其范数,然后对该样本中每个元素除以该范数,
这样处理的结果是使得每个处理后样本的范数(如l1-norm、l2-norm)等于1。
1. 原理
介绍正则化之前,先简单介绍下范数的概念。
1.1. 范数
范数常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小,
可以简单理解为向量的长度,或者向量到零点的距离,或者相应的两个点之间的距离。
对于向量(\(x = [x_1, x_2, ...,x_m]\)),常见的范数有:
- L1范数,向量元素绝对值之和,x 到零点的曼哈顿距离(\(\parallel x \parallel_1=\sum_{i=1}^m \mid x_{i}\mid\))
- L2范数,向量元素绝对值的平方和再开方,表示x到零点的欧式距离(\(\parallel x \parallel_2=\sqrt{\sum_{i=1}^m \mid x_{i}^2\mid}\))
- p-范数,向量元素绝对值的p次方和的1/p次幂,表示x到零点的p阶闵氏距离(\(\parallel x \parallel_p=(\sum_{i=1}^m \mid x_{i}\mid^p)^\frac{1}{p}\))
- 无穷范数,所有向量元素绝对值中的最大值(\(\parallel x \parallel_{\infty}=max_i\mid x_i \mid\))
- 等等。
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正则化。
实际应用中,根据数据的特征和场景对数据选择不同的正则化方法,使得训练后的模型能够有更好的精度和性能。
【scikit-learn基础】--『预处理』之 正则化的更多相关文章
- Python基础『一』
内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...
- Python基础『二』
目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...
- 『TensorFlow』TFR数据预处理探究以及框架搭建
一.TFRecord文件书写效率对比(单线程和多线程对比) 1.准备工作 # Author : Hellcat # Time : 18-1-15 ''' import os os.environ[&q ...
- 『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理
Fork版本项目地址:SSD 一.TFR数据读取 创建slim.dataset.Dataset对象 在train_ssd_network.py获取数据操作如下,首先需要slim.dataset.Dat ...
- 『cs231n』计算机视觉基础
线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...
- 『TensorFlow』专题汇总
TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- 『TensorFlow』批处理类
『教程』Batch Normalization 层介绍 基础知识 下面有莫凡的对于批处理的解释: fc_mean,fc_var = tf.nn.moments( Wx_plus_b, axes=[0] ...
- 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
下图Github地址:Mask_RCNN Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...
随机推荐
- RabbitMQ 如何实现延迟队列?
延迟队列是指当消息被发送以后,并不是立即执行,而是等待特定的时间后,消费者才会执行该消息. 延迟队列的使用场景有以下几种: 未按时支付的订单,30 分钟过期之后取消订单. 给活跃度比较低的用户间隔 N ...
- Vue源码学习(二):<templete>渲染第一步,模板解析
好家伙, 1.<template>去哪了 在正式内容之前,我们来思考一个问题, 当我们使用vue开发页面时,<tamplete>中的内容是如何变成我们网页中的内容的? 它会经历 ...
- Vue源码学习(四):<templete>渲染第三步,将ast语法树转换为渲染函数
好家伙, Vue源码学习(三):<templete>渲染第二步,创建ast语法树, 在上一篇,我们已经成功将 我们的模板 转换为ast语法树 接下来我们继续进行操作 1.方法封装 由于 ...
- C# 代码实现关机
AdvApi32.LookupPrivilegeValue(null, "SeShutdownPrivilege", out var lpLuid); using var t = ...
- destoon关于archiver归档的性能优化
今天在处理一个项目时候发现archiver单个模块归档超过百万数据,打开速度就特慢,所以打开archiver下index.php文件进行分析,发现有句sql作怪 1 $result = $db-> ...
- Linux系列教程——Linux磁盘管理、Linux进程管理、Linux系统服务、 Linux计划任务
@ 目录 1 Linux磁盘管理 1.磁盘的基本概念 1.什么是磁盘 2.磁盘的基本结构 3.磁盘的预备知识 1.磁盘的接口类型 2.磁盘的基本术语 3.磁盘在系统上的命名方式 4.磁盘基本分区Fdi ...
- Go语言精进之路目录
目录 一.介绍 01.Go 语言的前生今世 二.开发环境搭建 01.Go 语言开发环境搭建 三.初识GO语言 01.Go 多版本管理工具 02.第一个 Go 程序"hello,world&q ...
- Python来源介绍
python来源 1.1 Python来源 1989年的圣诞节,一位来自荷兰,名叫Guidio van Rossum的年轻帅小伙子,为了打发无趣的时光,决定改善他参与设计,不是很满意的ABC语言,随着 ...
- LVS+keepalived配置高可用架构和负载均衡机制(2)
一.概述 接上文,实际生产场景中,往往存在硬件资源数量的限制,此时需要设置DS节点复用RS节点. 所以往往最常见的架构如下图所示: 3台主机组建真实服务器集群,即3个RS 2个RS兼做DS,构建负载均 ...
- Centos7下创建centos-home逻辑分区
1备份要挂载的文件夹 查看home文件夹有无文件,如有文件一定要记得备份 2创建逻辑分区 2.1查看已有逻辑分区 2.2查看磁盘分区情况 2.3查看磁盘PV 2.4创建逻辑分区 lvcreate -n ...