00001 #ifndef C_LOCALREGRESSION__H
00002 #define C_LOCALREGRESSION__H
00003
00004 #include "cinputdata.h"
00005
00006
00007 #include "newmat/newmatio.h"
00008
00009 #include <iostream>
00010 #include <limits>
00011
00012 class CDataSet;
00013 class CDataSet1D;
00014 class CDataSubSet;
00015
00016 class CKDTree;
00017 class CKNearestNeighbors;
00018
00019 class CLocalRegression : public CMapping<double>
00020 {
00021 protected:
00022 CKDTree *kdTree;
00023 CKNearestNeighbors *nearestNeighbors;
00024
00025 CDataSet *input;
00026 CDataSet1D *output;
00027
00028 std::list<int> *subsetList;
00029 DataSubset *subset;
00030
00031 int K;
00032
00033 virtual double doGetOutputValue(ColumnVector *vector);
00034
00035 public:
00036 CLocalRegression(CDataSet *input, CDataSet1D *output, int K);
00037 virtual ~CLocalRegression();
00038
00039
00040 virtual double doRegression(ColumnVector *vector, DataSubset *subset) = 0;
00041
00042 DataSubset *getLastNearestNeighbors();
00043
00044 int getNumNearestNeighbors();
00045 };
00046
00047 class CLocalRBFRegression : public CLocalRegression
00048 {
00049 protected:
00050 ColumnVector *rbfFactors;
00051 ColumnVector *sigma;
00052 public:
00053 CLocalRBFRegression(CDataSet *input, CDataSet1D *output, int K, ColumnVector *sigma);
00054 virtual ~CLocalRBFRegression();
00055
00056 virtual double doRegression(ColumnVector *vector, DataSubset *subset);
00057
00058 ColumnVector *getRBFFactors(ColumnVector *vector,DataSubset *subset);
00059
00060 ColumnVector *getLastRBFFactors();
00061 };
00062
00063 class CLinearRegression : public CMapping<double>
00064 {
00065 protected:
00066 Matrix *X;
00067 ColumnVector *xVector;
00068 ColumnVector *yVector;
00069
00070 ColumnVector *w;
00071
00072 Matrix *X_pinv;
00073
00074 int degree;
00075
00076 int numDimensions;
00077 int xDim;
00078
00079 void init(int l_degree, int numDataPoints, int numDimensions);
00080
00081 virtual double doGetOutputValue(ColumnVector *input);
00082 public:
00083 double lambda;
00084
00085 CLinearRegression(int degree, int numDataPoints, int numDimensions);
00086 CLinearRegression(int degree, CDataSet *dataSet, CDataSet1D *outputValues, DataSubset *subset);
00087 virtual ~CLinearRegression();
00088
00089 virtual void getXVector(ColumnVector *input, ColumnVector *xVector);
00090 virtual void calculateRegressionMatrix(CDataSet *dataSet, CDataSet1D *outputValues, DataSubset *subset);
00091
00092
00093 };
00094
00095
00096 class CLocalLinearRegression : public CLocalRegression
00097 {
00098 protected:
00099 CLinearRegression *regression;
00100
00101 public:
00102 CLocalLinearRegression(CDataSet *input, CDataSet1D *output, int K, int degree, double lambda);
00103 ~CLocalLinearRegression();
00104
00105 virtual double doRegression(ColumnVector *vector, DataSubset *subset);
00106 };
00107
00108
00109
00110
00111 #endif