一、实验目的和内容
1、掌握数据预处理的方法,对训练集数据进行预处理;2、掌握分类算法的原理,基于有监督的机器学习方法,训练文本分类器;
3、了解SVM机器学习方法,可以运用开源工具LibSVM完成文本分类过程并且根据测试文档已给出的Lable标签计算准确率。
二、实验过程
1、下载并解压解压LibSVM开源工具Libsvm是一个开源的软件包,需要者都可以免费的从作者的个人主页http://www.csie.ntu.edu.tw/~cjlin/ 处获得。下载地址为:
http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html
解压后的工具包内容包含Python、Java、C++版本以及可以直接在cmd状态下运行的exe文件。
2、在VS环境下使用LibSVM
开源工具包里面已经包含了用于C++环境编译的源码,新建一个工程,将svm.h、svm.cpp、svm-train.cpp导入,然后新建一个C++文件svm-example.cpp,这个文件里面调用了svm.h、svm.cpp、svm-train.cpp的相关内容。svm-example.cpp源码如下:
#include "svm.h"
#include <string.h>
#include<iostream>
using namespace std;
svm_parameter param;
void init_param(){
param.svm_type = C_SVC;
param.kernel_type = RBF;
param.degree = 3;
param.gamma = 0.0078125;
param.coef0 = 0;
param.nu = 0.5;
param.cache_size = 1024;
param.C = 2048;
param.eps = 1e-5;
param.shrinking = 1;
param.probability = 0;
param.nr_weight = 0;
param.weight_label = NULL;
param.weight = NULL;
}
int main(){
init_param();
svm_problem prob;
prob.l = 8285; //样本数
prob.y = new double[prob.l];
double d;
int probfeature = 11; //样本特征维数
if (param.gamma == 0) param.gamma = 0.5;
svm_node *x_space = new svm_node[(probfeature + 1)*prob.l];//样本特征存储空间
prob.x = new svm_node *[prob.l]; //每一个X指向一个样本
cout << "size: " << sizeof(x_space) << endl;
///
double *p = (double *)malloc(100000 * sizeof(double));
double *q = (double *)malloc(100000 * sizeof(double));
i