Z-Score数据标准化(转载)

简介
Z-Score标准化是数据处理的一种经常使用方法。经过它可以将不一样量级的数据转化为统一量度的Z-Score分值进行比较。数据库

一句话解释版本:网络

Z-Score经过(x-μ)/σ将两组或多组数据转化为无单位的Z-Score分值,使得数据标准统一化,提升了数据可比性,削弱了数据解释性。框架

 

数据分析与挖掘体系位置
Z-Score标准化是数据处理的方法之一。在数据标准化中,常见的方法有以下三种:dom

Z-Score 标准化
最大最小标准化
小数定标法
本篇主要介绍第一种数据标准化的方法,Z-Score标准化。ide

此方法在整个数据分析与挖掘体系中的位置以下图所示。spa

 

Z-Score的定义
Z-Score处理方法处于整个框架中的数据准备阶段。也就是说,在源数据经过网络爬虫、接口或其余方式进入数据库中后,下一步就要进行的数据预处理阶段中的重要步骤。.net

数据分析与挖掘中,不少方法须要样本符合必定的标准,若是须要分析的诸多自变量不是同一个量级,就会给分析工做形成困难,甚至影响后期建模的精准度。code

举例来讲,假设咱们要比较A与B的考试成绩,A的考卷满分是100分(及格60分),B的考卷满分是700分(及格420分)。很显然,A考出的70分与B考出的70分表明着彻底不一样的意义。可是从数值来说,A与B在数据表中都是用数字70表明各自的成绩。orm

那么如何可以用一个同等的标准来比较A与B的成绩呢?Z-Score就能够解决这一问题。blog

下图描述了Z-Score的定义以及各类特征。

 

Z-Score的目的
如上图所示,Z-Score的主要目的就是将不一样量级的数据统一转化为同一个量级,统一用计算出的Z-Score值衡量,以保证数据之间的可比性。

Z-Score的理解与计算
在对数据进行Z-Score标准化以前,咱们须要获得以下信息:

1)整体数据的均值(μ)

     在上面的例子中,整体能够是整个班级的平均分,也能够是全市、全国的平均分。

2)整体数据的标准差(σ)

     这个整体要与1)中的整体在同一个量级。

3)个体的观测值(x)

    在上面的例子中,即A与B各自的成绩。

经过将以上三个值代入Z-Score的公式,即:

 

咱们就可以将不一样的数据转换到相同的量级上,实现标准化。

 

从新回到前面的例子,假设:A班级的平均分是80,标准差是10,A考了90分;B班的平均分是400,标准差是100,B考了600分。

经过上面的公式,咱们能够计算得出,A的Z-Score是1((90-80)/10),B的Z-Socre是2((600-400)/100)。所以B的成绩更为优异。

反之,若A考了60分,B考了300分,A的Z-Score是-2,B的Z-Score是-1。所以A的成绩更差。

所以,能够看出来,经过Z-Score能够有效的把数据转换为统一的标准,可是须要注意,并进行比较。Z-Score自己没有实际意义,它的现实意义须要在比较中得以实现,这也是Z-Score的缺点之一。


Z-Score的优缺点
Z-Score最大的优势就是简单,容易计算,在R中,不须要加载包,仅仅凭借最简单的数学公式就可以计算出Z-Score并进行比较。此外,Z-Score可以应用于数值型的数据,而且不受数据量级的影响,由于它自己的做用就是消除量级给分析带来的不便。

可是Z-Score应用也有风险。首先,估算Z-Score须要整体的平均值与方差,可是这一值在真实的分析与挖掘中很可贵到,大多数状况下是用样本的均值与标准差替代。其次,Z-Score对于数据的分布有必定的要求,正态分布是最有利于Z-Score计算的。最后,Z-Score消除了数据具备的实际意义,A的Z-Score与B的Z-Score与他们各自的分数再也不有关系,所以Z-Score的结果只能用于比较数据间的结果,数据的真实意义还须要还原原值。

 

Z-Score在R中的实现
以下例子是我用R软件写出的Z-Score计算方法。

# define dataset data_A <- rnorm(100, 80, 10) # randomly create population dataset data_B <- rnorm(100, 400, 100) # randomly create population dataset hist(data_A) #histogram hist(data_B) #histogram #Calculate population mean and standard deviation A_data_std <- sd(data_A)*sqrt((length(data_A)-1)/(length(data_A))) A_data_mean <- mean(data_A) B_data_std <- sd(data_B)*sqrt((length(data_B)-1)/(length(data_B))) B_data_mean <- mean(data_B) # Provided that A got 92 and B got 610 A_obs <- 92 B_obs <- 610 A_Z_score <-  (A_obs - A_data_mean) / A_data_std B_Z_score <-  (B_obs - B_data_mean) / B_data_std

原文:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80312154

相关文章
相关标签/搜索