Использование расстояния Bhattacharyya для выбора объектов
У меня есть набор из 240 функций, извлеченных с помощью обработки изображений. Цель состоит в том, чтобы классифицировать тестовые случаи на 7 различных классов после обучения. Для каждого класса есть около 60 наблюдений (а именно, у меня есть около 60 векторов объектов для каждого класса с каждым вектором, имеющим 240 компонентов).
многие исследовательские работы и книги используют последовательный прямой поиск или последовательный обратный поиск для выбора лучших объектов из вектора объектов. Следующая картина дает последовательный алгоритм прямого поиска.
любой такой алгоритм использует некоторый критерий для различения между объектами. Общим методом является использование расстояния Бхаттачарьи в качестве критерия. Расстояние Бхаттачарьи является мерой типа дивергенции между распределениями. В некоторых исследованиях и исследованиях я обнаружил, что заданная матрица 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
Я надеюсь, что это поможет всем, у кого есть аналогичная проблема.
Это часть алгоритма" оценить ветвь", за исключением того, что вы сначала будете использовать это расстояние Бхаттачарьи на одномерных векторах, затем двумерных векторах и т. д.