53 lines
1.5 KiB
C++
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
|