4 typedef ublas::matrix<double>
Matrix;
5 typedef ublas::vector<double>
Vector;
9 IncrementalSVD::IncrementalSVD()
13 svd_state_set =
false;
15 plugin_name =
"Incremental SVD";
20 std::map<std::string, CEBL::Param> IncrementalSVD::getParamsList()
22 std::map<std::string, CEBL::Param> params;
26 params[
"lags"] = lags;
33 params[
"lambda"] = lambda_param;
40 void IncrementalSVD::setParamsList( std::map<std::string, CEBL::Param> ¶ms)
42 std::map<std::string, CEBL::Param> p = params;
43 int new_lags = p[
"lags"].getInt();
44 if(new_lags != n_lags)
50 lambda = p[
"lambda"].getDouble();
72 int nRowsBuffer =
nrow(buffer);
73 int nColsBuffer =
ncol(buffer);
74 int nColsData =
ncol(data);
77 nColsBuffer-n_lags, nColsBuffer-1);
79 buffer.resize(nRowsBuffer, n_lags+nColsData);
80 nColsBuffer =
ncol(buffer);
82 nColsBuffer-nColsData, nColsBuffer-1) = data;
86 this->inturruptionPoint();
96 this->inturruptionPoint();
97 Matrix svdized_data = ISVD(lagged_data);
111 map<string, SerializedObject> ret;
125 void IncrementalSVD::reset()
129 svd_state_set =
false;
130 cout <<
"reset called\n";
140 if(svd_state_set &&
nrow(data)!=
ncol(svd_state.U))
142 svd_state_set =
false;
149 svd_state_set =
true;
153 features.resize(0,0);
154 for(
int i=0; i <
ncol(data); i++)
156 this->inturruptionPoint();
158 svd_state = SVDUpdateRank(data_col, svd_state,lambda);
160 if(features.size1() == 0)
163 features =
cbind(features,U);
170 SVDState IncrementalSVD::SVDUpdateRank(
Matrix sample, SVDState state,
double lambda)
172 int dimen =
ncol(state.U);
173 if(state.s.size() < unsigned(dimen))
174 dimen = state.s.size();
176 state.U.resize(state.U.size1(),dimen);
177 state.s.resize(dimen);
181 Matrix m = prod(
t(state.U),sample);
182 Matrix p = sample - prod(state.U, m);
184 double pnorm = sqrt(
sum(
apply(p,pow,2)));
194 int last_row =
nrow(K)-1;
195 for(
int i=0;i<
ncol(K);i++)
197 this->inturruptionPoint();
201 K(last_row,i) = pnorm;
215 state.U = prod(
cbind(state.U,P),Up);
216 state.U.resize(state.U.size1(),dimen);
221 for(
int col=0;col<
ncol(state.U);col++)
223 this->inturruptionPoint();
224 bool s = state.U(0,col) < 0;
225 for(
int row=0;row<
nrow(state.U);row++)
227 state.U(row,col) = -state.U(row,col);
231 state.s = sp * lambda;