【问题标题】: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)

【问题讨论】:

    标签: r dataframe classification k-means r-caret


    【解决方案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])
    

    【讨论】:

    • 非常详细的研究,让我手忙脚乱,谢谢
    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 2018-10-24
    • 2020-06-27
    • 2018-05-21
    • 2013-09-13
    • 2018-03-16
    • 2014-04-15
    • 2013-10-25
    相关资源
    最近更新 更多