Случайный лес переоснащается


15

Я пытаюсь использовать случайную лесную регрессию в scikits-learn. Проблема в том, что я получаю очень высокую ошибку теста:

train MSE, 4.64, test MSE: 252.25.

Вот как выглядят мои данные: (синий: реальные данные, зеленый: прогноз):

Лесная регрессия убрана

Я использую 90% для обучения и 10% для тестирования. Это код, который я использую после попытки нескольких комбинаций параметров:

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

Каковы возможные стратегии для улучшения моей подгонки? Есть ли что-то еще, что я могу сделать, чтобы извлечь основную модель? Мне кажется невероятным, что после стольких повторений одного и того же паттерна модель ведет себя так плохо с новыми данными. Есть ли у меня какая-то надежда на то, чтобы соответствовать этим данным?


Тренируете ли вы эту периодическую функцию с осью x в качестве входных данных и осью y в качестве метки для x <= 245, а затем тестируете для x> 245? Или я неправильно истолковал ваш сюжет?
— Rrenaud 12.12.12

вроде, на самом деле ось x является индексом наблюдения, всего имеется 300 наблюдений, поэтому начиная с 245, то есть тестовых данных, не используемых для обучения модели, вектор входных объектов состоит из целых чисел и имеет форму (300,2) и очень напоминает линейную функцию индекса наблюдения, поэтому я не добавил информацию об этом, чтобы не усложнять вопрос.
— Elyase

1
Возможно, вы захотите сначала удалить цикл (сезонную часть) из ваших данных (и тренд).
— Р. Прост

Вы смотрели на анализ временных рядов? Мне не ясно, что находится на твоей оси х, но мне кажется, что это периодическое издание. Проверьте здесь и дайте мне знать, если это поможет: otexts.org/fpp/7/5
— Брэм Ван Кэмп

Ответы:


21

Я думаю, что вы используете неправильный инструмент; если весь ваш X эквивалентен индексу, вы в основном имеете некоторую выборочную функцию и пытаетесь ее экстраполировать. Машинное обучение - это все о интерполяции истории, поэтому неудивительно, что в этом случае оно дает впечатляющий провал.е:р→р

Что вам нужно, это анализ временных рядов (то есть извлечение тренда, анализ спектра и авторегрессия или остальное HMM) или физика (то есть размышление о том, существует ли ODE, способное произвести такой выход, и попытка согласовать его параметры с помощью сохраняющихся величин).


разве машинное обучение о извлечении обобщенных моделей из данных? Если у вас есть определенный набор, который хорошо интерполирует данные, мы можем выбрать те из них, которые имеют лучшие свойства экстраполяции / обобщения, используя, например, перекрестную проверку. Что-то не так в моем понимании?
— Elyase

Экстраполяция отличается от обобщения - представьте, что вы являетесь участником следующего эксперимента: вы видите экран и видите красную и зеленую кнопку. Сначала на экране показывается видео комнаты, в которой вы находитесь, когда другой человек нажал зеленую кнопку для кота, льва и тигра, показанную на экране, а затем красный для волка и собаки, и таким образом собрал 5 вкусных печенек.

1
Теперь на экране отображается рыжий кот; Вы выполняете правильную обобщенную интерполяцию истории, нажимаете зеленую кнопку и получаете удар током вместо печенья. Почему это случилось? Потому что решение - это цикл (gggrrr), а изображения животных - просто обман. Вы сделали то же самое со своим лесом - заманили его в тупое воспроизведение своего тренировочного набора, скрывая при этом реальную информацию.

Хороший пример, но не вижу это так, как вы. В вашем примере у нас есть следующие данные: цель ( gили r) и 2 функции ( index(временные) и animal). Исходя из этих данных, я могу подобрать несколько моделей, которые могут придать больший или меньший вес характеристике 1 или 2 (или равны обеим). Перекрестная проверка (при условии достаточного количества данных) должна привести к модели с признаком 2 (животное), имеющим меньшее значение. Я вижу, что моя модель соответствует данным, но я все еще думаю, что я должен быть в состоянии извлечь модель, которая следует этому шаблону (потому что поведение не изменилось) с достаточно большим пространством модели.
— Elyase

1
Нет; даже если вы запрашиваете больше данных, экспериментатор все же может расширить обман животных и еще больше запутать схему, чтобы удержать ее не очевидной. То есть экстраполяция просто не может быть выполнена с обучением, потому что по определению требуется информация, которой нет в обучении - таким образом, вы должны либо применить некоторые предположения, либо собрать дополнительные данные, чтобы проблема стала интерполяцией.

9

Самая большая проблема заключается в том, что деревья регрессии (и алгоритмы на их основе, такие как случайные леса) предсказывают кусочно-постоянные функции, давая постоянное значение для входных данных, попадающих под каждый лист. Это означает, что при экстраполяции вне своей обучающей области они просто предсказывают то же значение, что и для ближайшей точки, в которой у них были обучающие данные. @mbq правильно, что есть специальные инструменты для изучения временных рядов, которые, вероятно, будут лучше, чем обычные методы машинного обучения. Тем не менее, случайные леса особенно плохи для этого примера, и там другие общие методы ML, вероятно, будут работать намного лучше, чем вы видите. SVM с нелинейными ядрами - одна из опций, которая приходит на ум. Поскольку ваша функция имеет периодическую структуру, это также предполагает работу в частотной области,


AFAIK SVM имеют ту же проблему случайного леса. Они не предсказывают хорошо вне пространства, где они были обучены. Вероятно, нейронная сеть будет лучшим решением
— Donbeo

Если данные лежат на кривой и ядро ​​имеет правильный вид, чтобы соответствовать этой кривой, то SVM сможет экстраполировать вдоль этой кривой. Если данные имеют линейный тренд, то линейный SVM будет соответствовать линии и будет экстраполирован вдоль этой линии. Более сложное ядро ​​может соответствовать и экстраполировать более сложные поведения. Это зависит от наличия правильного вида ядра. Это не делает SVM правильным инструментом для экстраполяции и прогнозирования TS, но делает их лучше, чем случайные леса.
— Даниэль Малер

3

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

Шаг 1. Создайте функцию минимизации MSE, используя оптимизацию NM. Пример можно увидеть здесь: http://glowingpython.blogspot.de/2011/05/curve-fitting-using-fmin.html

Шаг 2. В рамках этой функции минимизации цель состоит в том, чтобы уменьшить MSE. Чтобы сделать это, создайте десятикратное разделение данных, где новая модель будет изучена в 9 раз, а протестирована - в 10 раз. Этот процесс повторяется десять раз, чтобы получить MSE на каждом сгибе. Агрегированный MSE возвращается как результат цели.

Шаг 3. fmin в python сделает итерации за вас. Проверьте, какие гиперпараметры необходимы для точной настройки (n_estimators, max_features и т. Д.) И передайте их в fmin.

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


Да, это кажется переоснащением (что обычно не происходит в случайной регрессии леса, отсюда и вопрос). Теперь я заметил, что изменение параметров мало влияет на радиочастотные регрессоры. Теперь для перекрестной проверки требуется базовая модель, достаточно гибкая для оптимизации. Какие модели / алгоритмы ML вы рекомендуете для такого рода данных.
— Elyase

3

Некоторые предложения:

  1. Настройте свои параметры, используя подход скользящего окна (ваша модель должна быть оптимизирована для прогнозирования следующих значений во временных рядах, а не для прогнозирования значений среди предоставленных)
  2. Попробуйте другие модели (даже более простые, с правильным выбором функций и стратегиями разработки функций, могут оказаться более подходящими для вашей проблемы)
  3. Попробуйте изучить оптимальные преобразования целевой переменной (настройте это тоже, есть отрицательная линейная / экспоненциальная тенденция, вы можете оценить ее)
  4. Спектральный анализ возможно
  5. Максимумы / минимумы, кажется, одинаково разнесены. Узнайте, где им предоставляются ваши функции (без ввода оператора, сделайте так, чтобы алгоритм обнаружил это, чтобы устранить смещение) и добавьте это как функцию. Также разработайте функцию nearest maximum. Не знаю, это может сработать, а может и нет, вы можете знать, только если вы проверяете это :)

Но, как сказал Дэниел в своем ответе, случайный лес не будет работать для такого рода проблем, поскольку он не способен предсказать значения за пределами диапазона, наблюдаемого в выборке поезда. Параметры настройки и т. Д. Ни к чему не привели бы.
— Тим

1
Предложение № 2 @ Тим. И случайные леса не будут наивно работать с этими данными, но умное извлечение функций может заставить их работать.
— Firebug


0

Прочитав вышеуказанный пост, я хочу дать другой ответ.

Для моделей на основе дерева, таких как случайный лес, они не могут экстраполировать значение за пределы обучающего набора. Так что, я не думаю, что это более подходящая проблема, но неправильная стратегия моделирования.

Итак, что мы можем сделать для прогнозирования временных рядов с помощью древовидной модели?

Возможный способ состоит в том, чтобы объединить его с линейной регрессией: сначала определите тренд по временному ряду (или моделируйте тренд с помощью линейной регрессии), затем смоделируйте невязку с деревьями (невязки ограничены, поэтому модели дерева могут с этим справиться).

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


0

Если вы просто хотите предсказать в пределах графика, то простая рандомизация наблюдений до разделения набора данных должна решить проблему. Тогда это становится проблемой интерполяции от проблемы экстраполяции как показано.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.