boosting - En gbm multinomial dist, ¿cómo usar predict para obtener resultados categóricos?
boosting in r (1)
En la documentación de predict.gbm
, se menciona:
Si type = "response", entonces gbm vuelve a la misma escala que el resultado. Actualmente, el único efecto que esto tendrá es el retorno de las probabilidades para bernoulli y los conteos esperados para poisson. Para las otras distribuciones, "respuesta" y "enlace" devuelven lo mismo.
Lo que debes hacer, como sugiere Dominic, es elegir la respuesta con la probabilidad más alta de la matriz predBST
resultante, haciendo apply(.., 1, which.max)
en la salida del vector a partir de la predicción. Aquí hay una muestra de código con el conjunto de datos del iris
:
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
Esta pregunta ya tiene una respuesta aquí:
Mi respuesta es una variable categórica (algunos alfabetos), así que utilicé distribution = ''multinomial'' al hacer el modelo, y ahora quiero predecir la respuesta y obtener el resultado en términos de estos alfabetos, en lugar de la matriz de probabilidades.
Sin embargo, en predict(model, newdata, type=''response'')
, da probabilidades, lo mismo que el resultado de type=''link''
.
¿Hay alguna forma de obtener resultados categóricos?
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'')