【发布时间】:2020-05-15 00:27:27
【问题描述】:
我使用 XGBOOST 进行多类标签预测。
这是一个多标签预测。即我的目标值包含 8 个类,并且我使用了大约 6 个功能,因为它们与目标值高度相关。
我已经创建了我的预测数据集。我已经使用 as.data.frame 从矩阵转换为数据帧
我想检查我的预测的准确性。我不确定自从 col 名称发生变化并且我的数据集中没有级别以来如何。我使用的所有数据类型都是整数和数字。
Response <- train$Response
label <- as.integer(train$Response)-1
train$Response <- NULL
train.index = sample(n,floor(0.75*n))
train.data = as.matrix(train[train.index,])
train.label = label[train.index]`
test.data = as.matrix(train[-train.index,])
test.label = label[-train.index]
View(train.label)
# Transform the two data sets into xgb.Matrix
xgb.train = xgb.DMatrix(data=train.data,label=train.label)
xgb.test = xgb.DMatrix(data=test.data,label=test.label)
params = list(
booster="gbtree",
eta=0.001,
max_depth=5,
gamma=3,
subsample=0.75,
colsample_bytree=1,
objective="multi:softprob",
eval_metric="mlogloss",
num_class=8)
xgb.fit <-xgb.train(
params=params,
data=xgb.train,
nrounds=10000,
nthreads=1,
early_stopping_rounds=10,
watchlist=list(val1=xgb.train,val2=xgb.test),
verbose=0
)
xgb.fit
xgb.pred = predict(xgb.fit,test.data,reshape = T)
class(xgb.pred)
xgb.pred = as.data.frame(xgb.pred)
"""
现在我得到了以下形式的预测概率,因为 8 个类我有 8 个概率。我不知道哪个概率属于哪个变量。
1 0.12233257 0.07373134 0.044682350 0.0810693502 0.06272415 0.134308174 0.066143863 0.415008187
我想将它们转换为有意义的标签。这是我做不到的。执行混淆矩阵
【问题讨论】:
-
什么是类(xgb.pred),为什么在 train.data 中包含响应变量?
-
我问是因为我无法使用一些模拟数据重现您的错误。你也可以做 dput(head(train,20)) 并粘贴输出吗?
-
dput(head(train,5)) 结构(list(Medical_History_23 = c(3L, 3L, 3L, 3L, 3L), Medical_Keyword_3 = c(0L, 0L, 0L, 0L, 0L) ,Medical_keyword_15 = C(0L,0L,0L,0L,0L),BMI = C(0.323007976,0.272287744,0.428780444,0.424045644,0.424045645),WT = C(0.148535565,0.131799163,0.288702929,0.205020921,0.234309623),Medical_History_4 = C( 1L, 1L, 2L, 2L, 2L), Ins_Age = c(0.641791045, 0.059701493, 0.029850746, 0.164179104, 0.417910448), 响应 = c(8L, 4L, 8L, 8L, (NA, = c)), row.names 5L), class= "data.frame") @StupidWolf
-
请编辑您的问题并包含您的数据样本(1 行就足够了)和输出。在评论部分很难导航。
-
@StupidWolf 我刚刚更新了问题。我在混淆矩阵方面遇到了麻烦。我有 8 个课程,所以 xgb.pred 给了我 8 个概率。我不确定哪个概率属于哪个类别。如果我可以解码并将最大概率分配给单个类。我可以继续做混淆矩阵。可能是我错过了一两步。你能帮忙吗?提前致谢
标签: r machine-learning xgboost