6

Ich habe eine Reihe von 240 Funktionen mit Bildverarbeitung extrahiert. Ziel ist es, Testfälle nach dem Training in 7 Klassen einzuteilen. Für jede Klasse gibt es ungefähr 60 Beobachtungen (nämlich, ich habe ungefähr 60 Merkmalsvektoren für jede Klasse, wobei jeder Vektor 240 Komponenten hat).Verwendung von Bhattacharyya Entfernung für Feature-Auswahl

Viele Forschungsarbeiten und Bücher nutzen die Sequential Forward Search oder Sequential Backward Suche nach Auswahl der besten Features aus einem Feature-Vektor. Das folgende Bild zeigt einen sequenziellen Vorwärtssuchalgorithmus. Here is a snapshot of the SFS algorithm

Jeder solcher Algorithmus verwendet ein Kriterium, um zwischen Merkmalen zu unterscheiden. Eine gängige Methode ist, die Bhattacharyya-Distanz als Kriterium zu verwenden. Die Bhattacharyya-Distanz ist ein Divergenztyp zwischen den Verteilungen. Bei einigen Untersuchungen und Studien fand ich, dass eine Matrix M1 für eine Klasse A, die aus allen 60 Merkmalsvektoren dieser Klasse besteht, so gegeben ist, dass sie n = 60 Zeilen und m = 240 Spalten (da es insgesamt 240 Merkmale gibt) und Eine ähnliche Matrix M2 für eine Klasse BI kann die Bhattacharyya Distanz zwischen ihnen herausfinden und ihre gegenseitige Abhängigkeit finden.

Meine Frage ist, wie integriere ich die beiden. Wie schließe ich die Bhattacharyya-Distanz als Kriterium für die Auswahl der besten Merkmale im oben beschriebenen Algorithmus ein?

Antwort

2

Mit Hilfe von Arthur B. mir endlich verstanden das Konzept. Hier ist meine Implementierung davon. Obwohl ich den Plus l Take away r-Algorithmus (Sequential Forwards Backward Search) verwendet habe, poste ich das, da es im Grunde genommen dasselbe ist, sobald die Rückwärtssuche entfernt wurde. Die folgende Implementierung ist in Matlab aber sehr einfach zu verstehen:

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 

Ich hoffe, das hilft jedem, der ein ähnliches Problem hat.

+0

Gibt es einen Code für 'OperateBhattacharrya' Funktion? – Matthieu

+0

@Matthieu wäre es gewesen. Dies war ein Forschungsprojekt vor zwei Jahren. – Sohaib

1

, dass der „bewertet den Zweig“ Teil des Algorithmus ist, außer dass Sie ersten Bhattacharyya Abstand auf eindimensionalen Vektoren verwenden werden, dann zwei Vektoren usw.

+0

Können Sie ein wenig ausarbeiten, wenn ich mein ganzes Problem erkläre? – Sohaib

+0

Fühlen Sie sich frei, weitere Details hinzuzufügen. SFS ist ein sehr einfacher gieriger Ansatz zum Auswählen von Features. –

+0

Umm tatsächlich den ersten Absatz meiner Frage gelesen hatte ich die Details hinzugefügt. Acc. zu meinem Verständnis Bhattcharyya Distance findet den Abstand zwischen zwei Klassen zum Beispiel die Zeilen einer Matrix repräsentieren die Anzahl der Beobachtungen und die Spalten repräsentieren jedes Merkmal, so in meinem Fall ist es wie eine 60x240-Matrix. Habe ich recht? – Sohaib

Verwandte Themen