全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3290 2
2017-11-20
caret包(Classification and Regression Training)就是为了解决分类和回归问题的数据训练而创建的一个综合工具包。这里主要是数据预处理(哑变量,零方差变量的删除,去除相关性强的变量,标准化处理和缺失值的处理;样本的选取(等比例抽样,Bootstrap抽样,k折交叉验证的抽样))


library(caret)
dummyVars(formula, data, sep = ".",
          levelsOnly = FALSE,
          fullRank = FALSE, ...)
predict(object, newdata, na.action = na.pass, ...)
#formula:为一个数学公式,类似于y=x1 + x2 + x3,但R中的写法是y~x1 + x2 + x3。注意,公式右边请指定需要处理为哑变量的因子型变量
#data:指定要处理的数据集
#sep:设置变量与水平间的分割符,默认为实心点。如x.a,x就是变量名,a就是x的一个水平
#levelsOnly:逻辑值,如果为True,则列名中剔除原变量名。如x.a变为a
#object:为dummyVars()函数构成的结果
#newdata:需要处理的新数据
#na.action:缺失值的对待,变量水平中如果有缺失值,则结果仍为缺失值



##########2.近零方差变量的删除
nearZeroVar(x, freqCut = 95/5,
            uniqueCut = 10,
            saveMetrics = FALSE,
            names = FALSE,
            foreach = FALSE,
            allowParallel = TRUE)
nzv(x, freqCut = 95/5, uniqueCut = 10,
    saveMetrics = FALSE, names = FALSE)
#x:为一个向量或矩阵或数据框,需要注意的是,必须是数值型对象,如果是字符型的变量,建议转换为数值型的值,可通过factor函数实现
#freqCut:为一个阈值,默认值为95/5,即最频繁的数值个数除以次频繁的数值个数。如上面的性别字段,990/10>95/5
#uniqueCut:为一个阈值,默认值为10%,即某个变量中不同值的个数除以样本总量。
#如上面的性别字段,2/1000<0.1(根据近零方差的判断标准是,如果某个变量的freqCut超过了给到的默认阈值,并且uniqueCut低于给到的默认阈值,就认为改变量是近零方差的。)
# saveMetrics:逻辑值,默认为False,如果为True的话会返回一个统计表,反映每个变量是否为零方差和近零方差
#names:逻辑值,默认为False,如果为True的话,返回零方差和近零方差的变量名,否则返回对应的索引值
#foreach:是否指定使用foreach包进行计算,如果使用,计算过程将消耗更少的内存,但会比较耗时间
#allowParallel:是否指定使用foreach包进行并行运算,如果使用,将会消耗更多内存,但执行时间将更少

############3删除高相关的预测变量和完全线性关系的变量
findCorrelation(x, cutoff = .90,
                verbose = FALSE,
                names = FALSE,
                exact = ncol(x) < 100)
#x:为一个相关系数矩阵
#cutoff:指定高度线性相关的临界值,默认为0.9
#verbose:逻辑值,指定是否打印出函数运算的详细结果
#names:逻辑值,是否返回变量名,默认返回需要删除变量的对应索引值
#exact:逻辑值,是否重新计算每一步的平均相关系数

###四、数据标准化处理
preProcess(x,
           method = c("center", "scale"),
           thresh = 0.95,
           pcaComp = NULL,
           na.remove = TRUE,
           k = 5,
           knnSummary = mean,
           outcome = NULL,
           fudge = .2,
           numUnique = 3,
           verbose = FALSE,
           ...)
predict(object, newdata, ...)
#x:为一个矩阵或数据框,对于非数值型变量将被忽略
#method:指定数据标准化的方法,默认为"center"和 "scale"。其中center表示预测变量值减去均值;scale表示预测变量值除以标准差,故默认标准化方法就是(x-mu)/std。如果使用range方法,则数据标准为[0,1]的范围,即(x-min)/(max-min)。
#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:指定需要处理的新数据集

五、缺失数据的处理

#k临近替补法
library(RANN)
imputation_k <- preProcess(df,method = 'knnImpute')
pred_k <- predict(imputation_k, data)
summary(data)
六、变量转换
x1 <- c(570,100,340,380,400,820,120,910,990,960,960,940)
x2 <- c(12.8,10.9,8.8,13.6,12.8,8.3,11.4,11.5,12.5,13.7,9.6,11.4)
x3 <- c(2500,600,1000,1700,1600,2600,400,3300,3400,3600,3300,4000)
x4 <- c(270,10,10,140,140,60,10,60,180,390,80,100)
x5 <- c(25000,10000,9000,25000,25000,12000,16000,14000,18000,25000,12000,13000)
my_data <- data.frame(x1 = x1, x2 = x2, x3 = x3, x4 = x4, x5 = x5)
pca <- preProcess(my_data, pcaComp = 2, method = 'pca')
pred_pca <- predict(pca, newdata = my_data)
head(pred_pca)

介绍完有关数据预处理部分,我们再来看看数据分割的应用,而这部分又包含三方面的内容:
一、基于输出变量的分割
createDataPartition(y,
                    times = 1,
                    p = 0.5,
                    list = TRUE,
                    groups = min(5, length(y)))
y:指定数据集中的输出变量
times:指定创建的样本个数,默认简单随机抽取一组样本
p:指定数据集中用于训练集的比例
list:是否已列表或矩阵的形式存储随机抽取的索引号,默认为TRUE
groups:如果输出变量为数值型数据,则默认按分位数分组进行取样


二、使用有放回的方法进行抽样(BootStrap)
createResample(y, times = 10, list = TRUE)
y:指定数据集中的输出变量
times:指定抽样组数,默认为10组
list:是否已列表或矩阵的形式存储随机抽取的索引号,默认为TRUE
idx3<-createResample(iris[,5], times = 2, list = FALSE)

三、用于交叉验证的样本抽样
createFolds(y, k = 10,
            list = TRUE,
            returnTrain = FALSE)
createMultiFolds(y, k = 10, times = 5)
y:指定数据集中的输出变量
k:指定k重交叉验证的样本,默认为10重。每重的样本量为总量/k。
list:是否已列表或矩阵的形式存储随机抽取的索引号,默认为TRUE
returnTrain:是否返回抽样的真实值,默认返回样本的索引值
times:指定抽样组数,默认为5组(每组中都有10重抽样)
createFolds(iris[,5], k = 2, list = TRUE, returnTrain = FALSE)
createMultiFolds(iris[,5], k = 2, times = 3)



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-11-20 22:05:41
此帖仅作者可见
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-11-21 17:25:16
此帖仅作者可见
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群