zoukankan      html  css  js  c++  java
  • 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, 这算是我真正学到了一点, 硬核技术了.

  • 相关阅读:
    Linux目录结构详解
    Linux快捷键列表
    正则表达式
    Python内置函数7
    Python内置函数6
    Python内置函数5
    什么才是java的基础知识?
    单点登录原理与简单实现
    window系统 查看端口 被哪个进程占用了
    Linux Tomcat日志查看实用命令
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/11957807.html
Copyright © 2011-2022 走看看