这里写下关于libsvm中,从MATLAB文件夹中的svmtrain.c和svmpredict.c入口,如何调用svm.cpp的过程进行详细的解析。当遇到比较重要的新的函数时,会在后面列出这个函数的作用和详细执行的过程,以便自己能看懂。
注:这里主要侧重调用C_SVC的情况,以及当置b=1时的情况分析。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先列在前面的是,头文件中需要了解并在后面函数中会用到的两个结构。
struct svm_problem
{
int l; 样本个数
double *y; 类别
struct svm_node **x; 一条样本的特征
};
struct svm_node 一个特征节点
{
int index; 特征序号
double value; 特征值
};
Svm整个过程:
一、训练过程(直接进入svm.cpp进行分析)
进入函数,进行执行,最后会输出一个model
svm_model *svm_train(const svm_problem *prob, const svm_parameter *param)
1.先对同label的进行归纳
svm_group_classes(prob,&nr_class,&label,&start,&count,perm);
2.对两两各个类进行计算:
1)选出两类的数据,由于pro=1,故执行
svm_binary_svc_probability(&sub_prob,param,weighted_C[i],weighted_C[j],probA[p],probB[p]);
这里填充probA,probB的值
2)decision_function svm_train_one(const svm_problem *prob, const svm_parameter *param,double Cp, double Cn) (decision_function