资源简介
我编写的一个SVM分类+任意折交叉验证的代码,并可以按照规定的c和gamma值输出识别率,是一个不错的程序,可以解决和多问题,使用非常方便,只需要改几个想用的参数就可以,由于我使用的是VS3013和OPEMCV和众多数不同,只传了一个cpp文件上,只要导入新建工程中,并配置好opencv即可,详细过程写在程序的main函数中,请大家多多指教!!
代码片段和文件信息
// SVMclassification.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define cvstart 1.0 //c开始值
#define cvend 30.0 //c 结束值
#define cvstep 1.0// c的增长步长
#define gammavstart 0.5 // gamma 开始值
#define gammavend 30 // gamma 结束值
#define gammavstep 0.5 // gamma 增长步长
using namespace std;
using namespace cv;
// { LINEAR = 0 POLY = 1 RBF = 2 SIGMOID = 3 };
int kenel = CvSVM::LINEAR;
void splitString(vector*str_list string srcstring string splictstring)
{
std::string o_str = srcstring;
//std::vector str_list; // 存放分割后的字符串
int comma_n = 0;
do
{
std::string tmp_s = splictstring;
comma_n = o_str.find(splictstring);
if (-1 == comma_n)
{
tmp_s = o_str.substr(0 o_str.length());
str_list->push_back(tmp_s);
break;
}
tmp_s = o_str.substr(0 comma_n);
o_str.erase(0 comma_n + 1);
str_list->push_back(tmp_s);
} while (true);
}
void setDataSet(string srcpath vector *myLable vector*> *myData){
ifstream file(srcpath); // declare file stream:
string value;
while (file.good())
{
getline(file value); // read a string until next comma:
//创建
vector *str_list = new vector();
splitString(str_list value “\t“);
//标签
float lable = atof((str_list->at(0)).c_str());
myLable->push_back(lable);
//数据
vector *hangdata = new vector();
for (int i = 1; i < str_list->size(); i++){
hangdata->push_back(atof((str_list->at(i)).c_str()));
}
myData->push_back(hangdata);
delete str_list;
// cout << string(value 0 value.length()) << ““; // display value removing the first and the last character from it
}
}
vector*> *randomIndex(int zhenshu int size){
//初始化
vector*> * indexrandom = new vector*>();
vector random;
for (int i = 0; i < size; i++){
random.push_back(i);
}
//将数组打乱顺序
srand(time(NULL));
int index temp;
for (int i = 0; i < size; i++)
{
index = rand() % (size - i) + i;
if (index != i)
{
temp = random.at(i);
random.at(i) = random.at(index);
random.at(index) = temp;
}
}
//划分n等分
int mathevermath = size / zhenshu;//每份几个
for (int i = 0; i < zhenshu; i++){
int end = mathevermath*(i + 1);
if ((size - end) < mathevermath){
end = size;
}
vector* index = new vector();
for (int j = mathevermath*i; j < end; j++){
index->push_back(random.at(j));
}
indexrandom->push_back(index);
}
return indexrandom;
}
float getShibieBySVM(float c float gamma float*ceshilabe float*ceshidata const int ceshirows const int ceshiclos float*trainlabe float*traindata const int tr
- 上一篇:拍卖系统及其说明文档
- 下一篇:北京林业大学操作系统B实验
相关资源
- 图像增强GLG算法(gray level grouping)
- Kinect2.0采集图像帧并保存
- 第二代提升小波变换 wavelet 源代码
- 灰度共生矩阵vs2010+opencv2
- 分割阈值opencv2
- surfsift算法配准,利用Ransac去除误匹配
- opencv实现小波变换
- opencv数字识别.cpp
- opencv 人脸追踪 自动打马赛克
- OpenCV贾志刚视频教程完整版
- opencv实现surf算法
- opencv简单的暗通道去雾算法
- openv人脸模板采集程序
- 基于MFCC和SVM的说话人性别识别
- opencv+vs 实现画中画 c语言
- 维纳滤波opencv
- OpenCV手势识别-手掌特征提取源码
- vc++&opencv图像分块
- OpenCv背景差分228299
- 在VC 6.0的opencv环境下视频显示与捕捉
- openCV获取车流
- Opencv C++ 读取、保存图片
- OpenCV视频的保存以及显示
- c++中的chamfer matching 实现
- opencv背景差分
- vibe算法opencv+c++,RGB图像可用
- 行人检测 opencv
- opencv 对视频进行感兴趣区域设置并保
- fastMatch的c++实现(需要opencv支持)
- 自己写的HOG+SVM用于视频中的人体检测
评论
共有 条评论