20 template<
class T = mlpack::data::StandardScaler,
34 inp_.Fit(arma::conv_to<arma::mat>::from(dataset.inputs_));
35 if constexpr (std::is_same<D,
data::Dataset<arma::Row<DTYPE>>>::value ||
38 lab_.Fit(arma::conv_to<arma::rowvec>::from(dataset.labels_));
49 inp_.Transform( dataset.inputs_, tdataset.inputs_);
60 if constexpr (std::is_same<D,
data::Dataset<arma::Row<DTYPE>>>::value ||
65 lab_.Transform( dataset.labels_, tdataset.labels_);
70 WARNING(
"Unfortunately I will not let you transform the labels if you \
71 donot have a regression dataset!");
84 if constexpr (std::is_same<D,
data::Dataset<arma::Row<DTYPE>>>::value ||
100 inp_.InverseTransform( dataset.inputs_, tdataset.inputs_);
111 D tdataset = dataset;
112 lab_.InverseTransform( dataset.labels_, tdataset.labels_);
124 if constexpr (std::is_same<D,
data::Dataset<arma::Row<DTYPE>>>::value ||
135 template<
class KERNEL,
class T = DTYPE>
146 template<
typename... Ts>
147 Gram(Ts&&... args) : kernel_(args...) {}
159 const arma::Mat<T>& input2)
const
161 arma::Mat<T> matrix(input1.n_rows, input2.n_rows);
163 #pragma omp parallel for collapse(2)
164 for (
int i = 0; i < int(input1.n_rows); i++)
165 for (
int j = 0; j < int(input2.n_rows); j++)
166 matrix(i,j) = kernel_.Evaluate(input1.row(i).eval(),
167 input2.row(j).eval());
179 const arma::Mat<T>& input2)
const
181 arma::Mat<T> matrix(input1.n_cols, input2.n_cols);
183 #pragma omp parallel for collapse(2)
184 for (
int i = 0; i < int(input1.n_cols); i++)
185 for (
int j = 0; j < int(input2.n_cols); j++)
186 matrix(i,j) = kernel_.Evaluate(input1.col(i).eval(),
187 input2.col(j).eval());
205 const arma::Mat<T>& input2,
208 size_t n_samples = input1.n_rows;
209 arma::uvec indices = arma::randi<arma::uvec>(k, arma::distr_param(0, n_samples - 1));
210 arma::Mat<T> landmarks = input1.cols(indices);
212 arma::Mat<T> W = this->
GetMatrix(landmarks, landmarks);
213 arma::Mat<T> C = this->
GetMatrix(input1, landmarks);
214 arma::Mat<T> W_pinv = arma::pinv(W);
216 return C * W_pinv * C.t();
224 arma::Mat<T>
GetMatrix(
const arma::Mat<T>& input1)
const
231 template<
typename Archive>
234 ar ( cereal::make_nvp(
"kernel",kernel_) );
241 template<
class Dataset,
class O=DTYPE>
242 void report(
const Dataset& dataset )
244 PRINT(
"### DATASET INFORMATION ###");
245 PRINT(
"features : " << dataset.dimension_ );
246 PRINT(
"size : " << dataset.size_ );
248 PRINT(
"### FEATURE INFORMATION ###");
249 PRINT(
"Mean : \n" << arma::mean(dataset.inputs_,1) );
250 PRINT(
"Median : \n" << arma::median(dataset.inputs_,1) );
251 PRINT(
"Variance : \n" << arma::var(dataset.inputs_.t()) );
252 PRINT(
"Min : \n" << arma::min(dataset.inputs_,1) );
253 PRINT(
"Max : \n" << arma::max(dataset.inputs_,1) );
254 PRINT(
"Covariance : \n" << arma::cov(dataset.inputs_.t()) );
256 PRINT(
"### LABEL INFORMATION ###");
257 PRINT(
"Unique : \n" << arma::unique(dataset.labels_) );
258 PRINT(
"Counts : \n" << arma::hist(dataset.labels_,arma::unique(dataset.labels_)) );
264 template<
class T,
class O=DTYPE>
265 arma::Mat<O> Load (
const T& filename,
266 const bool& transpose,
267 const bool& count =
false )
270 mlpack::data::DatasetInfo info;
273 mlpack::data::Load(filename,matrix,info,
true,transpose);
276 mlpack::data::Load(filename,matrix,
true,transpose);
283 void Save (
const std::filesystem::path& filename,
285 const bool transpose=
true )
294 std::string ext = filename.extension();
296 std::filesystem::create_directories(filename.parent_path());
300 temp.save(filename,arma::csv_ascii);
302 else if (ext ==
"bin")
304 temp.save(filename,arma::arma_binary);
306 else if (ext ==
"arma")
308 temp.save(filename,arma::arma_ascii);
310 else if (ext ==
"txt")
312 temp.save(filename,arma::raw_ascii);
315 throw std::runtime_error(
"Not Implemented save extension!");
void serialize(Archive &ar, const unsigned int)
arma::Mat< T > GetApprox(const arma::Mat< T > &input1, const arma::Mat< T > &input2, size_t k) const
Compute an approximate Gram matrix using the Nyström method.
arma::Mat< T > GetMatrix(const arma::Mat< T > &input1, const arma::Mat< T > &input2) const
Compute Gram matrix for column-major ordered data.
Gram(Ts &&... args)
Construct and initialize kernel with arbitrary arguments.
arma::Mat< T > GetMatrix(const arma::Mat< T > &input1) const
Compute Gram matrix of a dataset with itself (column-major).
arma::Mat< T > GetMatrix2(const arma::Mat< T > &input1, const arma::Mat< T > &input2) const
Compute Gram matrix for row-major ordered data.
Gram()
Default constructor.