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 .
źródło
Odpowiedzi:
Myślałem o tym problemie od dłuższego czasu, inspirując się następującymi pytaniami na tej stronie.
Jak mogę dołączyć losowe efekty do randomForest?
Losowy las na zgrupowanych danych
Losowe lasy / adaboost w ustawieniach regresji panelu
Losowy las dla danych panelu binarnego
Modelowanie danych klastrowych za pomocą przyspieszonych drzew regresji
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 ijot ja yI j 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 UxI j
W przypadku metody opartej na lasach losowych możesz wypróbować
MixRF()
nasz pakiet RMixRF
na CRAN.źródło
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.
źródło
mboost
pakietu.mboost
Brzmi interesująco - dam mu spojrzenie. DziękiTo 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
źródło
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 dlaRFcluster
: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.
źródło
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
źródło