我有一个看起来像的训练集
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。
然后我尝试将其转换为 amodel.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, ..]
,它表示对于第一行prob(ATTACK)=.00727
, prob(VEHICLE)=.207
, ...?还是说,,,prob(ATTACK_1strow)=.00727
... prob(ATTACK_2ndrow)=.207
?
假设pred
是前者,那么我该如何修改pred
使其如下所示?
prob.ATTACK prob.VEHICLE ...
1 .00727 .207 ...
...