Dlib-学习笔记-SVM-1

1 篇文章 0 订阅

对于Dlib库的学习,主要是对库中例子的分析

本次是关于svm_struct_ex.cpp(结构支持向量机)的学习,在例子中建立了关于多分类的支持向量机。其实多分类支持向量机,就是把n分类问题变为n个二分类问题,在输出当中也会有n个结果,数值最大的类就是该样本的预测值。

以下是例子中的所用到的主要类

一、构建svm的求解问题

structural_svm_problem_thread 

该类属于抽象类,不能实例化,并且继承于structural_svm_problem,该类是用于构建svm的求解问题。继承该抽象类,必须重载以下四个纯虚函数:

virtual long get_num_dimensions () const = 0; //返回值:特征数*类别数
virtual long get_num_samples () const = 0;    //返回值:样本数
virtual void get_truth_joint_feature_vector ( 
            long idx,
            feature_vector_type& psi 
        ) const = 0;                          //生成样本+标签的样本向量 维度:特征数*类别数
virtual void separation_oracle (
            const long idx,
            const matrix_type& current_solution,//权重矩阵
            scalar_type& loss,
            feature_vector_type& psi
        ) const = 0;                          //计算支持向量机的输出和loss

关于feature_vector_type-用于计算的实际样本向量 维数:特征数*类别数
例如:3类为0,1,2,3个特征 则属于类0的样本向量feature_vector_type为[x1,x2,x3,0,0,0,0,0,0]; 

类中设置参数的函数

set_C(1);            //正则化的常数
set_epsilon(0.0001)  //设置eps值,软间隔的松弛量,默认为0.001

类中常用的函数 
set_rowm-矩阵的整行的赋值、set_colm-矩阵的整列的赋值、dot-计算内积                                                                            

 最后,该类所构建的求解问题:
minimize h(w)=0.5*\left \| w\right \|+C*R(w) 
R(w)=1/N\sum sample_risk(i,w)
samplerisk(i,w)=maxallover Y:Loss(i,Y)+F(x_i,Y|w)-F(x_i,y_i|w)
其中,Y-是预测值 ,多个支持向量机输出的的最大值,y_i-是标签值,C-为正则化常数,防止过拟合,eps-是松弛变量,越小拟合度越高。
该最小化函数所满足的KTT条件:
一、||w||=0                                          该条件就是间隔最大化的条件           
二、Loss(i,Y)=0                                 该条件对应于我们设计的损失函数,当分类正确时值=0,当分类错误时值大于0
三、F(x_i,Y|w)-F(x_i,y_i|w)=0          该条件和平常的二分类问题并不一样,对应于n分类问题,需要求解n个支持向量机,支持向量机输出值最大的那个就是该样本的类标签,当预测输出和标签类所对应的支持向量机的输出差为0时,就是分类正确的时候,否则差值会为一个正数。

总结:这个类可以方便的构建一个SVM的多分类问题,允许我自定义损失函数,设置正则化常数,设置松弛变量,并且可以运用多线程进行求解运算,但是实际运行来看貌似CPU的运行跑不满,作为线性结构,没有核函数,不适用于非线性问题。

二、问题的求解

所用到的的类

//oca-求解的类
oca solver;
solver(problem, weights);

在例程中的运用是这样的,但是点进去会发现该类重载了运算符(),在经过类型和参数的检查后,由private模板函数oca_impl进行求解运算,好像是用的lasso和smo算法,并没有作深入的了解,使用的时候也没有自己设置参数。

三、总结

以上是关于,dlib库的源码学习,其实,我用这个多分类的svm例子,作为线性结构,对kaggle的泰坦尼克号数据集,进行了二分类,效果很差。可能他所构建的没有用到非线性核函数的方法,或者是关于这正则化项和松弛变量的设置问题,还都有待尝试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值