[英]XGBOOST-Multi class prediction. Prediction matrix is set of probabilities for classes. How to perform confusion matrix
我已經使用 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
我想將它們轉換為有意義的標簽。 這是我無法做到的。 執行混淆矩陣
假設您的數據是這樣的:
train = data.frame(
Medical_History_23 = sample(1:5,2000,replace=TRUE),
Medical_Keyword_3 = sample(1:5,2000,replace=TRUE),
Medical_Keyword_15 = sample(1:5,2000,replace=TRUE),
BMI = rnorm(2000),
Wt = rnorm(2000),
Medical_History_4 = sample(1:5,2000,replace=TRUE),
Ins_Age = rnorm(2000),
Response = sample(1:8,2000,replace=TRUE))
我們進行訓練和測試:
library(xgboost)
label <- as.integer(train$Response)-1
train$Response <- NULL
n = nrow(train)
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]
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.pred = predict(xgb.fit,test.data,reshape = T)
您的預測如下所示,每一列是 1,2...8 的概率
> head(xgb.pred)
V1 V2 V3 V4 V5 V6 V7 V8
1 0.1254475 0.1252269 0.1249843 0.1247929 0.1246919 0.1248430 0.1248226 0.1251909
2 0.1255558 0.1249674 0.1250741 0.1250397 0.1249939 0.1247931 0.1248649 0.1247111
3 0.1249737 0.1250508 0.1249501 0.1250445 0.1250142 0.1249630 0.1249194 0.1250844
為了得到預測標簽,我們做
predicted_labels= factor(max.col(xgb.pred),levels=1:8)
obs_labels = factor(test.label,levels=1:8)
獲取混淆矩陣:
caret::confusionMatrix(obs_labels,predicted_labels)
當然,我的這個例子的准確性會很低,因為變量中沒有有用的信息,但代碼應該適合你。
與您的標簽順序相同。 例如:
0.415008187
是發生第 8 類等的概率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.