資料标準化處理是資料分析的一項基礎工作,不同評價名額往往具有不同的量綱,資料之間的差别可能很大,不進行處理會影響到資料分析的結果。為了消除名額之間的量綱和取值範圍差異對資料分析結果的影響,需要對資料進行标準化處理,就是說,把資料按照比例進行縮放,使之落入一個特定的區域,便于進行綜合分析。
在繼續下文之前,先解釋三個個術語:
(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