Jak radzić sobie z hierarchicznymi / zagnieżdżonymi danymi w uczeniu maszynowym

29

Wyjaśnię mój problem na przykładzie. Załóżmy, że chcesz przewidzieć dochód danej osoby na podstawie niektórych atrybutów: {Wiek, płeć, kraj, region, miasto}. Masz taki zestaw danych szkoleniowych

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

Załóżmy teraz, że chcę przewidzieć dochód nowej osoby, która mieszka w mieście 7. Mój zestaw treningowy zawiera aż 3 próbki z ludźmi w mieście 7 (zakładam, że to dużo), więc prawdopodobnie mogę wykorzystać średni dochód w mieście 7, aby przewidzieć dochód tej nowej osoby.

Załóżmy teraz, że chcę przewidzieć dochód nowej osoby, która mieszka w mieście 2. Mój zestaw treningowy zawiera tylko 1 próbkę z miastem 2, więc średni dochód w mieście 2 prawdopodobnie nie jest wiarygodnym prognostykiem. Ale prawdopodobnie mogę wykorzystać średni dochód w Regionie 1.

Ekstrapolując nieco ten pomysł, mogę przekształcić mój zbiór danych szkoleniowych jako

    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

Dlatego celem jest połączenie średnich wartości CityIncome, RegionIncome i CountryIncome przy użyciu liczby próbek treningowych dla każdej z nich, aby nadać wagę / wiarygodność każdej wartości. (Najlepiej, w tym informacje o wieku i płci).

Jakie są wskazówki dotyczące rozwiązania tego rodzaju problemu? Wolę korzystać z modeli opartych na drzewach, takich jak losowe zwiększanie lasu lub gradientu, ale mam problem z uzyskaniem ich dobrej wydajności.

AKTUALIZACJA

Dla każdego, kto chce rozwiązać ten problem, wygenerowałem przykładowe dane, aby przetestować proponowane rozwiązanie tutaj .

Ben
źródło
7
Hierarchiczne modele bayesowskie są bardzo naturalne w celu wykorzystania struktury opisanej w danych. Zobacz klasyczny przykład modelowania zanieczyszczenia radonem mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs
Spójrz na to wyzwanie samouczka Kaggle Getting Started: kaggle.com/c/titanic . Zajmuje się podobnym problemem, jakim jest przewidywanie, czy dana osoba przeżyła katastrofę Titanica, biorąc pod uwagę różne atrybuty dotyczące osoby, takie jak płeć, typ biletu itp. Najlepiej przesłane rozwiązania dla tego zastosowania wykorzystują zaawansowane metody, takie jak zwiększenie gradientu i hierarchiczne modele bayesowskie itp.
Vihari Piratla
6
@VihariPiratla Dziękuję za dane wejściowe, ale znam zestaw danych Titanica i wyzwanie, i nie rozumiem, w jaki sposób odnosi się to do problemu zagnieżdżonych danych, o który pytałem.
Ben
Korzystanie z regularyzacji L2 / L1 w tych modelach, np. Regresja logistyczna / SVM, które ją wykonują, powinny pomóc (słabe manie hierarchiczne. skutecznie penalizujesz współczynniki, więc jeśli współczynnik znacząco (tj. na dużej ilości danych) nie poprawi błędu, zostanie ustawiony na zero. i decydujesz o poziomie
kary za pomocą walidacji krzyżowej
Czy chcesz także móc przewidzieć dochód osoby mieszkającej w mieście 9?
jan-glx

Odpowiedzi:

14

Myślałem o tym problemie od dłuższego czasu, inspirując się następującymi pytaniami na tej stronie.

Najpierw przedstawię modele efektów mieszanych dla danych hierarchicznych / zagnieżdżonych i zacznę od prostego modelu dwupoziomowego (próbki zagnieżdżone w miastach). Dla tej próbki w i-tym mieście piszemy wynik y i j jako funkcję współzmiennych (lista zmiennych, w tym płeć i wiek), gdzie to losowy punkt przechwytywania dla każdego miasta, . Jeśli założymy, że i postępuj zgodnie z normalnymi rozkładami ze średnią 0 i wariancjami ijiyij Y I J = f ( x i j ) + U I + ε i J , u i j = 1 , ... , n i u i ε I J σ 2 U σ 2 U I U I = σ 2 Uxij

yij=f(xij)+ui+ϵij,
uij=1,,niuiϵijσu2σ2, empiryczna estymacja bayesowska (EB) to gdzie ,Jeśli traktujemy Jako oszacowanie OLS (zwykłe najmniejsze kwadratowe) , to EB oszacowanie to ważona suma 0 i oszacowanie OLS, a waga jest rosnącą funkcją wielkości próby . Ostateczna prognoza to gdzieui ˉ y i. =1
u^i=σu2σu2+σ2/ni(y¯i.f(x¯i.)),
f( ˉ x i.)=1y¯i.=1niiniyij( ˉ y i.-f( ˉ x i.))Uf(x¯i.)=1niinif(xij).(y¯i.f(x¯i.))n i F ( x i j ) + u I , F ( x i j )uini
fa^(xjajot)+u^ja,
fa^(xjajot) jest oszacowaniem ustalonego efektu regresji liniowej lub metody uczenia maszynowego, jak losowy las. Można to łatwo rozszerzyć na dowolny poziom danych, na przykład próbki zagnieżdżone w miastach, a następnie regionach, a następnie krajach. Oprócz metod opartych na drzewach istnieje metoda oparta na SVM .

W przypadku metody opartej na lasach losowych możesz wypróbować MixRF()nasz pakiet R MixRFna CRAN.

Randel
źródło
Czy możesz wyjaśnić, dlaczego przechwytywanie może się różnić w zależności od , ale ma jeden zestaw parametrów dla wszystkich ? Czy jest to uproszczone założenie, aby uniknąć nadmiernego dopasowania lub uczynić problem możliwym do rozwiązania? f jajafaja
user20160
@ user20160 Tak, nazywamy część jako część o ustalonych efektach, a jako efekt losowy. Możemy również mieć losowe stoki, takie jak ale powinniśmy ograniczyć liczbę losowych stoków, ponieważ wprowadziłoby to dużą liczbę składników wariancji w macierz kowariancji efektów losowych, jeżeli jest nieustrukturyzowana. u i xfaujaxjajotuja,
Randel,
6

Biorąc pod uwagę, że masz tylko dwie zmienne i proste zagnieżdżanie, chciałbym powtórzyć komentarze innych wspominających o hierarchicznym modelu Bayesa. Wspominasz o preferencjach dla metod opartych na drzewach, ale czy jest tego konkretny powód? Przy minimalnej liczbie predyktorów uważam, że liniowość jest często prawidłowym założeniem, które działa dobrze, a wszelkie błędne specyfikacje modelu można łatwo sprawdzić za pomocą wykresów resztkowych.

Jeśli miałeś dużą liczbę predyktorów, przykład RF oparty na podejściu EM wspomnianym przez @Randel byłby z pewnością opcją. Inną opcją, której jeszcze nie widziałem, jest użycie wzmocnienia opartego na modelu (dostępne za pośrednictwem pakietu mboost w R ). Zasadniczo takie podejście pozwala oszacować funkcjonalną formę efektów stałych przy użyciu różnych podstawowych uczniów (liniowych i nieliniowych), a oszacowania efektów losowych są aproksymowane przy użyciu kary opartej na grzebieniu dla wszystkich poziomów w tym konkretnym czynniku. Ten artykuł jest całkiem fajnym samouczkiem (osoby uczące się podstawowych efektów losowych omówiono na stronie 11).

Przyjrzałem się twoim przykładowym danym, ale wygląda na to, że ma tylko zmienne losowe zmienne miasta, regionu i kraju. W takim przypadku użyteczne byłoby obliczenie szacunków Bayes empirycznych dla tych czynników, niezależnie od jakichkolwiek predyktorów. Ogólnie rzecz biorąc, może to być dobre ćwiczenie, ponieważ być może wyższe poziomy (na przykład Kraj) mają wyjaśnioną minimalną wariancję w wyniku, więc prawdopodobnie nie warto dodawać ich do swojego modelu.

dmartin
źródło
1
+1 za wprowadzenie mboostpakietu.
Randel
Prawdziwe dane pracuję z ma dużo więcej niż dwie zmienne, które dodają wiele rzeczywistych bałagan, że nie jest podejmowany przez mojego prostego przykładu (np nieliniowa, współuzależnienie, brakujące wartości, wartości kategoryczne, itp) . Z mojego doświadczenia wynika, że ​​uczniowie z drzew wykonują najlepszą robotę w radzeniu sobie z całym bałaganem w świecie rzeczywistym, dlatego skłaniam się ku ich wykorzystaniu. (Jest powód, dla którego XGBoost wygrywa prawie wszystkie konkursy danych strukturalnych na Kaggle.) mboostBrzmi interesująco - dam mu spojrzenie. Dzięki
Ben
1
Rozumiem, zgadzam się, że drzewa z pewnością mogą być przydatne w takiej sytuacji. W takim przypadku dobrym pomysłem byłoby trzymanie się sugestii @ Randel. Mboost ma również ucznia bazowego drzewa, co może okazać się przydatne w połączeniu z uczniami bazowymi efektów losowych.
dmartin
3

To raczej komentarz lub sugestia niż odpowiedź, ale myślę, że zadajesz tutaj ważne pytanie. Jako osoba pracująca wyłącznie z danymi wielopoziomowymi mogę powiedzieć, że niewiele dowiedziałam się o uczeniu maszynowym z danymi wielopoziomowymi. Jednak Dan Martin, ostatni doktorat z psychologii ilościowej na Uniwersytecie w Wirginii, napisał rozprawę na temat wykorzystania drzew regresji z danymi wielopoziomowymi. Poniżej znajduje się link do pakietu R, który napisał dla niektórych z tych celów:

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

Jego rozprawę można znaleźć tutaj:

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

Erik Ruzek
źródło
2
Dzięki za referencje, Erik! Jedną z rzeczy, o których należy pamiętać w mojej rozprawie, jest to, że oceniała ona, jak metody leśne działają „od razu po wyjęciu z pudełka”, gdy są narażone na wielopoziomowe struktury danych. Metody wspomniane przez @Randel są omówione w rozdziale 3 jako przegląd literatury, ale w badaniu symulacyjnym badano głównie oryginalny algorytm Breimana i warunkowe wnioskowanie o drzewach / lasach.
dmartin,
1

Funkcja RFcluster()z pakietu gamclass dla R „dostosowuje losowe lasy do pracy (choć niezdarnie i nieefektywnie) z klastrowymi kategorycznymi danymi wyników”. Poniższy przykład pochodzi ze strony pomocy dla 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)

Zwraca to dokładność OOB (gdzie „torby” to torby głośników, a nie torby pojedynczych próbek głośników), które moja maszyna podaje jako 0,57.

John Maindonald
źródło
0

Warto zajrzeć na metboost : Miller PJ i in. metboost: Eksploracyjna analiza regresji z hierarchicznie klastrowanymi danymi. arXiv: 1702.03994

Cytat ze streszczenia: Proponujemy rozszerzenie do drzew decyzyjnych o zwiększonej mocy zwane metboost dla danych hierarchicznie zgrupowanych. Działa poprzez ograniczenie struktury każdego drzewa, aby była taka sama w grupach, ale zezwalając na to, że węzeł końcowy może się różnić. Pozwala to predyktorom i punktom podziału prowadzić do różnych prognoz w obrębie każdej grupy i przybliża nieliniowe efekty specyficzne dla grupy. Co ważne, metboost pozostaje wykonalny obliczeniowo dla tysięcy obserwacji i setek predyktorów, które mogą zawierać brakujące wartości.

Jest zaimplementowany w pakiecie R mvtboost

Koen Pouwels
źródło
1
podaj referencje zamiast samych linków (szczególnie dla pierwszego linku), ponieważ linki mogą umrzeć
Antoine