文本分类学习 (十)构造机器学习Libsvm 的C# wrapper(调用c/c++动态链接库)

前言: 对于SVM的了解,看前辈写的博客加上读论文对于SVM的皮毛知识总算有点了解,比如线性分类器,和求凸二次规划中用到的高等数学知识。然而SVM最核心的地方应该在于核函数和求关于α函数的极值的方法:SMO算法(当然还有很多别的算法。libsvm使用的是SMO,SMO算法也是最高效和简单的),还有松弛变量。。毕设答辩在即,这两个难点只能拖到后面慢慢去研究了。

于是我便是用了LibSvm,也就是台湾大学某某教授写的一个专门用于svm的工具包,其中有java语言的,python语言的,c语言的。我只拿了其中的两个文件svm.cpp 和svm.h ,这两个c语言的头文件和源文件已经可以直接拿来训练模型和预判分类了。这篇博客也只是照葫芦画瓢,利用已经写好的libsvm,做一个基于.net core的api接口,对于libsvm的内部实现都不甚了解。所在我是站在巨人的肩膀上学习,什么都是现成的。如果需要你自己去开发和创新,那么就意味着你已经站在芸芸众生的上面了。

目录:

文本分类学习(一)开篇
文本分类学习(二)文本表示
文本分类学习(三)特征权重(TF/IDF)和特征提取   
文本分类学习(四)特征选择之卡方检验
文本分类学习(五)机器学习SVM的前奏-特征提取(卡方检验续集)
文本分类学习(六)AdaBoost和SVM(残)
文本分类学习(七)支持向量机SVM 的前奏 结构风险最小化和VC维度理论
文本分类学习(八)SVM 入门之线性分类器
文本分类学习(九)SVM入门之拉格朗日函数和KKT条件

一,LibSvm的简单介绍

这里只介绍libSvm中的C语言版本,也就是前言中说的svm.cpp和svm.h。

1.结构体介绍

svm.h 文件包含了svm中所有的结构体和函数声明。

首先是 结构体svm_node

struct svm_node
{
int index;
double value
};
svm_node 是用来储存单个文本向量的单个特征,结构体只有两个属性一个是下标,一个是值。很显然如果一个文本向量的表示肯定是一个svm_node[] 数组。值得注意的是libsvm中,对于特征值为0,也就是value为0的特征,可以不用放到svm_node[]数组里这样会简化计算。此外,svm_node[]数组的最后一个元素index的值必须是-1且value值为null,是一个文本向量的结束标志。

然后是 结构体svm_problem

struct svm_problem
{
int l;
double *y;
struct svm_node **x;
};
前面的svm_node是表示单个文本向量,那么svm_problem便表示的是整个训练集了。其中l是训练集的个数,y是一个数组表示训练集的标签,x是一个二维数组自然表示训练集的文本向量。注意在二分类问题中y数组的值应该是+1或者-1。

接下来是 结构体svm_parameter

struct svm_parameter
{
int svm_type;
int kernel_type;
int degree; /* for poly /
double gamma; /
for poly/rbf/sigmoid /
double coef0; /
for poly/sigmoid */

/* these are for training only */
double cache_size; /* in MB */
double eps;    /* stopping criteria */
double C;    /* for C_SVC, EPSILON_SVR and NU_SVR */
int nr_weight;        /* for C_SVC */
int *weight_label;    /* for C_SVC */
double* weight;        /* for C_SVC */
double nu;    /* for NU_SVC, ONE_CLASS, and NU_SVR */
double p;    /* for EPSILON_SVR */
int shrinking;    /* use the shrinking heuristics */
int probability; /* do probability estimates */
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值