caret包(Classification and Regression Training)是一系列函数的集合,它试图对建立预测模型的过程进行流程化。本系列将就数据预处理、特征选择、抽样、模型调参等进行介绍学习。html
本文将就caret包中的数据预处理部分进行介绍学习。主要包括如下函数:model.matrix(),dummyVars(),nearZeroVar(),findCorrelation(),findLinearCombos(),preProcess(),classDist(),featurePlot()git
建立虚拟变量的两个主要函数:model.matrix , dummyVarsgithub
model.matrix(object, data = environment(object), contrasts.arg = NULL, xlev = NULL, ...) bootstrap
其实,主要参数为object,一个公式;data就是引用的数据咯函数
这里,式子中 ~后能够理解为要展开的数据(其实也能够有只有一个因子水平的数据,从而便于在展开数据的同时,cbind其余列的数据,从而获得接下来分析用到的数据),结果返回的是matrix类型学习
如上所示,有3个因子水平的a被展开成2列,其余一列被省掉,减小了多重共线性的困扰。可是,没搞明白,intercept是怎么得出来的?????spa
dummyVars(formula, data, sep = ".", levelsOnly = FALSE, fullRank = FALSE, ...) .net
其用法跟model.matrix差很少,主要参数依旧是formula和data翻译
不一样的是3d
能够看出两点不一样了:1. 须要调用predict函数才能显示矩阵 2. 是对全部level进行展开
此外,dummyVars还能够生成交互的展开
固然,还能够经过 sep = ";" 将a;1的形式, levelsOnly = TRUE 将a.1改为1, 但a.1:b.1改为1:1 不行 报错 情理之中,由于这样1:1的话就没有辨识度了,只有level是惟一不重复的,才能够如愿。
注意:由于dummyVars展开的没有截距(intercept),而且每一个因子水平都有对应的虚拟变量,因此这些参数对于某些模型多是不可用的,例如lm等
识别清除近似零方差的特征变量的缘由:
识别此种特征变量的方法:
若是频数比率大于预先设定的阈值,而且惟一值的比例小于一个阈值,咱们能够认为这个特征变量为近似零方差。
caret包中提供了函数:nearZeroVar()
nearZeroVar(x, freqCut = 95/5, uniqueCut = 10, saveMetrics = FALSE, names = FALSE, foreach = FALSE, allowParallel = TRUE)
参数解释:
返回的参数解释:
freqRatio 频数比率 percentUnique 惟一值比率 zeroVar 是否仅有一个值 nzv 是不是近零方差特征
清除近零方差特征变量:
有些模型依赖与相关的特征变量(像偏最小二乘法(pls,partial least-squares regression)),而有些模型可以得益于变量之间的相关性减小。
findCorrelation(x, cutoff = 0.9, verbose = FALSE, names = FALSE, exact = ncol(x) < 100)
参数解释:
函数findLinearCombos使用QR分解来枚举线性组合的集合(若是存在的话)
findLinearCombos(x) 只有一个参数x,x是一个数值矩阵
返回一个列表,含有两项:
preProcess函数能够对特征变量施行不少操做,包括中心化和标准化。preProcess函数每次操做都估计所须要的参数,而且由predict.preProcess 应用于指定的数据集。
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, ...)
x 是一个矩阵或数据框。非数值型的变量是被容许的,可是将被忽略
method 处理类型的字符串向量。常见的几种以下:
这些方法的运行顺序是:zero-variance filter, near-zero variance filter, correlation filter, Box-Cox/Yeo-Johnson/exponential transformation, centering, scaling, range, imputation, PCA, ICA then spatial sign.
thresh PCA的累积方差比
其实,preProcess的功能很强大,听说还能够对数据进行插补缺失值(K近邻,袋装树bagged tree)
笔者还未深刻研究,在此不一一叙述
classDist 函数计算训练集的类别质心和协方差矩阵,从而肯定样本与每一个类别质心的马氏距离。
classDist(x, y, groups = 5, pca = FALSE, keep = NULL, ...)
predict(object, newdata, trans = log, ...) 默认的距离取对数,可是这能够经过predict.classDist的参数trans来改变
可见,上图关于对角线对称,且将test分为两类,蓝色一类,红色一类。
caret包中的可视化是对lattice包做图的集成。主要函数是featurePlot
featurePlot(x, y, plot = “strip”, labels = c("Feature", ""), ...)
x 为一个连续数值的矩阵或data frame
y 是一个代表类别的因子变量
plot 是做图的种类。对于分类有: box, strip, density, pairs,ellipse,对于回归有pairs,scatter。默认状况下,当y为因子,则为strip,不然为scatter (注意:若用ellipse做图,需加载ellipse包)
还能够设定其余的可传递给lattice的选项。常见的有
参考: