Випадковий ліс витончений


15

Я намагаюся використовувати випадкову регресію лісу в науках-учах. Проблема в тому, що я отримую дійсно високу помилку тесту:

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)

Які можливі стратегії для поліпшення мого пристосування? Чи є ще щось, що я можу зробити, щоб витягти базову модель? Мені здається неймовірним, що після стількох повторень одного шаблону модель поводиться так погано з новими даними. Чи я взагалі маю надію намагатися відповідати цим даним?


Ви тренуєте цю періодичну функцію з віссю х як вхідною, а вісь y як міткою для х <= 245, а потім тестуєте на х> 245? Або я неправильно трактую ваш сюжет?
rrenaud

вид, власне вісь x є індексом спостереження, загалом налічується 300 спостережень, тому з 245, тобто тестові дані, не використовувані для навчання моделі, вектор вхідної функції складається з цілих чисел, має форму (300,2) і дуже нагадують лінійну функцію індексу спостереження, тому я не додав інформацію про це, щоб не ускладнювати питання.
elyase

1
Ви можете спочатку видалити цикл (сезонна частина) зі своїх даних (і тенденцію).
Р. Прост

Ви вивчили аналіз часових рядів? Мені не ясно, що на вашій осі x, але мені здається періодичним. Перевірте тут і повідомте мені, чи допоможе це: otexts.org/fpp/7/5
Брам Ван Кемп

Відповіді:


21

Я думаю, ви використовуєте неправильний інструмент; якщо весь ваш X еквівалентний індексу, ви в основному маєте якусь вибіркову функцію і намагаєтесь її екстраполювати. Машинне навчання - це все, що стосується інтерполяції історії, тому не дивно, що в цьому випадку вона набрала вражаючих невдач.f:RR

Вам потрібен аналіз часових рядів (тобто вилучення тенденції, аналіз спектру та авторегрес чи HMMing решти) або фізика (тобто, думка, чи є ОДЕ, який може виробляти такий вихід і намагається відповідати його параметрам за збереженими величинами).


хіба машинне навчання про вилучення узагальнених моделей з даних? Після того, як у когось є певний набір, який добре інтерполює дані, ми можемо вибрати ті, які мають кращі властивості екстраполяції / узагальнення, використовуючи, наприклад, перехресну перевірку. Чи є щось не так у моєму розумінні?
elyase

Екстраполяція відрізняється від узагальнення - уявіть, що ви є предметом наступного експерименту: ви бачите екран і маєте червону та зелену кнопку. Спочатку на екрані видно відео кімнати, де ви знаходитесь, де інша людина натискала зелену кнопку для кота, лева та тигра, показану на екрані, а потім червону для вовка та собаку, і таким чином зібрали 5 смачних печива.

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

Хороший приклад, але не бачите це так, як ви. У вашому прикладі ми маємо такі дані: ціль ( gабо r) та 2 функції ( index(тимчасові) та animal). З цих даних я міг би вмістити кілька моделей, які можуть надати більше або меншу вагу характеристикам 1 або 2 (або рівним обом). Перехресне підтвердження (за умови достатньої кількості даних) повинно прийти до моделі, де особливість 2 (тварина) має менше значення. Я можу бачити, що моя модель переповнює дані, але я все ще думаю, що я повинен мати можливість витягти модель, яка слідує цій схемі (оскільки поведінка не змінилася) з достатньо великим простором моделі.
elyase

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

9

Найбільша проблема полягає в тому, що дерева регресії (та алгоритми, засновані на них, як випадкові ліси) передбачають кусочно постійні функції, даючи постійне значення для входів, що потрапляють під кожен лист. Це означає, що при екстраполяції за межами навчального домену вони просто прогнозують те саме значення, що і для найближчої точки, в якій вони мали дані про навчання. @mbq правильно, що існують спеціалізовані інструменти для вивчення часових рядів, які, ймовірно, будуть кращими, ніж загальні методи машинного навчання. Однак випадкові ліси є особливо поганими для цього прикладу, і там, звичайно, інші загальні методи ML можуть бути набагато кращими, ніж те, що ви бачите. SVM з нелінійними ядрами - це один із варіантів, який спадає на думку. Оскільки ваша функція має періодичну структуру, це також пропонує працювати з частотною областю,


AFAIK SVM мають ту саму проблему випадкових лісів. Вони не прогнозують добре поза місцем, де пройшли навчання. Можливо, нейронна мережа виявиться кращим рішенням
Донбео,

Якщо дані лежать на кривій, а ядро ​​належним чином відповідає цій кривій, то SVM зможе екстраполювати вздовж цієї кривої. ed, якщо дані мають лінійну тенденцію, то лінійний SVM буде відповідати лінії, яка буде екстраполювати по цій лінії. Більш складне ядро ​​може підходити і екстраполювати складніші поведінки. Це залежить від правильного виду ядра. Що не робить SVM правильним інструментом для екстраполяції та прогнозування ТС, але це робить їх краще, ніж випадкові ліси.
Даніель Малер

3

Це приклад підручника для перевиконання даних, модель дуже добре працює на підготовлених даних, але згортається на будь-які нові тестові дані. Це одна з стратегій вирішення цього питання: Зробіть десятикратну перехресну валідацію навчальних даних для оптимізації параметрів.

Крок 1. Створіть функцію мінімізації MSE за допомогою оптимізації NM. Приклад можна побачити тут: http://glowingpython.blogspot.de/2011/05/curve-fitting-using-fmin.html

Крок 2. У рамках цієї функції мінімізації є мета зменшення ПДЧ. Для цього створіть десятикратний поділ даних, коли нова модель вивчається в 9 разів і перевіряється на 10-й складці. Цей процес повторюють десять разів, щоб отримати MSE на кожному складі. У результаті поставленої мети повертається агрегований МСЕ.

Крок 3. Fmin в python зробить ітерації для вас. Перевірте, які гіпер-параметри необхідні для точного налаштування (n_estimators, max_features тощо) та передайте їх fmin.

Результатом стануть найкращі гіпер-параметри, які зменшать можливість перенапруги.


Так, це, здається, є надто придатним (чого зазвичай не має випадкової регресії лісу, звідси і питання). Тепер я помітив, що зміна параметрів мало впливає на РЧ-регресори. Тепер перехресне підтвердження вимагає, щоб основна модель була достатньо гнучкою, щоб бути оптимізованою. Які типи моделей / алгоритму ML ви рекомендуєте для подібних даних.
elyase

3

Деякі пропозиції:

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

Але, як сказав Даніель у своїй відповіді, випадковий ліс не працюватиме для подібних проблем задумом, оскільки він не в змозі передбачити значення поза діапазоном, що спостерігається в пробі поїзда. Налаштування параметрів тощо не призведе нікуди.
Тім

1
Пропозиція №2 @Tim. І випадкові ліси не будуть наївно працювати над цими даними, але розумне вилучення можливостей може змусити його працювати.
Firebug


0

Прочитавши вище повідомлення, я хочу дати ще одну іншу відповідь.

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

Отже, що ми можемо зробити для прогнозування часових рядів за допомогою моделі дерева?

Можливий спосіб - це поєднувати його з лінійною регресією: спочатку зменшити часовий ряд (або тенденцію моделювання з лінійною регресією), потім моделювати залишок із деревами (залишки обмежені, щоб дерева дерева могли з цим впоратися).

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


0

Якщо ви просто хочете передбачити в межах графіка, то проблема рандомізації спостережень перед розділенням набору даних повинна вирішити проблему. Потім це стає проблемою інтерполяції від екстраполяції, як показано.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.