我正在使用一个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类。
很抱歉,这很麻烦,感谢您的阅读。