1. 程式人生 > >R語言標準化(歸一化)之scale()函式、sweep()函式

R語言標準化(歸一化)之scale()函式、sweep()函式

#資料集

x<-cbind(c(1,2,3,4),c(5,5,10,20),c(3,6,9,12))

#自己寫標準化

x_min_temp<-apply(x,2,min) 
x_min<-matrix(rep(x_min_temp,4),byrow=TRUE,ncol=3)#需要輸入行數和列數
abs(x-x_min)#當前值減去均值
x_extreme_temp<-apply(x,2,max)-apply(x,2,min)
x_extreme<-matrix(rep(x_extreme_temp,4),byrow=TRUE,ncol=3)#需要輸入行數和列數
abs(x-x_min)/x_extreme

#sweep函式

center <- sweep(x, 2, apply(x, 2, min),'-') #在列的方向上減去最小值,不加‘-’也行
R <- apply(x, 2, max) - apply(x,2,min)   #算出極差,即列上的最大值-最小值
x_star<- sweep(center, 2, R, "/")        #把減去均值後的矩陣在列的方向上除以極差向量

#sweep函式更簡潔、易懂,且不需要輸入行數和列數,二者效能也差不多

#sweep再舉一個例子哈
m<-matrix(c(1:9),byrow=TRUE,nrow=3)
#第一行都加1,第二行都加4,第三行都加7
sweep(m, 1, c(1,4,7), "+")  


#scale函式,這個比較簡單,不多說
scale(x, center = TRUE, scale = TRUE)

有些地方說歸一化,有些地方說標準化,萬能的CSDN,誰能告訴我歸一化和標準化的區別?