R 用核主成分分析法分离圆

R 用核主成分分析法分离圆,r,pca,R,Pca,我试图重现一种使用核PCA的方法。目标是从两个同心圆中分离出点 创建数据: circle <- data.frame(radius = rep(c(0, 1), 500) + rnorm(1000, sd = 0.05), phi = runif(1000, 0, 2 * pi), group = rep(c("A", "B"), 500)) # circle <- transform(circle,

我试图重现一种使用核PCA的方法。目标是从两个同心圆中分离出点

创建数据:

circle <- data.frame(radius = rep(c(0, 1), 500) + rnorm(1000, sd = 0.05),
                     phi = runif(1000, 0, 2 * pi),
                     group = rep(c("A", "B"), 500))
#
circle <- transform(circle,
                    x = radius * cos(phi),
                    y = radius * sin(phi),
                    z = rnorm(length(radius))) %>% select(group, x, y, z)

TFRAC = 0.75
#
train <- sample(1:1000, TFRAC * 1000)

circle.train <- circle[train,]
circle.test <- circle[-train,]

> head(circle.train)
    group         x          y        z
491     A -0.034216 -0.0312062  0.70780
389     A  0.052616  0.0059919  1.05942
178     B -0.987276 -0.3322542  0.75297
472     B -0.808646  0.3962935 -0.17829
473     A -0.032227  0.0027470  0.66955
346     B  0.894957  0.3381633  1.29191

circle尝试sigma=20。我想你会得到你想要的答案。kernlab中的sigma实际上是rbf核的gamma,因此它们是负相关的

library(kernlab)

circle.kpca <- kpca(~ ., data = circle.train[, -1], kernel = "rbfdot", kpar = list(sigma = 10), features = 1)