文档章节

python下使用libsvm:计算点到超平面的距离

小梳子一直走
 小梳子一直走
发布于 2014/03/17 23:07
字数 1082
阅读 2829
收藏 1

最近在看的资料里涉及到计算 点到支持向量机分类超平面的距离 这一点内容,我使用的svm是libsvm。

由于是新手,虽然看了一些资料,但中英转换误差等等原因导致经常出现理解错误,因此对libsvm的了解是磕磕绊绊。在摸索libsvm各种返回值的意义和运用它产生的结果文件过程中绕了不少弯。

最开始接触这个问题的解答是在libsvm本身的faq中:

Q: How do I get the distance between a point and the hyperplane?

The distance is |decision_value| / |w|. We have |w|^2 = w^Tw = alpha^T Q alpha = 2*(dual_obj + sum alpha_i). Thus in svm.cpp please find the place where we calculate the dual objective value (i.e., the subroutine Solve()) and add a statement to print w^Tw.

这里Q不知道是什么东西,不过至少可以知道  

distance=|decision_value|/|w|=|decision_value|/sqr(2*(dual_obj+sum(αi))

但是,decision_value到底是神马!dual_obj和sum(αi)到底在哪儿!!初学者博主很想咆哮有木有!!!

那我们先来看看从libsvm的返回值和结果文件中都能得到什么东西。

首先,在训练模型的时候(就是用svm_train()这个函数的时候),能在终端得到这些返回值(我写python程序都是在终端运行):

    #iter:迭代次数

    nu:选择的核函数类型的参数

    obj:svm文件转换成的二次规划求解得到的最小值(这里混入了奇怪的东西是不是,没错!隐藏的这么深的就是obj,看看上面的距离公式)

    rho:决策函数的偏置项b(决策函数f(x)=w^T*x+b)

    nSV:标准支持向量的个数(0<αi<c)

    nBSV:边界上的支持向量的个数(αi=c)

    Total nSV:支持向量的总个数(二分类的话就等于nSV,多分类的话就是多个分界面上nSV的和)

我才不会告诉你刚才这些返回值的解读是来自这里:http://blog.163.com/shuangchenyue_8/blog/static/399543662010328101618513/

接下来再看训练模型所生成的model文件,其中的信息包括:

    svm_type c_svc           (svm的种类,取的默认值)

    kernel_type rbf           (核函数的类型,这里取的默认值)

    gamma 0.0117647    (参数γ)

    nr_class 2              (几分类,我这里做的是2分类)

    total_sv 1684

    rho -0.956377

    label 0 1               (两种类别的标识)

    nr_sv 1338 346    (所有支持向量中两种类别各自占了多少)

    SV               (哦哦,以下就是真正的支持向量啦,看看长什么样)

    0.536449657223129 1:39 2:2 3:3 。。。。

    0.3766245470441405 1:11 3:3 4:3 。。。。

    数据格式都是 前面一个数+空格+向量

    前面这个数是什么捏?它就是我们苦苦寻找的α啊!!  后面的向量不用多说,就是支持向量本尊喽,这里跟训练数据不同的是它的存储格式,稀疏向量存储的方式,把值为0的剔掉不记录,比如这里

    1:11 3:3 4:3。。。。

其实是  1:11 2:0 3:3 4:3。。。。

    到现在为止我们的objα都出现啦,现在就剩decision_value啦。其实这个时候我们就可以算出分类超平面的值了:

    f(x)=w^T*x+b

    w=∑αi*yi*αi 后面这个绿色标注的代表向量(这里的表达式参见这位写的svm资料,不错哦http://blog.csdn.net/v_july_v/article/details/7624837),这样α知道了,b知道了(就是上面的rho),分类超平面方程就得到了,根据空间中点到面的距离d=|f(x)|/|w|,把要考察的点x带入,是不是!!计算出来啦!!!

   不过有时候想偷懒,不想自己计算|f(x)|怎么办?

   没关系!libsvm在手,天下我有!(原谅博主疯疯癫癫,快半夜了有点兴奋)

   来看看svm_predict()这个函数给我们返回了什么信息:

   一般不是这样写的嘛 p_labels,p_acc,p_vals=svm_predict(......)

   p_labels就是模型对这些测试数据预测的label

   p_acc就是分类准确率啦,均方差啦还有squared correlation coefficient(相关系数平方?)

   p_vals:在libsvm python interface 中这样说,a list of decision values or probability estimates(if '-b 1'is specified)这不就是我们要找的决策值吗!!%>_<%

好啦好啦,到此为止这个问题就算解决啦!

    

© 著作权归作者所有

小梳子一直走
粉丝 1
博文 3
码字总数 2479
作品 0
南京
私信 提问
LibSvm使用说明和LibSvm源码解析

kernel_type rbf //训练采用的核函数类型,此处为RBF核gamma 0.0769231 //RBF核的参数γnr_class 2 //类别数,此处为两分类问题total_sv 132 //支持向量总个数rho 0.424462 //判决函数的偏置...

haoji007
2018/05/13
0
0
MATLAB安装libsvm工具箱的方法

支持向量机(support vector machine,SVM)是机器学习中一种流行的学习算法,在分类与回归分析中发挥着重要作用。基于SVM算法开发的工具箱有很多种,下面我们要安装的是十分受欢迎的libsvm工...

东聃
2018/08/12
0
0
sparkmlib的sample_binary_classification_data.txt 和sample_libsvm_data.txt内容怎么换成实际项目内容

sample_binary_classification_data.txt 和sample_libsvm_data.txt的内容怎么理解和使用 sparkmlib的sample_binary_classification_data.txt 和sample_libsvm_data.txt内容怎么换成实际项目内......

知行合一1
2017/09/30
212
0
【毕设进行时-工业大数据,数据挖掘】LIBSVM 初步测试

正文之前 打摆子的日子很快就要一去不复返了。想想有点悲伤。今天做了下LibSVM的初步运用,也写了个从数据库读取数据,然后改造成LibSVM需要的数据格式的类,需要的自取。 正文 这是个从前面...

HustWolf
2018/04/23
0
0
OpenCV 2.4+ C++ SVM介绍

分类器 分类器是一种计算机程序。 他的设计目标是在通过学习后,可自动将数据分到已知类别。 平面线性分类器 一个简单的分类问题,如图有一些圆圈和一些正方形,如何找一条最优的直线将他们分...

j_m
2012/11/26
368
0

没有更多内容

加载失败,请刷新页面

加载更多

如何快速为网站选择合适的SSL证书

随着HTTPS普及,越来越多用户开始采用SSL证书,来对HTTP进行加密,升级到HTTPS。但面对各种不同的SSL证书,用户应如何选择?安信SSL证书将为大家讲解: 一、按SSL证书类型选择 DV SSL证书:域...

安信证书
34分钟前
3
0
被嫌弃的eval和with

本文转载于:专业的前端网站➥被嫌弃的eval和with 前面的话   eval和with经常被嫌弃,好像它们的存在就是错误。在CSS中,表格被嫌弃,在网页中只是用表格来展示数据,而不是做布局,都可能被...

前端老手
37分钟前
4
0
Allegro非常实用的快捷键-PCB环境

立题简介: 内容:简单介绍Allegro绘制的PCB环境下的快捷键; 来源:实际使用得出; 作用:对Allegro绘制PCB快捷键进行介绍; PCB环境:Cadence 16.6; 立题详解: 对“allegro”板而言,其在...

demyar
44分钟前
2
0
润乾报表与 ActiveReport JS 功能对比

简介 润乾报表是用于报表制作的大型企业级报表软件,核心特点在于开创性地提出了非线性报表数学模型,采用了革命性的多源关联分片、不规则分组、自由格间运算、行列对称等技术,使得复杂报表...

泡泡糖儿
45分钟前
2
0
仿微信打飞机游戏网页版,基于cocos2d-js游戏引擎,在线试玩,内含源码

早几年研究cocos2d的demo项目,这个是基于cocos2d-js游戏引擎,整个游戏用js编写。 玩法:鼠标拖动飞机移动即可 试玩地址 源码地址 游戏截图: 文件说明 cocos2dx:游戏引擎 res:存放游戏素...

tanghc
48分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部