z-score标准化:原始数据如果是正态分布,z-score处理后则成为标准正态分布,即均值为0,标准差为1。
适用范围:适用于数据系列中最大值和最小值未知,有超出取值范围的离群数据的情况。或者是数据分布非常离散的情况。
缺点:对数据的相关性有要求,只有在数据大致符合正态分布时才能得到最佳结果。
scale 函数用法
scale(x, center = TRUE, scale = TRUE) # 对矩阵 x 中的每一列数据进行标准化
-
center
参数决定了怎样计算一列数据的均值。它可以是一个逻辑值或与x的列数相等的数值向量,若为数值向量,则x中的每一列的值减去此数值向量中对应该列的值,也就是说可以人为的设定均值;若center为逻辑值,默认为TRUE,表示x中的每一列会减去对应列的算术平均值,若为FASLE,则不做减法处理。减去平均值,数据平移 -
scale
参数决定了怎样计算一列数据的缩放比例,及标准差。它也可以是一个逻辑值或者与x中列数相等数值向量。若为数值向量,则x中每一列的缩放比例按此向量中的数值进行计算,即可以人为设置均方根(标准差)。如果scale为逻辑值,默认为TRUE,表示经过上一步center计算后的数据会除以该列求出的均方根(标准差),若为FALSE,则不除。除以标准差,数据缩放
可以把center
参数看成数据的平移,默认是减去平均值,scale函数中也可以不平移或者自定义平移单位。
可以把scale
参数看成数据的缩放,默认是除以标准差,scale函数中也可以不缩放或者自定义缩放单位。
可以运行下面的代码实际体会:
# 创建一个矩阵
x <- matrix(1:10, ncol = 2)
# scale进行标准化
x_scale <- scale(x)
# 按照z-score算法手动进行标准化
a<-(x[,1]- mean(x[,1])) / (sd( x[,1]))
b<-(x[,2]- mean(x[,2])) / (sd( x[,2]))
x_manual<- data.frame(a,b)
# 可以发现scale函数就是按z-score进行标准化的
x_scale
x_manual
# scale函数标准化之后的列均值为0,标准差为1
mean( x_scale[,1] );sd( x_scale[,1] )
mean( x_scale[,2] );sd( x_scale[,2] )
# 只进行平移,不缩放
( x_1 <- scale(x,scale = F))
# 只进行缩放,不平移
( x_2 <- scale(x,center = F))
# 按自定义的数值进行平移,第一列平移1个单位,第二列平移2个单位
( x_3 <- scale(x,center=c(1,2),scale = F))
# 按自定义的数值进行缩放,第一列缩小至1/2,第二列缩小至1/4
( x_4 <- scale(x,center=F,scale = c(2,4)))
发表评论