Як боротися з ієрархічними / вкладеними даними в машинному навчанні


29

Я поясню свою проблему на прикладі. Припустимо, ви хочете передбачити дохід фізичної особи за деякими ознаками: {Вік, стать, країна, регіон, місто}. У вас такий навчальний набір даних

train <- data.frame(CountryID=c(1,1,1,1, 2,2,2,2, 3,3,3,3), 
             RegionID=c(1,1,1,2, 3,3,4,4, 5,5,5,5), 
             CityID=c(1,1,2,3, 4,5,6,6, 7,7,7,8), 
             Age=c(23,48,62,63, 25,41,45,19, 37,41,31,50), 
             Gender=factor(c("M","F","M","F", "M","F","M","F", "F","F","F","M")),
             Income=c(31,42,71,65, 50,51,101,38, 47,50,55,23))
train
   CountryID RegionID CityID Age Gender Income
1          1        1      1  23      M     31
2          1        1      1  48      F     42
3          1        1      2  62      M     71
4          1        2      3  63      F     65
5          2        3      4  25      M     50
6          2        3      5  41      F     51
7          2        4      6  45      M    101
8          2        4      6  19      F     38
9          3        5      7  37      F     47
10         3        5      7  41      F     50
11         3        5      7  31      F     55
12         3        5      8  50      M     23

Тепер припустимо, що я хочу передбачити дохід нової людини, яка проживає в місті 7. Мій навчальний набір має колосальні 3 вибірки з людьми в місті 7 (припустимо, це багато), тому я, ймовірно, можу використовувати середній дохід у місті 7 до передбачити дохід цієї нової особи.

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

Трохи екстраполюючи цю ідею, я можу перетворити мій навчальний набір як

    Age Gender CountrySamples CountryIncome RegionSamples RegionIncome CitySamples CityIncome
 1:  23      M              4         52.25             3        48.00           2    36.5000
 2:  48      F              4         52.25             3        48.00           2    36.5000
 3:  62      M              4         52.25             3        48.00           1    71.0000
 4:  63      F              4         52.25             1        65.00           1    65.0000
 5:  25      M              4         60.00             2        50.50           1    50.0000
 6:  41      F              4         60.00             2        50.50           1    51.0000
 7:  45      M              4         60.00             2        69.50           2    69.5000
 8:  19      F              4         60.00             2        69.50           2    69.5000
 9:  37      F              4         43.75             4        43.75           3    50.6667
10:  41      F              4         43.75             4        43.75           3    50.6667
11:  31      F              4         43.75             4        43.75           3    50.6667
12:  50      M              4         43.75             4        43.75           1    23.0000

Таким чином, мета полягає в тому, щоб якось поєднати середній показник CityIncome, RegionIncome та CountryIncome, використовуючи кількість навчальних зразків для кожного, щоб надати вагу / достовірність кожному значенню. (В ідеалі, все ще включаючи інформацію про вік і стать.)

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

ОНОВЛЕННЯ

Для всіх, хто бажає взяти на себе цю проблему, я створив зразкові дані для тестування запропонованого тут рішення .


7
Ієрархічні байєсові моделі дуже природно використовувати структуру, як описано у ваших даних. Перегляньте класичний приклад моделювання радонового забруднення mc-stan.org/documentation/case-studies/radon.html
Владислав Довгалець

Погляньте на цей виклик навчального посібника Kaggle: Початок роботи: kaggle.com/c/titanic . У ньому йдеться про подібну проблему, тобто передбачити, чи пережила людина катастрофу «Титанік», надаючи різні атрибути про людину, такі як гендер, тип квитка тощо. Найкращі рішення для цього використовують передові методи, такі як підвищення градієнта та ієрархічні байєсові моделі тощо
Віхарі Піратла

6
@VihariPiratla Дякую за вклад, але я знайомий із набором даних та викликом Titanic, і я не бачу, як це стосується вкладеної проблеми, про яку я запитав.
Бен

Використання регуляризації L2 / L1 для тих моделей, наприклад, логістична регресія / SVM, які її виконують, має допомогти (ієрархічні проміжки чоловіків бідних людей). Ви ефективно штрафуєте коефіцієнти, тому, якщо коефіцієнт суттєво (тобто за великою кількістю даних) не поліпшить помилку, він буде встановлений близько 1 і ви використовуєте кросвалідизацію, щоб визначити рівень покарання
seanv507

Ви також хочете мати можливість передбачити дохід людини, яка проживає в місті 9?
jan-glx

Відповіді:


14

Я певний час замислювався над цією проблемою, натхнившись наступними питаннями на цьому сайті.

Дозвольте спочатку представити моделі змішаних ефектів для ієрархічних / вкладених даних та почати з простої дворівневої моделі (зразки, вкладені у містах). Для -го зразка в i -му місті записуємо результат y i j як функцію коваріатів x i j (список змінних, включаючи стать та вік), y i j = f ( x i j ) + u i + ϵ i j , де u i випадковий перехоплення для кожного міста, j = 1jiуijхij

уij=f(хij)+уi+ϵij,
уi . Якщо ми припустимо , U I іj=1,,нiуi слідують нормальні розподілу із середнім значенням 0 і дисперсіями σ 2 U і сг 2 , емпіричний байесовский (EB)оцінка функції і я це U я =ϵijσу2σ2уiде ˉ y i. =1
у^i=σу2σу2+σ2/нi(у¯i.-f(х¯i.)),
,f( ˉ x i.)=1у¯i.=1нiiнiуijЯкщо ми трактуємо( ˉ y i.-f( ˉ x i.))Як оцінку OLS (звичайний найменший квадрат)ui, то оцінка EB - це зважена сума 0 і оцінка OLS, а вага - збільшення функції розміру вибіркиni. Остаточне пророкування F (хяJf(х¯i.)=1нiiнif(хij).(у¯i.-f(х¯i.))уiнi Де F ( х я J ) є оцінкою фіксованого ефекту від лінійної регресії або методи машинного навчанняяк випадковий ліс. Це можна легко поширити на будь-який рівень даних, наприклад, зразки, що вкладаються у містах, а потім регіонах, а потім країнах. Крім деревних методів, існує метод, заснований наSVM.
f^(хij)+у^i,
f^(хij)

Для методу на основі випадкових лісів ви можете спробувати MixRF()у нашому пакеті R MixRFна CRAN.


ifi

fуiхij'уi,

6

З огляду на те, що у вас є лише дві змінні і прямо вкладене гніздування, я б повторив коментарі інших, згадуючи ієрархічну модель Баєса. Ви згадуєте перевагу методів на основі дерев, але чи є певна причина цього? Маючи мінімальну кількість предикторів, я вважаю, що лінійність часто є дійсним припущенням, яке працює добре, і будь-яку неправильну специфікацію моделі можна легко перевірити за допомогою залишкових графіків.

Якщо у вас є велика кількість предикторів, приклад РФ, заснований на ЕМ-підході, згаданому @Randel, безумовно, був би варіантом. Ще один варіант, якого я ще не бачив, - це використання на основі моделювання розширення (доступне через пакет mboost в R ). По суті, такий підхід дозволяє оцінити функціональну форму ваших фіксованих ефектів, використовуючи різні базові учні (лінійні та нелінійні), а оцінки випадкових ефектів апроксимуються за допомогою штрафу на основі гребня для всіх рівнів у цьому конкретному факторі. Цей документ є досить приємним навчальним посібником (студенти про випадкові ефекти обговорюються на сторінці 11).

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


1
+1 за представлення mboostпакету.
Рендел

В реальних даних я працюю , мають набагато більше , ніж дві змінні , які додають багато реального безлад , яка не підібраний моїм простого прикладом (наприклад , нелінійність, співзалежність, пропущені значення, категоріальні значення і т.д.) . З мого досвіду, учні, що базуються на деревах, найкраще справляються з усіма проблемами в реальному світі, тому я схиляюся до їх використання. (Є причина, що XGBoost виграє майже всі змагання зі структурованими даними на Kaggle.) mboostЗвучить цікаво - я роздивлюсь це. Спасибі
Бен

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

3

Це скоріше коментар чи пропозиція, а не відповідь, але я думаю, що ви тут задаєте важливе питання. Як хтось, хто працює виключно з багаторівневими даними, я можу сказати, що я дуже мало дізнався про машинне навчання з багаторівневими даними. Однак Дан Мартін, нещодавній випускник доктора наук з кількісної психології Університету Вірджинії, зробив свою дисертацію щодо використання дерев регресії з багаторівневими даними. Нижче наведено посилання на пакет R, який він написав для деяких із цих цілей:

https://github.com/dpmartin42/mleda/blob/master/README.md

Також ви можете знайти його дисертацію тут:

http://dpmartin42.github.io/about.html


2
Дякую за довідку, Еріку! Одне, що слід пам’ятати в моїй дисертації, - це те, що вона оцінювала лише те, як лісові методи виконуються «поза коробкою», коли вони піддаються багаторівневим структурам даних. Способи, про які згадував @Randel, обговорюються в главі 3 як огляд літератури, але симуляційне дослідження досліджувало переважно оригінальний алгоритм Бреймана та умовні умови виведення дерев / лісів.
dmartin

1

Функція RFcluster()з пакету gamclass для R "адаптує випадкові ліси до роботи (хоча і незграбно та неефективно) з кластеризованими категоричними даними про результати". Наступний приклад зі сторінки довідки для RFcluster:

 library(randomForest)
 library(gamclass)
 data(mlbench::Vowel)
 RFcluster(formula=Class ~., id = V1, data = Vowel, nfold = 15,
           tree=500, progress=TRUE, printit = TRUE, seed = 29)

Це повертає точність OOB (де "мішки" - це мішки динаміків, а не мішки окремих зразків динаміків), що моя машина дає 0,57.


0

Ви можете поглянути на metboost : Miller PJ та ін. metboost: дослідницький регресійний аналіз з ієрархічно кластеризованими даними.arXiv: 1702.03994

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

Він реалізований у пакеті mvtboost R


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