Comment effectuer une classification Random Forest non supervisée en utilisant le code de Breiman?

8

Je travaille avec le code forestier aléatoire de Breiman ( http://stat-www.berkeley.edu/users/breiman/RandomForests/cc_manual.htm#c2 ) pour la classification des données satellites (apprentissage supervisé). J'utilise un ensemble de données de formation et de test ayant une taille d'échantillon de 2000 et une taille variable 10. Les données sont classées en deux classes, A et B. En mode d'apprentissage supervisé, l'algorithme fonctionne bien avec une erreur de classification très faible (<2%) . Maintenant, je veux essayer la classification non supervisée sans étiquette de classe dans l'ensemble de données de test et voir comment l'algorithme est capable de prédire les classes. Existe-t-il un moyen de mettre en œuvre une classification non supervisée à l'aide du code Breiman? L'erreur de cette méthode sera-t-elle supérieure à la classification supervisée? Les données et le réglage des paramètres d'exécution dans l'algorithme sont donnés ci-dessous

DÉCRIRE LES DONNÉES 1 mdim = 10, ntrain = 2000, nclass = 2, maxcat = 1, 1 ntest = 2000, labelts = 1, labeltr = 1,

SET RUN PARAMETERS 2 mtry0 = 3, ndsize = 1, jbt = 500, look = 100, lookcls = 1, 2 jclasswt = 0, mdim2nd = 0, mselect = 0,

Bijoy
la source
1
Pouvez-vous développer davantage? Si vous voulez prédire les classes, vous devez utiliser la classification supervisée.
Simone
Disons simplement que j'ai deux jeux de données avec le même nombre de variables et d'échantillons. le premier ensemble de données contient les informations de classe (A et B) tandis que le deuxième ensemble de données ne contient aucune information de classe. En utilisant le code RF, le premier ensemble de données a été classé dans les deux classes avec une très bonne précision. Les paramètres d'exécution indiqués ci-dessus sont pour cette classification particulière où les informations de classe sont requises dans l'ensemble de données. Maintenant, ma question est de savoir comment classer le deuxième jeu de données en deux classes?
Bijoy

Réponses:

3

Étant donné que votre modèle présente une bonne précision, vous pouvez simplement l'utiliser pour prédire les étiquettes de classe des enregistrements dans l'ensemble de données sans étiquette. Cependant, vous ne pouvez pas évaluer les performances sur des données sans étiquette.

Veillez à évaluer la qualité de votre modèle sur les données étiquetées par validation croisée. Il ne suffit pas de vérifier le taux d'erreur d'entraînement.

Si votre modèle n'est pas assez précis, vous pourriez penser à un apprentissage semi-supervisé . Les données non étiquetées sont utilisées afin d'améliorer la qualité de votre modèle via l'apprentissage inductif. La précision doit toujours être calculée par validation croisée sur vos données étiquetées.

Jetez un œil à [Crimisini et al. Forêts décisionnelles: Un cadre unifié pour la classification, la régression, l'estimation de la densité, l'apprentissage multiple et l'apprentissage semi-supervisé] Chapitre 7 sur l'apprentissage semi-supervisé et 7.4 sur l'initiation à l'apprentissage semi-supervisé.

Simone
la source
Merci Simone pour les commentaires ... Comme vous l'avez mentionné dans vos commentaires, mon objectif est de prédire les étiquettes de classe des enregistrements dans l'ensemble de données sans étiquette en utilisant RF. Cependant, je voudrais savoir si cela est possible en utilisant le code RF de Brieman et Cutler .. ??
Bijoy
Je ne connais pas très bien ce code. Cela peut aussi être un peu dépassé. Essayez WEKA ou R, ils fournissent des implémentations récentes de forêts aléatoires.
Simone
9

Je doute que sans surveillance fonctionnera mieux, mais cela pourrait être un exercice cool à essayer. L'apprentissage non supervisé avec une forêt aléatoire se fait en construisant une distribution conjointe basée sur vos variables indépendantes qui décrit grossièrement vos données. Simulez ensuite un certain nombre d'observations à l'aide de cette distribution. Par exemple, si vous avez 1000 observations, vous pouvez en simuler 1000 de plus. Ensuite, vous les étiquetez, par exemple 1: = observation réelle, 0: = observation simulée. Après cela, vous exécutez un classificateur de forêt aléatoire habituel en essayant de distinguer les observations réelles des observations simulées. Notez que l'option de calcul de la proximité doit être activée. La véritable sortie utile est exactement ceci, une description de la proximité entre vos observations basée sur ce que fait Random Forest lorsque vous essayez d'attribuer ces étiquettes. Vous avez maintenant une description de la façon dont " Je veux dire coller des observations qui sont plus proches d'un certain seuil. Une autre option simple est de faire un clustering hiérarchique mais en utilisant cette matrice de distance particulière. Si vous pouvez travailler avec R, la plupart des packages de clustering hiérarchiques vous permettent d'alimenter les fonctions matrices de distance personnalisées. Vous sélectionnez ensuite un point de coupure, vous pouvez le visualiser sous forme de dendrogramme, etc., etc. Je veux dire coller des observations qui sont plus proches d'un certain seuil. Une autre option simple est de faire un clustering hiérarchique mais en utilisant cette matrice de distance particulière. Si vous pouvez travailler avec R, la plupart des packages de clustering hiérarchiques vous permettent d'alimenter les fonctions matrices de distance personnalisées. Vous sélectionnez ensuite un point de coupure, vous pouvez le visualiser comme un dendrogramme et ainsi de suite et ainsi de suite.

Cette habitude d'être un très bon tutoriel sur le regroupement aléatoire Forêt et ils partagent certaines fonctions R utiles qu'ils ont écrit à cet effet , mais le lien semble être mort maintenant. Peut-être que cela reviendra plus tard. Ils ont également écrit un paquet glm R aléatoire très soigné (qui est analogue à la forêt aléatoire mais basé sur duh ... glms) si vous voulez vérifier cela. Vous pouvez toujours écrire aux auteurs et demander le matériel de classification Random Forest qui était disponible sur le lien mort. J'ai le code R mais c'est trop gros pour le coller ici, je peux vous l'envoyer si vous m'envoyez un message privé.

JEquihua
la source
Ce package R semble être aussi pour cela, je ne l'ai pas étudié à
JEquihua
4

Si vous souhaitez utiliser la forêt aléatoire dans un cadre non supervisé, vous vous concentrerez sur la métrique de distance obtenue dans ce que Breiman appelle les "proximités". Il doit s'agir d'une matrice NxN représentant les moments où les échantillons coexistent dans les nœuds terminaux. Dans randomForest de R, ceci est obtenu via (je n'ai jamais utilisé Breiman's mais je suis sûr qu'il est disponible):

rf = randomForest( ... )
1 - rf$proximities

Maintenant, dans un environnement non supervisé, la forêt aléatoire n'a aucune idée du nombre de classes qu'il devrait y avoir, ce sera donc votre travail. Cela peut être fait de différentes manières, par exemple, KNN, PAM, etc., où vous choisissez k = 2.

Comme vous pouvez l'imaginer, il s'agit d'une forêt aléatoire supervisée un peu différente, donc la comparaison de la précision de la classification entre les deux procédures peut ne pas être éclairante.

jimmyb
la source