Test di separabilità lineare


20

Esiste un modo per testare la separabilità lineare di un set di dati a due classi in dimensioni elevate? I miei vettori di funzionalità sono lunghi 40.

So di poter sempre eseguire esperimenti di regressione logistica e determinare il tasso di citrato vs falso allarme per concludere se le due classi sono separabili linearmente oppure no, ma sarebbe bene sapere se esiste già una procedura standard per farlo.


2
dai un'occhiata qui:
user603

È utile terreno separabiity: x = punti erroneamente classificati normali a separare piano, y = perdita cumulativa (x). (Per un diagramma di esempio, prova una nuova domanda con i tag svm e la visualizzazione dei dati.)
denis,

Che dire del problema con 3 classi? Tutti i problemi di 3+ ​​classi sono non lineari?
Rosy,

Risposte:


3

Bene, le macchine vettoriali di supporto (SVM) sono probabilmente ciò che stai cercando. Ad esempio, SVM con un kernel RBF lineare, le mappe sono caratterizzate da uno spazio dimensionale più elevato e tenta di separare le classi da un iperpiano lineare. Questo è un bel breve video SVM che illustra l'idea.

Puoi avvolgere SVM con un metodo di ricerca per la selezione delle caratteristiche (modello wrapper) e provare a vedere se una qualsiasi delle tue caratteristiche può risparmiare linearmente le classi che hai.

Esistono molti strumenti interessanti per l'utilizzo di SVM, inclusi LIBSVM , MSVMPack e Scikit -learn SVM .


1
+1. È quasi come se Nik stesse descrivendo SVM, senza averne sentito parlare. In R, potresti usare il e1071pacchetto (dal nome misterioso) svmcon kernel="linear"e guardare la previsione rispetto a quella reale.
Wayne,

1
Conosco gli SVM. Solo che non sapevo di poterli usare per testare la separabilità lineare senza classificare effettivamente ciascun campione.
Nik

4
@Wayne: Nik non sta effettivamente chiedendo SVM. Spiego nella mia risposta perché questa non è la soluzione al suo problema.
Raffael,

2
Non esiste un " kernel RBF lineare ".
Marc Claesen,

Ovviamente ! Si intendeva un kernel RBF che mappa i dati in uno spazio linearmente separabile.
soufanom,

17

Computazionalmente il modo più efficace per decidere se due serie di punti sono linearmente separabili è applicando la programmazione lineare . GLTK è perfetto per questo scopo e praticamente ogni linguaggio di alto livello offre un'interfaccia per esso: R , Python, Octave, Julia, ecc.

Rispetto alla risposta che suggerisce l'utilizzo degli SVM :

L'uso di SVM è una soluzione non ottimale per la verifica della separabilità lineare per due motivi:

  1. Gli SVM sono classificatori di margini di margine. Ciò significa che un kernel lineare SVM potrebbe accontentarsi di un piano di separazione che non si separa perfettamente anche se potrebbe essere effettivamente possibile. Se poi controlli il tasso di errore non sarà 0 e concluderai erroneamente che i due set non sono separabili linearmente. Questo problema può essere attenuato scegliendo un coefficiente di costo C molto elevato, ma ciò comporta un costo computazionale molto elevato.

  2. Le SVM sono classificatori a margine massimo. Ciò significa che l'algoritmo proverà a trovare un piano di separazione che sta separando le due classi mentre cerca di stare il più lontano possibile da entrambe. Ancora una volta questa è una caratteristica che aumenta inutilmente lo sforzo computazionale in quanto calcola qualcosa che non è rilevante per rispondere alla domanda di separabilità lineare.


Supponiamo che tu abbia una serie di punti A e B:

inserisci qui la descrizione dell'immagine

Quindi devi minimizzare lo 0 per le seguenti condizioni:

(La A in basso è una matrice, non l'insieme di punti dall'alto)

inserisci qui la descrizione dell'immagine

"Ridurre a icona 0" significa effettivamente che non è necessario ottimizzare effettivamente una funzione obiettiva perché ciò non è necessario per scoprire se gli insiemi sono separabili linearmente.

Alla fine ( inserisci qui la descrizione dell'immagine) sta definendo il piano di separazione.


inserisci qui la descrizione dell'immagine

Nel caso in cui sei interessato a un esempio funzionante in R o nei dettagli matematici, dai un'occhiata a questo .


3
Le SVM sono classificatori di margini di margine ... tranne quando si utilizza SVM con margini rigidi. Detto questo, usare SVM sarebbe come sparare una mosca con un cannone.
Marc Claesen,

è corretto - anche se molte (o forse la stragrande maggioranza) delle librerie SVM non offrono questa scelta
Raffael,

2
C

0

Perceptron lineare è garantito per trovare una soluzione se esiste. Questo approccio non è efficiente per grandi dimensioni. Computazionalmente il modo più efficace per decidere se due serie di punti sono linearmente separabili è applicando la programmazione lineare come indicato da @Raffael.

Una soluzione rapida sarebbe quella di risolvere un percettrone. Un codice con un esempio per risolvere usando Perceptron in Matlab è qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.