資源簡介
我編寫的一個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?size();?i++){
hangdata->push_back(atof((str_list->at(i)).c_str()));
}
myData->push_back(hangdata);
delete?str_list;
// cout?< }
}
vector*>??*randomIndex(int?zhenshu?int?size){
//初始化
vector*>?*?indexrandom?=?new?vector*>();
vector?random;
for?(int?i?=?0;?i? random.push_back(i);
}
//將數組打亂順序
srand(time(NULL));
int?index?temp;
for?(int?i?=?0;?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? int?end?=?mathevermath*(i?+?1);
if?((size?-?end)? end?=?size;
}
vector*?index?=?new?vector();
for?(int?j?=?mathevermath*i;?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實驗
評論
共有 條評論