天天看點

R實戰 第九篇:資料标準化

資料标準化處理是資料分析的一項基礎工作,不同評價名額往往具有不同的量綱,資料之間的差别可能很大,不進行處理會影響到資料分析的結果。為了消除名額之間的量綱和取值範圍差異對資料分析結果的影響,需要對資料進行标準化處理,就是說,把資料按照比例進行縮放,使之落入一個特定的區域,便于進行綜合分析。

在繼續下文之前,先解釋三個個術語:

(1)所謂量綱,簡單來說,就是說資料的機關;有些資料是有量綱的,比如身高,而有些資料是沒有量綱的,例如,男女比例。無量綱化,是指去除資料的機關限制,将其轉化為無量綱的純數值,便于不同機關或者量級的名額能夠進行和權重。

(2)資料的标準化是指将資料按照比例縮放,使之落入一個特定的區間。

(3)歸一化是資料标準化中最簡單的方式,目的是把數變為(0,1)之間的小數,把有量綱的資料轉換為無量綱的純數量。

常用的歸一化方法主要有離差标準化和标準差标準化,r的scale()可以實作标準差标準化,也可以指定标準化之後資料的均值和标準差。

一,離差标準化

離差标準化是對原始資料進行線性變化,使數值映射到[0,1]區間中,轉換公式是:

R實戰 第九篇:資料标準化

離差标準化保留了原來資料中存在的關系,是消除量綱和資料取值範圍對資料分析産生影響的最簡單方法,缺點是如果資料集中,且某個數值很大,那麼标準化之後大部分值會接近于0,并且不會相差很大。

二,标準差标準化

經過該方法處理的資料的均值是0,标準差是1,轉化公式是:

R實戰 第九篇:資料标準化

這種方法基于原始資料的均值(mean)和标準差(standard deviation)對資料進行标準化,是用的最多的資料的标準化方法,但是,均值和标準差受離群點的影響很大。

三,scale()标準化

R語言通常使用scale()函數對矩陣或資料框按列對資料進行标準化:

scale(x, center = TRUE, scale = TRUE)      

參數注釋:x是數值矩陣,當center=TRUE時,為資料對象x按列進行中心化;當scale=TRUE時,為資料對象x按列進行标準化。

  • 中心化是把每個資料減去均值;
  • 标準化是在中心化後的資料基礎上再除以資料的标準差;

預設情況下,center=TRUE,scale=TRUE,scale()函數首先把一組數的每個數都減去這組數的平均值,然後除以這組數的均方根。

如果scale=TRUE,而center=FALSE,那麼,scale()函數不會把一組數中的每個數減去平均值,而直接處以這組資料的均方根。

1,scale()函數的中心化和标準化

例如,向量v是數值向量,均值是 3,标準差是 1.581139:

v <- c(1,2,3,4,5)
v.mean <- mean(v)
s <- sd(v)      

使用scale()函數進行中心化操作,每個向量原始都減去均值3:

> scale(v,center=TRUE,scale=FALSE)
     [,1]
[1,]   -2
[2,]   -1
[3,]    0
[4,]    1
[5,]    2
attr(,"scaled:center")
[1] 3      

使用scale()函數進行标準化操作,先減去均值,後除以均方根:

> scale(v,center=TRUE,scale=TRUE)
           [,1]
[1,] -1.2649111
[2,] -0.6324555
[3,]  0.0000000
[4,]  0.6324555
[5,]  1.2649111
attr(,"scaled:center")
[1] 3
attr(,"scaled:scale")
[1] 1.581139      

2,scale()函數的均值和标準差 

預設情況下,使用scale()函數對矩陣或資料框的指定列進行均值為0,标準差為1的标準化操作:

mydata <-scale(mydata)      

要對每一列進行任意均值和标準差的标準化,可以使用以下代碼,其中M是均值,SD是标準差:

mydata <scale(mydata) *SD + M      

繼續閱讀