最近在弄一个项目,需要用C++实现SVM,但是在数据划分的时候出现了问题,大多SVM的实现都使用python,数据的划分也少有用C++实现的。
于是我重新看了自助法的定义,用C++实现自助法。
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
#include<stdlib.h>
#include<time.h>
#include<vector>
using namespace std;
double x[306][3]; //数据集 不带标签
double y[306]; //标签集
vector<vector<double>> v_x;
vector<double> v_y;
vector<vector<double>> traindatas;
vector<double> traindatasy;
vector<vector<double>> testdatas;
vector<double> testdatasy;
vector<int> index3; //放重复的traindatas下标
vector<int> index1; //放traindatas中的下标,不重复的
vector<int> index2; //放置testdatas的所有标签
vector<int> index4; //放置抽取到的训练集标签,不重复的
int toNum(string str)//Enclave无法接受string类型数据
{
int ans = 0;
for (int i = 0; i < str.length(); i++)
{
ans = ans * 10 + (str[i] - '0');
}
return ans;
}
void loaddata(string path)
{
ifstream Filein;
try { Filein.open(path); }
catch (exception e)
{
cout << "File open failed!";
}
string line;
int data_num = 0;
while (getline(Filein, line)) {
int before = 0;
int cnt = 0;
data_num++;
//cout << data_num << endl;
for (unsigned int i = 0; i < line.length(); i++) {
if (line[i] == ',' || line[i] == '\n') {
string sub = line.substr(before, i - before);
before = i + 1;
x[data_num - 1][cnt] = toNum(sub);
cnt++;
}
}
//Data[data_num - 1][cnt] = toNum(line.substr(before, line.length()));