SVM 实现多分类思路
svm 是针对二分类问题, 如果要进行多分类, 无非就是多训练几个svm呗
OVR (one versus rest)
对于k个类别(k>2) 的情况, 训练k个svm, 其中, 第j个svm用于判断任意条数据是是属于类别j还是非类别j.
预测的时候, 具有最大值的 表示该样本属于类别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, 这算是我真正学到了一点, 硬核技术了.
耐心和恒心, 总会获得回报的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通