XGBOOST-多类别预测。预测矩阵是一组类别的概率。如何执行混淆矩阵

我已经使用XGBOOST进行多类别标签预测。

这是一个多标签预测。即我的目标值包含8个类别,我使用了大约6个特征,因为它们与目标值高度相关。

我已经创建了我的预测数据集。我已经使用as.data.frame将其从矩阵转换为数据框。

我想检查我的预测的准确性。我不确定如何做,因为列名会改变,并且我的数据集中没有级别。我使用的所有数据类型都是整数和数值类型。

 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)-1train$Response <- NULLn = 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到8的概率

> head(xgb.pred)         V1        V2        V3        V4        V5        V6        V7        V81 0.1254475 0.1252269 0.1249843 0.1247929 0.1246919 0.1248430 0.1248226 0.12519092 0.1255558 0.1249674 0.1250741 0.1250397 0.1249939 0.1247931 0.1248649 0.12471113 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)

当然,这个例子中的准确性会很低,因为变量中没有有用的信息,但代码应该对你有用。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注