Je vais expliquer mon problème avec un exemple. Supposons que vous souhaitiez prédire le revenu d'un individu en fonction de certains attributs: {âge, sexe, pays, région, ville}. Vous avez un ensemble de données de formation comme ça
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
Supposons maintenant que je veux prédire le revenu d'une nouvelle personne qui vit dans la ville 7. Mon ensemble de formation contient 3 échantillons avec des gens de la ville 7 (supposons que c'est beaucoup), donc je peux probablement utiliser le revenu moyen de la ville 7 pour prédire le revenu de cette nouvelle personne.
Supposons maintenant que je veuille prédire le revenu d'une nouvelle personne qui habite dans la ville 2. Mon ensemble de formation n'a qu'un seul échantillon avec la ville 2, donc le revenu moyen dans la ville 2 n'est probablement pas un prédicteur fiable. Mais je peux probablement utiliser le revenu moyen de la région 1.
En extrapolant un peu cette idée, je peux transformer mon jeu de données d'entraînement en
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
Ainsi, l'objectif est de combiner en quelque sorte le CityIncome moyen, le RegionIncome et le CountryIncome tout en utilisant le nombre d'échantillons de formation pour chacun pour donner un poids / crédibilité à chaque valeur. (Idéalement, toujours avec des informations sur l'âge et le sexe.)
Quels sont les conseils pour résoudre ce type de problème? Je préfère utiliser des modèles basés sur des arbres comme la forêt aléatoire ou le renforcement du gradient, mais j'ai du mal à les faire fonctionner correctement.
MISE À JOUR
Pour tous ceux qui souhaitent essayer ce problème, j'ai généré des exemples de données pour tester la solution proposée ici .
la source
Réponses:
Je réfléchis à ce problème depuis un certain temps, avec des inspirations des questions suivantes sur ce site.
Comment puis-je inclure des effets aléatoires dans randomForest?
Forêt aléatoire sur données groupées
Forêts aléatoires / adaboost dans le cadre de la régression du panneau
Forêt aléatoire pour les données de panel binaires
Modélisation de données en cluster à l'aide d'arbres de régression boostés
Permettez-moi d'abord de présenter les modèles à effets mixtes pour les données hiérarchiques / imbriquées et de partir d'un modèle simple à deux niveaux (échantillons imbriqués dans les villes). Pour le échantillon -ème dans la ville -ème, on écrit le résultat en fonction de covariables (une liste de variables , y compris le sexe et l' âge), où est l'ordonnée à l'origine aléatoire pour chaque ville, . Si nous supposons que et suivent des distributions normales avec une moyenne de 0 et des variances eti y i j x i j y i j = f ( x i j ) + u i + ϵ i j ,j je yje j Xje j
Pour une méthode basée sur une forêt aléatoire, vous pouvez essayer
MixRF()
dans notre package RMixRF
sur CRAN.la source
Étant donné que vous n'avez que deux variables et une imbrication simple, je ferais écho aux commentaires des autres mentionnant un modèle Bayes hiérarchique. Vous mentionnez une préférence pour les méthodes arborescentes, mais y a-t-il une raison particulière à cela? Avec un nombre minimal de prédicteurs, je trouve que la linéarité est souvent une hypothèse valable qui fonctionne bien, et toute mauvaise spécification du modèle pourrait facilement être vérifiée via des graphiques résiduels.
Si vous disposiez d'un grand nombre de prédicteurs, l'exemple RF basé sur l'approche EM mentionnée par @Randel serait certainement une option. Une autre option que je n'ai pas encore vue est d'utiliser le boost basé sur un modèle (disponible via le package mboost dans R ). Essentiellement, cette approche vous permet d'estimer la forme fonctionnelle de vos effets fixes en utilisant divers apprenants de base (linéaires et non linéaires), et les estimations des effets aléatoires sont approximées en utilisant une pénalité basée sur les crêtes pour tous les niveaux de ce facteur particulier. Ce document est un très bon tutoriel (les apprenants de base d'effets aléatoires sont discutés à la page 11).
J'ai jeté un coup d'œil à vos exemples de données, mais il semble qu'il ne comporte que les variables d'effets aléatoires de la ville, de la région et du pays. Dans ce cas, il serait seulement utile de calculer les estimations empiriques de Bayes pour ces facteurs, indépendamment de tout prédicteur. Cela pourrait en fait être un bon exercice pour commencer en général, car les niveaux plus élevés (Pays, par exemple), ont un écart minimal expliqué dans le résultat, et il ne serait donc probablement pas utile de les ajouter dans votre modèle.
la source
mboost
package.mboost
semble intéressant - je vais y jeter un œil. MerciIl s'agit davantage d'un commentaire ou d'une suggestion que d'une réponse, mais je pense que vous posez ici une question importante. En tant que personne travaillant exclusivement avec des données multiniveaux, je peux dire que j'ai très peu trouvé sur l'apprentissage automatique avec des données multiniveaux. Cependant, Dan Martin, récemment diplômé d'un doctorat en psychologie quantitative à l'Université de Virginie, a fait sa thèse sur l'utilisation des arbres de régression avec des données à plusieurs niveaux. Vous trouverez ci-dessous un lien vers un package R qu'il a écrit à certaines fins:
https://github.com/dpmartin42/mleda/blob/master/README.md
Vous trouverez également sa thèse ici:
http://dpmartin42.github.io/about.html
la source
La fonction
RFcluster()
du package gamclass pour R "adapte les forêts aléatoires pour fonctionner (quoique maladroitement et inefficacement) avec des données de résultats catégorielles groupées". L'exemple suivant provient de la page d'aide deRFcluster
:Cela renvoie une précision OOB (où les "sacs" sont des sacs de haut-parleurs, pas des sacs d'échantillons de haut-parleurs individuels), que ma machine donne comme 0,57.
la source
Vous voudrez peut-être jeter un œil à metboost : Miller PJ et al. metboost: analyse de régression exploratoire avec des données hiérarchisées en cluster.arXiv: 1702.03994
Citation du résumé: Nous proposons une extension aux arbres de décision de décision boostée appelée metboost pour les données hiérarchisées en cluster. Cela fonctionne en contraignant la structure de chaque arbre à être la même entre les groupes, mais en permettant aux nœuds terminaux de différer. Cela permet aux prédicteurs et aux points de partage de conduire à des prédictions différentes au sein de chaque groupe, et se rapproche des effets spécifiques non linéaires du groupe. Surtout, metboost reste réalisable par calcul pour des milliers d'observations et des centaines de prédicteurs qui peuvent contenir des valeurs manquantes.
Il est implémenté dans le package R mvtboost
la source