规范化:标准化、归一化、中心化

参考:重温归一化(MinMaxScaler)和标准化(StandardScaler)_Miracle8070-CSDN博客_standardscaler和minmaxscaler

数据挖掘中数据变换比算法选择更重要

目录

一、介绍

二、为什么要规范化?

三、如何选择

1、归一化

2、标准化

3、不需要标准化的模型

4、特殊说明

5、逻辑回归必须要标准化吗

三、实现

1、归一化

2、标准化(Z-Score 规范化)

3、 小数定标规范化

​四、总结


一、介绍

1、归一化(Normalization)

概念:数值的归一,将数值规约到(0,1)或(-1,1)区间

目的:消除量纲,便于不同单位或量级的指标能够进行比较和加权。 

2、标准化(Standardization)

概念:数据分布的归一,原始数据减均值之后,再除以标准差。将数据变换为均值为0,标准差为1的分布,切记:并非一定是正态的。

目的:消除量纲,便于后续的梯度下降和激活函数对数据的处理。因为标准化后,数据以0为中心左右分布,而函数sigmoid,Tanh,Softmax等也都以0为中心左右分布;

3、中心化 (Zero-centered)

概念:中心化,也叫零均值处理,就是将每个原始数据减去这些数据的均值。因此 中心化后的数据平均值为0,对标准差无要求。

二、为什么要规范化?

如前文所说,归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。

1、数据的量纲不同;数量级差别很大

经过规范化处理后,原始数据转化为无量纲化指标测评值,各指标值处于同一数量级别,可进行综合测评分析。

如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。

2、避免数值问题:太大的数会引发数值问题。

3、平衡各特征的贡献

一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。

如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

4、一些模型求解的需要:加快了梯度下降求最优解的速度

在使用梯度下降的方法求解最优化问题时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。如左图所,未归一化/标准化时形成的等高线偏椭圆,迭代时很有可能走“之”字型路线(垂直长轴),从而导致迭代很多次才能收敛。而如右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。

三、如何选择

1、归一化

  1. 对输出结果范围有要求
  2. 数据较为稳定,不存在极端值
  3. 不涉及距离度量、协方差计算的时候
  4. 数据不符合正态分布的时候

2、标准化

  1. 如果数据存在异常值和较多噪音
  2. 在分类、聚类算法中,需要使用距离来度量相似性,比如SVM、LR、Knn、KMeans
  3. 使用PCA进行降维的时候,GBDT、 Adaboost

如果无从下手,可以直接标准化

3、不需要标准化的模型

1)模型算法里面没有关于对距离的衡量,没有关于对变量间标准差的衡量

2)概率模型(树形模型)不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF。

4、特殊说明

能不归一化最好不归一化,之所以进行数据归一化是因为各个维度的量纲不相同,而且需要看情况进行归一化。

有些模型在各维度进行了不均匀的伸缩之后,最优解与原来不等价(SVM)需要归一化。

有些模型伸缩与原来等价,如:LR则不用归一化,但是实际中往往通过迭代求解模型参数,如果目标函数太扁(想象一下很扁的高斯模型)迭代算法会发生不收敛的情况,所以最坏进行数据归一化。

补充:其实本质是由于loss函数不同造成的,SVM用了欧拉距离,如果一个特征很大就会把其他的维度dominated。而LR可以通过权重调整使得损失函数不变。

5、逻辑回归必须要标准化吗

1)取决于我们的逻辑回归是不是用正则

  • 如果不用正则, 那么标准化不是必须的
  • 如果用正则,那么标准化是必须的

2)如果不用正则,那么标准化对逻辑回归有好处吗?

进行标准化后,我们得出的参数值的大小可以反应出不同特征对样本label的贡献度,方便我们进行特征筛选。如果不做标准化,是不能这样来筛选特征的。

3)做标准化有什么注意事项吗?

最大的注意事项就是先拆分出test集,只在训练集上标准化,即均值和标准差是从训练集中计算出来的,不要在整个数据集上做标准化,因为那样会将test集的信息引入到训练集中,造成了数据信息泄露,这是一个非常容易犯的错误。

三、实现

离散数据编码方式总结(OneHotEncoder、LabelEncoder、OrdinalEncoder、get_dummies、DictVector

数据规范的几种方法,使用Python 的 sklearn 库均可实现

1、归一化

Min-max 规范化将原始数据变换到[0,1]或者[-1,1]的空间中

新数值 =(原数值 - 极小值)/(极大值 - 极小值)

# coding:utf-8
from sklearn import preprocessing
import numpy as np
# 初始化数据,每一行表示一个样本,每一列表示一个特征
x = np.array([[ 0., -3.,  1.],[ 3.,  1.,  2.],[ 0.,  1., -1.]])
# 将数据进行[0,1]规范化
min_max_scaler = preprocessing.MinMaxScaler()
minmax_x = min_max_scaler.fit_transform(x)
print minmax_x
运行结果:
[[0.         0.         0.66666667][1.         1.         1.        ][0.         1.         0.        ]]

2、标准化(Z-Score 规范化)

新数值 =(原数值 - 均值)/ 标准差

优点:算法简单,不受数据量级影响,结果易于比较。将数据转为正态分布。

缺点:需要数据整体的平均值和方差,而且结果没有实际意义,只是用于比较。

1)使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。

from sklearn import preprocessing
import numpy as np
# 初始化数据
x = np.array([[ 0., -3.,  1.],[ 3.,  1.,  2.],[ 0.,  1., -1.]])
# 将数据进行Z-Score规范化
scaled_x = preprocessing.scale(x)
print(scaled_x)
# 均值
print(scaled_x.mean(axiz=0))
# 方差
print(scaled_x.std(axiz=0))
运行结果:
[[-0.70710678 -1.41421356  0.26726124][ 1.41421356  0.70710678  1.06904497][-0.70710678  0.70710678 -1.33630621]]
# 均值
[0.00000000e+00, 0.00000000e+00, 1.48029737e-16]
# 方差
[1., 1., 1.]

2)使用sklearn.preprocessing.StandardScaler类

使用该类的好处在于可以保存训练集中的参数(均值、方差),可以直接使用训练集对测试集数据进行转换。

scaler = preprocessing.StandardScaler()
scaler_x = scaler.fit_transform(x)
# 直接对测试集数据进行转换
scaler_y = scaler.transform(y)

3、 小数定标规范化

通过移动小数点的位置来进行规范化,举个例子,比如属性 A 的取值范围是 -999 到 88,那么最大绝对值为 999,小数点就会移动 3 位,即新数值 = 原数值 /1000。那么 A 的取值范围就被规范化为 -0.999 到 0.088。

# coding:utf-8
from sklearn import preprocessing
import numpy as np
# 初始化数据
x = np.array([[ 0., -3.,  1.],[ 3.,  1.,  2.],[ 0.,  1., -1.]])
# 小数定标规范化
j = np.ceil(np.log10(np.max(abs(x))))
scaled_x = x/(10**j)
print scaled_x
运行结果:
[[ 0.  -0.3  0.1][ 0.3  0.1  0.2][ 0.   0.1 -0.1]]

​四、总结

归一化——能不归一化就不归一化

消除数值大小对结果的影响

把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权

优势:

对梯度下降的算法:加快收敛

对计算距离的算法:提高精度

标准化——更常用

消除数据分布对结果的影响

优势:

对有缺失值和异常值的样本友好

查看特征的贡献度(只对test数据集进行标准化)

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

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

相关文章

reshape 和 view 的效率比较

如果 tensor 是连续的,reshape 返回的是视图,和 view 一致。 如果 tensor 是不连续的,view 用不了。 view 的存在是为了向后兼容。 参考:python - Whats the difference between reshape and view in pytorch? - Stack Overflo…

element浅尝辄止7:InfiniteScroll 无限滚动

滚动加载&#xff1a;滚动至底部时&#xff0c;加载更多数据。 1.如何使用&#xff1f; //在要实现滚动加载的列表上上添加v-infinite-scroll&#xff0c;并赋值相应的加载方法&#xff0c; //可实现滚动到底部时自动执行加载方法。<template><ul class"infinit…

MybatisPlus入门

MybatisPlus入门 1.MyBatis-Plus1.1 ORM介绍1.2 MyBatis-Plus介绍 2.代码链接数据库2.1 创建项目2.2 添加依赖2.3 链接数据库2.3.1 准备数据库2.3.2 链接数据库2.3.3 创建实体类 2.4 创建Mapper层2.5 创建Controller层2.6 浏览器访问测试 MybatisPlus官方网站&#xff1a; 官网…

微信8.0.41更新来了,看看有哪些变化吧

微信给我们带来了极大的方便&#xff0c;无论是日常聊天还是工作沟通&#xff0c;几乎离不开它。 时不时会给我一种熟悉的陌生感。 这个功能&#xff0c;好像我之前是没见过的。 就比如公众号信息流&#xff0c;刷着刷着就会发现&#xff0c;怎么会有看一看的信息推流会突然出现…

pytest pytest.ini 配置日志输出至文件

创建pytest.ini 文件 [pytest] log_file pytest_log.txt log_file_level INFO log_file_date_format %Y-%m-%d %H:%M:%S log_file_format %(asctime)s | %(filename)s | %(funcName)s | line:%(lineno)d | %(levelname)s | %(message)s import pytest import loggingdef …

【Linux】线程安全-互斥同步

文章目录 线程安全问题的引入线程互斥互斥概念互斥锁互斥锁的计数器当中如何保证原子性互斥锁基础API初始化互斥锁变量函数动态初始化静态初始化 加锁函数阻塞加锁非阻塞加锁带有超时时间的加锁 解锁函数销毁互斥锁函数 线程同步线程同步的必要性条件变量条件变量的使用原理条件…

从零开始的Hadoop学习(五)| HDFS概述、shell操作、API操作

1. HDFS 概述 1.1 HDFS 产出背景及定义 1&#xff09;HDFS 产生背景 随着数据量越来越大&#xff0c;在一个操作系统存不下所有的数据&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;迫切 需要一种系统来管理多台机器上的…

文件转换:MultipartFile、BufferedImage

1、 MultipartFile转BufferedImage public static BufferedImage getBufferedImage(MultipartFile file){BufferedImage image ImageIO.read(file.getInputStream()); }2、 BufferedImage转MultipartFile public static MultipartFile fileCase(BufferedImage image) {//得到…

基于飞腾芯片的设计与调试入门指导

一、啥是自主可控 国产CPU现在厂家细算起来其实有很多,现在华为、小米也在做自己的CPU,瑞芯微、全志等的SoC现在也是广泛应用。但是真正能叫做自主可控的CPU厂商,只有6家。那啥是自主可控?首先来不严谨的讲下现在数字芯片是怎么做的设计。FPGA大家都知道,可以通过Verilog…

SOD-123FL贴片整流二极管,有哪些型号?

近日发现&#xff0c;客户对整流二极管的需求特别大。常有客户前来东沃电子咨询整流二极管型号参数、选型、替代、价格、交期、样品等方面的问题。那么&#xff0c;关于DS1A、DS1B、DS1D、DS1G、DS1J、DS1K、DS1M贴片整流二极管&#xff0c;您知道多少呢&#xff1f;东沃电子推…

【微服务部署】06-日志集成

文章目录 1. EFK日志三件套集成1.1 核心组件1.2 部署 2. Exceptionless日志系统2.1 Exceptionless核心特性2.2 Exceptionless部署文件2.3 K8s中使用Exceptionless 1. EFK日志三件套集成 1.1 核心组件 Elasticsearch&#xff08;存储&#xff09;Fluentd&#xff08;收集器&am…

W5100S-EVB-PICO主动PING主机IP检测连通性(十)

前言 上一章节我们用我们开发板在UDP组播模式下进行数据回环测试&#xff0c;本章我们用开发板去主动ping主机IP地址来检测与该主机之间网络的连通性。 什么是PING&#xff1f; PING是一种命令&#xff0c; 是用来探测主机到主机之间是否可通信&#xff0c;如果不能ping到某台…

LeetCodeHot100python版本:单调栈,栈,队列,堆

单调栈 739. 每日温度 42. 接雨水 双指针 单调栈(横向求解) ​​​​​​84. 柱状图中最大的矩形 栈和队列 队列:先入先出 栈:先入后出 两个栈 模拟 队列 一个队列 可以模拟 栈 20. 有效的括号 ​​​​​​155. 最小栈 394. 字符串解码 堆 215. 数组中的第K个最大元素 (…

李宏毅机器学习课程笔记(更新ing)

CNN 为什么AlphaGo可以用CNN&#xff1f;棋盘抽象成图片时需要注意什么&#xff1f; 首先图片有两个特点&#xff1a; 1&#xff0c;只观察局部就可以显示某种pattern&#xff0c;比如要得出一个鸟嘴的结论&#xff0c;只需要观察局部图片 2&#xff0c;某种pattern可以出现在图…

STM32 Cubemx 同名外设中断及回调

文章目录 前言示例工程个人理解 前言 最近在学习STM32&#xff0c;采用HAL库开发方式。记录一下同名外设中断及回调。 这里提及的同名外设指USART1/2之类的相同外设&#xff0c;但不是同一个instance。 示例工程 以使用cubemx配置两个同名外设EXTI0/EXT4为例。 在NVIC配置…

JS三座大山 —— 原型和原型链

系列文章目录 内容链接2023前端面试笔记HTML52023前端面试笔记CSS3 文章目录 系列文章目录前言一、原型是什么&#xff1f;二、原型链是什么&#xff1f;2.1 原型链全方面解析2.2 为什么构造函数也有原型&#xff1f; 总结 前言 理解原型和原型链可以帮助我们更好地理解 Java…

传统分拣弊端明显,AI机器视觉赋能物流行业包裹分类产线数智化升级

随着电子商务的快速发展&#xff0c;物流行业的包裹数量持续增长&#xff0c;给物流企业带来了巨大的运营压力。目前&#xff0c;国内大型物流运转中心已开始采用机器视觉自动化设备&#xff0c;但多数快递公司处于半自动化状态&#xff0c;中小型物流分拣中心目前仍靠人工录入…

每日一题——旋转图像

旋转图像 题目链接 方法一&#xff1a;利用辅助数组 通过对示例的观察和分析&#xff0c;我们可以得到这样的结论&#xff1a; 对于原数组的下标为i行元素&#xff0c;顺时针旋转九十度后&#xff0c;都变成了下标为&#xff08;n-1-i&#xff09;列元素。如图所示&#xff…

代替forever下一个部署node的持久化工具---pm2

最近有个后端项目&#xff0c;用的是node&#xff0c;在持久化的时候会挂掉&#xff0c;详细了解到用的是nohup&#xff0c;然后先详细了解了一下nohup nohup是一个Linux命令&#xff0c;用于在系统后台不挂断地运行命令&#xff0c;退出终端不会影响程序的运行1nohup的英文全称…

基于RabbitMQ的模拟消息队列需求文档

文章目录 一、项目背景二、需求分析1.核心概念2.BrokerServer核心组件3.核心API4.交换机类型5.持久化6.网络通信7.消息应答 三、消息队列模块划分 一、项目背景 什么是消息队列&#xff1f; 消息队列就是&#xff0c;基于阻塞队列&#xff0c;封装成一个独立的服务器程序&#…