summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2015-03-07 16:42:46 +0800
committerJoe Zhao <ztuowen@gmail.com>2015-03-07 16:42:46 +0800
commitf50bb1ee0d6011969fcfc7cb084bab0ce9c4dd39 (patch)
treeff6a5d0de7f357772fb902fb357d8bfa9fe58082
parentbddad20b835a83923901106961adc14c5eb6e3db (diff)
downloadranksvm-f50bb1ee0d6011969fcfc7cb084bab0ce9c4dd39.tar.gz
ranksvm-f50bb1ee0d6011969fcfc7cb084bab0ce9c4dd39.tar.bz2
ranksvm-f50bb1ee0d6011969fcfc7cb084bab0ce9c4dd39.zip
scaffolding, decided to abandon libsvm format & using matrices for easier input & output operation
-rw-r--r--main.cpp4
-rw-r--r--model/ranksvm.cpp44
-rw-r--r--model/ranksvm.h19
-rw-r--r--model/ranksvmtn.h20
-rw-r--r--tools/dataProvider.h7
-rw-r--r--tools/fileDataProvider.h20
6 files changed, 102 insertions, 12 deletions
diff --git a/main.cpp b/main.cpp
index 7238c0c..4765dcc 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,5 +1,8 @@
#include <iostream>
#include <Eigen/Dense>
+#include "tools/easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
using Eigen::MatrixXd;
@@ -10,5 +13,6 @@ int main()
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
+ LOG(FATAL) << "My first info log using default logger";
std::cout << m << std::endl;
}
diff --git a/model/ranksvm.cpp b/model/ranksvm.cpp
index 38fb70c..b15d2ef 100644
--- a/model/ranksvm.cpp
+++ b/model/ranksvm.cpp
@@ -1 +1,43 @@
-#include"ranksvm.h" \ No newline at end of file
+#include"ranksvm.h"
+#include"ranksvmtron.h"
+#include<iostream>
+#include<fstream>
+#include<string>
+
+using namespace Eigen;
+
+int RSVM::saveModel(string fname){
+
+ std::ofstream fout(fname);
+ fout<<this->getName()<<endl;
+ fout<<this->model;
+ return 0;
+}
+
+static RSVM* RSVM::loadModel(string fname){
+ std::ifstream fin(fname);
+ std::string type;
+ int fsize;
+ fin>>type;
+ fin>>fsize;
+
+ RSVM* rsvm;
+
+ // TODO multiplex type
+ if (type=="TN")
+ RSVM = new RSVMTN();
+
+ rsvm->fsize=fsize;
+ VectorXd model;
+ fin>>model;
+ rsvm->setModel(model);
+
+ return rsvm;
+}
+
+int RSVM::setModel(Eigen::VectorXd model) {
+ if (model.cols()!=fsize)
+ LOG(FATAL) << "Feature size mismatch";;
+ this->model=model;
+ return 0;
+} \ No newline at end of file
diff --git a/model/ranksvm.h b/model/ranksvm.h
index ba79c48..8993b87 100644
--- a/model/ranksvm.h
+++ b/model/ranksvm.h
@@ -4,19 +4,22 @@
#include<Eigen/Dense>
#include<string>
#include"../tools/dataProvider.h"
+#include "../tools/easylogging++.h"
class RSVM //Virtual base class for all RSVM operations
{
protected:
- Eigen::VectorXd* model;
+ Eigen::VectorXd model;
+ int fsize;
public:
- virtual int train(DataProvider &D)=0;
- int test();
- int saveModel(string fname);
- static RSVM loadModel(string fname);
- string getName();
- Eigen::MatrixXd getModel();
- Eigen::MatrixXd setModel();
+ virtual int train(DataProvider D)=0;
+ virtual int predict(DataProvider D);
+ int saveModel(std::string fname);
+ static RSVM loadModel(std::string fname);
+ virtual std::string getName()=0;
+ Eigen::MatrixXd getModel(){
+ return model;};
+ void setModel(Eigen::VectorXd model);
};
#endif \ No newline at end of file
diff --git a/model/ranksvmtn.h b/model/ranksvmtn.h
new file mode 100644
index 0000000..2a8f524
--- /dev/null
+++ b/model/ranksvmtn.h
@@ -0,0 +1,20 @@
+#ifndef RSVMTN_H
+#define RSVMTN_H
+
+// Truncated Newton method based RankSVM
+
+#include"ranksvm.h"
+
+class RSVMTN:public RSVM
+{
+public:
+ std::string getName()
+ {
+ return "TN";
+ };
+
+ int train(DataProvider D){return 0;};
+ int predict(DataProvider D){return 0;};
+};
+
+#endif \ No newline at end of file
diff --git a/tools/dataProvider.h b/tools/dataProvider.h
index 70a87f0..d598f3f 100644
--- a/tools/dataProvider.h
+++ b/tools/dataProvider.h
@@ -2,10 +2,11 @@
#define DATAPROV_H
#include<Eigen/Dense>
+#include "../tools/easylogging++.h"
class DataProvider //Virtual base class for data input
{
-private:
+protected:
int size;
int attrSize;
public:
@@ -17,9 +18,9 @@ public:
}
virtual Eigen::MatrixXd* getAttr() = 0;
- virtual Eigen::MatrixXd* getPref() = 0;
+ virtual Eigen::VectorXd* getPref() = 0;
virtual int open();
- virtual int parse();
+ virtual bool EOFile();
};
#endif \ No newline at end of file
diff --git a/tools/fileDataProvider.h b/tools/fileDataProvider.h
new file mode 100644
index 0000000..3cfb3f9
--- /dev/null
+++ b/tools/fileDataProvider.h
@@ -0,0 +1,20 @@
+#ifndef FDPROV_H
+#define FDPROV_H
+
+#include "dataProvider.h"
+#include <string>
+
+class FileDP:public DataProvider
+{
+private:
+ std::string fname;
+public:
+ FileDP(){};
+ FileDP(std::string fn):fname(fn){};
+ virtual Eigen::MatrixXd* getNextAttr();
+ virtual Eigen::VectorXd* getNextPref();
+ virtual int open();
+ virtual bool EOFile();
+};
+
+#endif \ No newline at end of file