数据的标准化的两种方法
为什么要进行标准化
我们画热图,线性回归,神经网络等经常要先对数据进行标准化。那是因为一些变量值的大小之间属于不同的量级水平,比如10000左右的变量和100左右的变量,那么在绘制热图或者进行机器学习的时候,由于这个10000存在,100这个水平的变量的变化或者样本差异就会变得微不足道,在热图上显现不出来,或在机器学习训练的时候没有起到作用。因此我们要把不同的变量标准化,让他们处于一个同一个量级水平。
标准化的方法
比较常见的包括两种,zscore标准化和01标准化。
- zscore标准化,每一种变量的值都有减去该变量的均值,再除以改变量的方差。实际上就是求出正态分布的zscore,这样得到标准化的值是存在正负的。
- 01标准化,每一种变量的值减去该变量的最小值,再除以改变量最大值与最小值的差,这样得到的标准化的数值是在0和1之间。
代码实现
R语言代码实现
# 注意,这里输入x是数字的矩阵,或者数字的data.frame
# 01标准化
scale01 <- function(x, low = min(x), high = max(x)) {
x = (x - low)/(high - low)
x
}
# zscore标准化
# 每一列进行标准化
scale <- function(x){
colMeans = rm = colMeans(x, na.rm = T)
x = sweep(x, 2, rm)
colSDs = sx = apply(x, 2, sd, na.rm = T)
x = sweep(x, 2, sx, "/")
return(x)
}
# 每一行进行标准化
scale <- function(x){
rm = rowMeans(x, na.rm = T)
x = sweep(x, 1, rm)
sx = apply(x, 1, sd, na.rm = T)
x = sweep(x, 1, sx, "/")
return(x)
}
原文出处
thecodesearch.com: http://www.thecodesearch.com/2020/08/18/%e6%95%b0%e6%8d%ae%e7%9a%84%e6%a0%87%e5%87%86%e5%8c%96%e7%9a%84%e4%b8%a4%e7%a7%8d%e6%96%b9%e6%b3%95/

浙公网安备 33010602011771号