KNN预测与聚类

3

我有一个包含60,000个观测值和40个变量的数据集,由于内存限制,我使用了Clara进行处理。

library(cluster)    
library(dplyr)    

mutate(kddnew, Att=ifelse(Class=="normal","normal", "attack"))
ds <- dat[,c(-20,-21,-40)

clus <- clara(ds, 3, samples=500, sampsize=100, pamLike=TRUE)

这个命令返回了一个带有medoids的表格。

现在我正在尝试使用knn进行预测,如下所示:

medoidz <- clus$medoids
r <- knn(medoidz, ds, cl=ds$targetvariable)

这个函数返回:

'train'和'class'长度不同

有人可以讲解一下如何使用它吗?


请使用可重复的数据。data(iris) 可以工作。同时记得加载 class 包并展示你的分区,以使其可重复。 - Hack-R
1个回答

4

这个可以正常工作:

require(cluster)
require(class)

data(iris)
ds   <- iris
ds$y <- as.numeric(ds$Species)
ds$Species <- NULL

idx      <- rbinom(nrow(ds), 2, .6)
training <- ds[idx,]
testing  <- ds[-idx,]
x        <- training
y        <- training$y
x1       <- testing
y1       <- testing$y

clus <- clara(x, 3, samples = 1, sampsize = nrow(x), pamLike=TRUE)

knn(train = x, test = x1, cl = clus$clustering, k = 10, l = 0, prob = T, use.all = T)

虽然在这个数据集中3明显不是一个好的聚类数,所以预测结果并不准确。希望您能选择正确的聚类数量,并使用fpc包中的prediction.strength或其他方式来测试您的预测强度。


1
谢谢! :) 不能投票,但你真的帮了我。 :) 这将进入一个for循环来查找最佳的聚类大小,3只是一个简化。然而,我认为我必须使用所有数据。 - Raw Data

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接