前言:本文大水文一篇,大神请绕道。在正文之前,首先假设读者都已经了解SVM(即支持向量机)模型。
1. introduction
libsvm是台湾大学林智仁(Chih-Jen Lin)教授于2001年开发的一套支持向量机的工具包,可以很方便地对数据进行分类或者回归分析。使用时,只需要把训练数据按照它的格式打包,然后直接喂进去训练即可。我这里的数据是保存在mat文件的,数据怎么导入这里略去不说(以下内容提及的特征向量和一个样本是一回事)。
2. prepare
几个重要的数据结构
2.1
struct svm_problem{ int l; // 记录样本的总数 double *y; // 样本所属的标签(+1, -1) struct svm_node **x; // 指向样本数据的二维数组(即一个矩阵,行数是样本数,列数是特征向量维度)};
- 1
- 2
- 3
- 4
- 5
- 6
2.2
struct svm_node{ int index; double value;};
- 1
- 2
- 3
- 4
- 5
svm_node是用来存储单个样本数据的,打个比方说,svm_problem是一群羊,那么svm_node就是这一群羊中的一只。需要注意的是,svm_node的存储空间应该比特征数大一位,最后一位index值必须以-1结束。比如:
svm_node* node = new svm_node[1 + feature_size]; for (int j = 0; j < feature_size; j++) { node[j].index = j +