基于支持向量数据描述 (SVDD) 进行多类分类(Matlab代码实现)

 ‍个人主页:研学社的博客  

欢迎来到本博客❤️❤️

博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

本文目录如下:

目录

1 概述

一、引言

二、SVDD算法原理

三、基于SVDD的多类分类方法

四、讨论与展望

五、结论

2 运行结果

3 参考文献

4 Matlab代码实现


1 概述

使用支持向量数据描述 (SVDD) 进行多类分类。矩阵代码。基于SVDD的多类分类在此MATLAB脚本中呈现。多类 SVDD 有用但复杂的问题。尽管如此,该代码仍然具有功能性,适用于理论测试,目的是使其在强应用情况下表现良好。

一、引言

支持向量数据描述(SVDD)是一种重要的数据描述方法,它能够对目标数据集进行超球形描述,并可用于异类点检测或分类。在多类分类问题中,SVDD通过将每个类别视为独立的超球体,从而实现对不同类别的有效区分。本文将深入探讨基于SVDD的多类分类方法,并分析其在实际应用中的性能。

二、SVDD算法原理

  1. 基本思想

    • SVDD算法的主要思想是寻求一个包含所有或几乎所有的目标样本且体积最小的超球体或域。这个超球体由支持向量决定,即位于超球体边界上的数据点。
  2. 算法步骤

    • 非线性映射:将原始训练样本映射到高维的内积空间(或特征空间),以便更容易进行球形描述。
    • 寻找最优超球体:在特征空间中寻找一个包含全部或大部分被映射到特征空间的训练样本且体积最小的超球体。
    • 分类决策:对于新样本,如果其在特征空间中的像落入最优超球体内,则被视为正常点;否则,被视为异常点。

三、基于SVDD的多类分类方法

  1. “1 vs all”策略

    • 将每个类别分别看作一类,其他所有类别看作第二类,这样就构成了N个二分类问题,其中N是类别数目。对于每个二分类问题,都训练一个SVDD模型。
    • 对于未知样本,将其输入到每个二分类模型中进行分类,最后根据各个二分类问题的结果,决定将未知样本归为哪个类别。
  2. 多类SVDD模型

    • 另一种方法是为每个类别建立一个独立的SVDD模型,即每个类别都有一个超球体来描述。这种方法需要解决多个超球体可能相交的问题。
    • 一种解决方案是对相交区域的样本单独建立超球,重复该步骤,直到相交区域消失或相交区域内没有样本点。

四、讨论与展望

  1. 优势与局限性

    • SVDD算法在多类分类问题中表现出一定的优势,如能够处理非线性数据、对异常点敏感等。
    • 然而,该算法也存在一些局限性,如计算复杂度较高、对参数选择敏感等。
  2. 未来研究方向

    • 探索更高效的多类SVDD算法,如结合其他优化算法进行联合优化。
    • 研究如何将SVDD算法应用于实际电力系统中的电压调节、故障诊断等问题。

五、结论

基于支持向量数据描述(SVDD)的多类分类方法是一种有效的分类策略。通过将每个类别视为独立的超球体,该算法能够实现对不同类别的有效区分。实验结果表明,该方法在多个标准数据集上取得了良好的分类性能。未来,将进一步探索SVDD算法在电力系统等领域的应用,并寻求更高效、更稳定的算法实现。

2 运行结果

基于支持向量数据描述 (SVDD) 进行多类分类(Matlab代码实现)_第1张图片

基于支持向量数据描述 (SVDD) 进行多类分类(Matlab代码实现)_第2张图片 部分代码:

function [param_star, C_star, err_matrix] = ...
    CV_MultiSVDD(X, Y, kernel,nrip, KerPar,Cpar)

% Cross Validation function for MC-SVDD

    Num_class = length(unique(Y));
    minimum_abs = 100;

    for rip = 1:nrip

        disp(['--->', num2str(rip)])

        cv = cvpartition(Y,'HoldOut',0.3, 'Stratify',true);
        idx = cv.test;

        Xtr = X(~idx,:); Ytr = Y(~idx,:);
        Xvl = X(idx,:); Yvl = Y(idx,:);

        err_matrix = zeros(size(KerPar,2),size(Cpar,1));

        i = 0; 
        
        for param = KerPar

            i = i + 1;
            
            j = 0;

            for C = Cpar'

                C = C';

                j = j + 1;

                [x_class, Ytr_class, Rsquared_class, a_class, SV_class, YSV_class]=...
            NC_SVDD_TRAINING(Xtr, Ytr, Num_class, kernel, param, C);

                y_predict = ...
                    NC_SVDD_TEST(Xtr, Ytr_class, Num_class, x_class, Xvl, kernel, param, Rsquared_class);
                
                n = size(Yvl,1);

                err = (n-sum(Yvl == y_predict))/n;

                err_matrix(i,j) = err;

            end
        end

        minimum = min(min(err_matrix));

        if minimum < minimum_abs

            [x,y]=find(err_matrix==minimum);

            param_star = KerPar(x(1));

            C_star = Cpar(y(1),:);

            minimum_abs = minimum;

            disp(minimum_abs)

        end

    end

disp('Done')

end

function [] = ConfusionMatrix(y, y_pred, Num_class)

% Confusion Matrix
% Usage: ConfusionMatrix(y, y_pred, Num_class)

CM = zeros(Num_class, Num_class);

m = [y y_pred];

for i = 1:Num_class
    for j = 1:Num_class
        
        CM(i,j) = sum(m(:,1)==i & m(:,2)==j);

    end
end    

disp('Confusion Matrix')
disp(CM)

3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]蔡金燕,杜敏杰.多分类SVDD混叠域识别新方法与故障诊断应用[J].航天控制,2012,30(06):83-88.DOI:10.16804/j.cnki.issn1006-3242.2012.06.016.

[2]Carlevaro and M. Mongelli, "A New SVDD Approach to Reliable and Explainable AI," in IEEE Intelligent Systems, vol. 37, no. 2, pp. 55-68, 1 March-April 2022, doi: 10.1109/MIS.2021.3123669.

[3]BibTex @ARTICLE{9594676, author={Carlevaro, Alberto and Mongelli, Maurizio}, journal={IEEE Intelligent Systems}, title={A New SVDD Approach to Reliable and Explainable AI}, year={2022}, volume={37}, number={2}, pages={55-68}, doi={10.1109/MIS.2021.3123669}}

4 Matlab代码实现

你可能感兴趣的:(分类,matlab,人工智能)