相关文章推荐
憨厚的黄瓜  ·  高雄市立仁武高級中學·  7 月前    · 
飘逸的核桃  ·  python ...·  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
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
数据 标准化 处理 数据 分析的一项基础工作,不同评价指标往往具有不同的量纲, 数据 之间的差别可能很大,不进行 处理 会影响到 数据 分析的结果。为了消除指标之间的量纲和取值范围差异对 数据 分析结果的影响,需要对 数据 进行 标准化 处理 ,就是说,把 数据 按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。 在继续下文之前,先解释三个个术语: (1)所谓量纲,简单来说,就是说 数据 的单位;有些 数据 是有量纲...
数据 缩放到[0,1]的(min—max Normalization) X∗=Xi−XminXmax−Xmin X^{\ast}=\frac{X_i-X_{min}}{X_{max}-X_{min}} X∗=Xmax​−Xmin​Xi​−Xmin​​ 通常将上面这种 标准化 称为归一化 缩放到[-1,1]的 Mean —Normalization X∗=Xi−mean(X)Xmax−Xmin X^{\ast}=\frac{X_i-mean(X)}{X_{max}-X_{min}} X∗=Xmax​−Xmin​
我们在机器学习中常涉及多个维度,有些 数据 的量级不同,会导致 数据 范围波动很大,比如我们研究肿瘤的 数据 ,肿瘤周长可以达到10多cm,而肿瘤的凹度只有零点几cm,两者 数据 间差异比较大,在进行比较的时候通常需要消除 数据 间的差异。常见的方法为对 数据 进行 标准化 和归一化 处理 标准化 就是把 数据 减去同一列的平均值,然后再除以标准差,公式如下: 归一化就是把 数据 减去同列 数据 的最小值,然后再除以同列 数据 最小值和最大值的差值,公式如下: 我们通过 R语言 来实现下面两种 数据 处理 方法,先导入我们的一个乳腺癌的肿瘤指标 数据 (不是原
数据 标准化 ,是将 数据 按比例缩放,使之落入到特定区间,一般我们使用0-1 标准化 ; x=(x-min)/(max-min) >data <- read.csv('1.csv', fileEncoding='utf-8') class name score 1 一班 朱志斌 120 2 一班 朱凤 122 3 一班 郑丽萍 14 Taylor_zhang13: 大佬请问,nricens这个包他给我的reclassification table for case的数据和给的NRI+对不上,这是为什么 Reclassification Table for all subjects: Standard < 0.15 < 0.3 >= 0.3 < 0.15 772 106 0 < 0.3 175 1354 161 >= 0.3 0 252 962 Reclassification Table for case: Standard < 0.15 < 0.3 >= 0.3 < 0.15 12 9 0 < 0.3 2 65 14 >= 0.3 0 16 112 Reclassification Table for control: Standard < 0.15 < 0.3 >= 0.3 < 0.15 5 1 0 < 0.3 1 2 1 >= 0.3 0 0 1 NRI estimation by KM estimator: Point estimates: Estimate NRI 0.18067779 NRI+ 0.09124675 NRI- 0.08943104 Pr(Up|Case) 0.13304370 Pr(Down|Case) 0.04179695 Pr(Down|Ctrl) 0.13799383 Pr(Up|Ctrl) 0.04856279 Now in bootstrap.. Point & Interval estimates: Estimate Lower Upper NRI 0.18067779 -0.048736587 0.3393214 NRI+ 0.09124675 -0.062949 【机器学习&深度学习】预测模型最合适阈值Cutoff选取及其它指标计算(Python版本) m0_67753369: 这样运行出的结果是什么?怎样显示? 【Python绘图】设置pycharm不在SciView中显示图片 MrGod__: 为啥我下的pycharm没有 Python Scientific? 表情包 【R语言】预测模型最合适阈值Cutoff选取及其它指标计算 Aquan152: 运行后生成一个function 之后是怎么看需要的cutoff? 【影像组学pyradiomics教程】(三)自定义特征提取 兔子好辣: 你好,具体的小波变化提取小波特征的方法能发我一份吗?我的邮箱是jiayubing1999@163.com。谢谢你,祝你科研顺利!!!