Techniques de catégorisation / segmentation


9

Tout d'abord, permettez-moi de dire que je suis un peu hors de ma profondeur ici, donc si cette question doit être reformulée ou fermée en double, veuillez me le faire savoir. Il se peut simplement que je n'ai pas le vocabulaire approprié pour exprimer ma question.

Je travaille sur une tâche de traitement d'image dans laquelle j'identifie les caractéristiques d'une image, puis je les classe en fonction de leurs propriétés, y compris la forme, la taille, l'obscurité, etc. Je pourrais améliorer les méthodes que j'utilise pour la classification des fonctionnalités.

À l'heure actuelle, je fixe des seuils pour chacun des paramètres mesurés, puis je classe les entités selon une logique simple en fonction des seuils que l'entité a franchis. Par exemple (les propriétés et les regroupements réels sont plus complexes, mais j'essaie de simplifier des parties non pertinentes de mon projet pour cette question), disons que je regroupe les fonctionnalités dans les groupes "Big and Dark", "Big and Light" et petit". Ensuite, une fonction sera dans "Big and Dark" si (taille ( )> sizeThreshold) et (obscurité ( )> obscuritéThreshold).AAA

L'objectif est que la classification soit en accord avec la classification effectuée par un humain de niveau expert, donc je peux définir les seuils pour produire la meilleure correspondance entre les regroupements effectués par l'homme et l'ordinateur sur un ensemble de tests, puis espérer que la classification fonctionne bien avec de nouvelles données.

Cela fonctionne déjà assez bien, mais je vois un mode de défaillance particulier qui, je pense, peut être corrigé. Disons que la fonction appartient à «Big and Dark». L'humain l'a classé de cette façon parce que, alors qu'il était à peine assez grand, il faisait très très sombre, ce qui compensait quelque peu le manque de «grandeur». Mon algorithme ne parviendrait pas à classer cette fonctionnalité correctement, car la classification est basée sur une logique binaire rigide et nécessite que tous les seuils soient franchis.A

Je voudrais améliorer cet échec en faisant en sorte que mon algorithme imite mieux le processus guidé par l'homme, dans lequel une déficience d'un paramètre peut être compensée par une abondance d'un autre. Pour ce faire, je voudrais prendre chacune des propriétés de base de mes fonctionnalités et les convertir en une sorte de score qui serait un prédicteur du groupe auquel appartient la fonctionnalité. J'ai pensé à de nombreuses façons de le faire, mais ce sont principalement des idées ad hoc, basées sur mes antécédents en calcul vectoriel et en physique. Par exemple, j'ai envisagé de traiter chaque entité comme un vecteur dans l'espace ND des propriétés de l'entité et de calculer la projection de chaque entité le long de certains vecteurs, chacun mesurant le degré auquel une entité appartient au groupe.

Je suis sûr qu'il existe une technique plus rigoureuse et mieux établie pour faire ce genre de chose, mais mes antécédents sont relativement faibles en analyse statistique, donc je cherche un coup de pouce dans la bonne direction. Même le nom d'une technique ou un lien vers un manuel serait utile.

TL; DR: Quelles techniques sont utiles pour classer des objets en fonction d'un grand nombre de paramètres descriptifs?


@Colin Ce serait bien de regarder les photos. Vous avez expliqué votre problème en détail, ce serait un bon complément. :)
deps_stats

@deps_stats: Merci pour les encouragements, je suis heureux de voir que les gens pensent que j'ai posé ma question au moins assez décemment. Malheureusement, mes données ne sont probablement pas quelque chose qui devrait être sur un site Web public. Ce n'est pas exactement classé, mais ce n'est certainement pas pour la consommation publique. J'essaierai de générer des données artificielles qui serviront de bon exemple aux fins de cette question, mais je n'aurai peut-être pas le temps de le faire pendant un jour ou deux.
Colin K

@Colin Pas de problème. Je travaille actuellement sur la segmentation du marché pour un grossiste en pharmacie. Le problème est que leurs données ressemblent beaucoup à des signaux. Je vois beaucoup de similitudes entre mon problème et le vôtre. J'essaierai de publier des recherches qui pourraient vous aider.
deps_stats

@deps_stats: J'aimerais que mes données ressemblent davantage à des signaux. Je suis beaucoup plus à l'aise avec le traitement du signal qu'avec ce type de modélisation / analyse statistique.
Colin K

@Colin Avez-vous déjà essayé une analyse de clustering? (k-means, clustering hiérarchique, partitionnement autour des médoïdes ...)
deps_stats

Réponses:


5

Il semble que tout classificateur linéaire fera ce dont vous avez besoin. Supposons que vous ayez entités et que la valeur de l'entité soit . Un classificateur linéaire calculera alors un score (où est le décalage). Alors, si (où est un certain seuil), alors l'entité appartient à une classe (un groupe), et siNifi

s=iwifi+o
os>tts<t, alors ce n'est pas le cas. Notez qu'il existe un seul seuil appliqué à l'ensemble du score (plutôt qu'aux valeurs des caractéristiques individuelles), de sorte qu'une carence dans un paramètre peut être compensée par l'abondance dans un autre. Les poids sont interprétables intuitivement, en ce sens que plus le poids est élevé, plus cette caractéristique est importante (ou décisive).

Il existe de nombreux classificateurs linéaires disponibles sur le marché qui peuvent le faire, y compris SVM, LDA (analyse discriminante linéaire), les réseaux de neurones linéaires et bien d'autres. Je commencerais par exécuter SVM linéaire car il fonctionne bien dans de nombreux cas et peut tolérer des données d'entraînement limitées. Il existe également de nombreux packages dans de nombreux environnements (comme Matlab et R), vous pouvez donc facilement l'essayer. L'inconvénient de SVM est qu'il peut être lourd en termes de calcul, donc si vous avez besoin d'apprendre beaucoup de classes, il pourrait être moins approprié.

Si vous souhaitez conserver une partie du comportement de seuil que vous avez actuellement, vous pouvez passer les valeurs d'entité via un sigmoïde avec le seuil au bon endroit. Par exemple, pour une fonctionnalité pour laquelle vous utilisez actuellement un seuil de , commencez par calculer puis apprenez un classificateur linéaire en utilisant plutôt que ' s. De cette façon, le comportement de compensation ne se produira qu'à proximité du seuil, et les choses trop éloignées du seuil ne pourront pas être compensées (ce qui est parfois souhaitable).iti

gi=11+exp(fiti),
gf

Une autre chose que vous pourriez essayer est d'utiliser des classificateurs probabilistes comme Naive Bayes ou TAN. Naive Bayes est presque comme un classificateur linéaire, sauf qu'il calcule Il reste donc une somme de poids. Ces poids dépendent des valeurs d' , mais pas par multiplication comme dans un classificateur linéaire habituel. Dans ce cas, le score est la probabilité logarithmique et les poids sont les contributions des caractéristiques individuelles à cette probabilité logarithmique. L'inconvénient de l'utiliser dans votre cas est que vous aurez besoin de plusieurs bacs pour les valeurs de vos fonctionnalités, puis l'apprentissage peut devenir difficile. Il existe des moyens de contourner cela (par exemple, en utilisant des antérieurs), mais comme vous n'avez aucune expérience avec cela, cela pourrait être plus difficile.

s=iwfii.
fi

En ce qui concerne la terminologie: ce que vous appelez «ensemble de tests» est généralement appelé «ensemble de formation» dans ce contexte, et ce que vous appelez «nouvelles données» est appelé «ensemble de tests».

Pour un livre, j'avais lu "Reconnaissance de formes" de Duda, Hart et Stork. Le premier chapitre est une très bonne introduction pour les débutants.


1
J'ai acheté une copie de "Pattern Recognition" de D, H et S. C'est vraiment spectaculaire, et le tout est utile et facile à suivre. Merci encore. C'est exactement ainsi que SE est censé fonctionner :)
Colin K
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.