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.
Réponses:
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 .
la source
e1071
packages (au nom mystérieux)svm
aveckernel="linear"
et regarder la prédiction par rapport à la réalité.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:
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é.
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:
Ensuite, vous devez minimiser le 0 pour les conditions suivantes:
(Le A ci-dessous est une matrice, pas l'ensemble de points ci-dessus)
"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 ( ) définit le plan de séparation.
Si vous êtes intéressé par un exemple de travail en R ou les détails mathématiques, vérifiez - le.
la source
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
la source