32 void SetSamples(
const std::vector<std::vector<double>>& x,
const std::vector<double>& y)
34 assert(x.size() == y.size());
37 if (x.empty() || y.empty())
40 const size_t n = std::min(x.size(), y.size());
41 const size_t m = x[0].size();
51 for (
size_t i = 0; i < n; ++i)
52 for (
size_t j = 1; j <= m; ++j)
53 X(i, j) = x[i][j - 1];
57 for (
size_t i = 0; i < n; ++i)
82 for (
size_t j = 1; j <= m; ++j)
83 trace += X.col(j).squaredNorm();
85 const double lambda = (m > 0) ? alpha * trace /
static_cast<double>(m) : 0.;
87 Eigen::MatrixXd Xa(n + m, m + 1);
89 Xa.bottomRows(m).setZero();
91 const double sqrtLambda = std::sqrt(lambda);
92 for (
size_t j = 0; j < m; ++j)
93 Xa(n + j, j + 1) = sqrtLambda;
95 Eigen::VectorXd Ya(n + m);
99 Wa = Xa.colPivHouseholderQr().solve(Ya);
102 Wa = X.colPivHouseholderQr().solve(Y);
106 for (
size_t i = 0; i < m; ++i)