在 R 代码中使用“caret”包中的 preProcess 的目的是啥?

Posted

技术标签:

【中文标题】在 R 代码中使用“caret”包中的 preProcess 的目的是啥?【英文标题】:Which are the purposes of using preProcess from "caret" package in R code?在 R 代码中使用“caret”包中的 preProcess 的目的是什么? 【发布时间】:2020-07-09 03:06:21 【问题描述】:

“大家好。当我看到他们使用 K Nearest Network 对组进行分类时。我不知道他们为什么只使用 preProcess 来标准化数据。这是代码”

preProc <-  preProcess(UB2[3:12])
UBn <- predict(preProc, UB2)
set.seed(12)
UBKm <- kmeans(UBn[3:12], centers = 5, iter.max = 1000)

【问题讨论】:

【参考方案1】:

您使用 preProcess 来缩放和居中变量,基本上是为了让它们在相同的范围内。

在列具有不同范围的情况下,如果直接应用kmeans,它将主要形成集群,以最小化具有较高值的​​列的方差。

例如我们模拟三个可以在不同尺度的变量上分离的集群:

library(caret)
library(MASS)
library(rgl)
set.seed(111)

Sigma <- matrix(c(10,1,1,1,1,1,1,1),3,3)
X = rbind(mvrnorm(n=200,c(50,1,1), Sigma),
mvrnorm(n=200,c(20,5,1), Sigma),
mvrnorm(n=200,c(20,2.5,2.5), Sigma))
X = data.frame(X,cluster=factor(rep(1:3,each=200)))
plot3d(X[,1:3],col=factor(rep(1:3,each=200)))

并不是说 X1 在 0-60 的范围内,而 X2,X3 在 -1 到 10 左右..

如果我们在没有缩放的情况下做 kmeans:

clus = kmeans(X[,1:3],3)
COLS = heat.colors(3)
plot3d(X[,1:3],col=COLS[clus$cluster])

它主要尝试使用 X1 进行拆分,忽略 X2,X3 导致原始集群 1 中的拆分。

所以我们扩展和集群:

clus = kmeans(predict(preProcess(X[,1:3]),X[,1:3]),3)
COLS = heat.colors(3)
plot3d(X[,1:3],col=COLS[clus$cluster])

【讨论】:

非常详细的研究,让我手忙脚乱,谢谢

以上是关于在 R 代码中使用“caret”包中的 preProcess 的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用caret包的getModelInfo函数获取caret包中提供的模型算法列表

R语言计算F1评估指标实战:F1 score使用R中caret包中的confusionMatrix()函数为给定的logistic回归模型计算F1得分(和其他指标)

R语言使用caret包中的createFolds函数对机器学习数据集进行交叉验证抽样返回的样本列表长度为k个

R语言使用caret包中的createResample函数进行机器学习数据集采样数据集有放回的采样(bootstrapping)

r3.4.1的caret包中没有traincontrol函数,怎么回事

R语言使用caret包中的createDataPartition函数进行机器学习数据集划分划分训练集和测试集并指定训练测试比例