如何在Visual Studio(VS)里使用libsvm工具箱
来源:互联网 发布:大数据研发总监 编辑:程序博客网 时间:2024/05/17 03:24
软件版本:
Visual Studio版本:VS2012
(注:使用方法在 VS2010 上面亲测同样可用,只是可能会出现的问题是: VS2010 和 VS2012 之间有些函数写法不同,需在编译前做改动,譬如 VS2010 的 scanf 对比 VS2012 的 scanf_s )
libsvm版本:libsvm-3.18
声明:
如果你找到了我这篇标题的文章,那很大程度上意味着你一定是在 VS 里或者 MFC 里使用 libsvm 工具箱出现了问题。那你也一定知道了,libsvm 在VS工程里的使用与它在 matlab 或者是 python 里面的使用,是多么的不同。
致谢:
如果没有 gg 百分之百的帮助,就凭我在 VS 里编程的菜鸟能力,是绝对不可能1天就搞好的,我绝对会弄半年不止所以非常感谢非常感谢,今后我一定认真学习编程。
正文:
分三部分:第一部分:先把 VS 工程的框架建好
第二部分:工程里包含主函数的 cpp 文件要怎么写
第三部分:把 libsvm 工具箱移植到 MFC 中进行使用
第四部分:在本文代码中能够正确运行的数据格式
资源地址:如何在Visual Studio(VS)里使用libsvm工具箱(与博文相关的代码包)
第一部分:先把 VS 工程的框架建好
对于java、matlab、python、windows 都有相对应的文件夹,文件夹里面的内容和上图中的这个 readme 就可以帮助你在以上四种情况下使用了。
那在 VS 里该怎么使用呢?
首先,我们先建立一个Win32控制台项目,起名为 MM ,如下步骤:
然后,把 libsvm 文件夹里的这几个文件(如下图),都拷贝到 MM 项目的文件夹(如下下图)里去,以备后续使用。
然后,在 MM 项目里,我们把 svm.h 和 svm.cpp 分别添加到头文件和源文件里面去,如下图:
然后,在源文件里,右键——新建项:MM.cpp
接下来是第二部分
第二部分:工程里包含主函数的 cpp 文件要怎么写
#include <stdio.h>#include <string.h>#include <ctype.h>#include <list>#include <fstream>#include <iostream>#include "svm.h"using namespace std;
接下来的内容大致分五部分:
第一:读入训练数据和测试数据
#define XLEN 10 //生产测试数据,这个感觉就是无用的地方#define YLEN 10ofstream outdata; //需要准备的所有数据的标签label和特征feature都是分开的,而且特征feature前面不需要加序号冒号这种东西,只需用空格隔开就好ifstream indata; //所以这里indata只包含特征,indata_label只包含label,每一行是一个样本的。ofstream outdata_lable;ifstream indata_lable;int NUM = 1440; //由于我的样本特征是 1440 维,所以读数据的时候,我定义了个数,你可以根据自己特征的维度对 NUM 进行更改。//char default_param[] = "-t 2 -c 100"; // 这个是 svm_toy.cpp 里对参数的选择char default_param[] = "-t 2 -c 4 -g 32"; // 这个是匹配我数据的参数struct point { //这个是后面 svm_train 拿来数据做训练时候的数据传入方式double *feature;//signed char value;int value;};list<point> point_list; // 通过 indata 读进来的数据就放在 point_list 里面int current_value = 1; // 路人甲变量void clear_all() // 清空链表{point_list.clear();}
然后,我们先读入训练数据,用来训练模型
void readFile1(char *file,char *file_lable) //定义读入训练数据的函数叫做 readFile1{indata.open(file,ios::in); //读入特征indata_lable.open(file_lable,ios::in); // 读入标签cout <<"read data begin"<<endl; // 屏显clear_all();while(!indata.eof()) // 如果没有读到文件结束,就继续读,知道读完整个 traindata 文件{double *line = new double[NUM];for(int i =0;i<NUM;i++){indata >> line[i]; //把特征存起来}point p;indata_lable >>p.value; //把label存起来p.feature = line;point_list.push_back(p);}point_list.pop_back(); //如果你的 traindata.txt 文件数据的最后有一个空格的话,需要加上这句话,否则预测会有错如果没有空格,这句话就不需要了indata.close();indata_lable.close();cout <<"read data end"<<endl;}
接下来,读入测试数据:
void readFile2(char *file,char *file_lable) // 读入测试文件的函数叫做 readFile2{indata.open(file,ios::in); //接下来代码和上面读训练数据是一个样子的indata_lable.open(file_lable,ios::in); // <span style="font-family: Arial, Helvetica, sans-serif;">由于读训练数据之后就会建立model,然后才会读测试数据,所以不用担心会有数据覆盖的问题</span>cout <<"read test data begin"<<endl;clear_all();while(!indata.eof()){double *line = new double[NUM];for(int i =0;i<NUM;i++){indata >> line[i];}point p;indata_lable >>p.value;p.feature = line;point_list.push_back(p);}point_list.pop_back();cout <<"read test data end size = "<<point_list.size()<<endl;indata.close();indata_lable.close();}
第二:构建参数 param 的结构体
第三:构建分类问题 prob 的结构体
第四:主函数如下
int main(){int choice;cout<<"1 train model\n2 test1\n3 test2\n"<<endl; cin >>choice;switch(choice){case 1:{readFile1("traindata.txt","trainlabel.txt"); //选择1 是训练模型,模型会保存为“model.txt”run();break;}case 2:{readFile2("1.txt","1_label.txt"); // 选择2 是用第一份测试数据进行测试testData();break;}case 3:{readFile2("11.txt","11_label.txt"); // 选择3 是用第二份测试数据进行测试testData();break;}}system("pause");return 0;}
第五:结果展示
第三部分:把 libsvm 工具箱移植到 MFC 中进行使用
第四部分:在本文代码中能够正确运行的数据格式
- 如何在Visual Studio(VS)里使用libsvm工具箱
- 在Visual Studio里使用boost
- C#使用_如何在没有装VS(Visual Studio)的机器上编译运行C#程序
- C#使用_如何在没有装VS(Visual Studio)的机器上编译运行C#程序
- Libsvm工具箱的使用
- Visual Studio 2013使用Libsvm训练数据
- 如何在VS 2012安装并在工具箱里添加dotnetbar的引用
- 【IDE-Visual Studio】如何在使用vs调试如何才能不显示反汇编?
- VS(visual studio)里没有LINQ to SQL模板
- 如何在matlab里安装libsvm包
- Libsvm工具箱在matlab中使用的编译过程
- 如何在没有装VS(Visual Studio)的机器上编译运行C#程序
- 如何在Visual Studio 2005或者Visual Studio 2008里实现拖动控件进行绝对定位?
- 如何在Visual Studio 2005或者Visual Studio 2008里实现拖动控件进行绝对定位?
- 如何在Visual Studio 2005或者Visual Studio 2008里实现拖动控件进行绝对定位?
- 在Visual Studio 2008里使用ActiveX Test Container
- 在 Visual Studio 2005 里使用 Vim 编辑代码
- 在Visual Studio 2010 里使用Nunit 进行Debug 测试
- 识别汉字的方法
- Web网站架构设计考虑的因素
- masm 6.11 不是内部也不是外部命令 解决方法
- linux下使用jsoncpp库出现“/usr/include/wchar.h:75:43: error: missing binary operator before token "("”
- Qt Quick 之 QML 与 C++ 混合编程详解
- 如何在Visual Studio(VS)里使用libsvm工具箱
- 网站被挂黑链会引起哪些后果
- 如何进行安全架构规划
- DTD和XML Schema
- 谈当下网络营销中:盲目的跟风
- Linux时间子系统之五:低分辨率定时器的原理和实现
- Mysql复制中的参数
- hadoop2.2.0安装详解
- android:分享 一个很强大的LOG开关---Log.isLoggable