dataframe数据标准化处理_数据预处理——标准化/归一化(实例)

这次我们来说说关于数据预处理中的数据标准化及归一化的问题。主要以理论+实例的方式为大家展示。

本次实验也将会展示部分数据以及代码,有兴趣的小伙伴可以自己动手试试~

在本次实例过程中,我们使用的数据是:2010-2018年间广州市经济与环境的时间序列资料,数据来源为《广州市统计年鉴》及《国民经济和社会发展统计公报》,感兴趣的同学也可利用其它数据进行实例操作。(本次实验的Excel数据附在文后)

一、归一化(Normalization)

描述:

将数据映射到指定的范围,如:把数据映射到0~1或-1~1的范围之内处理。

作用:1、数据映射到指定的范围内进行处理,更加便捷快速。

2、把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。经过归一化后,将有量纲的数据集变成纯量,还可以达到简化计算的作用。

常见做法:Min-Max归一化

python实现:

(1)导入数据并删除我们不要的列:

import numpy as np

import pandas as pd

df=pd.read_excel('C://Users/Administrator/Desktop/data_py.xlsx',sheet_name='广州',encoding='utf-8')

df.drop(columns="时间",axis=1,inplace=True)

df.set_index([[2010,2011,2012,2013,2014,2015,2016,2017,2018]],inplace=True)

df.drop(columns=['第二产业产值占比','第三产业产值占比','一般工业固体废物综合利用率'],axis=1,inplace=True)

(2)查看数据:

可以看到,数据前三列特征的数量级明显大于后面的特征很多,如果这个时候我们想要利用这个数据表来衡量广州市的发展情况时,地区生产总值、公共财政收入、人均生产总值这三项特征就会起到主导作用从而遮盖住其他的特征,这样的模型效果是很差的,因此我们可以通过归一化来解决这个问题。

(3)Min-Max归一化:

for i in list(df.columns):

# 获取各个指标的最大值和最小值

Max = np.max(df[i])

Min = np.min(df[i])

df[i] = (df[i] - Min)/(Max - Min)

(4)查看归一化结果:

二、标准化(Normalization)

注:在英文翻译中,归一化和标准化的翻译是一致的,而在实际使用中,我们需要根据实际的公式(或用途)去理解~

数据标准化方法有多种,如:直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响。其中,最常用的是Z-Score 标准化。

Z-Score 标准化

其中,

为数据均值(mean),

为标准差(std)。

描述:

将原数据转换为符合均值为0,标准差为1的标准正态分布的新数据。

作用:1、提升模型的收敛速度(加快梯度下降的求解速度)

2、提升模型的精度(消除量级和量纲的影响)

3、简化计算(与归一化的简化原理相同)

python实现:

(1)(这里我们重置一下数据表df,避免实验的偶然性)

from sklearn import preprocessing

df=pd.read_excel('C://Users/Administrator/Desktop/data_py.xlsx',sheet_name='广州',encoding='utf-8')

df.drop(columns="时间",axis=1,inplace=True)

df.set_index([[2010,2011,2012,2013,2014,2015,2016,2017,2018]],inplace=True)

df.drop(columns=['第二产业产值占比','第三产业产值占比','一般工业固体废物综合利用率'],axis=1,inplace=True)

(2)Z-Score 标准化,最简便、也是L推荐的方法是用:sklearn库里的StandardScaler()。

实例化:

zscore = preprocessing.StandardScaler()

# zscore标准化

zscore = zscore.fit_transform(df)

查看标准化后的数据:

df_zscore = pd.DataFrame(zscore,index=df.index,columns=df.columns)

df_zscore

使用归一化/标准化会改变数据原来的规律吗?

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

如果是单纯想实现消除量级和量纲的影响,用Min-Max还是用Z-Score?

1、数据的分布本身就服从正态分布,使用Z-Score。

2、有离群值的情况:使用Z-Score。

这里不是说有离群值时使用Z-Score不受影响,而是,Min-Max对于离群值十分敏感,因为离群值的出现,会影响数据中max或min值,从而使Min-Max的效果很差。相比之下,虽然使用Z-Score计算方差和均值的时候仍然会受到离群值的影响,但是相比于Min-Max法,影响会小一点。

当数据出现离群点时,用什么方法?

当数据中有离群点时,我们可以使用Z-Score进行标准化,但是标准化后的数据并不理想,因为异常点的特征往往在标准化后容易失去离群特征,此时就可以用RobustScaler 针对离群点做标准化处理。

三、Robust标准化(RobustScaler)

很多时候我们在机器学习中,或是其他模型都会经常见到一个词:鲁棒性。也就是Robust的音译。

计算机科学中,健壮性(英语:Robustness)是指一个计算机系统在执行过程中处理错误,以及算法在遭遇输入、运算等异常时继续正常运行的能力。 诸如模糊测试之类的形式化方法中,必须通过制造错误的或不可预期的输入来验证程序的健壮性。很多商业产品都可用来测试软件系统的健壮性。健壮性也是失效评定分析中的一个方面。

关于Robust,是这么描述的:

This Scaler removes the median(中位数) and scales the data according to the quantile range(四分位距离,也就是说排除了outliers).

Huber从稳健统计的角度系统地给出了鲁棒性3个层面的概念:

一是模型具有较高的精度或有效性,这也是对于机器学习中所有学习模型的基本要求;

二是对于模型假设出现的较小偏差,只能对算法性能产生较小的影响;

主要是:噪声(noise)

三是对于模型假设出现的较大偏差,不可对算法性能产生“灾难性”的影响。

主要是:离群点(outlier)

在机器学习,训练模型时,工程师可能会向算法内添加噪声(如对抗训练),以便测试算法的「鲁棒性」。可以将此处的鲁棒性理解述算法对数据变化的容忍度有多高。鲁棒性并不同于稳定性,稳定性通常意味着「特性随时间不变化的能力」,鲁棒性则常被用来描述可以面对复杂适应系统的能力,需要更全面的对系统进行考虑。

使用方法

(1)和Z-Score一样,进行实例化:

robust = preprocessing.RobustScaler()

# robust标准化处理

df_robust = robust.fit_transform(df)

(2)查看标准化后的数据:

df_robust = pd.DataFrame(df_robust,index=df.index,columns=df.columns)

df_robust

(在这里我们仅仅是做一个示范,并不是说当前这个数据表必须用Robust进行标准化)

实验数据表:

链接:https://pan.baidu.com/s/1MOmda_0kDbwRNp9jJ0XOgw​pan.baidu.com

提取码:5ca2

由于时间关系,剩下的内容我会在下次更新中一并补充~

以上便是的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~

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

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

相关文章

python实现自动打电话软件_全自动手势联系软件 让你轻轻松松打电话

电话号码超级多的童鞋们,由于手机里存储的电话太多,每次要找某个人的电话很难找,有木有同感的?小编今天像大家推荐一款新潮的帮助你轻松找到想要的电话的模式,有没有很想知道呢?其实小编本来是想卖个关子的…

电脑的虚拟服务器位置,如何配置基于IP地址的虚拟主机

满意答案虚拟主机简介:1. 把一台运行在互联网上的服务器分成多个虚拟的服务器。2. 每一个虚拟主机都具有独立的域名和完整的Internet服务器(支持WWW,FTP,E-mail等)。3. 一台服务器上的不同虚拟主机是各自独…

VMware配置额外内存设置

配置额外内存设置 额外内存设置用于控制主机系统中的内存管理器如何将虚拟机从物理 RAM 中换出。 要配置额外内存设置,请选择[编辑] > [首选项] > [内存]。 [调整所有虚拟机内存使其适应预留的主机 RAM] 选择此选项会对给定时间内可以运行的虚拟机的数量和内…

Kafka.net使用编程入门(一)

最近研究分布式消息队列,分享下! 首先zookeeper 和 kafka 压缩包 解压 并配置好! 我本机zookeeper环境配置如下: D:\Worksoftware\ApacheZookeeper3\conf\zoo.cfg 以下是kafka的配置 D:\Worksoftware\Apachekafka2.11\config\server.propert…

下拉推广系统立择火星推荐_下拉词删除都择火星下拉

会员注册发帖做推广的人都离不开搜索引擎,就像鱼离不开水,很多时候我们做SEO的朋友都在研究各大搜索引擎的机制,收录,排名规则或者是黑帽技术,不管如何,只是希望把自己的企业,产品,服…

python包路径有几个_python的搜索路径与包(package)

python的搜索路径其实是一个列表,它是指导入模块时,python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功,否则导入失败: >>> importsys>>>sys.path [, C:\\Python33\…

配置文件管理服务器,06-配置文件管理

1配置文件管理设备运行于FIPS模式时,本特性部分配置相对于非FIPS模式有所变化,具体差异请见本文相关描述。有关FIPS模式的详细介绍请参见“安全配置指导”中的“FIPS”。1.1 配置文件简介配置文件是用来保存配置的文件。配置文件主要用于: …

虚拟机安装spark配置推荐

如果虚拟机配置的内存太少,spark运行计算的时候会报: WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster uito ensure that workers are registered and have sufficient memory 资源不足的问题,导…

c++输入一个整数判断是否为完全平方数_matlab判断一个整数是完全平方数

(C语言c)判断一个数是否是 完全平方数的 整数倍#include#includeint ispow(int x){ int&用c编判断一个数是否是完全数#include#includeintmain(){intn;printf("请输入一个数,然后按回车键:\n");scanf("%d",&n);inti,p1;for(i2;i*i编…

Linux常用命令——chattr、lsattr

chattr 改变文件的扩展属性 语法格式:chattr 【option】【mode】【files】chattr [选项] [模式] [文件或目录]注意:chattr 命令及后面的选项和文件里,每个元素之间都要至少要有一个空格参数选项: 参数选项解释说明-a只能向文件中…

两个相邻盒子的边框怎么只显示一个_【前端小课堂】0044 盒子

这是一个面向零基础的前端教程,很简单,用零散时间就可以学习。 推荐早上读一下,晚上复习一下,如果可以奢侈一点,白天稍微练习一下下,总共花费 5~15 分钟。就酱!已经好几次提到块(block)元素了&a…

scala apply方法 笔记

原文出处:http://blog.csdn.net/pzw_0612/article/details/48576569 ----------------------------------------------------- Scala比Java更面向对象的一个方面是Scala没有静态成员。替代品是,Scala有单例对象:singleton object。 当单例对…

转:6.1海量数据处理

本文转自看云,原文地址请移步:https://www.kancloud.cn/kancloud/the-art-of-programming/41608 偶然闲游,偶遇某一站点,发现这里写的关于海量数据处理相关的思路还挺不错,所以在这里采摘收藏,如有侵权之处还请评论区或…

python爬去中国天气网_python爬取中国天气网并展示最低温度

import requestsfrom bs4 import BeautifulSoupimport lxmlimport jsonfrom echarts import Echart,Bar,Axisimport time#城市与温度的集合weather_list []#城市集合city_list []#温蒂集合lowest_list []#获取温度def getTemperature(url):result requests.get(url)#print r…

flash一个按钮控制动画_flutter闪屏过渡动画,闪光占位动画

在程序设计的理念中,讲究一切都来源于物理世界,在现实世界中,人们在每接触到一个新的事物或者说在手指触碰到一个事物时,总是心里默许期望有一个反馈效果,这就是来源于心底深处常常被人忽略的一个潜在期望。在程序的世…

scala-wordcount

/* * Mapreduce步骤 * 1、map&#xff1a;获取一行 * 2、按空格分隔 * 3、每个单词统计&#xff0c;<key,1> 输出到 reducer * 4、reducer <key,{1,1,1,1,1}> 汇总 * 5、输出结果 */ 1、声明一个集合&#xff0c;模仿要统计的…

动态改变_Excel中如何动态改变可编辑区域?

有这样一个工作场景&#xff1a;我们制作一个工作报表模板给同事填写数据&#xff0c;这个工作表格只可以在预设的可编辑区域编辑&#xff0c;其它都是受密码保护的&#xff0c;而且这个可编辑区域是随着日期——工作周的变化而发生变化的。也就是说在不同的工作周可编辑的区域…

java集合框架之ArrayList与LinkedList的区别

参考http://how2j.cn/k/collection/collection-arraylist-vs-linkedlist/690.html#nowhere ArrayList和LinkedList的区别 ArrayList 插入&#xff0c;删除数据慢LinkedList&#xff0c; 插入&#xff0c;删除数据快ArrayList是顺序结构&#xff0c;所以定位很快&#xff0c;指哪…

python语言是由谁设计并领导开发的_python语言概述 - osc_lt3ocv4d的个人空间 - OSCHINA - 中文开源技术交流社区...

python语言的发展 python语言诞生于1990年&#xff0c;由Guide van Rossum设计并领导开发。 python语言是开源项目的优秀代表&#xff0c;其解释器的全部代码都是开源的。 编写Hello程序 学习编程语言有一个惯例&#xff0c;即运行最简单的Hello程序&#xff0c;该程序功能是在…

Spark集群安装

Spark是独立的&#xff0c;所以集群安装的时候&#xff0c;不像hive&#xff0c;hbase等需要先安装hadoop&#xff0c;除非文件保存在hadoop上&#xff0c;才需要安装hadoop集群。 如果虚拟机安装&#xff0c;点击阅读推荐配置 前提环境&#xff1a; 1、安装了JDK1.7及以上版…