Quelle est la différence entre les classificateurs ANN, SVM et KNN?
je sais que c'est une question très générale sans détails sur mon projet réel, mais ma question Est:
je fais la classification des images par télédétection. J'utilise la méthode orientée objet: j'ai d'abord segmenté l'image en différentes régions, puis j'ai extrait les traits des régions telles que la couleur, la forme et la texture. Le nombre de toutes les caractéristiques dans une région peut être 30 et il ya généralement 2000 régions dans l'ensemble, et je vais choisir 5 classes avec 15 échantillons pour chaque classe.
en résumé:
- les données de l'Échantillon 1530
- données D'essai 197530
Comment choisir le classificateur approprié? S'il y a 3 classificateurs (ANN, SVM et KNN), lequel devrais-je choisir pour une meilleure classification?
2 réponses
Si votre "exemple de données" est le train, il semble très petit. Je suggère d'abord d'utiliser plus de 15 exemples par classe.
comme dit dans les commentaires, il est préférable de faire correspondre l'algorithme au problème, de sorte que vous pouvez simplement tester pour voir quel algorithme fonctionne le mieux. Mais pour commencer, je suggère SVM: il fonctionne mieux que KNN avec de petits trains, et généralement plus facile à former que ANN, car il y a moins de choix à faire.
KNN est l'algorithme d'apprentissage le plus basique à paramétrer et mettre en œuvre, mais comme l'a mentionné @etov, serait probablement dépassé par SVM en raison de la petite taille des données de formation. On a également observé que les ann étaient limitées par le manque de données sur la formation. Toutefois, KNN fait le moins d'hypothèses concernant vos données, si ce n'est que des données précises sur la formation devraient former des grappes relativement discrètes. ANN et SVM sont notoirement difficiles à paramétrer, surtout si vous souhaitez répétez le processus à l'aide de plusieurs ensembles de données et vous fondez sur certaines hypothèses, par exemple que vos données sont séparables de façon linéaire (SVM).
je recommande aussi L'algorithme de Random Forests, qui est facile à mettre en œuvre et qui est relativement insensible à la taille des données d'entraînement, mais je déconseille l'utilisation de très petites tailles de données d'entraînement.
le module scikit-learn contient ces algorithmes et est capable de faire face à de grandes tailles de données de formation, de sorte que vous pouvez augmenter le nombre d'échantillons de données de formation. la meilleure façon d'en être sûr serait de les étudier vous-même, comme le suggère @etov