簡體   English   中英

在 R 代碼中使用“caret”包中的 preProcess 的目的是什么?

[英]Which are the purposes of using preProcess from "caret" package in R code?

“大家好,當我看到他們使用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)

你使用 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])

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM