SVM 实现多分类思路

svm 是针对二分类问题, 如果要进行多分类, 无非就是多训练几个svm呗

OVR (one versus rest)

对于k个类别(k>2) 的情况, 训练k个svm, 其中, 第j个svm用于判断任意条数据是是属于类别j还是非类别j.

预测的时候, 具有最大值的 (w_i^Tx + bi) 表示该样本属于类别i.

假设样本有 3个类别, A, B, C, 则需要训练3个svm, 记为s1, s2, s3

然后输出一个样本x, 都要经过 s1, s2, s3, 则为 max(s1(x), s2(x), s3(x)) 该类别

OVO (one versus one)

针对k个类别, 进行两两组合, 训练 k* (k-1) / 2 个svm, 每个svm 只用于判断样本是属于k中特定的两个类别.

预测的时候, 用 k * (k-1) / 2 个svm 做 K * (k-1) / 2 次预测, 用投票 的方式决定该样本是属于那个类别.

同样假设样本有3个类别 A, B, C, 则需训练 3 * (3-1) / 2 = 3 个支持向量机, 分别是SAB, SAC, SBC

然后输入一个样本x, 做3测预测,(AB, AC, BC) , 假设结果分别是: B, A, B 则最终为B类别

SVM 小结

特点

  • 专注于找最优的分界线 (margin), 用于减少过拟合 (异常值不敏感, 只考虑支持向量)
  • Kernel trick 的应用使得 SVM 能高效处理线性不可分的场景

优势

  • 理论非常完美
    • 凸优化及对偶(KKT)
    • Max Margin
    • SVM 目标函数
    • SVM 对偶形式(lagrange)
    • Slack SVM
    • Kernel SVM
    • 求解SVM 的SMO 算法
  • 支持不同的Kernel 函数

劣势

  • 当数量特别大的时候, 训练较慢

总体而言, 正如jerry大佬常谈的, 这种凸优化(对偶) , 核函数 这样的技术, 不仅仅只是用于SVM , 很多地方也都可以的呀. 我感觉SVM, 这算是我真正学到了一点, 硬核技术了.

原文地址:https://www.cnblogs.com/chenjieyouge/p/11957807.html