Ich werde mein Problem mit einem Beispiel erklären. Angenommen, Sie möchten das Einkommen einer Person anhand einiger Attribute vorhersagen: {Alter, Geschlecht, Land, Region, Stadt}. Sie haben einen Trainingsdatensatz wie diesen
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
Angenommen, ich möchte das Einkommen einer neuen Person, die in Stadt 7 lebt, vorhersagen. In meinem Trainingsset befinden sich sage und schreibe 3 Stichproben mit Personen in Stadt 7 (nehmen wir an, dies ist eine Menge) prognostizieren Sie das Einkommen dieser neuen Person.
Angenommen, ich möchte das Einkommen einer neuen Person vorhersagen, die in Stadt 2 lebt. Mein Trainingssatz enthält nur 1 Stichprobe mit Stadt 2, sodass das durchschnittliche Einkommen in Stadt 2 wahrscheinlich kein verlässlicher Prädiktor ist. Aber ich kann wahrscheinlich das Durchschnittseinkommen in Region 1 verwenden.
Wenn ich diese Idee ein wenig extrapoliere, kann ich meinen Trainingsdatensatz als transformieren
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
Das Ziel ist es also, das durchschnittliche CityIncome, das RegionIncome und das CountryIncome zu kombinieren und gleichzeitig die Anzahl der Trainingsbeispiele zu verwenden, um jedem Wert ein Gewicht / eine Glaubwürdigkeit zu verleihen. (Im Idealfall immer noch mit Informationen aus Alter und Geschlecht.)
Was sind Tipps zur Lösung dieses Problems? Ich bevorzuge baumbasierte Modelle wie zufällige Wald- oder Gradientenverstärkung, aber ich habe Probleme, diese für eine gute Leistung zu bekommen.
AKTUALISIEREN
Für jemanden bereit , einen Stich an diesem Problem zu nehmen, habe ich Beispieldaten erzeugt Ihre vorgeschlagene Lösung testen hier .
quelle
Antworten:
Ich habe eine Weile über dieses Problem nachgedacht und mich dabei von den folgenden Fragen auf dieser Website inspirieren lassen.
Wie kann ich zufällige Effekte in einen randomForest einbinden?
Zufällige Gesamtstruktur für gruppierte Daten
Zufällige Wälder / adaboost in der Panel-Regression
Zufällige Gesamtstruktur für binäre Paneldaten
Modellierung von Clusterdaten mithilfe von Boosted-Regressionsbäumen
Lassen Sie mich zunächst die Modelle mit gemischten Effekten für hierarchische / verschachtelte Daten einführen und von einem einfachen zweistufigen Modell ausgehen (Beispiele, die in Städten verschachtelt sind). Für die - ten Probe in der i - ten Stadt, schreiben wir das Ergebnis y i j als Funktion der Kovariaten x i j (eine Liste von Variablen wie Geschlecht und Alter), y i j = f ( x i j ) + u i + ϵ i j , wobei u i der zufällige Schnittpunkt für jede Stadt ist, j = 1j i yij xij
Für eine Zufalls-Gesamtstruktur-basierte Methode können Sie
MixRF()
unser R-PaketMixRF
auf CRAN ausprobieren .quelle
Da Sie nur zwei Variablen und eine einfache Verschachtelung haben, würde ich die Kommentare anderer wiederholen, die ein hierarchisches Bayes-Modell erwähnen. Sie erwähnen eine Präferenz für baumbasierte Methoden, aber gibt es dafür einen bestimmten Grund? Mit einer minimalen Anzahl von Prädiktoren stelle ich fest, dass die Linearität häufig eine gültige Annahme ist, die gut funktioniert, und dass jede Modellfehlspezifikation leicht über Residuendiagramme überprüft werden kann.
Wenn Sie eine große Anzahl von Prädiktoren hätten, wäre das RF-Beispiel, das auf dem von @Randel erwähnten EM-Ansatz basiert, sicherlich eine Option. Eine andere Option, die ich noch nicht gesehen habe, ist die Verwendung von modellbasiertem Boosten (verfügbar über das mboost-Paket in R ). Im Wesentlichen können Sie mit diesem Ansatz die funktionale Form Ihrer Fixeffekte mithilfe verschiedener Basislerner (linear und nichtlinear) abschätzen. Die Schätzungen der Zufallseffekte werden mithilfe einer kammbasierten Strafe für alle Ebenen in diesem bestimmten Faktor approximiert. Dieser Artikel ist ein ziemlich nettes Tutorial (Grundlegende Informationen zu Zufallseffekten finden Sie auf Seite 11).
Ich habe mir Ihre Beispieldaten angesehen, aber es sieht so aus, als ob sie nur die Zufallseffektvariablen Stadt, Region und Land enthalten. In diesem Fall wäre es nur sinnvoll, die empirischen Bayes-Schätzungen für diese Faktoren unabhängig von Prädiktoren zu berechnen. Dies könnte im Allgemeinen eine gute Übung sein, da die höheren Ebenen (z. B. Land) möglicherweise nur minimale Abweichungen aufweisen und es sich daher wahrscheinlich nicht lohnt, sie in Ihr Modell aufzunehmen.
quelle
mboost
Pakets.mboost
interessant - ich werde es mir ansehen. DankeDies ist eher ein Kommentar oder ein Vorschlag als eine Antwort, aber ich denke, Sie stellen hier eine wichtige Frage. Als jemand, der ausschließlich mit mehrstufigen Daten arbeitet, kann ich sagen, dass ich sehr wenig über maschinelles Lernen mit mehrstufigen Daten erfahren habe. Dan Martin, ein kürzlich an der University of Virginia in quantitativer Psychologie promovierter Wissenschaftler, promovierte jedoch über die Verwendung von Regressionsbäumen mit mehrstufigen Daten. Unten ist ein Link zu einem R-Paket, das er für einige dieser Zwecke geschrieben hat:
https://github.com/dpmartin42/mleda/blob/master/README.md
Auch seine Dissertation finden Sie hier:
http://dpmartin42.github.io/about.html
quelle
The function
RFcluster()
from the gamclass package for R "adapts random forests to work (albeit clumsily and inefficiently) with clustered categorical outcome data". The following example is from the help page forRFcluster
:This returns an OOB accuracy (where the "bags" are bags of speakers, not bags of individual speaker samples), that my machine gives as 0.57 .
quelle
You may want to have a look at metboost: Miller PJ et al. metboost: Exploratory regression analysis with hierarchically clustered data.arXiv:1702.03994
Quote from the abstract: We propose an extension to boosted decision decision trees called metboost for hierarchically clustered data. It works by constraining the structure of each tree to be the same across groups, but allowing the terminal node means to differ. This allows predictors and split points to lead to different predictions within each group, and approximates nonlinear group specific effects. Importantly, metboost remains computationally feasible for thousands of observations and hundreds of predictors that may contain missing values.
It is implemented in the R package mvtboost
quelle