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

news2024/11/20 4:49:38

数据标准化
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标准化。
 

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

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

相关文章

【Dynamic-datasource】Springboot多数据源整合

引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version> </dependency> 整体pom文件&#xff1a; <?xml versi…

SpringBoot 整合 Freemarker

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

【音视频基础】AVI文件格式

AVI文件采用的是RIFF文件结构方式。波形音频wave&#xff0c;MIDI和数字视频AVI都采用这种格式存储。 AVI文件的整体结构如下图所示 构造RIFF文件的基本单元叫做数据块&#xff08;Chunk&#xff09;&#xff0c;每个数据块包含3个部分 4字节的数据块标记&#xff08;或者叫…

2023-11-18 Android Linux资源限制命令 ulimit,比如ulimit -d 是设置进程占用的最大数据段大小,默认是unlimited。

一、通过ulimit -a 命令可以查看当前的各种资源限制&#xff0c;比如ulimit -d 是 进程占用的最大数据段大小。 # ulimit -a -t: time(cpu-seconds) unlimited -f: file(blocks) unlimited -c: coredump(blocks) 0 -d: data(KiB) unlimited -s:…

学习.NET验证模块FluentValidation的基本用法

开源博客项目Blog .NET中使用FluentValidation验证部分对象实例的属性值&#xff0c;本文学习FluentValidation模块的基本用法&#xff0c;后续再学习Blog .NET项目FluentValidation模块的用法。   FluentValidation模块支持Linq 表达式&#xff0c;同时支持链式操作&#xf…

【Linux】进程间通信 -- 共享内存

共享内存 共享内存是SystemV标准进程间通信的一种&#xff0c;该标准还有消息队列和信号量&#xff0c;但下文主要介绍共享内存&#xff0c;然后在谈一下信号量的内容。SystemV标准的进程间通信可以看做单机版的进程间通信。 // 1. log.hpp #pragma once#include <iostrea…

100张照片带你了解真实的日本人

欢迎关注「苏南下」 在这里分享我的旅行和影像创作心得 今年三个月内去了两次日本旅行&#xff0c;到了东京、横滨、大阪、京都、奈良、富士山、神户、富士山等城市&#xff0c;途中一共拍下了10000张照片。 最近整理照片的过程中&#xff0c;发现也拍了许多有意思的人像照&…

〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

应用场景丨迭代市政综合管廊监测系统建设

市政综合管廊是指在城市地下建造的隧道空间&#xff0c;将市政、电力、通讯、燃气、给排水等各种管线集于一体&#xff0c;实施统一规划、设计、建设和管理。综合管廊有利于解决反复开挖路面、架空线网密集、管线事故频发等问题&#xff0c;是保障城市运行的重要基础设施和“生…

Ubuntu 22.04安装Rust编译环境并且测试

我参考的博客是《Rust使用国内Crates 源、 rustup源 |字节跳动新的 Rust 镜像源以及安装rust》 lsb_release -r看到操作系统版本是22.04,uname -r看到内核版本是uname -r。 sudo apt install -y gcc先安装gcc&#xff0c;要是结果给我的一样的话&#xff0c;那么就是安装好了…

ElasticSearch快速入门

一、全文检索 1、什么是全文检索 全文索引是一种通过对文本内容进行全面索引和搜索的技术。它可以快速的在大量文本数据中查找包含特定关键词或短语的文档&#xff0c;并返回相关的搜索结果。 全文检索广泛应用于各种信息管理系统和应用中&#xff0c;如搜索引擎、文档管理系…

项目踩坑之面试遇到的问题及解决

第一点&#xff1a; 问题 遇到的问题之&#xff1a;在实现后台管理端-账户操作的时候&#xff0c;添加员工的时候如果重复添加同一个员工&#xff0c;会触发一个数据库唯一约束异常&#xff0c;但客户端无法清晰的理解这个错误&#xff0c;所以我们就对新增员工的代码进行try…

【数据结构】树与二叉树(二十):树获取大儿子、大兄弟结点的算法(GFC、GNB)

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语 5.2 二叉树5.3 树5.3.1 树的存储结构1. 理论基础2. 典型实例3. Father链接结构4. 儿子链表链接结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子结点的算法&#xff08;GFC&#xff09;…

Linux系统yum安装

目录 一.yum配置文件 1.yum主配置文件 2.yum仓库文件 3.yum日志文件 二.yum命令 1.yum查询命令 ①. yum list [软件名] ②. yum info [软件名] ③. yum search <关键词> ④. yum provides <关键词> ⑤. yum grouplist [包组名] ⑥. yum groupinfo <包…

python基础练习题库实验2

题目1 编写一个程序&#xff0c;要求用户输入产品代码、产品名称、产品尺寸和产品价格。 然后使用字符串格式来显示产品信息&#xff0c;就像下面的示例一样。 请注意&#xff0c;价格必须使用两位十进制数字显示。 代码 product_code input("Enter product code: &q…

智能售货柜:小本投资的不二之选

智能售货柜&#xff1a;小本投资的不二之选 智能售货柜的运营优势在于&#xff1a;一是降低运营成本&#xff0c;不需要大量员工&#xff1b;二是具备自动识别和智能结算功能&#xff0c;提高运营效率&#xff1b;三是提供数据分析&#xff0c;优化产品和服务。相比传统零售店&…

趣学python编程 (一、计算机发展历史)

未来是高度科技化和智能化的时代。过去不识字的叫“文盲”&#xff0c;如今不懂点计算机知识&#xff0c;则可能是新时代的“文盲”。不论从事什么行业&#xff0c;了解下计算机和编程都是有益的。Python 连续多年占据最受欢迎的编程语言榜首&#xff0c;未来Python有机会成为像…

Docker 可视化面板 ——Portainer

Portainer 是一个非常好用的 Docker 可视化面板&#xff0c;可以让你轻松地管理你的 Docker 容器。 官网&#xff1a;Portainer: Container Management Software for Kubernetes and Docker 【Docker系列】超级好用的Docker可视化工具——Portainer_哔哩哔哩_bilibili 环境 …

读像火箭科学家一样思考笔记02_与不确定性共舞(下)

1. 万有理论 1.1. 相对论 1.1.1. 适用于体积非常大的物体 1.2. 量子力学 1.2.1. 适用于非常小的物体 1.2.2. 在量子力学诞生之前&#xff0c;物理学一直强调的是因果关系&#xff0c;即做这件事&#xff0c;就会得到那个结果 1.2.3. 量子力学讲的似乎是&#xff1a;当我们…

ChinaSoft 论坛巡礼 | 新兴系统软件论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…