added logistic regression prototype

pull/3119/head
Rahul Kavi 11 years ago committed by Maksim Shabunin
parent 3039ed7682
commit fcfeb2451b
  1. 84
      modules/ml/include/opencv2/ml.hpp

@ -89,6 +89,8 @@ public:
CV_PROP_RW double maxVal;
CV_PROP_RW double logStep;
};
#define CV_TYPE_NAME_ML_LR "opencv-ml-lr"
class CV_EXPORTS TrainData
@ -566,6 +568,85 @@ public:
static Ptr<ANN_MLP> create(const Params& params=Params());
};
/****************************************************************************************\
* Logistic Regression *
\****************************************************************************************/
struct CV_EXPORTS_W_MAP CvLR_TrainParams
{
CV_PROP_RW double alpha;
CV_PROP_RW int num_iters;
CV_PROP_RW int norm;
///////////////////////////////////////////////////
// CV_PROP_RW int debug;
///////////////////////////////////////////////////
CV_PROP_RW int regularized;
CV_PROP_RW int train_method;
CV_PROP_RW int minibatchsize;
CV_PROP_RW CvTermCriteria term_crit;
CvLR_TrainParams();
///////////////////////////////////////////////////
// CvLR_TrainParams(double alpha, int num_iters, int norm, int debug, int regularized, int train_method, int minbatchsize);
///////////////////////////////////////////////////
CvLR_TrainParams(double alpha, int num_iters, int norm, int regularized, int train_method, int minbatchsize);
~CvLR_TrainParams();
};
class CV_EXPORTS_W CvLR : public CvStatModel
{
public:
CvLR();
// CvLR(const CvLR_TrainParams& Params);
CvLR(const cv::Mat& data, const cv::Mat& labels, const CvLR_TrainParams& params);
virtual ~CvLR();
enum { REG_L1=0, REG_L2 = 1};
enum { BATCH, MINI_BATCH};
virtual bool train(const cv::Mat& data, const cv::Mat& labels);//, const CvLR_TrainParams& params);
virtual float predict(const cv::Mat& data, cv::Mat& predicted_labels);
virtual float predict(const cv::Mat& data);
virtual void write( CvFileStorage* storage, const char* name ) const;
virtual void read( CvFileStorage* storage, CvFileNode* node );
virtual void clear();
virtual cv::Mat get_learnt_mat();
protected:
cv::Mat learnt_thetas;
CvLR_TrainParams params;
std::map<int, int> forward_mapper;
std::map<int, int> reverse_mapper;
virtual bool set_default_params();
virtual cv::Mat calc_sigmoid(const cv::Mat& data);
virtual double compute_cost(const cv::Mat& data, const cv::Mat& labels, const cv::Mat& init_theta);
virtual cv::Mat compute_batch_gradient(const cv::Mat& data, const cv::Mat& labels, const cv::Mat& init_theta);
virtual cv::Mat compute_mini_batch_gradient(const cv::Mat& data, const cv::Mat& labels, const cv::Mat& init_theta);
virtual std::map<int, int> get_label_map(const cv::Mat& labels);
virtual bool set_label_map(const cv::Mat& labels);
virtual cv::Mat remap_labels(const cv::Mat& labels, const std::map<int, int> lmap);
//cv::Mat Mapper;
cv::Mat labels_o;
cv::Mat labels_n;
};
/****************************************************************************************\
* Auxilary functions declarations *
\****************************************************************************************/
@ -581,6 +662,9 @@ CV_EXPORTS void randGaussMixture( InputArray means, InputArray covs, InputArray
/* creates test set */
CV_EXPORTS void createConcentricSpheresTestSet( int nsamples, int nfeatures, int nclasses,
OutputArray samples, OutputArray responses);
typedef CvLR_TrainParams LogisticRegression_TrainParams;
typedef CvLR LogisticRegression;
}
}

Loading…
Cancel
Save