2015-06-12 3 views
3

У меня есть 60.000 obs/40 Variable dataset, на котором я использовал Clara, в основном из-за ограничений памяти.предсказания knn с кластеризацией

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) 

Это вернуло стол с медоидами.

Теперь я пытаюсь использовать knn сделать прогноз, как это:

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

И это возвращает

'поезд' и 'класс' имеют разную длину

Может кто-то пролить свет на то, как его использовать?

+0

Используйте воспроизводимые данные. 'data (iris)' будет работать. Также не забудьте загрузить пакет 'class' и показать свой раздел, чтобы сделать это воспроизводимым. –

ответ

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 явно плохой выбор для числа кластеров в этом наборе данных, поэтому прогноз не хорошо. Надеемся, вы выберете правильное количество кластеров для своих данных, и вы можете проверить свою силу прогноза prediction.strength из пакета fpc или другими способами.

+1

Спасибо! :) Не могу проголосовать, но вы действительно помогли. :) Это происходит в цикле for, чтобы найти лучший размер кластера, 3 был просто упрощением. Однако я думал, что должен использовать все данные. –

+0

@RawData Добро пожаловать. –

Смежные вопросы