#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <random>
#include <Eigen/Dense>
#include <time.h>
using namespace std;
using namespace Eigen;
class svm
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW //use the Eigen
svm(const string &filename)
{
dataInit(filename);
}
void print()
{
smoP();
caclWs();
cout<<w<<endl;
}
void test()
{
double errCount=0.0;
cout<<w<<endl;
for (int i=0;i<trainDataNum;i++)
{
if((trainDataMat.row(i)*w+b<0&&trainLabelMat[i]>0)||
(trainDataMat.row(i)*w+b>0&&trainLabelMat[i]<0))
errCount+=1.0;
}
cout<<errCount<<endl;
cout<<"error rate is: "<<errCount/trainDataNum<<endl;
}
private:
void dataInit(const string &filename)
{
ifstream file(filename);
string line;
while(getline(file,line))
{
istringstream record(line);
vector<double> data;
double temp;
while(record>>temp)
data.push_back(temp);
trainLabelVec.push_back(temp);
data.pop_back();
trainDataVec.push_back(data);
}
trainDataNum=trainDataVec.size();
trainFeatureNum=trainDataVec[0].size();
trainDataMat.resize(trainDataNum,trainFeatureNum);
trainLabelMat.resize(trainDataNum);
alphas.resize(trainDataNum);
eCache.resize(trainDataNum,2);
w.resize(trainFeatureNum);
for(int i=0;i<trainDataNum;i++)
for(int j=0;j<trainFeatureNum;j++)
trainDataMat(i,j)=tra
smo算法的c++实现
最新推荐文章于 2025-01-18 06:46:14 发布