1、标准化——数据处理


preProcess(x, method = c("center", "scale"),  thresh = 0.95,  pcaComp = NULL,  na.remove = TRUE,  k = 5,  knnSummary = mean,  outcome = NULL,  fudge = 0.2,  numUnique = 3,  verbose = FALSE,  freqCut = 95/5,  uniqueCut = 10,  cutoff = 0.9, ...)   predict(object, newdata, ...)  

  1. x: 为一个矩阵或数据框,对于非数值型变量将被忽略  

  2. method: 指定数据标准化的方法,默认为“center”和“scale”。(必须同时使用这两个,若选一个只能对应中心化或均值化)
  • 其中center表示预测变量值减去均值;scale表示预测变量值除以标准差,故默认标准化方法就是(x-mu)/std(x−mu)/std。
  • 如果使用range方法,则数据标准为[0,1]的范围,即(x-min)/(max-min)(x−min)/(max−min)。
ppMethods <- c("BoxCox", "YeoJohnson", "expoTrans", "invHyperbolicSine","center", "scale", "range", "knnImpute", "bagImpute", "medianImpute", "pca", "ica", "spatialSign", "ignore", "keep", "remove", "zv", "nzv", "conditionalX","corr")
  • thresh:如果使用主成分分析(PCA)方法,该参数指定累计方差至少达到0.95

  • pcaComp:如果使用主成分分析(PCA)方法,该参数可指定保留的主成分个数,该参数的优先级高于thresh

  • na.remove:默认剔除缺失值数据

  • k:如果使用k-近邻方法填补缺失值的话,可以指定具体的k值,默认为5

  • knnSummary:使用k个近邻的均值替代缺失值

  • outcome:指定数据集的输出变量,当使用BOX-COX变换数据时,该参数需要指定输出变量

  • fudge:指定BOX-COX变换的lambda值波动范围

  • numUnique:指定多少个唯一值需要因变量y估计BOX-COX转换

  • verbose:指定是否需要输出详细的结果

  • object:为preProcess对象

  • newdata:指定需要处理的新数据集

2. iris实例 ————scale(均值方差标准化)

library(caret)
library(dplyr)
head(scale(iris[,1:4]))
##      Sepal.Length Sepal.Width Petal.Length Petal.Width
## [1,]   -0.8976739  1.01560199    -1.335752   -1.311052
## [2,]   -1.1392005 -0.13153881    -1.335752   -1.311052
## [3,]   -1.3807271  0.32731751    -1.392399   -1.311052
## [4,]   -1.5014904  0.09788935    -1.279104   -1.311052
## [5,]   -1.0184372  1.24503015    -1.335752   -1.311052
## [6,]   -0.5353840  1.93331463    -1.165809   -1.048667
stand_scale <- preProcess(iris)  #采用(x-mu)/std的标准化方法,与scale()函数效果一样
head(predict(stand_scale ,iris[,1:4]))
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1   -0.8976739  1.01560199    -1.335752   -1.311052
## 2   -1.1392005 -0.13153881    -1.335752   -1.311052
## 3   -1.3807271  0.32731751    -1.392399   -1.311052
## 4   -1.5014904  0.09788935    -1.279104   -1.311052
## 5   -1.0184372  1.24503015    -1.335752   -1.311052
## 6   -0.5353840  1.93331463    -1.165809   -1.048667
all(scale(iris[,1:4])==predict(stand_scale ,iris[,1:4])) #中间存在误差,但是大多数以及相等了
## [1] FALSE

3. iris实例————max-min(标准化)

normalize <- function(x) {return ((x - min(x)) / (max(x) - min(x)))
}
iris_max=as.data.frame(lapply(iris[1:4],normalize))
head(iris_max)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1   0.22222222   0.6250000   0.06779661  0.04166667
## 2   0.16666667   0.4166667   0.06779661  0.04166667
## 3   0.11111111   0.5000000   0.05084746  0.04166667
## 4   0.08333333   0.4583333   0.08474576  0.04166667
## 5   0.19444444   0.6666667   0.06779661  0.04166667
## 6   0.30555556   0.7916667   0.11864407  0.12500000
stand_range <- preProcess(iris[1:4],method = "range")
iris_max_prePro=predict(stand_range ,iris[1:4])
head(iris_max_prePro)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1   0.22222222   0.6250000   0.06779661  0.04166667
## 2   0.16666667   0.4166667   0.06779661  0.04166667
## 3   0.11111111   0.5000000   0.05084746  0.04166667
## 4   0.08333333   0.4583333   0.08474576  0.04166667
## 5   0.19444444   0.6666667   0.06779661  0.04166667
## 6   0.30555556   0.7916667   0.11864407  0.12500000
all(iris_max==iris_max_prePro)# 正常,和我们预期的一样,两个数据相等
## [1] TRUE

4. 还原标准化数据—–salce(均值-方差标准化)

比如: 我们经常对train数据进行标准化,并且用train数据的参数去标准化test数据,R中没有内置的函数。
还有:有些模型和数据 存在量纲差异,需要标准化后建模,并预测,预测出来的值是标准化后的数据,此时需要把预测的数据还原成真实数据,此时就需要原始数据的标准化参数了

stand_scale <- preProcess(iris)  #采用(x-mu)/std的标准化方法,与scale()函数效果一样
iris_scale=predict(stand_scale,iris[,1:4])iris_new <- t(apply(iris_scale,1,function(x){x*stand_scale$std+stand_scale$mean}))
iris_new %>% head(.,10)
##       Sepal.Length Sepal.Width Petal.Length Petal.Width
##  [1,]          5.1         3.5          1.4         0.2
##  [2,]          4.9         3.0          1.4         0.2
##  [3,]          4.7         3.2          1.3         0.2
##  [4,]          4.6         3.1          1.5         0.2
##  [5,]          5.0         3.6          1.4         0.2
##  [6,]          5.4         3.9          1.7         0.4
##  [7,]          4.6         3.4          1.4         0.3
##  [8,]          5.0         3.4          1.5         0.2
##  [9,]          4.4         2.9          1.4         0.2
## [10,]          4.9         3.1          1.5         0.1
head(iris,10)
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1           5.1         3.5          1.4         0.2  setosa
## 2           4.9         3.0          1.4         0.2  setosa
## 3           4.7         3.2          1.3         0.2  setosa
## 4           4.6         3.1          1.5         0.2  setosa
## 5           5.0         3.6          1.4         0.2  setosa
## 6           5.4         3.9          1.7         0.4  setosa
## 7           4.6         3.4          1.4         0.3  setosa
## 8           5.0         3.4          1.5         0.2  setosa
## 9           4.4         2.9          1.4         0.2  setosa
## 10          4.9         3.1          1.5         0.1  setosa

5. 还原标准化数据—–max-min

stand_range <- preProcess(iris[1:4],method = "range")
iris_max_prePro=predict(stand_range ,iris[1:4])t(apply(iris_max_prePro,1,function(x){x*(stand_range$ranges[2,]-stand_range$ranges[1,])+stand_range$ranges[1,] })) %>% head(.,10)
##       Sepal.Length Sepal.Width Petal.Length Petal.Width
##  [1,]          5.1         3.5          1.4         0.2
##  [2,]          4.9         3.0          1.4         0.2
##  [3,]          4.7         3.2          1.3         0.2
##  [4,]          4.6         3.1          1.5         0.2
##  [5,]          5.0         3.6          1.4         0.2
##  [6,]          5.4         3.9          1.7         0.4
##  [7,]          4.6         3.4          1.4         0.3
##  [8,]          5.0         3.4          1.5         0.2
##  [9,]          4.4         2.9          1.4         0.2
## [10,]          4.9         3.1          1.5         0.1
head(iris,10)
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1           5.1         3.5          1.4         0.2  setosa
## 2           4.9         3.0          1.4         0.2  setosa
## 3           4.7         3.2          1.3         0.2  setosa
## 4           4.6         3.1          1.5         0.2  setosa
## 5           5.0         3.6          1.4         0.2  setosa
## 6           5.4         3.9          1.7         0.4  setosa
## 7           4.6         3.4          1.4         0.3  setosa
## 8           5.0         3.4          1.5         0.2  setosa
## 9           4.4         2.9          1.4         0.2  setosa
## 10          4.9         3.1          1.5         0.1  setosa

6. 还原标准化数据—DMwR::unscale()函数

unscale(vals, norm.data, col.ids)vals    : 要还原标准化的数值型矩阵,或者数值型数据框  norm.data    : 以及标准化后的数据,必须是用scale()函数标准化后的数据  col.ids : 那些列可以不用标准化(默认全部列都有进行)  
# 我把iris数据集分为7:3
library(caret)
library(dplyr)
library(DMwR)
## 载入需要的程辑包:grid
library(e1071)#############################################################
########## 标准化数据
#
data(algae)
algae[,4:12] %>% head() # 可以发现数据存在量纲的差异,我们要预测a1(因变量) ,其他为自变量
##   mxPH mnO2     Cl    NO3     NH4    oPO4     PO4 Chla   a1
## 1 8.00  9.8 60.800  6.238 578.000 105.000 170.000 50.0  0.0
## 2 8.35  8.0 57.750  1.288 370.000 428.750 558.750  1.3  1.4
## 3 8.10 11.4 40.020  5.330 346.667 125.667 187.057 15.6  3.3
## 4 8.07  4.8 77.364  2.302  98.182  61.182 138.700  1.4  3.1
## 5 8.06  9.0 55.350 10.416 233.700  58.222  97.580 10.5  9.2
## 6 8.25 13.1 65.750  9.248 430.000  18.250  56.667 28.4 15.1
normData <- scale(algae[,4:12]) # 把train数据进行标准化
t <- svm(a1 ~ .,normData[1:100,] %>% as.data.frame() ) #决策树模型
normPs <- predict(t,as.data.frame(normData[101:nrow(normData),])) # 可以发现预测的数据不是最终的数据,需要进行标准化还原
normPs %>% head() # 预测值 ,预测数据,都在0--1范围
##          1          2          3          4          5          6
## -0.4688077 -0.5577023 -0.5956463 -0.7180639 -0.4260693 -0.2741933
algae[101:nrow(normData),"a1"] %>% head()# 真实值
## [1] 16.5  7.0 58.7  8.7 17.0 12.3
unscale(normPs,normData) %>% head()#于是还原预测数据
##       [,1]
## 1 7.731243
## 2 7.678057
## 3 7.655355
## 4 7.582112
## 5 7.756814
## 6 7.847682

【R语言】数据标准化处理相关推荐

  1. R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介

    R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介 分层语法的组成(data-stat-geom-scale-coord-facet) 用分层 ...

  2. 【组队学习】【28期】R语言数据科学

    R语言数据科学 论坛版块: http://datawhale.club/c/team-learning/36-category/36 开源内容: https://github.com/datawhal ...

  3. 推荐:一本“高颜值”的R语言数据可视化图书(包邮送3本)

    文章留言点赞前3名的朋友,每人送1本<R语言数据化可视化之美增强版>,名单揭晓日期为:本周日 (2020年7月12日晚7点).到时,获奖的朋友可以直接添加微信:meta-genomics, ...

  4. 半折预售:新书-R语言数据可视化之美|ggplot2作者推荐

    我本来想等正式发售的时候,再告诉大家我的新书<R语言数据可视化之美>已经出版,奈何新书还太贵,这几天刚好京东有买100减50的活动,所以想想还是赶紧告诉大家吧,不然平时购买的话,太真有点小 ...

  5. R语言数据包自带数据集之ISwR包的melanom数据集字段解释、数据导入实战

    R语言数据包自带数据集之ISwR包的melanom数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之ISwR包的melanom数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导入数 ...

  6. R语言数据包自带数据集之survival包的colon数据集字段解释、数据导入实战

    R语言数据包自带数据集之survival包的colon数据集字段解释.数据导入实战 #数据字段说明 colon数据集:B/C期结肠癌辅助化疗治疗数据 d # 患者编号 study # 所有患者都是1 ...

  7. R语言数据包自带数据集之survival包的lung数据集字段解释、数据导入实战

    R语言数据包自带数据集之survival包的lung数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之survival包的lung数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导 ...

  8. R语言数据包自带数据集之ToothGrowth数据集字段解释、数据导入实战

    R语言数据包自带数据集之ToothGrowth数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之ToothGrowth数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导入数据 #数 ...

  9. R语言数据包自带数据集之mtcars数据集字段解释、数据导入实战

    R语言数据包自带数据集之mtcars数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之mtcars数据集字段解释.数据导入实战 #会用帮助?或者help函数 #字段说明 #导入包 #导入数据 ...

  10. R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息、数值数据的描述性统计(Numerical data)、离散型数据的描述性统计(Categorical)

    R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息.数值数据的描述性统计(Numerical data).离散型数据的描述性统计(Categorical) 目录

最新文章

  1. 复制不用说yes的方法
  2. 工作111:对element-form的理解
  3. Kotlin学习系列(二)
  4. Docker多机创建mysqlCluster 8.0群集
  5. vi-vim :删除、撤销、恢复删除、复制删除
  6. uc3842开关电源电路图_详解6款简单的开关电源电路设计原理图
  7. nginx+php使用open_basedir限制站点目录防止跨站
  8. iPhone 的倒计时竟然会显示假时间?
  9. Eclipse里做JBPM工作流gpd.xml中文乱码问题解决
  10. (有图)仿QQ侧滑菜单:RecyclerView侧滑菜单,长按拖拽,滑动删除
  11. 三点坐标确定圆心坐标
  12. 计算机硬件性能及瓶颈,这只是一个教您了解计算机性能瓶颈的技巧-如何测试计算机性能...
  13. java List转Map
  14. 修复网络未知依赖服务器,Win7无法上网提示“未知 依赖服务或组无法启动”是什么原因 修改网络配置的三种方法...
  15. 自定义微博小尾巴 源码+解析
  16. bootstrap之栅格化
  17. vue使用百度搜索接口实现下拉搜索效果
  18. 高通狂吹新GPU:赶超桌面显卡
  19. Uos统信系统 CA根证书搭建
  20. 2019掘安杯原题复现

热门文章

  1. Python中函数参数传递方式介绍
  2. c++之epoll原理解析与Client Server功能实现
  3. C++:职工管理系统
  4. Eclipse 注释模板配置
  5. ACM程序设计基础结课总结
  6. docker 安装 巡风--kali下安装
  7. 【系统编程】进程--exec函数族(execl、execlp、execle、execv、execvp、execve)
  8. 每日英语——大老师のaphorism
  9. lua调用不同lua文件中的函数
  10. Goby 利用内存马中的一些技术细节【技术篇】