使用R将XGB编码值恢复为原始标签

时间:2018-12-14 13:49:34

标签: r encoding xgboost

我正在使用一个XGBoost模型,该模型处理.csv格式的一系列给定的每月数据文件。不出所料,我将类变量编码为序号。我的问题集中在一个月的数据上,这些数据已使用插入符号CreateDataPartition划分为0.7 / 0.3,这就是我遇到此问题的地方:

Some classes have a single record ( 1XXX ) and these will be selected for the sample

我知道我会提供一些不准确的信息,但是如果在其他/以后的每月数据摘录中发生此类事件的频率更高,则需要考虑此类。由于上述警告消息,我还知道测试集将不包含属于Class8类的数据。

在创建XGBoost模型之后,我将训练和测试数据集应用于预测结果。这可以按预期工作,但是由于缺少值,当我尝试以易于理解的方式输出测试数据集的结果时,就会出现问题。

问题:我正在尝试从已编码的XGBoost标签恢复原始标签值。我正在使用以下功能进行此操作:

RestoreXGBLabels <- function(data, predictions){
 #Replace XGBoost's labels with actual factor names (e.g. X1 <- ClassX)
  dataLabels <- unique(data$originalLabels)
  xgbLabels <- unique(data$xgbLabels)

  for(l in xgbLabels){
    predictions$Actual[which(predictions$Actual == xgbLabels[l])] <- dataLabels[l]
    predictions$Predicted[which(predictions$Predicted == xgbLabels[l])] <- dataLabels[l]
    print(paste0("Iteration ", xgbLabels[l], " : ", dataLabels[l], " Completed"))
  }
  return(predictions)
}

这将返回:

[1] "Iteration 0 : Class1 Completed"
[1] "Iteration 1 : Class2 Completed"
[1] "Iteration 2 : Class3 Completed"
[1] "Iteration 3 : Class4 Completed"
[1] "Iteration 4 : Class5 Completed"
[1] "Iteration 5 : Class6 Completed"
[1] "Iteration 6 : Class7 Completed"
[1] "Iteration 7 : Class8 Completed"
[1] "Iteration 8 : Class9 Completed"
[1] "Iteration 9 : Class10 Completed"
[1] "Iteration 10 : Class11 Completed"
[1] "Iteration 11 : Class12 Completed"

如您所见,for循环按预期运行,并按顺序匹配编码和原始数据标签。但是,当我打开数据以检查每个类的实例时(我希望看到一些“ Predicted: Class8”,但看不到“ Actual: Class8”),Class1和Class9都不会出现在输出类变量的唯一列表中,尽管XGB标签为“ 12”。

我不确定这是怎么回事,因为Class8根本不应该出现在测试数据结果($Actual)中,因为该集中没有记录包含“实际”标签第8类。

很抱歉,这很麻烦,感谢您的阅读。

0 个答案:

没有答案