美文网首页基本图形绘制Data scienceR data manipulate
数据分析:数据预处理--标准化方法优劣了解(二)

数据分析:数据预处理--标准化方法优劣了解(二)

作者: 生信学习者2 | 来源:发表于2021-11-29 12:32 被阅读0次

前言

上一篇数据分析:数据预处理--标准化初解释(一)是在R中初步实现计算各类标准化的方法,没进一步分析为何要标准的原因,这一次我们借用两个标准化方法极值标准化和Zscore标准化重新解析标准化的原因。更多知识分享请到 https://zouhua.top/

在构建模型过程中,通常使用多变量作为自变量去预测结果,多变量很多时候是具有多个不同的单位和量纲的。如果使用原始值去构建模型或做预测,这会导致每个变量对结果的贡献度不一致,因此常需要对自变量做 transform和standardization。

比如变量A的范围是0-1,000,000;变量B的范围是0-100,在没标准化前,它们对结果的贡献度是不同的。

常用标准化方法

  • 极值标准化: NormalizedValue_{x} = \frac{x-min_{x}}{max_{x}-min_{x}}
library(dplyr)
data(iris)
min_max_norm <- function(x){

  (x -min(x, na.rm = TRUE))/(max(x, na.rm = TRUE) - min(x, na.rm = TRUE))
}

iris_norm <- lapply(iris[, 1:4], min_max_norm) %>% data.frame() %>% 
  mutate(Species=iris$Species)
head(iris_norm) 

Notes: 每个变量的范围在[0, 1]之间。极值标准化的缺点是会将数据拉向均值,对离群点不敏感,相反Zscore则考虑到极值的影响(通过除以标准差实现该效果)。

  • Z-score标准化:NormalizedValue_{x} = \frac{x - \mu}{\sigma}

scale函数可用于zscore标准化。

# single variable
iris$Sepal.Width <- (iris$Sepal.Width - mean(iris$Sepal.Width, na.rm = TRUE)) / sd(iris$Sepal.Width, na.rm = TRUE)

# multiple variable
iris_standardize <- as.data.frame(scale(iris[1:4]))

library(dplyr)
iris_new <- iris %>% mutate_each_(list(~scale(.) %>% as.vector),
                                  vars = c("Sepal.Width","Sepal.Length"))
head(iris_new)

Log Transformation

很多时候数据是偏斜分布的(左右两个分布是偏态分布,中间是正态分布)。通常使用log2转换使得其分布符合正态分布。

log(dat$variable)

最近看到一篇文献对数据做了log2transform+median normalization。


质谱数据(蛋白质组+代谢组)的intensity数值是整型且数目巨大,先使用log2transform一可以降低量纲影响二可以使得数据分布服从正态分布。


后面再做median normalization是排除log2transform后数据对预测结果仍然贡献不一致。

median_norm <- function(x){

  value <- as.numeric(x)
  x_scale <- (value - stats::median(value, na.rm = TRUE))/stats::IQR(value, na.rm = TRUE)
  
  return(x_scale)  
}

问题来了,缺失值该如何处理呢?

systemic information

sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
Running under: CentOS Linux 8 (Core)

Matrix products: default
BLAS/LAPACK: /disk/share/anaconda3/lib/libopenblasp-r0.3.10.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] PTXQC_1.0.12 tibble_3.1.5 dplyr_1.0.7 

loaded via a namespace (and not attached):
 [1] tinytex_0.32       tidyselect_1.1.1   xfun_0.24          bslib_0.2.5.1      reshape2_1.4.4     purrr_0.3.4       
 [7] colorspace_2.0-2   vctrs_0.3.8        generics_0.1.0     viridisLite_0.4.0  htmltools_0.5.1.1  yaml_2.2.1        
[13] utf8_1.2.1         rlang_0.4.11       jquerylib_0.1.4    pillar_1.6.4       glue_1.4.2         DBI_1.1.1         
[19] gdtools_0.2.2      RColorBrewer_1.1-2 lifecycle_1.0.0    plyr_1.8.6         stringr_1.4.0      munsell_0.5.0     
[25] gtable_0.3.0       rvest_0.3.6        kableExtra_1.3.4   evaluate_0.14      knitr_1.33         UpSetR_1.4.0      
[31] fansi_0.5.0        Rcpp_1.0.7         scales_1.1.1       webshot_0.5.2      jsonlite_1.7.2     systemfonts_0.3.2 
[37] gridExtra_2.3      ggplot2_3.3.5      digest_0.6.27      stringi_1.4.6      ade4_1.7-18        cowplot_1.1.0     
[43] grid_4.0.2         tools_4.0.2        magrittr_2.0.1     sass_0.4.0         ggdendro_0.1.22    R6P_0.2.2         
[49] seqinr_4.2-4       crayon_1.4.1       tidyr_1.1.4        pkgconfig_2.0.3    ellipsis_0.3.2     MASS_7.3-54       
[55] data.table_1.14.0  xml2_1.3.2         assertthat_0.2.1   rmarkdown_2.9      svglite_1.2.3.2    httr_1.4.2        
[61] rstudioapi_0.13    R6_2.5.0           compiler_4.0.2  

Reference

  1. Normalizing Data with R

  2. How to Normalize Data in R

参考文章如引起任何侵权问题,可以与我联系,谢谢。

相关文章

  • 数据分析:数据预处理--缺失值处理(三)

    前言 上一篇数据分析:数据预处理--标准化方法优劣了解(二)[https://www.jianshu.com/p/...

  • 数据分析:数据预处理--标准化方法优劣了解(二)

    前言 上一篇数据分析:数据预处理--标准化初解释(一)[https://www.jianshu.com/p/f36...

  • Day 14:SVM案例

    数据下载 一、数据预处理 导入库 导入数据 分割数据集 数据标准化 二、使用SVM(linear kernel)模...

  • 预处理

    数据预处理的常用流程 去除唯一属性 处理缺失值 属性编码 数据标准化 特征选择 主成分分析 缺失值处理的三种方法 ...

  • 1分钟了解数据分析挖掘体系

    总体上来讲,数据分析挖掘体系可分为数据预处理、分析挖掘、数据探索、数据展现和分析工具。 数据预处理 数据预处理包含...

  • Day11:K-NN案例

    数据下载 一、数据预处理 导入库 导入数据 分割数据集 数据标准化 二、训练K-NN模型 三、预测测试集结果 四、...

  • Day6:逻辑回归案例

    数据下载 一、数据预处理 导入库 导入数据 分割数据集 数据标准化 二、建立逻辑回归模型 R值(准确率): 0.8...

  • 【代谢组学】代谢组学原始数据的预处理

    主要内容: 1. 原始数据预处理概述; 2. 主要分析软件汇总; 3. 数据预处理的方法。 1. 原始数据预处理概...

  • 机器学习面试题

    1. 什么是数据标准化,为什么要进行数据标准化? 我认为这个问题需要重视。数据标准化是预处理步骤,将数据标准化到一...

  • CPDA_数据的获取_2019-07-15

    数据分析的主要流程涵盖:数据的获取、数据预处理、数据模型分析、数据可视化等,其中数据预处理很重要,数据模型分析较为...

网友评论

    本文标题:数据分析:数据预处理--标准化方法优劣了解(二)

    本文链接:https://www.haomeiwen.com/subject/ufokxrtx.html