当前位置:   article > 正文

机器学习之SVM支持向量机_svm分类器

svm分类器

目录

经典SVM

软间隔SVM

核SVM

SVM分类器应用于人脸识别

SVM优点

SVM缺点 


经典SVM

支持向量机(Support Vector Machine,SVM)是一种二分类模型,其基本思想是在特征空间中找到一个最优的超平面,使得正负样本点到该超平面的距离最大化,从而实现对样本的分类。

软间隔SVM

核SVM

SVM分类器应用于人脸识别

经典SVM为二分类模型,对于多分类模型,可以通过以下两种方法实现:

①One-vs-One(OVO):将每个类别之间的所有可能组合都训练一个二元分类器,然后通过投票或者加权投票来决定最终的分类结果。

②One-vs-All(OVA):将一个类别作为正例,其余所有类别作为负例,训练一个二元分类器,然后重复这个过程,直到每个类别都有一个分类器。最后通过投票或者加权投票来决定最终的分类结果。

对于人脸识别,SVM是用来分类的,我们可以使用像PCA、LDA、LPP、NPE等降维算法先进行数据降维再分类。

 SVM二分类代码,即文章开头的图片示例matlab代码:

  1. % 生成随机数据
  2. X = [randn(20,2)-2; randn(20,2)+2]; % 生成20个标签为-1的点和20个标签为1的点,分别在(-4,-4)和(4,4)的区域内
  3. Y = [-1*ones(20,1); ones(20,1)]; % 将标签存入列向量y中
  4. % 拟合SVM模型
  5. svmModel = fitcsvm(X,Y); % 拟合线性SVM模型
  6. % 绘制决策边界
  7. w = svmModel.Beta; % 获取模型的权重向量w
  8. b = svmModel.Bias; % 获取模型的偏置项b
  9. a = -w(1)/w(2); % 计算决策边界的斜率
  10. xx = linspace(-5,5); % 生成x坐标
  11. yy = a*xx - b/w(2); % 计算决策边界的y坐标
  12. margin = 1/sqrt(sum(w.^2)); % 计算间隔边界的宽度
  13. yy_down = yy - sqrt(1+a^2)*margin; % 计算下界的y坐标
  14. yy_up = yy + sqrt(1+a^2)*margin; % 计算上界的y坐标
  15. % 绘制数据点和支持向量
  16. figure; % 创建新的图形窗口
  17. gscatter(X(:,1),X(:,2),Y,'br','x+'); % 绘制数据点,标签为-1的点用蓝色表示,标签为1的点用红色表示
  18. hold on; % 将图形保持在当前状态,以便绘制其他图形
  19. plot(xx,yy,'k-'); % 绘制决策边界
  20. plot(xx,yy_down,'k--'); % 绘制间隔边界下界
  21. plot(xx,yy_up,'k--'); % 绘制间隔边界上界
  22. plot(svmModel.SupportVectors(:,1),svmModel.SupportVectors(:,2),'go','MarkerSize',10); % 绘制支持向量,用黑色圆点表示
  23. axis([-5 5 -5 5]); % 设置坐标轴范围
  24. legend('Class A','Class B','Decision boundary','Margin','Margin','Support vectors'); % 设置图例
  25. hold off; % 关闭当前图形的保持状态,以便绘制其他图形

人脸识别多分类,使用OVO模式训练SVM模型,构建标签矩阵后进行模型训练,然后将数据写入excel表格,我这里的代码例子是先用PCA进行降维的,所以写入PCA.xlsx文件中。

  1. halfDataNumber=pictureNumber/2;
  2. Y=zeros(halfDataNumber,1);
  3. for i=1:halfDataNumber
  4. Y(i)=floor((i-1)/testNumber)+1;
  5. end
  6. for dimension=5:5:160
  7. egienvector=egienvectors(:,1:dimension);
  8. trainDataTemp=egienvector'*trainData;
  9. testDataTemp=egienvector'*testData;
  10. right=0;
  11. model=fitcecoc(trainDataTemp',Y);
  12. YPredicted=predict(model,testDataTemp');
  13. for i=1:halfDataNumber
  14. if Y(i)==YPredicted(i)
  15. right=right+1;
  16. end
  17. end
  18. rate=right/halfDataNumber;
  19. SVMresult=[SVMresult,rate];
  20. end
  21. X=5:5:160;
  22. plot(X,SVMresult);
  23. writematrix(SVMresult,'PCA.xlsx');

SVM优点

优点:

  1. 高效性:SVM在处理高维度数据和样本数量较少的情况下表现出色,因为它只关注支持向量,而不受非支持向量的影响。
  2. 可解释性:SVM提供了对分类结果的良好解释能力。支持向量可以帮助我们了解决策边界及分类结果的原因。
  3. 鲁棒性:SVM对于处理输入空间中的噪音和异常值具有较好的鲁棒性。由于它的决策函数只依赖于支持向量,所以局部的扰动并不会对整体模型产生很大影响。
  4. 泛化能力:SVM通过最大化间隔来选择最优决策边界,从而提高了模型的泛化能力。这种特性使得SVM在处理未见过的数据时表现较好。

SVM缺点 

缺点:

  1. 参数调优困难:SVM中的核函数和正则化参数需要事先进行合理设置,而且对于不同的问题,最优的参数往往是不同的,因此调优可能需要耗费大量的时间和计算资源。
  2. 计算复杂度高:当样本量很大时,SVM的计算复杂度会显著增加,尤其是在使用非线性核函数时。这可能导致训练时间较长,并且在大规模数据集上的应用受到限制。
  3. 对缺失数据敏感:SVM对于缺失数据较为敏感,因为它主要依赖于支持向量,如果包含缺失值的样本成为支持向量,则可能会影响模型的性能。
  4. 难以处理多分类问题:原始的SVM算法是二分类算法,要将其扩展到多类别问题,通常需要借助一些技巧,如一对多(One-vs-Rest)或一对一(One-vs-One)策略。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/737714
推荐阅读
相关标签
  

闽ICP备14008679号