R语言数据标准化

在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。 数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间, 其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。  数据归一化后可以提升模型的收敛速度和精度。

### 1. 离差标准化
# 数据映射到[0,1]
mat <- matrix(data = sample(0:10000,1000,replace=TRUE), 
              nrow = 100, ncol = 10, byrow = TRUE,
              dimnames = list(paste0("gene", 1:100),
                              paste0("sample", 1:10)))


normalize <- function(x){
  return ((x-min(x))/(max(x)-min(x)))
}

apply(mat,2,normalize) # 对列操作


# 数据映射到[-1,1]
normalize2 <- function(x){
  return ((x-mean(x))/(max(x)-min(x)))
}

class(mat) # [1] "matrix" "array" 
mat_norm <- apply(mat,2,normalize2)
class(mat_norm) # [1] "matrix" "array" 

### 2. log函数转换
# 所有的数据都要大于等于1
# 除以log10(max)后在[0,1]区间上

# log(x, base)
log(10) #default 自然对数
log(10,10) 
log(10,2)

lognorm <- function(x){
  return (log(x,10)/log(max(x),10))
}

mat_lognorm <- apply(mat,2,lognorm)
# 二代测序数据基因表达数据,往往+1 再取log

### 3.z-score标准化,标准差标准化
# 经过该方法处理的数据的均值是0,标准差是1
# z = (x-μ)/σ

scale(mat)  # 
class(scale(mat)) # [1] "matrix" "array"

# x <- 1:10
x <- matrix(1:10, ncol = 2)
scale(x)  # z-score normalization
#scale(x,center = TRUE, scale = TRUE)

### 4. 各种包中的标准化函数
# R语言很多bioconductor包都有自己的数据标准化预处理方法

你可能感兴趣的:(r语言,数据挖掘,数据分析)