smo算法的c++实现

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值