【问题标题】:Using Bhattacharyya Distance for feature selection使用 Bhattacharyya 距离进行特征选择
【发布时间】:2013-11-05 14:59:41
【问题描述】:

我有一组使用图像处理提取的 240 个特征。 目标是在训练后将测试用例分为 7 个不同的类别。每个类大约有 60 个观察值(即,每个类有大约 60 个特征向量,每个向量有 240 个分量)。

许多研究论文和书籍利用顺序前向搜索或顺序后向搜索从特征向量中选择最佳特征。 下图给出了顺序前向搜索算法。

任何此类算法都使用一些标准来区分特征。一种常用的方法是使用 Bhattacharyya 距离作为标准。 Bhattacharyya 距离是分布之间的散度类型度量。在一些研究和研究中,我发现给定 A 类的矩阵 M1,该矩阵由该类的所有 60 个特征向量组成,使得它具有 n=60 行和 m=240 列(因为总共有 240 个特征)和一个类BI的类似矩阵M2可以找出它们之间的Bhattacharyya距离并找到它们的相互依赖关系。

我的问题是如何将两者结合起来。如上所述,如何将 Bhattacharyya 距离作为选择算法中最佳特征的标准。

【问题讨论】:

    标签: algorithm machine-learning data-mining feature-selection


    【解决方案1】:

    在 Arthur B. 的帮助下,我终于理解了这个概念。 这是我的实现。尽管我使用了 Plus l Take away r 算法(Sequential Forwards Backward Search),但我会发布它,因为一旦删除了 Backward Search,它就基本相同了。下面的实现是在 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
    

    我希望这对遇到类似问题的人有所帮助。

    【讨论】:

    • OperateBhattacharrya函数有代码吗?
    • @Matthieu 本来会有的。这是大约两年前的一个研究项目。
    【解决方案2】:

    这是算法的“评估分支”部分,除了您首先将这个 Bhattacharyya 距离用于一维向量,然后是二维向量,等等。

    【讨论】:

    • 如果我解释一下我的整个问题,你能详细说明一下吗?
    • 欢迎添加更多细节。 SFS 是一种非常简单的贪心选择特征的方法。
    • 嗯实际上阅读了我的问题的第一段,我添加了详细信息。会计。据我了解,Bhattcharyya Distance 找到两个类之间的距离,例如矩阵的行代表观察的数量,列代表每个特征,所以在我的例子中,它就像一个 60x240 矩阵。我说的对吗?
    • 要找到集合中的最佳特征,您将使用 60x1 矩阵。然后找到第二好的,一个 60x2 矩阵......等等。
    • 所以我发现 1 类到其他 6 个类的距离相加。然后是第 2 类并将它们相加,依此类推。最后是所有其他班级的第 7 节课。哪个班级的距离最远它会成为最好的?会不会太复杂了?
    猜你喜欢
    • 2018-05-23
    • 2013-08-15
    • 2016-03-16
    • 1970-01-01
    • 2022-07-27
    • 2014-11-05
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多