1

Je prépare une tâche pour la classe de vision par ordinateur, qui consiste à former un classificateur simple après l'extraction de caractéristiques à partir d'images. Puisque l'apprentissage automatique n'est pas le sujet principal ici, je ne veux pas que les étudiants mettent en œuvre un algirithme d'apprentissage à partir de zéro. Donc, je dois leur recommander des implémentations de référence. Je crois que le classificateur d'arbre de décision convient à cela.Code source de l'induction de l'arbre de décision

Le problème est que la variété des langages autorisés pour la classe est assez grande: C++, C#, Delphi. De plus, je ne veux pas que les étudiants consacrent beaucoup de temps à des problèmes techniques comme la mise en relation d'une bibliothèque. WEKA est génial pour Java. Nous pouvons aussi utiliser OpenCV avec tous les wrappers, mais c'est assez gros et maladroit alors que je veux quelque chose de simple et de doux. Donc, connaissez-vous de simples bibliothèques C++/C#/Delphi pour apprendre les arbres de décision?

+0

J'ai fait des exercices d'extraction d'information, j'ai eu un problème similaire.Ce que j'ai fait, c'était de développer un simple wrapper - qui n'expose que les fonctionnalités nécessaires - sur une bibliothèque complexe pour permettre aux étudiants d'avoir un démarrage rapide et d'éviter de passer des heures à trouver un cadre. – Skarab

+0

Oui, mais je ne voulais pas mettre en place quatre wrappers différents pour des langues différentes. :) De plus, j'aimerais que les étudiants aient une expérience de vie réelle avec une API. Malheureusement, notre cours semble être le seul dans le programme, qui touche à de tels problèmes. –

Répondre

2

Je connais de telles bibliothèques, dont une seule que j'ai utilisée récemment. Les deux sont Waffles et le Tilburg-Based Memory Learner (TiMBL). Les deux sont gratuits et open-source (lgpl et GNU gpl, respectivement). En outre, les deux sont des bibliothèques stables et matures. Waffles a été créé et est actuellement maintenu par un seul développeur, tandis que TiMBL je crois est un projet académique (orienté vers le domaine de la linguistique). De ces deux, j'ai seulement utilisé le module d'arbre de décision dans Waffles (dans la classe GDecisionTree, voir la documentation here) Les gaufres peuvent être la bibliothèque de choix ici parce qu'elle inclut un ensemble décent de fonctions pour des statistiques descriptives aussi bien que tracer des fonctions pour le diagnostic, pour visualiser l'espace de solution, et ainsi de suite. L'auteur de la bibliothèque (Mike Gashler) a également inclus un ensemble d'applications de démonstration, mais je ne me souviens pas si l'une de ces applications est un arbre de décision.

J'ai utilisé plusieurs des classes de la bibliothèque Waffles (y compris la classe de l'arbre de décision) et je peux certainement le recommander. Je ne peux rien dire de plus sur Tilburg Learned Memory Learner parce que je n'ai jamais utilisé sa classe d'arbre de décision.

+0

nous recommandons enfin Waffles et WEKA. –

0

Le langage de programmation n'est pas un problème. Il est très difficile de trouver une implémentation d'arbre de décision pour chaque langue. Presque impossible de garantir que toutes les versions sont la même mise en œuvre.

Puisque l'arbre de décision est une méthode de boîte noire. Vous pouvez écrire les données de formation et de test dans des fichiers standard (par exemple, le format arff dans Weka, opencv a également son propre format) et utiliser la ligne de commande pour appeler l'apprenant et le testeur. De cette façon, tous les élèves ont le même arbre de décision. Sinon, l'élève A utilise un bon arbre apprenant, l'élève B utilise un mauvais arbre, quand leurs résultats sont différents, vous ne savez pas s'il provient de la différence de l'arbre de décision ou de la partie CV (par exemple traitement de caractéristiques). Dans cette situation, vous allez vous mettre dans la situation où vous devez vous préoccuper des détails/de la qualité de la mise en œuvre des apprenants.

+0

Bien sûr, votre argument est logique. Mais il serait plus simple de vérifier les soumissions s'il n'y a qu'une seule application avec laquelle l'utilisateur travaille (la classe est prise par 300 étudiants). De plus, nous voulons qu'ils voient leur programme comme un produit final, pas seulement un code de recherche. :) D'un autre côté, les différences mineures de performance ne sont pas critiques: nous ne les classons pas en fonction de cela. –

2

Avez-vous regardé l'implémentation "forêt de décision" dans Alglib? C'est gratuit pour un usage académique. La page Web revendique le support pour C++/C# et (peut-être) Delphi. Ce n'est pas une implémentation d'arbre de décision, mais les random forests ont tendance à être de meilleurs classificateurs que les arbres à décision unique sur de nombreux problèmes et ils ne prennent pas beaucoup plus de temps à s'entraîner. Je suppose qu'il sera difficile de trouver une implémentation cohérente de l'arbre de décision dans plusieurs langues, car il existe de nombreux types différents d'algorithmes d'arbre de décision.

Il existe un certain nombre d'autres bibliothèques open source de forêts aléatoires répertoriées dans l'article de Wikipédia si la bibliothèque Alglib n'est pas ce dont vous avez besoin. Cavaet: l'implémentation d'Alglib prétend ne pas être une forêt aléatoire traditionnelle.

+0

Merci pour l'indice! Nous recommandons aux élèves d'utiliser d'abord les arbres de décision, car ils fournissent une qualité suffisante sur l'ensemble de données de base et sont conceptuellement simples, c'est-à-dire que l'on peut examiner la structure à des fins de débogage ou méthodologiques. Cependant, nous suggérons aux élèves d'implémenter une forêt aléatoire dans la partie avancée de la tâche. –