Test de séparabilité linéaire

20

Existe-t-il un moyen de tester la séparabilité linéaire d'un ensemble de données à deux classes dans des dimensions élevées? Mes vecteurs de caractéristiques mesurent 40 ans.

Je sais que je peux toujours exécuter des expériences de régression logistique et déterminer le taux de réussite par rapport au taux de fausse alarme pour conclure si les deux classes sont linéairement séparables ou non, mais il serait bon de savoir s'il existe déjà une procédure standard pour le faire.

Nik
la source
2
jetez un œil ici:
user603
Il est utile de tracer la séparabilité: x = points mal classés normal à plan de séparation, y = perte cumulée (x). (Pour un exemple d'intrigue, essayez une nouvelle question avec les balises svm et la visualisation des données.)
denis
Qu'en est-il du problème des 3 classes? Les problèmes des classes 3+ sont-ils non linéaires?
Rosy

Réponses:

3

Eh bien, les machines à vecteurs de support (SVM) sont probablement ce que vous recherchez. Par exemple, SVM avec un noyau RBF linéaire, mappe la fonctionnalité vers un espace dimensionnel supérieur et essaie de séparer les classes par un hyperplan linéaire. Ceci est une belle courte vidéo SVM illustrant l'idée.

Vous pouvez encapsuler SVM avec une méthode de recherche pour la sélection des fonctionnalités (modèle wrapper) et essayer de voir si l'une de vos fonctionnalités peut épargner linéairement les classes que vous avez.

Il existe de nombreux outils intéressants pour utiliser SVM, notamment LIBSVM , MSVMPack et Scikit-learn SVM .

soufanom
la source
1
+1. C'est presque comme si Nik décrivait les SVM, sans en avoir entendu parler. Dans R, vous pouvez utiliser les e1071packages (au nom mystérieux) svmavec kernel="linear"et regarder la prédiction par rapport à la réalité.
Wayne
1
Je connais les SVM. Juste que je ne savais pas que je pouvais les utiliser pour tester la séparabilité linéaire sans classer réellement chaque échantillon.
Nik
4
@Wayne: Nik ne demande en fait pas de SVM. J'explique dans ma réponse pourquoi ce n'est pas la solution à son problème.
Raffael
2
Un " noyau RBF linéaire " n'existe pas.
Marc Claesen
Bien sûr ! Il s'agissait d'un noyau RBF qui mappe les données dans un espace séparable linéairement.
soufanom
17

Calculativement, la façon la plus efficace de décider si deux ensembles de points sont linéairement séparables est d'appliquer une programmation linéaire . GLTK est parfait à cet effet et à peu près tous les langages de haut niveau offrent une interface pour cela - R , Python, Octave, Julia, etc.

En ce qui concerne la réponse suggérant l'utilisation des SVM :

L'utilisation de SVM est une solution sous-optimale pour vérifier la séparabilité linéaire pour deux raisons:

  1. Les SVM sont des classificateurs à marge souple. Cela signifie qu'un SVM à noyau linéaire peut se contenter d'un plan de séparation qui ne se sépare pas parfaitement, même si cela est effectivement possible. Si vous vérifiez ensuite le taux d'erreur, il ne sera pas égal à 0 et vous conclurez à tort que les deux ensembles ne sont pas linéairement séparables. Ce problème peut être atténué en choisissant un coefficient de coût C très élevé - mais cela vient lui-même à un coût de calcul très élevé.

  2. Les SVM sont des classificateurs à marge maximale. Cela signifie que l'algorithme essaiera de trouver un plan de séparation qui sépare les deux classes tout en essayant de rester le plus loin possible des deux. Encore une fois, c'est une caractéristique qui augmente inutilement l'effort de calcul car elle calcule quelque chose qui n'est pas pertinent pour répondre à la question de la séparabilité linéaire.


Disons que vous avez un ensemble de points A et B:

entrez la description de l'image ici

Ensuite, vous devez minimiser le 0 pour les conditions suivantes:

(Le A ci-dessous est une matrice, pas l'ensemble de points ci-dessus)

entrez la description de l'image ici

"Minimiser 0" signifie effectivement que vous n'avez pas besoin d'optimiser réellement une fonction objectif car cela n'est pas nécessaire pour savoir si les ensembles sont linéairement séparables.

À la fin ( entrez la description de l'image ici) définit le plan de séparation.


entrez la description de l'image ici

Si vous êtes intéressé par un exemple de travail en R ou les détails mathématiques, vérifiez - le.

Raffael
la source
3
Les SVM sont des classificateurs à marge souple ... sauf lorsque vous utilisez des SVM à marge ferme. Cela dit, utiliser des SVM reviendrait à tirer sur une mouche avec un canon.
Marc Claesen
c'est exact - bien que beaucoup (ou peut-être la grande majorité) des bibliothèques SVM n'offrent pas ce choix
Raffael
2
C
0

Perceptron linéaire est garanti de trouver une solution si elle existe. Cette approche n'est pas efficace pour les grandes dimensions. Calculativement, le moyen le plus efficace pour décider si deux ensembles de points sont linéairement séparables est d'appliquer la programmation linéaire comme mentionné par @Raffael.

Une solution rapide serait de résoudre un perceptron. Un code avec un exemple pour résoudre l'utilisation de Perceptron dans Matlab est ici

Rishi Dua
la source