如何在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& ...
随机推荐
- CodeForces 772B Volatile Kite
计算几何,直觉. 凭直觉猜的做法,把每条线段的中点连起来,每个点到对应内部线段的距离,取个最小值. #include <iostream> #include <cstdio> ...
- ref和out的用法和区别。
关于ref和out的用法和区别在网上已经有很多的解释,这里只不过是写下对于我而说比较容易理解的解释. ref和out都可以用来在函数中返回数据,类似于c++中指针. 参数 Ref Out 是否一定需要 ...
- db2部署与数据仓库应用
概念特性 安装 基础命令 连接 监控 存储过程 数据合并 Merge Into是增量备份 结果集分组 row_number() OVER (PARTITION BY COL1 ORDER BY COL ...
- django celery(QQ蓝鲸)
官方:http://www.celeryproject.org 文档:http://docs.jinkan.org/docs/celery/index.html FAQ:http://docs.cel ...
- PHP 笔记——Array 数组
要点 说明 数组构成 数组是由一个或多个数组元素组成的 数组元素 每个数组元素由键(Key)和值(Value)构成 键 元素的识别名称,也被称为数组下标 值 元素的内容 映射 键 和 值 之间存在一种 ...
- 「BZOJ4763」雪辉
「BZOJ4763」天野雪辉 题目大意:有一棵 \(n\) 个点的树,树上每一个点有权值 \(a_i \leq 30000\) ,每次询问给出若干路径,求出这些路径的并上面的不同颜色数与 \(mex\ ...
- CF1051D Bicolorings dp
水题一道 $f[i][j][S]$表示$2 * i$的矩形,有$j$个联通块,某尾状态为$S$ 然后转移就行了... #include <vector> #include <cstd ...
- Springboot项目与vue项目整合打包
我的环境 * JDK 1.8 * maven 3.6.0 * node环境 1.为什么需要前后端项目开发时分离,部署时合并? 在一些公司,部署实施人员的技术无法和互联网公司的运维团队相比,由于各种不定 ...
- Codeforces Beta Round #5 A. Chat Server's Outgoing Traffic 水题
A. Chat Server's Outgoing Traffic 题目连接: http://www.codeforces.com/contest/5/problem/A Description Po ...
- CentOS 7安装ifconfig
yum install net-tools 安装这个工具,或者升级写法,使用ip addr show 参考: https://linux.cn/article-3631-1.html