2015-04-05 19 views
9

Meine Antwort ist eine kategorische Variable (einige Alphabete), so dass ich bei der Erstellung des Modells distribution = 'multinomial' verwendet habe, und jetzt möchte ich die Antwort vorhersagen und die Ausgabe in Form dieser Alphabete anstelle der Wahrscheinlichkeitsmatrix erhalten.In gbm multinomial dist, wie verwendet man vorhersagen, um kategorische Ausgabe zu erhalten?

Jedoch in predict(model, newdata, type='response'), gibt es Wahrscheinlichkeiten, die gleiche wie das Ergebnis von type='link'.

Gibt es eine Möglichkeit, kategorische Ausgänge zu erhalten?

BST = gbm(V1~.,data=training,distribution='multinomial',n.trees=2000,interaction.depth=4,cv.folds=5,shrinkage=0.005) 

predBST = predict(BST,newdata=test,type='response') 
+0

Wie wäre die Antwort Kommissionierung mit der höchsten Wahrscheinlichkeit? –

Antwort

21

In predict.gbm Dokumentation wird erwähnt:

Wenn type = "response" GBM dann im gleichen Maßstab wie das Ergebnis wandelt zurück. Momentan ist der einzige Effekt, der dies hat, Wahrscheinlichkeiten für Bernoulli und erwartete Zählungen für Poisson. Für die andere Distributionen "Antwort" und "Link" dasselbe zurück.

Was Sie tun sollen, als Dominic schon sagt, ist die Antwort mit der höchsten Wahrscheinlichkeit aus der resultierenden predBST Matrix zu holen, von apply(.., 1, which.max) auf der Vektorausgabe von Vorhersage zu tun. Hier ist ein Codebeispiel mit dem iris-Datensatz:

library(gbm) 

data(iris) 

df <- iris[,-c(1)] # remove index 

df <- df[sample(nrow(df)),] # shuffle 

df.train <- df[1:100,] 
df.test <- df[101:150,] 

BST = gbm(Species~.,data=df.train, 
     distribution='multinomial', 
     n.trees=200, 
     interaction.depth=4, 
     #cv.folds=5, 
     shrinkage=0.005) 

predBST = predict(BST,n.trees=200, newdata=df.test,type='response') 

p.predBST <- apply(predBST, 1, which.max) 

> predBST[1:6,,] 
    setosa versicolor virginica 
[1,] 0.89010862 0.05501921 0.05487217 
[2,] 0.09370400 0.45616148 0.45013452 
[3,] 0.05476228 0.05968445 0.88555327 
[4,] 0.05452803 0.06006513 0.88540684 
[5,] 0.05393377 0.06735331 0.87871292 
[6,] 0.05416855 0.06548646 0.88034499 

> head(p.predBST) 
[1] 1 2 3 3 3 3 
+0

Das ist wirklich hilfreich, vielen Dank! – shavendy

+0

Wie wäre es mit der Annahme und/oder Upvoting der Antwort? :-) – desertnaut

+0

sry Ruf zu niedrig, um upvote, danke trotzdem :) – shavendy