#include 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(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