几个重要的数据结构
2.1
struct svm_problem
{
int l; // 记录样本的总数
double *y; // 样本所属的标签(+1, -1)
struct svm_node **x; // 指向样本数据的二维数组(即一个矩阵,行数是样本数,列数是特征向量维度)
};
2.2
struct svm_node
{
int index;
double value;
};
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 + 1;
node[j].value = xdata[j];
}
node[feature_size].index = -1;
return node;
2.3
struct svm_parameter
{
int svm_type;// SVM的类型
int kernel_type;// 核函数
double degree;// 多项式参数
double gamma;// 核函数为poly/rbf/sigmoid的参数
double coef0;// 核函数为poly/sigmoid的参数
//下面是训练所需的参数
double cache_size;// 训练所需的内存MB为单位
double eps;// 训练停止的标准(误差小于eps停止)
double C;// 惩罚因子,越大训练时间越长
int nr_weight;// 权重的数目,目前只有两个值,默认为0
int *weight_label;// 权重,元素个数由nr_weight决定
double* weight;// C_SVC权重
double nu;
double p;
int shrinking;// 训练过程是否使用压缩
int probability;// 是否做概率估计
};