R實戰 第九篇:數據標准化


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

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

(1)所謂量綱,簡單來說,就是說數據的單位;有些數據是有量綱的,比如身高,而有些數據是沒有量綱的,例如,男女比例。無量綱化,是指去除數據的單位限制,將其轉化為無量綱的純數值,便於不同單位或者量級的指標能夠進行和加權。

(2)數據的標准化是指將數據按照比例縮放,使之落入一個特定的區間。

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

常用的歸一化方法主要有離差標准化和標准差標准化,r的scale()可以實現標准差標准化,也可以指定標准化之后數據的均值和標准差。

一,離差標准化

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

離差標准化保留了原來數據中存在的關系,是消除量綱和數據取值范圍對數據分析產生影響的最簡單方法,缺點是如果數據集中,且某個數值很大,那么標准化之后大部分值會接近於0,並且不會相差很大。

二,標准差標准化

經過該方法處理的數據的均值是0,標准差是1,轉化公式是:

這種方法基於原始數據的均值(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

 

參考文檔:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM