最近一个图像识别项目里需要对分类的结果进行打分,因为使用的是libsvm3.12,一开始决定直接将svm_predict_values函数的dec_values作为评分返回,后来研究了之后才觉得里面有的东西还挺有趣。

首先介绍一下SVM中的多分类方法。目前SVM多分类流行的策略有one-against-all以及one-against-one两种,libsvm中的多分类是采用的one-against-one策略,其他有一些开源库如SVM-Light采用one-against-all。对于N类的数据,one-against-all建立N个分类器,但有一些缺点,如:数据集偏斜、分类重叠、不可分现象等(参见:http://www.blogjava.net/zhenandaci/archive/2009/03/26/262113.html);one-against-one建立N*(N-1)/2个分类器,每个分类器对样本进行投票,票数最多对应的类别作为识别结果。在分类器里用来决定投票给谁的依据,就是decision value,也就是libsvm中的dec_values。

以下考虑线性核的情况。

直观上以为decision value就是样本点到最优超平面的距离,其实并不是,分析如下:

假设计算出的分类决策面能将两类(P, N)完全分开,则有: ,其中w理解为最优超平面的法向量,计算式为αj对应于libsvm中svm_model结构体的sv_coef

分类间隔为。所以支撑向量到最优超平面的距离为。也就是说,对于其他样本点,decision value为,到最优超平面的距离为,支撑向量就是的情况。libsvm里只进行decision value的计算,没有除去||ω||,想要进一步计算超平面距离,参考:http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f4151 。

另外decision value也跟概率无关(用在回归时确实表示概率,但在分类时则不是)。根据我看到的说法,由decision value的计算式,它的取值范围应该是在实数域上的(这是在一篇外国的硕士论文上看到的说法,见Andreas Vlachos的《Active Learning with Support Vector Machines》,2004)。不过我觉得这样说好像也不对,假设我们对样本特征数据做了scale,那么所有的样本点就被限定在一个有限空间里,既然最优超平面也是在这个空间里确定的,那么只要所有的测试样本点做了scale处理,到最优超平面的距离肯定是有上界的。具体这个上界怎么去推导,暂时还不懂。

多分类时one-against-one的策略里有一点小问题就是,各个二分类器的计算得出的decision value其实是没有可比性的,而one-against-all没有这个问题。为什么这么说呢?这是因为:1)one-against-all各个分类器训练参数跟数据集是一样的,只不过是label做了改变。所以比较不同分类器的decision value是合法的;2)one-against-one各个分类器的训练时,用的是不同数据集,因此分类器之间的decision value不能直接比较。按照我的理解,前者是在同一个空间里比较,后者就不是了。

按照在国内外论坛上别人的说法,甚至不能给decision value附件任何含义,除了线性核的SVM里可以用decision value进一步计算距离(参见http://stackoverflow.com/questions/11030253/decision-values-in-libsvm ,不过我觉得老外也未必都是对的)。稳妥的说法就是decision value可以用来作为分类结果置信度的评价。

回到对分类结果进行打分的问题上来,在网上查找资料时,看到有人也做了类似的工作,见:http://blog.csdn.net/zhzhl202/article/details/7438313 。他的方法是:,其中k为所有支持判别类得个数,n为所有类别个数,si 为所有支持判别类的分数。我觉得这种方法兼顾了投票数与decision value两方面的信息,比直接累加dec_values然后取平均肯定要好,但是公式的由来,似乎又没有坚实的理论依据。不过没有其他好方法之前,我项目里暂时就这么用了。

补充:

这个函数是libsvm库中比较新的函数,用于对现有nr_class个类做出概率估计(我理解就是属于这个类别的概率是多少,从数学角度是样本与分类面的距离?)

1)进入到svm_predict_probability函数里面,注意到里面有一个选择语句,svm的类型要选择C_SVC或NU_SVC,并且probA和probB的指针不能为空。svm类型很好搞定,但是对于probA和probB我之前并没有见到过,他们是model中的参数,当我们不涉及到概率是model中没有这两个值。后来经考察资料,当options中的-b参数设置为1时,才会涉及到probA和probB。所以要想求概率估计,第一点要注意的是-b参数要设为1.

2)svm_predict_probability函数与svm_predict函数在接口上只有第三个参数prob_estimates不同,其余两个都相同,所以这里只说明第三个参数的作用。prob_estimates里实际上存放的就是估计出的概率,比如说m分类问题,那prob_estimates就是一个1*m列的矩阵,没列代表属于相对类别的概率。这个相对类别是与svm输出结构体中的Lable相对应的!

3)说完参数就剩下返回值啦,比较简单,返回的就是最大概率对应的类别标签。如果二分类问题那就是1或-1.

最后总结一下,如果熟悉svm_predict的话,那么只有二点不同,一是-b参数要设成1,二是函数接口多了个概率矩阵,其他的只要把参数传进去就可以了。以上只是在应用这个函数过程中的体会,如有不对请指正。

libsvm 参数以及计算测试点相似度相关推荐

  1. R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters)、计算特征重要度

    R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters).计算特征重要度(feature importance) 目录

  2. 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

    自然语言处理(NLP)之使用TF-IDF模型计算文本相似度 所用数据集:ChnSentiCorp_htl_all.csv 语料库即存放稀疏向量的列表. 要注意的是,搜索文本text与被检索的文档共用一 ...

  3. Lesson 16.1016.1116.1216.13 卷积层的参数量计算,1x1卷积核分组卷积与深度可分离卷积全连接层 nn.Sequential全局平均池化,NiN网络复现

    二 架构对参数量/计算量的影响 在自建架构的时候,除了模型效果之外,我们还需要关注模型整体的计算效率.深度学习模型天生就需要大量数据进行训练,因此每次训练中的参数量和计算量就格外关键,因此在设计卷积网 ...

  4. DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用+距离运算

    在NLP领域,语义相似度的计算一直是个难题:搜索场景下query和Doc的语义相似度.feeds场景下Doc和Doc的语义相似度.机器翻译场景下A句子和B句子的语义相似度等等.本文通过介绍DSSM.C ...

  5. DSSM算法-计算文本相似度

    转载请注明出处: http://blog.csdn.net/u013074302/article/details/76422551 导语 在NLP领域,语义相似度的计算一直是个难题:搜索场景下quer ...

  6. matlab求第二类曲面积分,第二型曲面积分的参数形式计算

    给出"第二型曲面积分"的一种计算方法,即在曲面的参数形式下直接将曲面积分转化成参数区域上的一个二重积分,由此可使"第二型曲面积分"的计算问题得到简化.此法是对菲 ...

  7. S.M.A.R.T. 参数(smartctl)计算硬盘精确健康值

    参考:Acronis Drive Monitor: Disk Health Calculation 文章目录 1.背景 2.smartctl -a /dev/sda 3.计算健康值 3.1 关键参数 ...

  8. python根据词向量计算相似度_如何使用gensim的word2vec模型和python计算句子相似度...

    如何使用gensim的word2vec模型和python计算句子相似度 根据Gensim Word2Vec,我可以使用gensim包中的word2vec模型来计算2个单词之间的相似度. 例如 trai ...

  9. (3)tesorflow 计算模型复杂度

    目录 1. 计算模型复杂度的衡量 2 . 典型层的复杂性计算原理 2.1 全连接层的复杂性计算 2.2 卷积层的复杂性计算 3. 全连接Tensorflow实现 4. GraphDef 5. Free ...

  10. NLP——计算文本相似度的常用算法

    文章目录 一.绪论 二.余弦相似度 2.1 余弦相似度定义 2.2 计算相似度步骤 2.3 举例 2.4 改进方式 2.5 代码 三.TF-IDF计算 3.1 TF.IDE.TF-IDF的计算方法 3 ...

最新文章

  1. 你知道这些 985、211 院校的隶属吗?
  2. 重磅丨英伟达刚刚发布全球最大GPU:GTC2018黄仁勋演讲核心内容整理
  3. 一些关于mathematica的tips
  4. tldr一个精简的man手册替代品
  5. java爬虫jsoup_Java爬虫之利用Jsoup自制简单的搜索引擎
  6. 【渝粤题库】国家开放大学2021春3938管理英语2题目
  7. python idle运行anaconda_在Python IDLE 下调用anaconda中的库教程
  8. 卡尔曼滤波原理理解(1)
  9. pdo query获取mysql单行结果_php代码连不上mysql的可能?看看这个也许能给你点启发...
  10. WebService服务发布与使用(JDK自带WebService)
  11. 细谈会话管理-----Cookie和Session
  12. HTML5汽车赛道飙车游戏免费源码下载
  13. 《Android框架揭秘》——2.1节主机环境构成
  14. Windows下linux传盘工具,Windows下安装红旗Linux及工具盘全过程
  15. ios 请在设置中打开相机权限_ios开发相机权限问题
  16. P1834 种花小游戏
  17. SDUT最短路径问题 1867————最短路
  18. Vue+SpringBoot实现Excel在线预览功能(PS:添加样式比较费劲)
  19. TP6框架全新开发社区系统源码开源
  20. (实战)[re:Invent 2018]-002:通过分析奖励函数优化后- 8.4s / 圈

热门文章

  1. github第一步之初始化操作
  2. JAVA-初步认识-第十章-多态-类型判断-instanceof
  3. 智能建筑--常见协议
  4. Regex Tester 安装教程
  5. Daily Scrum 11/06
  6. [转][python] 常用正则表达式爬取网页信息及分析HTML标签总结
  7. shiro 认证和授权原理
  8. 为小程序添加底部导航
  9. 关于STM32 __IO 的变量定义
  10. Objective-C学习—UIScrollView控件使用