Cosan  1.0
Data Analytics Library
CosanLinearRegression.h
Go to the documentation of this file.
1 //
2 // Created by Xinyu Zhang on 3/27/21.
3 //
4 
5 #ifndef COSAN_COSANLINEARREGRESSION_H
6 #define COSAN_COSANLINEARREGRESSION_H
8 #include <numeric>
9 namespace Cosan
10 {
11 // template<typename NumericType,
12 // typename = typename std::enable_if<std::is_arithmetic<NumericType>::value,NumericType>::type>
13  /**
14  * y = a+bx
15  * minimize \sum_{i=1}^n (y_i-a-b^T x_i)^2 -> find the optimal a and b
16  * @tparam NumericType
17  * @details https://en.wikipedia.org/wiki/Linear_regression
18  */
19  template<Numeric NumericType>
20  class CosanLinearRegression: public CosanLinearModel<NumericType> {
21  public:
22 // Initialization
25 
26  template<class T,
27  std::enable_if_t<std::is_same_v<std::decay_t<T>,CosanMatrix<NumericType>>,bool> =true>
29  fit(X,Y);
30  }
31 
33  fit(RD.GetInput(),RD.GetTarget());
34  }
36  fit(CD.GetInput(),CD.GetTarget());
37  }
38 
39 // Load and Save Model
40 // virtual bool Load(const string & path);
41 // virtual bool Save(const string & path);
42 
43 //
44  virtual EModelType GetModelType() override {
45  return MdLinearRegression;
46  };
47  virtual EProblemType GetProblemType() override {
48  return PdUnivariateRegression;}
49  virtual const std::string GetName() const override {
50  return "Linear Regression/ Ordinary Least Square";}
51 
52  template<class T,
53  std::enable_if_t<std::is_same_v<std::decay_t<T>,CosanMatrix<NumericType>>,bool> =true
54  >
55  void fit(T&& X,const CosanMatrix<NumericType>& Y) {
56  if (this->MBias==true){
57  X.conservativeResize(X.rows(), X.cols()+1);
58  X.col(X.cols()-1) = CosanMatrix<NumericType>::Ones(X.rows(),1);
59  }
60  this->MBeta = (X.transpose()*X).ldlt().solve(X.transpose()*Y);
61  if (this->MBias==true){
62  removeColumn(X,X.cols()-1);
63  }
64  }
65 // void fit(CosanMatrix<NumericType>&& X,const CosanMatrix<NumericType>& Y) override{
66 // if (this->MBias==true){
67 // X.conservativeResize(X.rows(), X.cols()+1);
68 // X.col(X.cols()-1) = CosanMatrix<NumericType>::Ones(X.rows(),1);
69 // }
70 // this->MBeta = (X.transpose()*X).ldlt().solve(X.transpose()*Y);
71 // if (this->MBias==true){
72 // removeColumn(X,X.cols()-1);
73 // }
74 // }
76  if (this->MBias==true){
77 // std::vector<int> idx(X.cols()-1);
78 // std::iota(std::begin(idx), std::end(idx), 0);
79 
80 // return (X*MBeta.block(0,0,X.cols(),1)).array()+MBeta(X.cols(),0);
81  return (X*this->MBeta(Eigen::seq(0,X.cols()-1),Eigen::all)).array()+this->MBeta(X.cols(),0);
82  }
83  else{return X*this->MBeta;}
84  }
85 
86  };
87 }
88 
89 
90 #endif //COSAN_COSANLINEARREGRESSION_H
Cosan
Definition: CosanBO.h:29
Cosan::CosanRawData::GetInput
CosanMatrix< NumericType > GetInput()
Get a copy of CosanMatrix<NumericType> X.
Definition: CosanData.h:141
Cosan::CosanLinearModel::MBias
bool MBias
Definition: CosanLinearModel.h:57
Cosan::CosanRawData::GetTarget
CosanMatrix< NumericType > GetTarget()
Get a copy of CosanMatrix<NumericType> Y.
Definition: CosanData.h:147
NumericType
double NumericType
Definition: onehotencodingTest.cpp:20
Cosan::EModelType
EModelType
Definition: CosanModel.h:21
Cosan::CosanMatrix
Eigen::Matrix< NumericType, Eigen::Dynamic, Eigen::Dynamic > CosanMatrix
Definition: CosanBO.h:37
Cosan::CosanLinearModel::MBeta
CosanMatrix< NumericType > MBeta
Definition: CosanLinearModel.h:56
Cosan::CosanLinearRegression::GetProblemType
virtual EProblemType GetProblemType() override
Definition: CosanLinearRegression.h:47
Cosan::CosanData
Data container.
Definition: CosanData.h:546
Cosan::CosanLinearRegression::fit
void fit(T &&X, const CosanMatrix< NumericType > &Y)
Definition: CosanLinearRegression.h:55
Cosan::CosanLinearModel
CosanLinear Model. All linear model inherit this object.
Definition: CosanLinearModel.h:32
Cosan::EProblemType
EProblemType
Definition: CosanModel.h:13
Cosan::CosanLinearRegression::GetModelType
virtual EModelType GetModelType() override
Definition: CosanLinearRegression.h:44
Cosan::MdLinearRegression
@ MdLinearRegression
Definition: CosanModel.h:23
Cosan::CosanLinearRegression::CosanLinearRegression
CosanLinearRegression(CosanData< NumericType > &CD, bool Bias)
Definition: CosanLinearRegression.h:35
Cosan::CosanRawData
Raw Data container.
Definition: CosanData.h:36
Cosan::CosanLinearRegression::CosanLinearRegression
CosanLinearRegression(CosanRawData< NumericType > &RD, bool Bias)
Definition: CosanLinearRegression.h:32
Cosan::CosanLinearRegression::GetName
virtual const std::string GetName() const override
Get the name of the objects.
Definition: CosanLinearRegression.h:49
Cosan::CosanLinearRegression::CosanLinearRegression
CosanLinearRegression()
Definition: CosanLinearRegression.h:23
Cosan::PdUnivariateRegression
@ PdUnivariateRegression
Definition: CosanModel.h:16
Cosan::CosanLinearRegression::predict
virtual CosanMatrix< NumericType > predict(const CosanMatrix< NumericType > &X) override
Definition: CosanLinearRegression.h:75
removeColumn
void removeColumn(Matrix &matrix, gsl::index colToRemove)
Definition: utils.h:22
CosanLinearModel.h
Cosan::CosanLinearRegression::CosanLinearRegression
CosanLinearRegression(bool Bias)
Definition: CosanLinearRegression.h:24
Cosan::CosanLinearRegression
Definition: CosanLinearRegression.h:20
Cosan::CosanLinearRegression::CosanLinearRegression
CosanLinearRegression(T &&X, const CosanMatrix< NumericType > &Y, bool Bias)
Definition: CosanLinearRegression.h:28