Я использую модель XGBoost, которая обрабатывает серию заданных ежемесячных файлов данных в формате .csv.Как и ожидалось, я кодирую переменные класса в последовательные числа.Мой вопрос сосредоточен на данных за один месяц, которые были разделены на 0,7 / 0,3 с использованием функции каретки CreateDataPartition
, где я и столкнулся с источником этой проблемы:
Some classes have a single record ( 1XXX ) and these will be selected for the sample
IЯ понимаю, что я буду вносить некоторую неточность, но мне нужно учитывать этот класс в том случае, если он чаще встречается в других / более поздних ежемесячных экстрактах данных.Благодаря приведенному выше предупреждающему сообщению я также знаю, что набор для тестирования не будет содержать данных, принадлежащих к классу Class8
.
После создания модели XGBoost я применяю наборы данных для обучения и тестированиядля прогнозирования результатов.Это работает как задумано, но проблема возникает, когда я пытаюсь вывести результаты набора данных понятным образом из-за пропущенного значения.
Проблема: Iпытаюсь восстановить исходные значения меток из закодированных меток 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.
Извиняюсь, если это бессвязно, и спасибо за чтение.