2012-11-07 4 views
2

J'utilise Weka et je voudrais effectuer une régression avec des forêts aléatoires. Plus précisément, j'ai un ensemble de données:Forêt d'arbres de régression dans Weka

Feature1,Feature2,...,FeatureN,Class 
1.0,X,...,1.4,Good 
1.2,Y,...,1.5,Good 
1.2,F,...,1.6,Bad 
1.1,R,...,1.5,Great 
0.9,J,...,1.1,Horrible 
0.5,K,...,1.5,Terrific 
. 
. 
. 

Plutôt que d'apprendre à prédire la classe la plus probable, je veux apprendre la distribution de probabilités sur les classes pour un vecteur de caractéristique donnée. Mon intuition est que l'utilisation du modèle RandomForest dans Weka ne serait pas appropriée, car elle tenterait de minimiser son erreur absolue (maximum de vraisemblance) plutôt que son erreur au carré (distribution de probabilité conditionnelle). Est-ce que cette intuition est juste? Y a-t-il un meilleur modèle à utiliser si je veux effectuer la régression plutôt que la classification?

Éditer: Je pense en fait maintenant que ce n'est peut-être pas un problème. Vraisemblablement, les classificateurs apprennent la probabilité conditionnelle P (Class | Feature1, ..., FeatureN) et la classification résultante est juste de trouver le c dans la classe qui maximise cette distribution de probabilité. Par conséquent, un classificateur RandomForest devrait être capable de me donner la distribution de probabilité conditionnelle. Je devais juste y penser un peu plus. Si c'est faux, corrigez-moi s'il vous plaît.

Répondre

2

Si vous souhaitez prédire explicitement les probabilités pour chaque classe, vous avez besoin de données d'entrée différentes. Autrement dit, vous devrez remplacer la valeur à prédire. Au lieu d'un jeu de données avec l'étiquette de classe, vous aurez besoin de n ensembles de données (pour n étiquettes différentes) avec des données agrégées pour chaque vecteur de caractéristiques unique. Vos données ressemblerait à quelque chose comme

Feature1,...,Good 
1.0,...,0.5 
0.3,...,1.0 

et

Feature1,...,Bad 
1.0,...,0.8 
0.3,...,0.1 

et ainsi de suite. Vous devez apprendre un modèle pour chaque classe et les exécuter séparément sur les données à classer. C'est-à-dire que, pour chaque étiquette, vous apprenez un modèle pour prédire un nombre qui correspond à la probabilité d'être dans cette classe, étant donné un vecteur de caractéristiques.

Si vous n'avez pas besoin des probabilités à prédire explicitement, jetez un œil aux classificateurs bayésiens de Weka, qui utilisent des probabilités dans les modèles qu'ils apprennent.

+0

Donc la difficulté ici est que je n'ai pas les données de distribution réelles que j'essaie d'apprendre. Au contraire, j'en ai des échantillons. Donc, si je séparais chaque classe dans son propre ensemble de données, ce serait une tâche de classification binaire. Je suppose que je pourrais le faire, mais y a-t-il une raison de principe pour laquelle cela fonctionnerait mieux? –

+0

Si vous prédisez la probabilité, elle devient une tâche de régression - vous prédisez un nombre au lieu d'une étiquette. Le point de séparer en plusieurs ensembles de données serait de pouvoir juger individuellement pour chaque classe quelle est la probabilité des données qui lui appartiennent. –