2015-04-17 19 views
9

TrainingssatzR - Wie ändert man den Namen der Faktorstufen?

trainSample <- cbind(data[1:980,1], data[1:980,2]) cl <- 
factor(c(data[1:980,3])) 

Test gesetzt

testSample <- data(data[981:1485,1], data[981:1485,2]) 
cl.test <- clknn 

Vorhersage

k <- knn(trainSample, testSample, cl, k = 5) 

Ausgang

< k 

    [1] 2 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 1 2 2 1 1 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 
[60] 2 2 2 2 1 2 2 2 2 1 2 2 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 1 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 2 2 
[119] 2 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 1 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 2 1 2 1 2 2 2 2 
[178] 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 
[237] 2 2 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 2 2 2 
[296] 2 2 2 1 2 1 2 1 1 1 2 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 1 2 1 1 2 2 2 1 1 2 
[355] 1 2 1 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 
[414] 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
[473] 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 1 2 2 1 2 2 1 2 1 2 2 1 2 2 2 2 2 
Levels: 1 2 

ich will "c" und "nicht-c" (wie in meiner ursprünglichen data.csv) anstelle von 1 und 2 (im auch nicht sicher, welche Zahl darstellen soll, welche)

Kann jemand helfen ?

Antwort

16

Es ist sehr einfach, die Faktorstufen zu ändern, und auch bekommen nicht verwirrt darüber, welche ist die:

Beispieldaten:

> a <- factor(rep(c(1,2,1),50)) 
> a 
    [1] 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 
[75] 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 
[149] 2 1 
Levels: 1 2 

#this will help later as a verification 
#this counts the instances for 1 and 2 
> table(a) 
a 
    1 2 
100 50 

So wie Sie oben sehen können, ist die Reihenfolge der Ebenen 1 zuerst und 2 Sekunde. Wenn Sie die Ebenen ändern (siehe unten) bleibt die Reihenfolge die gleiche:

#the assignment function levels can be used to change the levels 
#the order will remain the same i.e. 'c' for '1' and 'not-c' for '2' 
levels(a) <- c('c', 'not-c') 

> a 
    [1] c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  
[25] c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  
[49] c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  
[73] c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  
[97] c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  
[121] c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  c  not-c c  
[145] c  not-c c  c  not-c c  
Levels: c not-c 

Und dies ist die Prüfung:

> table(a) 
a 
    c not-c 
    100 50 
+0

genial, danke nochmal LyzandeR. :) –

+0

Sie haben eine Frage zu mir über ensemble beantwortet, ich kämpfe um einen anderen Klassifikator zu finden, und auch, wie ich die Ergebnisse von jedem Klassifizierer Faktor, dh wie faktoriere ich dies "h_results $ TrueLabel == nb_results $ Prediction" oder macht der Klassifikator das für mich? Tut mir leid. –

+0

Kein Problem, gerne helfen :). Für den Kombinationsklassifikator meinst du? Wie gesagt, du kannst verwenden, was immer du magst. Ich weiß nicht, warum Sie 'h_results $ TrueLabel == nb_results $ Prediction' (vielleicht um später 'table' zu ​​verwenden) einbeziehen möchten, aber unter der Annahme, dass ihre Längen gleich sind, wickeln Sie sie einfach in eine' factor' Funktion und das war's . – LyzandeR

0

Sie können etwas tun:

x<-factor(c(1,1,2,3,1), labels=c("group1","group2","group3")) 
> x 
[1] group1 group1 group2 group3 group1 
Levels: group1 group2 group3 

Oder wie folgt aus:

train <- read.csv("train.csv", header=TRUE)[1:1000, ] 
labels <- train[,1] 
+0

Diese Art von Arbeiten, aber woher weiß ich, welche aus meinem ursprünglichen Datensatz ist? Ich kann die Namen tauschen und das Ergebnis wird umgekehrt, aber die Genauigkeit bleibt gleich, so dass es offensichtlich nicht richtig ist? Danke –

+0

Ich kann nicht Ihren zweiten Teil zur Arbeit bekommen, ich verstehe es nicht wirklich, ich habe versucht, dieses newPred <- knn (Zug, Traintest, Etiketten, k = 5) bekommen diesen Fehler Fehler in knn (Zug, Traintest, Etiketten, k = 5): NA/NaN/Inf im fremden Funktionsaufruf (arg 6) –

4

indizierte Zuweisung funktioniert auch. Zum Beispiel, hier ist ein Faktor:

> a <- factor(sample(letters[1:5],100,replace=T)) 
> a 
    [1] a d d d d a d d a b a b e a c d a c a a b e e d a e d e e a a c a a a b a 
[38] b b a a e b d b c a a a b e b c e d d b b c c a b a d c b c c d e b d e d 
[75] a a a b e e c b c b c c d d e e d a e e e b c e b e 
Levels: a b c d e 

Jetzt wollen wir ein paar dieser Ebenen neue Namen geben:

> levels(a)[c(2,4)] <- c('y','z') 
> a 
    [1] a z z z z a z z a y a y e a c z a c a a y e e z a e z e e a a c a a a y a 
[38] y y a a e y z y c a a a y e y c e z z y y c c a y a z c y c c z e y z e z 
[75] a a a y e e c y c y c c z z e e z a e e e y c e y e 
Levels: a y c z e 
1

Verwendung forcats Paket.

a <- factor(rep(c(1,2,1),50)) 

fct_collapse(a,c = c("1"),`not-c` = c("2")) 
+1

Nice. Sie brauchen die 'c()' s nicht für ein Item: 'fct_collapse (a, c =" 1 ", \ 'not-c \' = "2") ' – jtr13