Classification stratifiée avec forêts aléatoires (ou autre classificateur)

12

Donc, j'ai une matrice d'environ 60 x 1000. Je la considère comme 60 objets avec 1000 fonctionnalités; les 60 objets sont regroupés en 3 classes (a, b, c). 20 objets dans chaque classe, et nous connaissons la véritable classification. J'aimerais faire un apprentissage supervisé sur cet ensemble de 60 exemples de formation, et je m'intéresse à la fois à la précision du classificateur (et aux mesures associées) ainsi qu'à la sélection des fonctionnalités sur les 1000 fonctionnalités.

Tout d'abord, comment est ma nomenclature?

Maintenant, la vraie question:

Je pourrais jeter des forêts aléatoires dessus comme indiqué, ou n'importe quel nombre d'autres classificateurs. Mais il y a une subtilité - je me soucie vraiment de différencier la classe c des classes a et b. Je pourrais regrouper les classes a et b, mais existe-t-il un bon moyen d'utiliser la connaissance a priori que tous les objets non-c forment probablement deux clusters distincts? Je préférerais utiliser des forêts aléatoires ou une variante de celles-ci, car il s'est avéré efficace sur des données similaires aux miennes. Mais je pourrais être convaincu d'essayer d'autres approches.

user116293
la source
Je ne vois aucun problème avec votre nomenclature. Est-ce que 60 objets sont tout ce que vous avez? Ensuite, afin de calculer une précision de classification, vous devez diviser votre ensemble de données en ensembles de train, de test (et également de validation). Il existe différentes façons de le faire, mais la validation croisée fold est la plus courante, je pense. k
emrea
1
Oui, juste ces 60. Mais je pense que pour les forêts aléatoires, chaque arbre de décision est créé avec un sous-ensemble des échantillons, vous pouvez donc obtenir une erreur de généralisation estimée en appliquant chacun des 60 échantillons existants uniquement aux arbres de la forêt qui n'ont pas ne vois pas cet échantillon pendant la construction. ( stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#ooberr ) Ainsi, une validation croisée typique n'est peut-être pas nécessaire ici.
user116293
vous devriez être très inquiet de sur-équiper ici. Vous avez 1000 variables avec 60 objets, je me sentirais beaucoup mieux si c'était l'autre qay autour et je dirais quand même, vous devriez vous soucier du sur-ajustement. Existe-t-il un moyen logique ou sémantique de réduire le nombre de variables avant de faire l'analyse?
jank

Réponses:

8

existe-t-il un bon moyen d'utiliser la connaissance a priori que tous les objets non-c forment probablement deux grappes distinctes

Si vous utilisez une méthode basée sur un arbre, je ne pense pas que cela soit important car ces classificateurs partitionnent l'espace des fonctionnalités, puis regardez la proportion d'échantillons dans chaque classe. Donc, tout ce qui compte, c'est l'occurrence relative de la classe c dans chaque nœud terminal.

Si toutefois vous utilisiez quelque chose comme un mélange de normales, LDA, etc., combiner deux clusters serait une mauvaise idée (en supposant que les classes a et b forment des clusters uniques). Ici, vous devez conserver la structure de classe pour décrire avec précision l'espace d'entités qui correspond à a, b et c. Ces modèles supposent que les fonctionnalités de chaque classe ont une distribution normale différente. Si vous combinez a et b, vous forcerez une seule distribution normale à s'adapter à un mélange.

En résumé, pour les arbres, peu importe si vous:

I. Créez trois classificateurs (1. a vs b, 2. a vs c et 3. b vs c) puis prédisez avec une méthode basée sur le vote.

II. Fusionnez les classes a et b pour former un problème à deux classes.

III. Prédisez les trois classes, puis mappez la prédiction à une valeur à deux classes (par exemple, f (c) = c, f (a) = pas c, f (b) = pas c).

Cependant, si vous utilisez une méthode qui ajuste une distribution à chaque classe, évitez II. et tester lequel de I. ou III. fonctionne mieux pour votre problème

muratoa
la source
III sonne bien - même si je pense que si le classificateur dit qu'un échantillon est de 0,33 a, 0,33 b et 0,34 c, je devrais probablement additionner les probabilités pour a et b et donc choisir «pas c».
user116293
1
Pour (I), quelle est la bonne procédure pour un vote par division (1: a, 2: c, 3: b), ou est-ce probablement trop rare pour avoir vraiment de l'importance?
user116293
Pour III. ce que vous suggérez est correct. Pour I. sur les données de 3 classes, je ne pense pas qu'il y ait de mesure pour diviser les votes (1 pour chaque) car la propriété transitive devrait être violée. Cependant, pour 4+ classes, vous pouvez éventuellement avoir des liens au sommet, auquel cas vous pouvez utiliser une quantité numérique plutôt que gagner / perdre; c'est-à-dire que la somme des poids prend la classe de poids maximale.
muratoa