Восстановление значений в кодировке XGB до исходных меток с помощью R - PullRequest
0 голосов
/ 14 декабря 2018

Я использую модель 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.

Извиняюсь, если это бессвязно, и спасибо за чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...