【R语言】数据标准化处理
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, ...)
x: 为一个矩阵或数据框,对于非数值型变量将被忽略
- 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语言】数据标准化处理相关推荐
- R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介
R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介 分层语法的组成(data-stat-geom-scale-coord-facet) 用分层 ...
- 【组队学习】【28期】R语言数据科学
R语言数据科学 论坛版块: http://datawhale.club/c/team-learning/36-category/36 开源内容: https://github.com/datawhal ...
- 推荐:一本“高颜值”的R语言数据可视化图书(包邮送3本)
文章留言点赞前3名的朋友,每人送1本<R语言数据化可视化之美增强版>,名单揭晓日期为:本周日 (2020年7月12日晚7点).到时,获奖的朋友可以直接添加微信:meta-genomics, ...
- 半折预售:新书-R语言数据可视化之美|ggplot2作者推荐
我本来想等正式发售的时候,再告诉大家我的新书<R语言数据可视化之美>已经出版,奈何新书还太贵,这几天刚好京东有买100减50的活动,所以想想还是赶紧告诉大家吧,不然平时购买的话,太真有点小 ...
- R语言数据包自带数据集之ISwR包的melanom数据集字段解释、数据导入实战
R语言数据包自带数据集之ISwR包的melanom数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之ISwR包的melanom数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导入数 ...
- R语言数据包自带数据集之survival包的colon数据集字段解释、数据导入实战
R语言数据包自带数据集之survival包的colon数据集字段解释.数据导入实战 #数据字段说明 colon数据集:B/C期结肠癌辅助化疗治疗数据 d # 患者编号 study # 所有患者都是1 ...
- R语言数据包自带数据集之survival包的lung数据集字段解释、数据导入实战
R语言数据包自带数据集之survival包的lung数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之survival包的lung数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导 ...
- R语言数据包自带数据集之ToothGrowth数据集字段解释、数据导入实战
R语言数据包自带数据集之ToothGrowth数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之ToothGrowth数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导入数据 #数 ...
- R语言数据包自带数据集之mtcars数据集字段解释、数据导入实战
R语言数据包自带数据集之mtcars数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之mtcars数据集字段解释.数据导入实战 #会用帮助?或者help函数 #字段说明 #导入包 #导入数据 ...
- R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息、数值数据的描述性统计(Numerical data)、离散型数据的描述性统计(Categorical)
R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息.数值数据的描述性统计(Numerical data).离散型数据的描述性统计(Categorical) 目录
最新文章
- 复制不用说yes的方法
- 工作111:对element-form的理解
- Kotlin学习系列(二)
- Docker多机创建mysqlCluster 8.0群集
- vi-vim :删除、撤销、恢复删除、复制删除
- uc3842开关电源电路图_详解6款简单的开关电源电路设计原理图
- nginx+php使用open_basedir限制站点目录防止跨站
- iPhone 的倒计时竟然会显示假时间?
- Eclipse里做JBPM工作流gpd.xml中文乱码问题解决
- (有图)仿QQ侧滑菜单:RecyclerView侧滑菜单,长按拖拽,滑动删除
- 三点坐标确定圆心坐标
- 计算机硬件性能及瓶颈,这只是一个教您了解计算机性能瓶颈的技巧-如何测试计算机性能...
- java List转Map
- 修复网络未知依赖服务器,Win7无法上网提示“未知 依赖服务或组无法启动”是什么原因 修改网络配置的三种方法...
- 自定义微博小尾巴 源码+解析
- bootstrap之栅格化
- vue使用百度搜索接口实现下拉搜索效果
- 高通狂吹新GPU:赶超桌面显卡
- Uos统信系统 CA根证书搭建
- 2019掘安杯原题复现