2016-06-17 4 views
-2

Ich bin verloren auf, wo auf diesem zu beginnen. Meine Zuweisung mit dem IRIS-Datensatz in R ist:Zuweisen von Klassenbezeichnungen mit dem nächsten Nachbar-Klassifizierer in R

Schreiben Sie ein Stück R-Code, der eine einzelne Klassenbezeichnung zu jedem der Observationen (vierdimensionalen), mit dem nächsten Nachbarn Klassifikator (NN) [1 ]. Verwenden Sie Teil A als Referenzdatenbank (Beobachtungen und Klassenbeschriftungen) und Teil B als Testgruppe. Angenommen, Sie kennen die Klassenbezeichnungen von Teil B nicht, finden Sie für jede Beobachtung aus Teil B die nächste Beobachtung aus Teil A und weisen Sie die Klassenbezeich- nung der Beobachtung aus Teil A zu.

Berechnen und Rückgabe pro Klassengenauigkeit (Anzahl der korrekt klassifizierten Beobachtungen pro Klasse dividiert durch die Gesamtzahl der Beobachtungen).

Der Code, den ich für den ersten Teil geschrieben haben, ist ganz einfach:

newData = iris 

evenRows.A <- newData[seq(2, nrow(newData), 2),] #SELECT EVEN ROWS 

oddRows.B <- newData[seq(1, nrow(newData), 2),] #SELECT ODD ROWS. This is the testing set 

Jede Hilfe zu den Klassen Etiketten bereits viel würde geschätzt.

EDIT: R formatierte Code

Antwort

1
newData = iris 
    evenRows.A <- newData[seq(2, nrow(newData), 2),] #SELECT EVEN ROWS 
    oddRows.B <- newData[seq(1, nrow(newData), 2),] #SELECT ODD ROWS. This is the testing set 

normalize <- function(x){return((x-min(x))/(max(x)-min(x)))}  #Define a function to normalize the data 
    evenRows.train<- as.data.frame(normalize(evenRows.A[,c(1,2,3,4)])) #Apply normalization to part A, the reference data 
    oddRows.test<- as.data.frame(normalize(oddRows.B[,c(1,2,3,4)])) #Apply normalization to part B, the test data 
    evenRows.train.target<-evenRows.A[,5] 

    require(class) #load required classes for nearest neighbor modelling 
    sqrt(150) 
    #rule of thumb: pick k= sqrt(observations), rounded to nearest odd integer. In this case, 12.247 --> k = 13 

    model1<-knn(train=evenRows.train, test=oddRows.test, cl=evenRows.train.target, k=13) 
    model1 

    #Display confusion matrix of results, to quantify correct versus incorrect classification 

    table(oddRows.test.target, model1) 

Ich habe einen Versuch k nächste Nachbarn Klassifizierung aufbringt und die Ergebnisse angezeigt als Konfusionsmatrix am Ende. Können Sie mir alle sagen, ob dies eine vernünftige Herangehensweise an die von mir gepostete Frage ist?