R - случайный лес - удалить новые уровни факторов, отсутствующие в обучающих данных.

Я отлаживаю код с помощью пакета Random Forest, практически не имея опыта работы с R.

Я достиг точки, когда, выполняя predict.randomForest, я получаю сообщение об ошибке:

Новые уровни факторов, отсутствующие в обучающих данных.

Поискав на этом сайте, я нашел причину и понял, что мне нужно удалить записи, которые вызывают проблему.

Как я могу изолировать (выяснить), какие столбцы/строки вызывают проблемы?


person DaroK    schedule 13.08.2015    source источник
comment
Начните с проверки того, какие столбцы в матрице предикторов являются факторами. Вы можете запустить str(X), где X — это матрица предикторов в ваших обучающих данных. Затем сделайте то же самое в своих тестовых данных и посмотрите на вывод, чтобы увидеть, какие из них имеют разные числа или наборы уровней.   -  person ulfelder    schedule 13.08.2015
comment
Спасибо! На объекте RF есть много вещей ... о какой матрице предикторов вы говорите? И как мне проверить, является ли каждый столбец фактором?   -  person DaroK    schedule 13.08.2015


Ответы (2)


Предположим, у вас есть train.data, который вы использовали для построения своей модели, test.data, для которого вы теперь хотите получить прогнозы, и факторная переменная factor.var1, тогда вы можете сделать:

levels(test.data$factor.var1) %in% levels(train.data$factor.var1)

Это создаст логический вектор, соответствующий уровням факторов в test.data, при этом записи «FALSE» будут уровнями факторов, которых не было в вашем train.data.

person Tchotchke    schedule 13.08.2015
comment
И если вы хотите сделать это сразу для нескольких переменных, вы можете использовать lapply(c([names of variables that are factors in quotes separated by commas]), levels(test.data[,x]) %in% levels(train.data[,x]) - person ulfelder; 13.08.2015
comment
Оба танки!!! У меня уже есть уровни по каждому фактору для переменной прогноза. Но что касается примера из обучения... он находится внутри сложного объекта RandomForest... откуда мне знать, как добраться до фактических данных? - person DaroK; 13.08.2015
comment
Если у вас нет доступа к обучающим данным, я не знаю, как вы могли бы получить эту информацию — R документация randomForest может показать вам, что возвращается с объектом RF, и я не вижу ничего, что могло бы помочь в получении уровней. Я бы предложил получить данные обучения, если вы можете. - person Tchotchke; 13.08.2015
comment
У меня есть вклад в обучение... но он может быть предварительно обработан (я не знаю, потому что я этого не сделал). Поэтому я подумал, что проверю тренировочный ВЫВОД. Эти выходные данные представляют собой файл .RData, содержащий этот объект. Разве этот объект не содержит где-то эти уровни? Я имею в виду: как еще метод process.randomforest узнает, что в обучении нет уровней? Спасибо! - person DaroK; 13.08.2015

Simple.solutions для этого будет состоять в том, чтобы связать тестовые данные с данными обучения и прогнозировать, а затем подмножить строку, которую вы хотите прогнозировать. Это сработало для меня.

person Mahi    schedule 04.11.2015