caret 包是相当的强大,除了上文说的能抽样之外,还能补充缺失值,对数据标准化等预处理。
一句话,caret包 你值得拥有。许多R使用者对该包相见恨晚,这里简单介绍下,但印象一定要留下。
preProcess(X,method=c("center","scale"),thresh=0.95,pacComp=NULL,na.remove=TRUE,k=5,knnSummary=mean,outcome=NULL....)
其中,method 指定数据标准化的方法,默认为“center”,"scale"。center表示预测变量值减去均值。
sacle表示预测变量值除以标准差。默认标准化的方法就是(x-mean)/sd。如果使用range方法,则
数据标准为[0,1]的范围,即(x-min)/(max-min).
na.remove 默认剔除缺失值数据
K 如果使用K个近邻方法填补缺失值的化,可以制定具体的k值,默认为5.
knnSummary 使用k个近邻的均值替代缺失值。
> yy
x1 x2
1 1 10
2 3 20
3 5 30
4 7 40
5 9 50
6 11 60
7 12 70
8 12 80
> predict(preProcess(yy),yy)#标准化
x1 x2
1 -1.5443706 -1.4288690
2 -1.0691797 -1.0206207
3 -0.5939887 -0.6123724
4 -0.1187977 -0.2041241
5 0.3563932 0.2041241
6 0.8315842 0.6123724
7 1.0691797 1.0206207
8 1.0691797 1.4288690
> predict(preProcess(yy,method="range"),yy)#化为0-1之间(x-min(x))/(max(x)-min(x))
x1 x2
1 0.0000000 0.0000000
2 0.1818182 0.1428571
3 0.3636364 0.2857143
4 0.5454545 0.4285714
5 0.7272727 0.5714286
6 0.9090909 0.7142857
7 1.0000000 0.8571429
8 1.0000000 1.0000000
注意观察下面
> predict(preProcess(yy),yy)
x1 x2
1 -1.5443706 -1.4288690
2 -1.0691797 -1.0206207
3 -0.5939887 -0.6123724
4 -0.1187977 -0.2041241
5 0.3563932 0.2041241
6 0.8315842 0.6123724
7 1.0691797 1.0206207
8 1.0691797 1.4288690
> predict(preProcess(yy,method="scale"),yy)
x1 x2
1 0.2375955 0.4082483
2 0.7127864 0.8164966
3 1.1879774 1.2247449
4 1.6631684 1.6329932
5 2.1383593 2.0412415
6 2.6135503 2.4494897
7 2.8511458 2.8577380
8 2.8511458 3.2659863
为什么加了method="scale“ 结果就变了呢?
因为默认是center 和scale,即先center 化,然后再除以sd(标准差)。
如果单写method="scale",表示只除以标准差。