【数据预处理2】数据预处理——数据标准化

数据标准化
1. 什么是标准化?
  数据标准化是一个常用的数据预处理操作,目的是将不同规格的数据转换到统一规格或不同分布的数据转换到某个特定范围,以减少规模、特征、分布差异等对模型的影响。这种操作也叫作无量纲化。
  除了用作模型计算。标准化的数据还具有直接计算并生成复合指标的意义,是加权指标的必要步骤。

2. 为什么要将输入标准化?
  在以梯度和矩阵为核心的算法中,如逻辑回归,支持向量机和神经网络,数据标准化可以加快求解速度;在距离类模型,如KNN,K-Means聚类中,数据标准化可以帮我们提升模型精度,避免一个取值范围特别大的特征对距离计算造成影响。

3.怎么标准化?
  数据的标准化可以是线性的,也可以是非线性的。线性的无量纲化包括中心化(Zero-centered)处理和缩放处理(Scale)

  中心化的本质是让所有记录减去一个固定值,即让原始数据进行平移,他不会改变数据的分布结构,只改变其分布范围。

  缩放的本质是通过除以一个固定值,将数据固定在某个范围内,即对原始数据进行压缩或放大。

1. 实现归一化的Max-Min
  Max-Min标准化方法是对原始数据进行线性变换,先将数据按照最小值中心化之后,再按照极差(最大值-最小值)缩放,将数据收敛到[0,1]之间。

  这种标准化方法的应用非常广泛,得到的数据会完全落在[0,1]区间内。在指定范围的同时,还能较好的保持原有数据结构。

  在sklearn中,我们使用preprocessing.MinMaxScaler来实现这个功能,当然我们也可以自己动手实现这个辅助算法。下面分别使用了两种方法来对数据进行归一化处理:
 

[1]:import pandas as pd
	import numpy as np
	import matplotlib.pyplot as plt
	from sklearn.preprocessing import MinMaxScaler,StandardScaler,MaxAbsScaler,RobustScaler

[2]:data = pd.read_csv('data.txt',sep="\t",header=None)

[4]:data_scale_1_df.max()

0    1.0
1    1.0
dtype: float64
[5]:data_scale_1_df.min()

0    0.0
1    0.0
dtype: float64

手动实现

[6]:data_scale_2 = (data-data.min()) / (data.max()-data.min())
	data_scale_2.head()

2. 实现中心化和正态分布的Z-Score
  Z-Score标准化是基于原始数据的均值和标准差进行的标准化。先将原始数据按均值中心化后,再按照标准差缩放。标准化之后的数据是以0为均值,方差为1的正态分布。

  这种方法适合大多数类型的数据,也是很多工具的默认标准化方法。但是Z-Score方法是一种中心化方法,会改变原有数据的分布结构,不适合对稀疏数据做处理。

  在sklearn中,我们使用preprocessing.StandardScaler来实现这个功能,我们也依旧可以自己动手实现。下面分别使用了两种方法来对数据进行中心化处理:

sklearn实现:

查看均值和方差:

[8]:data_scale_3_df.mean()

0    2.624567e-16
1   -6.249445e-16
dtype: float64
[9]:data_scale_3_df.std()

0    1.0005
1    1.0005
dtype: float64

手动实现:

[10]:data_scale_4_df = (data-data.mean(axis=0))/data.std(axis=0)
	 data_scale_4_df.head()

查看均值和方差:

[11]:data_scale_4_df.mean()

0    7.259526e-15
1   -5.805356e-16
dtype: float64
[12]:data_scale_4_df.std()

0    1.0
1    1.0
dtype: float64

这里由于某种原因,虽然sklearn实现和手动实现的均值和方差都趋近于0和1,但是不知为什么有一些微小的误差。我怀疑是sklearn与pandas的精度有差别,如果有更好更准确的解释,请务必告知我,万分感谢!!!

3. 用于稀疏数据的MaxAbs
数据的稀疏性是指,数据中心包含0的比例,0越多,数据越稀疏。

  最大值绝对值标准化即根据最大值的绝对值进行标准化。将数据中的每一个特征按照该特征中绝对值最大的数值的绝对值进行缩放。这种方法与Max-Min方法用法类似,也是将数据落入一定区间,但该方法的数据区间为[-1,1]。这种做法并没有中心化数据,所以不会破坏数据的稀疏性。

sklearn实现:
 

[13]:maxabsscaler = MaxAbsScaler()
	 data_scale_5 = maxabsscaler.fit_transform(data)
	 data_scale_5_df = pd.DataFrame(data_scale_5)
	 data_scale_5_df.head()

4. 针对离群点的RobustScaler
  在某些情况下,假如数据有异常值,我们可以使用Z-Score进行标准化。但是标准化之后的数据并不理想,因为异常点的特征往往在标准化之后容易失去离群特征。此时,可以使用RobustScaler针对离群点做标准化处理,该方法对数据中心化和数据的缩放鲁棒性有更强的参数控制。

鲁棒性,可以理解为当数据发生变化时,算法对数据变化的容忍度有多高。
sklearn实现:

[14]:robustscaler = RobustScaler()
	 data_scale_6 = robustscaler.fit_transform(data)
	 data_scale_6_df = pd.DataFrame(data_scale_6)
	 data_scale_6_df.head()

5. 标准化后数据可视化

[15]:data = np.loadtxt('data.txt', delimiter='\t')  # 使用ndarray格式画图
	 data_list = [data, data_scale_1, data_scale_3, data_scale_5, data_scale_6]  # 创建数据集列表
	 color_list = ['black', 'green', 'blue', 'yellow', 'red']  # 创建颜色列表
	 merker_list = ['o', ',', '+', 's', 'p']  # 创建样式列表
	 title_list = ['source data', 'minmax_scaler', 'zscore_scaler', 'maxabsscaler_scaler',
              'robustscalerr_scaler']  # 创建标题列表
              
	 plt.figure(figsize=(16, 3))
	 for i, data_single in enumerate(data_list):  # 循环得到索引和每个数值
    	 plt.subplot(1, 5, i + 1)  # 确定子网格
    	 plt.scatter(data_single[:, :-1], data_single[:, -1], s=10, marker=merker_list[i],c=color_list[i])  # 自网格展示散点图
    	 plt.title(title_list[i])  # 设置自网格标题

6. 标准化方法选择
如果要做中心化处理,并且对数据分布有正态要求,那么使用Z-Score方法
如果要进行0-1标准化或者将要指定标准化后的数据分布范围,那么使用Max-Min标准化或MaxAbs标准化方式是比较好的方法,尤其是前者。
如果要对稀疏数据进行处理,Max-Min标准化或者MaxAbs标准化是理想方法
如果要最大限度保留数据集中的异常,那么使用RobustScaler方法更好
  大多数机器学习算法中,会使用Z-Score方法来对特征进行标准化。因为Max-Min标准化对异常值特别敏感。一般情况下,都会使用Z-Score标准化,如果要指定标准化后的数据分布范围,那么使用Max-Min标准化。
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【【萌新的SOC学习之 VDMA 彩条显示实验之一】】

萌新的SOC学习之 VDMA 彩条显示实验之一 实验任务 : 本章的实验任务是 PS写彩条数据至 DDR3 内存中 然后通过 VDMA IP核 将彩条数据显示在 RGB LCD 液晶屏上 下面是本次实验的系统框图 VDMA 通过 HP接口 与 PS端的 DDR 存储器 进行交互 因为 VDMA 出来的是 str…

【数据预处理3】数据预处理 - 归一化和标准化

处理数据之前,通常会使用一些转换函数将「特征数据」转换成更适合「算法模型」的特征数据。这个过程,也叫数据预处理。 比如,我们在择偶时,有身高、体重、存款三个特征,身高是180、体重是180、存款是180000&#xff1…

SpringBoot 整合 Freemarker

通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。 Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。 Freemarker 模版后缀为 .ftl(FreeMarke…

python算法例10 整数转换为罗马数字

1. 问题描述 给定一个整数,将其转换为罗马数字,要求返回结果的取值范围为1~3999。 2. 问题示例 4→Ⅳ,12→Ⅻ,21→XⅪ,99→XCIX。 3. 代码实现 def int_to_roman(num):val [1000, 900, 500, 400,100, 90, 50, 40…

【DevOps】Git 图文详解(四):Git 使用入门

Git 图文详解(四):Git 使用入门 1.创建仓库2.暂存区 add3.提交 commit 记录4.Git 的 “指针” 引用5.提交的唯一标识 id,HEAD~n 是什么意思?6.比较 diff 1.创建仓库 创建本地仓库的方法有两种: 一种是创建…

(Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、完整程序数据说明文档下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matalb平…

Java Swing算术我最棒

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法,在进行代码编写前要能够设计好自己的算法。 本次程序设计涉及到 Java 的基本语法,即课堂上所介绍的变量、条件语句、循…

vuedraggable拖拽列表设置某一条元素禁止被拖拽

直接上代码 <draggable filter".unDrag"><div class"unDrag">不能拖拽</div><div class"canDrag">可以拖拽</div> </draggable>一、设置filter 在draggable节点的属性filter设置不可拖拽的class名&#…

3D全景视角,足不出户感知真实场景的魅力

近年来&#xff0c;随着科技的快速发展&#xff0c;普通的平面静态视角已经无法满足我们了&#xff0c;不管是视角框架的限制还是片面的环境展示&#xff0c;都不足以让我们深入了解场景环境。随着VR全景技术的日益成熟&#xff0c;3D全景技术的出现为我们提供了全新的视觉体验…

uni-app(1)pages. json和tabBar

第一步 在HBuilderX中新建项目 填写项目名称、确定目录、选择模板、选择Vue版本&#xff1a;3、点击创建 第二步 配置pages.json文件 pages.json是一个非常重要的配置文件&#xff0c;它用于配置小程序的页面路径、窗口表现、导航条样式等信息。 右键点击pages&#xff0c;按…

Kafka(四)消费者消费消息

文章目录 如何确保不重复消费消息&#xff1f;消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…

遗传算法GA-算法原理与算法流程图

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、遗传算法流程图 1.1. 遗传算法流程图 二、遗传算法的思想与机制 2.1 遗传算法的思想 2.2 遗传算法的机制介绍 三、 遗传算法的算法流程 3.1 遗传算法的算法…

PXE高效批量网络装机

目录 一.PXE 1. 系统装机的三种引导方式 2. 系统安装过程 3. 光盘安装相关文件 4. PXE简介 5. 实现过程 6. PXE优点 二.PXE实现过程 1. 实验准备 2. 搭建DHCP服务器 3. 配置TFTP服务器 4. 准备pxelinu.0文件 5. 挂载镜像准备内核、驱动文件 6. 手写配置文件 7. 准…

强烈 推荐 13 个 Web前端在线代码IDE

codesandbox.io&#xff08;国外&#xff0c;提供免费空间&#xff09; 网址&#xff1a;https://codesandbox.io/ CodeSandbox 专注于构建完整的 Web 应用程序&#xff0c;支持多种流行的前端框架和库&#xff0c;例如 React、Vue 和 Angular。它提供了一系列增强的功能&…

springboot项目中获取业务功能的导入数据模板文件

场景: 在实际业务场景中,经常会遇到某些管理功能需要数据导入共功能,但既然是导入数据,肯定会有规则限制,有规则就会有数据模板,但这个模板一般是让客户自己下载固定规则模板,而不是让客户自己随便上传模板。下面介绍直接下载模板 一、下载模板示例 1、在项目的…

信安.网络安全.UDP协议拥塞

第一部分 如何解决UDP丢包问题 一、UDP 报文格式 每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长&#xff08;2 字节&#xff09;字段组成&#xff0c;分别说明该报文的源端口、目的端口、报文长度和校验值。UDP 报文格式如图所示。 UDP 报文中每个…

前端性能优化之LightHouse

优质博文&#xff1a;IT-BLOG-CN 一、LightHouse环境搭建 LightHouse是一款由Google开发的开源工具&#xff0c;用于评估Web应用程序的性能和质量。可以将其看作是一个Chrome扩展程序运行&#xff0c;或从命令行运行。为LightHouse提供一个需要审查的网址&#xff0c;它将针对…

基于django水果蔬菜生鲜销售系统

基于django水果蔬菜生鲜销售系统 摘要 基于Django的水果蔬菜生鲜销售系统是一种利用Django框架开发的电子商务平台&#xff0c;旨在提供高效、便捷的购物体验&#xff0c;同时支持水果蔬菜生鲜产品的在线销售。该系统整合了用户管理、产品管理、购物车、订单管理等核心功能&…

springboot引入第三方jar包放到项目目录中,添加web.xml

参考博客&#xff1a;https://www.cnblogs.com/mask-xiexie/p/16086612.html https://zhuanlan.zhihu.com/p/587605618 1、在resources目录下新建lib文件夹&#xff0c;将jar包放到lib文件夹中 2、修改pom.xml文件 <dependency><groupId>com.lanren312</grou…

【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能

仿射变换是一种二维变换&#xff0c;它可以将一个二维图形映射到另一个二维图形上&#xff0c;保持了图形的“形状”和“大小”不变&#xff0c;但可能会改变图形的方向和位置。仿射变换可以用一个线性变换矩阵来表示&#xff0c;该矩阵包含了六个参数&#xff0c;可以进行平移…