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包都有自己的数据标准化预处理方法

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值