6

Ho una serie di 240 funzioni estratte utilizzando l'elaborazione delle immagini. L'obiettivo è classificare i casi di test in 7 classi diverse dopo l'allenamento. Per ogni classe ci sono circa 60 osservazioni (vale a dire, ho circa 60 vettori di caratteristiche per ogni classe con ciascun vettore avente 240 componenti).Utilizzo della distanza Bhattacharyya per la selezione delle funzioni

Molti documenti di ricerca e libri utilizzano la ricerca sequenziale in avanti o la ricerca sequenziale all'indietro per la selezione delle migliori caratteristiche di un vettore di funzionalità. L'immagine seguente offre un algoritmo di ricerca in avanti sequenziale. Here is a snapshot of the SFS algorithm

Qualsiasi algoritmo utilizza un criterio per discriminare le funzionalità. Un metodo comune è utilizzare la distanza di Bhattacharyya come criterio. La distanza di Bhattacharyya è una misura del tipo di divergenza tra le distribuzioni. In alcune ricerche e studi ho scoperto che data una matrice M1 per una classe A che comprende tutti i 60 vettori di caratteristiche di questa classe tale che ha n = 60 righe e m = 240 colonne (poiché ci sono un totale di 240 caratteristiche) e una matrice simile M2 per una classe BI può scoprire la distanza di Bhattacharyya tra loro e trovare la loro interdipendenza.

La mia domanda è come integrare i due. Come includere la distanza di Bhattacharyya come criterio per selezionare le migliori caratteristiche dell'algoritmo come descritto sopra.

risposta

2

Con l'aiuto di Arthur B. ho finalmente capito il concetto. Ecco la mia implementazione di esso. Anche se ho usato l'algoritmo Plus l Take away r (Sequential Forwards Backward Search), postò che è sostanzialmente lo stesso una volta che la ricerca all'indietro viene rimossa. L'implementazione di seguito è in MATLAB ma molto semplice da comprendere:

S=zeros(Size,1); %Initial the binary array feature list with all zeros implying no feature selected 
k=0; 
while k<n %Begin SFS. n is the number of features that need to be extracted 
t=k+l;  %l is the number of features to be added in each iteration 
while k<t 
    R=zeros(Size,1); %Size is the total number of features 
    for i=1:Size 
     if S(i)==0 %If the feature has not been selected. S is a binary array which puts a one against each feature that is selected 
      S_copy=S; 
      S_copy(i)=1; 
      R=OperateBhattacharrya(Matrices,S_copy,i,e,R); %The result of each iteration is stored in R 
     end 
    end 
    k=k+1; %increment k 
    [~,N]=max(R); %take the index of the maximum element in R as the best feature to be selected 
    S(N)=1;  % put the index of selected feature as 1 
end 
t=k-r; %r is the number of features to be removed after selecting l features. l>r 
while k>t %start Sequential Backward Search 
    R=zeros(Size,1); 
    for i=1:Size 
     if S(i)==1 
      S_copy=S; 
      S_copy(i)=0; 
      R=OperateBhattacharrya(Matrices,S_copy,i,1,R); 
     end 
    end 
    k=k-1; 
    [~,N]=max(R); 
    S(N)=0; 
end 
fprintf('Iteration :%d--%d\n',k,t); 
end 

Spero che questo aiuti chiunque abbia un problema simile.

+0

Esiste un codice per la funzione 'OperateBhattacharrya'? – Matthieu

+0

@Matthieu Ci sarebbe stato. Questo era un progetto di ricerca vicino a due anni fa. – Sohaib

1

Questo è il "valutare il ramo" parte dell'algoritmo, salvo il fatto che prima di utilizzare questa distanza Bhattacharyya su uno vettori tridimensionali, poi due vettori tridimensionali, ecc

+0

Può spiegarmi un po 'se spiego tutto il mio problema? – Sohaib

+0

Sentitevi liberi di aggiungere ulteriori dettagli. SFS è un approccio avido molto semplice alla selezione delle funzionalità. –

+0

Umm in realtà ha letto il primo paragrafo della mia domanda che ho aggiunto i dettagli. Acc. per la mia comprensione Bhattcharyya Distance trova la distanza tra due classi, ad esempio le righe di una matrice rappresentano il numero di osservazioni e le colonne rappresentano ciascuna caratteristica, quindi nel mio caso è come una matrice 60x240. Ho ragione? – Sohaib

Problemi correlati