У меня есть тренировочный набор, который выглядит как
Name Day Area X Y Month Night
ATTACK Monday LA -122.41 37.78 8 0
VEHICLE Saturday CHICAGO -1.67 3.15 2 0
MOUSE Monday TAIPEI -12.5 3.1 9 1
Name
- результат / зависимая переменная. Я преобразовал Name
, Area
и Day
в множители, но я не был уверен, должен ли я это делать для Month
и Night
, которые принимают только целые значения 1-12 и 0-1 соответственно.
Затем я попытался преобразовать это в model.matrix
, а затем запустить xgboost
m<-model.matrix(~Area + Day + X + Y + Month +Night, data = train)
num.class=length(levels(train$Name))
levels(train$Name)=1:num.class
y = as.matrix(as.integer(train$Name)-1)
param <- list("objective" = "multi:softprob",
"eval_metric" = "mlogloss", "nthread" = 4,
"num_class" = num.class, "max_depth" = 16, "eta" = 0.3)
bst <- xgboost(param=param, data=m, label=y, nrounds=min.merror.idx, verbose=0)
m.test <- model.matrix(~ Area + Day + X + Y + Month +Night, data =testDF)
pred <- predict(bst, m.test)
Однако head(pred)
просто показывает кучу вероятных чисел.
[1] 0.007272065 0.207123533 0.003311855 0.003352652
Переменная Name
может принимать 39 различных значений. nrow(test)
дает больше 80000, а nrow(test)
* 39 совпадает с length(pred)
. Я не уверен, что говорит pred
. Предполагая, что Name
упорядочен как [ATTACK, VEHICLE, ..]
, это говорит о том, что для 1-й строки prob(ATTACK)=.00727
, prob(VEHICLE)=.207
, ...? Или это говорит prob(ATTACK_1strow)=.00727
, _23 _, ...?
Предполагая, что pred
- первое, как я могу изменить pred
так, чтобы он выглядел так, как показано ниже?
prob.ATTACK prob.VEHICLE ...
1 .00727 .207 ...
...