eis/eqpalg/.do_not_use/regression/frame.cc

53 lines
1.5 KiB
C++

#include <eqpalg/regression/frame.h>
namespace regression {
Frame::Frame(const std::string& ruleId, size_t dims)
: rule_id_(ruleId), dims_(dims) {}
int Frame::load(const SampleWindow& data) {
TrSample tr_samples;
Label tr_labels;
// 如果不存在数据,退出
if (data.empty()) {
return -1;
}
// 提前保留样本
tr_samples.reserve(data.size());
tr_labels.reserve(data.size());
// 把输入转成dlib样本
for (const auto& meta_data : data) {
SampleType tmp(dims_,1);
for (size_t i = 0; i < meta_data.size() - 1; i++) {
tmp(i) = meta_data[i];
}
tr_samples.emplace_back(tmp);
tr_labels.push_back(meta_data[meta_data.size() - 1]);
}
// 计算gama
auto learn_sample_size = tr_samples.size() * 0.1;
const double gama = 3.0 / compute_mean_squared_distance(randomly_subsample(
tr_samples, learn_sample_size * 0.1));
this->train_and_test_regression(gama, tr_samples, tr_labels);
return 0;
}
int Frame::train_and_test_regression(const double gama,
const TrSample& tr_samples,
const Label& tr_labels) {
// 计算krr回归
krr_ = std::make_unique<Krr>(dims_, gama, tr_samples, tr_labels);
best_regression_type = 1;
return 0;
}
double Frame::predict(const SamplePoint& data) { return krr_->predict(data); }
bool Frame::valid() {
if (this->best_regression_type > 0) {
return true;
}
return false;
}
} // namespace regression