Использование расстояния Bhattacharyya для выбора объектов

У меня есть набор из 240 функций, извлеченных с помощью обработки изображений. Цель состоит в том, чтобы классифицировать тестовые случаи на 7 различных классов после обучения. Для каждого класса есть около 60 наблюдений (а именно, у меня есть около 60 векторов объектов для каждого класса с каждым вектором, имеющим 240 компонентов).

многие исследовательские работы и книги используют последовательный прямой поиск или последовательный обратный поиск для выбора лучших объектов из вектора объектов. Следующая картина дает последовательный алгоритм прямого поиска. Here is a snapshot of the SFS algorithm

любой такой алгоритм использует некоторый критерий для различения между объектами. Общим методом является использование расстояния Бхаттачарьи в качестве критерия. Расстояние Бхаттачарьи является мерой типа дивергенции между распределениями. В некоторых исследованиях и исследованиях я обнаружил, что заданная матрица M1 для класса A, состоящая из всех 60 векторов признаков этого класса, так что она имеет n=60 строк и m=240 столбцов (так как всего 240 особенности) и аналогичная матрица M2 для класса B я могу узнать расстояние Бхаттачарьи между ними и найти их взаимозависимость.

мой вопрос в том, как я могу интегрировать эти два. Как включить расстояние Бхаттачарьи в качестве критерия для выбора лучших функций в алгоритме, как описано выше.

2 ответов


С помощью Артура Б. Я, наконец, понял концепцию. Вот моя реализация. Хотя я использовал алгоритм Plus l Take away r (последовательный обратный поиск), я сообщаю, что, поскольку он в основном одинаков после удаления обратного поиска. Приведенная ниже реализация находится в 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

Я надеюсь, что это поможет всем, у кого есть аналогичная проблема.


Это часть алгоритма" оценить ветвь", за исключением того, что вы сначала будете использовать это расстояние Бхаттачарьи на одномерных векторах, затем двумерных векторах и т. д.