Я пытаюсь делать прогнозы, используя модель случайного леса в R.
Однако я получаю ошибки, так как некоторые факторы имеют разные значения в тестовом наборе, чем в обучающем наборе. Например, фактор Cat_2
имеет значения 34, 68, 76
и т. Д. В тестовом наборе, которые не отображаются в обучающем наборе. К сожалению, я не могу контролировать набор тестов ... Я должен использовать его как есть.
Моим единственным обходным решением было преобразование проблемных факторов обратно в числовые значения, используя as.numeric()
. Это работает, но я не очень доволен, так как эти значения являются кодами, которые не имеют числового смысла ...
Как вы думаете, было бы другое решение, чтобы сбросить новые значения из тестового набора? Но без удаления всех других значений факторов (скажем, значений 1, 2, 14, 32
и т. Д.), Которые используются как для обучения, так и для тестирования, и содержат информацию, потенциально полезную для прогнозов.
источник
Ответы:
Если в тестовом наборе много этих точек с новыми значениями коэффициентов, то я не уверен, что лучший подход. Если это всего лишь несколько моментов, вы можете избежать неприятностей, таких как обработка ошибочных уровней факторов как пропущенных данных и навязывание их любым подходящим способом. Реализация R имеет несколько способов расчета отсутствующих данных, вам просто нужно установить эти уровни факторов на NA, чтобы указать, что они отсутствуют.
источник
Король и Бонуа , этот фрагмент может быть полезен для согласования уровней:
Он также печатает, какие атрибуты изменены. Я не нашел хороший способ написать это более элегантно (с ldply или что-то). Любые советы приветствуются.
источник
Вот код, который я написал и который адресован ответу @ King выше. Исправлена ошибка:
источник
Тест и тренировочный набор должны быть объединены в один набор, а затем изменить уровни тренировочного набора. Мои коды:
Это работает в любых случаях, когда количество уровней в тесте больше или меньше, чем обучение.
источник
У меня паршивый обходной путь, когда я использую randomForest в R. Это, вероятно, не теоретически нормально, но оно работает.
или наоборот. По сути, он просто сообщает R, что это допустимое значение, просто есть 0 случаев; так что перестаньте меня беспокоить по поводу ошибки.
Я не достаточно умен, чтобы кодировать его так, чтобы он автоматически выполнял действие для всех категориальных функций. Отправьте мне код, если вы знаете, как ...
источник
Я уверен, что вы уже подумали бы об этом, если бы это было так, но если набор тестов имеет фактические значения, и вы используете набор тестов для перекрестной проверки, то разделите фрейм данных на обучающие и тестовые фреймы данных. где эти два фактора сбалансированы, вы избежите вашей проблемы. Этот метод широко известен как стратифицированная перекрестная проверка .
источник