转载:https://www.toutiao.com/i6644145067256709645/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1590562159&app=news_article&utm_source=weixin&utm_medium=toutiao_android&use_new_style=1&req_id=20200527144919010014048130059ACF85&group_id=6644145067256709645

主要内容:

  • 什么是数据标准化?在Python中如何进行数据标准化?

一、Z标准化:实现中心化和正态分布;

二、Min-Max:归一化;

三、MaxAbs:最大绝对值标准化;

四、RobustScaler。

  • Python实例

z-score;

Min-Max;

MaxAbs;

RobustScaler。

数据标准化是数据预处理中非常重要的一步。在实际应用过程中,我们经常会遇到含有多种特征的数据集,这些特征常常有着不同的分布形态和区间,有着不同的量级(量纲),这很容易对我们的模型训练产生影响。而数据标准化,就是为了消除规模、特征和分布差异对模型的影响而存在。

另外,将各特征标准化之后,我们可以对其进行加权组合,从而生成新的指标,而原始数据往往不支持我们直接进行加权计算。

那么今天我们就来看一下,有哪些数据标准化的方法,以及它们分别如何在Python中实现。

一、Z标准化:实现中心化和正态分布

Z-Score标准化是基于原始数据的均值和标准差进行的标准化,其转化公式为:

其中,z是转化后的数据,x为转化前的数据,μ是整组数据的均值,σ是整组数据的标准差。

这种方法适合大多数类型的数据,其应用非常广泛。从公式里我们就可以看出来,转化之后其均值将变为0,而方差和标准差将变为1(考虑方差的公式),这部分如果不明白那就不妨在本子上推理一下哦。

二、Min-Max:归一化

Min-Max标准化方法会对原始数据进行线性变换,它的转换公式为:

很明显,当x为最大值时,会被转换为1;当x为最小值时,对应的新值为0;整组数据会分布在从0到1的区间内,而数据的分布形态并不会发生变化。

三、MaxAbs:最大绝对值标准化

在数据科学中,我们经常需要应对稀疏数据,MaxAbs方法对于稀疏数据有着良好的支持。MaxAbs标准化方法与Min-Max方法有些相似,其公式为:

即用每一个值除以整组数据中的绝对值的最大值,这样保留了原有数据的正负属性,且使数据落在了[-1,1]闭区间内。需要注意的是,先进行绝对值操作,然后选最大值,而不是先选择最大值,再求绝对值。我已经看到过很多文章把这里弄错了。举个例子,有一组数据[-0.01, -1, -2],如果我们先求最大值再求绝对值,别说归一化了,数据简直要钻到地缝里去了。

四、RobustScaler

有些时候,数据中会存在离群点(异常值)。这时如果我们使用z-score标准化就会导致数据很容易失去离群特征。这时我们就可以使用RobustScaler方法,它对于数据中心化和数据的缩放健壮性有着更强的参数调节能力。

Python实例

多说无益,放码过来,我们先导入必要的库、iris数据集,并进行一些必要的设置。

import numpy as np
import pandas as pd
from sklearn import preprocessing
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
from seaborn import load_dataset
sns.set()
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = 'SimHei'
iris = load_dataset('iris').drop('species', axis=1)
iris.head()

我们先观察下前两列数据的原始分布情况:

sns.jointplot(data=iris, color='m',x='sepal_length', y='sepal_width');

Z-score

我们先来演示z标准化。

z_scaler = preprocessing.StandardScaler()
iris_z = z_scaler.fit_transform(iris)
iris_z = pd.DataFrame(iris_z)
sns.jointplot(data=iris_z, color='m', x=0, y=1);

可以看到,数据分布形态变化不大,但是数据收敛到了0轴周围。

我们看一下转换后数据的均值和标准差:

可以看到,虽然有一点点小误差(量级非常小),但是数据基本上是符合均值为0、标准差为1的。

Min-Max标准化

然后是Min-Max归一化方法:

mm_scaler = preprocessing.MinMaxScaler()
iris_mm = mm_scaler.fit_transform(iris)
iris_mm = pd.DataFrame(iris_mm)
sns.jointplot(data=iris_mm, color='m', x=0, y=1);

这次我们在保持原有数据分布特性的同时,将数据收敛到了0到1之间。

MaxAbs标准化

ma_scaler = preprocessing.MaxAbsScaler()
iris_ma = ma_scaler.fit_transform(iris)
iris_ma = pd.DataFrame(iris_ma)
sns.jointplot(data=iris_ma, color='m', x=0, y=1);

由于iris数据集里没有负值,所以这里不能体现出[-1,1]的数据范围。我们为数据增加一些负值来看看:

iris_ma = pd.concat([iris_ma, iris_ma.applymap(lambda x: -x)])
sns.jointplot(data=iris_ma, color='m', x=0, y=1);

果然是[-1,1]呢,不过我们这里的操作只是为了演示,没有额外的意义。

RobustScaler

r_scaler = preprocessing.RobustScaler()
iris_r = ma_scaler.fit_transform(iris)
iris_r = pd.DataFrame(iris_r)
sns.jointplot(data=iris_r, color='m', x=0, y=1);

嗯……看起来跟MaxAbs没什么区别,这是因为这里不存在什么异常值。这个就留给你们自己来练习一下了!

以上是使用sklearn提供的标准化工具进行数据标准化的操作,事实上,我们也完全可以自己创造一些标准化工具,实际操作起来并不难哦,大家可以尝试一下。

什么是数据标准化?在Python中如何进行数据标准化?「必学」相关推荐

  1. python csv库,Python 中导入csv数据的三种方法

    Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...

  2. python中ret是什么意思_数据结构图在python中的应用

    原标题:数据结构图在python中的应用 程序世界里,有很多的数据结构,比如:堆.栈.链表等等,今天要讲的就是图数据结构啦. 相信大家都使用过或者听说过图数据库吧,我们就来看看最简单的图数据结构算法. ...

  3. python类型转换-Python中如何进行数据类型转换?

    原标题:Python中如何进行数据类型转换? 这一次要讲的是Python中的数据类型转换,Python中的数据类型转换是什么?就是将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为 ...

  4. python导入excel数据-如何把python中的数据导入excel

    python将数据导入excel的方法:1.在python官网下载xlrd第三方库:2.利用xlrd中的open_workbook函数读入excel文件,即可在python中导入excel数据. 一. ...

  5. 【机器学习基础】如何在Python中处理不平衡数据

    特征锦囊:如何在Python中处理不平衡数据 ???? Index 1.到底什么是不平衡数据 2.处理不平衡数据的理论方法 3.Python里有什么包可以处理不平衡样本 4.Python中具体如何处理 ...

  6. python向mysql中添加数据_通过python操控MYSQL添加数据,并将数据添加到EXCEL中-阿里云开发者社区...

    第一步 在python中创建mysql数据表 import pymysql #导入模块 def getCon(): #联接到数据库,并封装循环使用,db是数据库名字 conn = pymysql.co ...

  7. linux中python如何调用matlab的数据_特征锦囊:如何在Python中处理不平衡数据

    今日锦囊 特征锦囊:如何在Python中处理不平衡数据 ? Index 1.到底什么是不平衡数据 2.处理不平衡数据的理论方法 3.Python里有什么包可以处理不平衡样本 4.Python中具体如何 ...

  8. python金融数据怎么获取_class类怎样在python中获取金融数据?

    我们搜集金融数据,通常想要的是利用爬虫的方法.其实我们最近所学的class不仅可以进行类调用,在获取数据方面同样是可行的,很多小伙伴都比较关注理财方面的情况,对金融数据的需要也是比较多的.下面就cla ...

  9. python中pandas的数据输出显示设置

    python中pandas的数据输出显示设置1 pandas数据分析时经常需要打印输出数据,当数据量大时,输出的展示设置非常重要,好的展示可以帮助更好地理解数据. pandas相关的显示设置函数主要有 ...

最新文章

  1. 题目1191:矩阵最大值
  2. 阿里巴巴计算机视觉领域最强阵容集结完毕团体参加CVPR会议
  3. vuejs构建的单页面应用history模式子页面微信分享在iOS中遇到的问题
  4. Android 调用系统邮件,发送邮件到指定邮箱
  5. vscode中 解决格式化后将单引号变双引号
  6. 有自定义控件的网站项目发布时,“不允许循环文件引用”的错误”的解决方法
  7. redis-cli 命令总结
  8. 第2次作业:微博软件分析
  9. 模拟京东登陆 java_java京东自动登录
  10. python判断一个列表是否包含另一个列表_Python-检查一个列表是否包含在另一个列表中...
  11. wegame导致win10无限重启问题解决
  12. 《东周列国志》第四十三回 智宁俞假鸩复卫 老烛武缒城说秦
  13. 【Linux】内核驱动篇九--设备模型
  14. 微信小程序云开发 把时间戳转换成正常的时间格式上传到数据库中
  15. android空指针异常Attempt to invoke virtual method
  16. andro studio高德地图开发:显示定位蓝点
  17. 中国地质调查局:汶川地震原因已有初步的结论
  18. 《Python语言程序设计》王恺 王志 机械工业出版社 第三章 函数 课后习题答案
  19. 金融经济学(王江)期末梳理 第十三章 资本资产定价模型(CAPM)
  20. QT5.4 计算器程序 打包发布,解决dll的最新解决方案

热门文章

  1. 微软官方建议的28条代码优化方案
  2. 【数据分析】基础技术篇 三——matplotlib
  3. Mysql 横向数据表变纵向数据表
  4. 佳能(数码相机)SDK使用记录
  5. 《我们赖以生存的隐喻》文学中的面向对象
  6. 魔法师元素平衡(C++解法)
  7. v-inline-date,类似携程,飞猪,带价格的时间选择
  8. php 算生存曲线,生存曲线比较:KM法及Log Rank检验(实例+SPSS)
  9. PyTorch - GAN与WGAN及其实战
  10. 记一次钓鱼邮件分析过程