Je regarde actuellement la forme primitive non contrainte du classificateur un contre tous
où
est le nombre d'instances, est le nombre de classes, est le nombre d'entités, est une matrice de données , est un vecteur d'étiquettes de classe, est une où chacune correspond aux poids de l'hyperplan divisant une classe du reste, est une fonction de perte arbitraire.
Ma compréhension est que la fonctionnalité ci-dessus essaie de trouver un hyperplan pour chaque classe qui maximise la distance entre les échantillons de la classe associée à tous les autres échantillons. Si les hyperplans sont correctement positionnés, doit toujours être négatif, doit toujours être positif et notre fonction de perte doit revenir. Plutot bas.
J'essaie de mettre en œuvre cela en utilisant la perte de charnière qui, je crois dans ce cas, finira par être
).
Cependant, dans ce qui précède, nous ne pourrions pas nous retrouver dans une situation où les hyperplans classeraient tous les échantillons comme appartenant à chaque classe. Par exemple, si nous examinons l'hyperplan séparant la classe 1 de toutes les autres classes, à condition que alors la perte encourue sera de 0 bien que soit classé dans la mauvaise classe.
Où ai-je mal tourné? Ou n'a-t-il pas d'importance si est négatif ou positif à condition que se retrouve avec un score plus élevé? J'ai le sentiment que mon utilisation de la fonction de charnière telle que je l'ai décrite ici est incorrecte, mais mon utilisation de Google aujourd'hui n'a fait qu'engendrer plus de confusion.
Sur une note connexe, pourquoi y a-t-il un 1 dans la fonctionnalité ci-dessus? Je pense que cela aurait peu d'impact.
\cdot
au lieu de\dot
. Si c'est le cas, veuillez continuer et apporter ces modifications. À votre santé. :)Il manque le résultat / label binaire (qui peut prendre la valeur +1 et -1 pour une classe donnée) dans la fonction de perte: max (0, 1 - y * (w * x)) (voir détails ci-dessous).
Dans l'ensemble, je pense que la spécification ci-dessus (à la fois la notation et la fonction de perte) complique excessivement un contre tous - au lieu de cela, on pourrait simplement prendre une classe particulière, construire + 1 / -1 résultat y ainsi que la matrice de données correspondante X (avec Nf colonnes et lignes Ni) et le vecteur de paramètres w pour cette classe, et écrivez la fonction de perte de charnière correspondante pour un classificateur binaire classique pour cette classe: sum (max (0, 1 - y * (w * x)))) où la somme est sur toutes les instances de données, x est une ligne de X qui correspond à une instance particulière. On a besoin de "1" dans la fonction de perte de charnière (puisque y * (w * x)> = 1 correspond à la bonne prédiction du modèle en ce qui concerne la fonction de perte).
la source