6

나는 이미지 처리를 사용하여 240 개의 특징 집합을 추출했습니다. 교육의 목적은 테스트 케이스를 7 개의 다른 클래스로 분류하는 것입니다. 각 클래스에는 약 60 개의 관측이 있습니다 (즉, 각 클래스에는 240 개의 구성 요소가있는 각 벡터에 대해 약 60 개의 특징 벡터가 있음).특징 선택을위한 Bhattacharyya 거리 사용

많은 연구 논문 및 서적은 특징 벡터에서 최상의 특징을 선택하기 위해 연속 순방향 검색 또는 순차 역 검색을 사용합니다. 다음 그림은 순차적 순방향 검색 알고리즘을 제공합니다.

이러한 알고리즘은 기능을 구분하기 위해 몇 가지 기준을 사용합니다. 일반적인 방법은 Bhattacharyya Distance를 기준으로 사용하는 것입니다. Bhattacharyya Distance는 분포 사이의 분기 유형 측정입니다. 일부 연구 및 연구에서 클래스 A에 대한 행렬 M1이이 클래스의 모든 60 개의 특징 벡터로 구성되어 있고 n = 60 행 및 m = 240 열 (총 240 개의 피쳐가 있음)과 클래스 BI에 대한 유사한 행렬 M2는 그들 사이의 Bhattacharyya Distance를 알아 내고 그들의 상호 의존성을 발견 할 수있다.

내 질문은 두 가지를 통합하는 방법입니다. 위에서 설명한대로 알고리즘에서 최상의 기능을 선택하기위한 기준으로 Bhattacharyya Distance를 어떻게 포함시킬 수 있습니까?

답변

2

개념. 내 구현은 다음과 같습니다. 내가 Backward Search가 제거되면 기본적으로 동일하므로 Plus l 알고리즘을 사용합니다 (순차적 포워드 역방향 검색). 아래의 구현은 matlab에 있지만 매우 이해하기 쉽습니다.

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 

이 문제가 비슷한 사람에게 도움이되기를 바랍니다.

+0

OperateBhattacharrya 함수에 대한 코드가 있습니까? – Matthieu

+0

@Matthieu 있었을 것입니다. 이것은 2 년 전의 연구 프로젝트였습니다. – Sohaib

1
당신이 먼저 한 차원 벡터, 두 차원 벡터에 Bhattacharyya 거리를 사용할 것이다 제외하고, 알고리즘의 "분기 평가"부분

나는 마침내 이해 아서 B.에서 도움을
+0

내 모든 문제를 설명하면 좀 자세히 설명 할 수 있습니까? – Sohaib

+0

자세한 내용을 언제든지 추가하십시오. SFS는 기능을 선택하는 매우 단순한 욕심 많은 접근 방식입니다. –

+0

음 사실 내 질문의 첫 번째 단락을 읽고 세부 사항을 추가했습니다. Acc. Bhattcharyya Distance는 두 클래스 사이의 거리를 찾습니다. 예를 들어 행렬의 행은 관측 수를 나타내고 열은 각 경우의 특성을 나타내므로 60x240 행렬과 같습니다. 내가 맞습니까? – Sohaib