如何在Visual Studio(VS)2012里使用libsvm工具箱
原文:http://blog.csdn.net/u014691453/article/details/40393137
软件版本:
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 10
- ofstream 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)2012里使用libsvm工具箱的更多相关文章
- 如何在"Visual Studio Code"中使用" Git" 进行版本控制
如何在"Visual Studio Code"中使用" Git" 进行版本控制 本来认为此类教程,肯定是满网飞了.今天首次使用VS Code的Git功能,翻遍了 ...
- 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex
开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...
- [转]如何在 Visual Studio 中使用 Git 同步代码到 CodePlex
本文转自:http://www.cnblogs.com/stg609/p/3673782.html 开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framew ...
- 如何在Visual Studio中选择C++和C#的编译器版本
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在Visual Studio中选择C++和C#的编译器版本.
- Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥
Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥: YKCW6-BPFPF-BT8C9-7DCTH-QXGWC 已经过本人测试 本着分享的精神,希望大家 ...
- Microsoft Visual Studio Professional 2012 专业版 下载
记录(以下内容来自网络收集): 下载地址: https://www.microsoft.com/zh-cn/download/details.aspx?id=30682 直接iso连接下载址: htt ...
- 修改VISUAL STUDIO EXPRESS 2012新建C++文件编码
本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供markdown格式源码,欢迎使 ...
- 关于如何在Visual Studio上仿真调试安卓的U3D应用
正巧最近需要开发一个安卓手机上的Unity3D游戏功能,想着既然要开发么,当然需要调试.本来的话一些基础功能是不需要使用仿真模拟器,直接在U3D的开发编辑器上就能调试,不过有一些安卓上才能执行,比如 ...
- [译]如何在visual studio中调试Javascript
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
随机推荐
- 洛谷P3538 [POI2012]OKR-A Horrible Poem [字符串hash]
题目传送门 A Horrible Poem 题目描述 Bytie boy has to learn a fragment of a certain poem by heart. The poem, f ...
- 【C++初级】static用法总结、问题探讨及常见错误排查
static的基本用法: static的作用主要有两种第一个作用是限定作用域:第二个作用是保持变量内容持久化: 一.c语言中static的用法: 1.全局静态变量: 用法:在全局变量前加上关键字sta ...
- luogu P2107 小Z的AK计划
最近复习了一下堆,于是去luogu上找一些简单题写一写 贪心的想,小z不会到一半以后回头去Ak,因为这样从时间上想肯定是不优的,他可以早在之间经过时就AK所以我们可以将所有机房按照横坐标排序可以想到的 ...
- iOS 9音频应用播放音频之控制播放速度
iOS 9音频应用播放音频之控制播放速度 iOS 9音频控制播放速度 iOS9音频文件在播放时是以一定的速度进行的.这个速度是可以进行更改的,从而实现iOS9音频文件的快速播放和慢速播放功能.要实现i ...
- Dalvik 虚拟机 jvm 区别
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha dalvik 基于 寄存器, jvm基于 栈. 寄存器,编译时间会更短. dalvik ...
- python开发_difflib字符串比较
在python的difflib中 HtmlDiff:比较后以html方法展示 我们比较的是字符串: 'hello world!' 和 'hElLO Wor2d!' 具体代码: from difflib ...
- jquery加载解析XML文件
xml文件 <?xml version="1.0" encoding="utf-8" ?> <taxrates> <taxrate ...
- 51nod 1040 最大公约数之和 欧拉函数
1040 最大公约数之和 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 Description 给 ...
- BZOJ 2818: Gcd 筛法
2818: Gcd 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2818 Description 给定整数N,求1<=x,y< ...
- Shell基础学习(四) echo命令
1.显示普通的字符串 echo "boring" 2.显示转义字符 echo "\"It is a test!\""; 3.read 命令从 ...