36 void SetSamples(
const std::vector<std::vector<double>> &x,
const std::vector<double> &y)
38 assert(x.size() == y.size());
41 if (x.empty() || y.empty())
44 const size_t n = std::min(x.size(), y.size());
45 const size_t m = x[0].size();
55 for (
size_t i = 0; i < n; ++i)
56 for (
size_t j = 1; j <= m; ++j)
57 X(i, j) = x[i][j - 1];
61 for (
size_t i = 0; i < n; ++i)
86 for (
size_t j = 1; j <= m; ++j)
87 trace += X.col(j).squaredNorm();
89 const double lambda = (m > 0) ? alpha * trace /
static_cast<double>(m) : 0.;
91 Eigen::MatrixXd Xa(n + m, m + 1);
93 Xa.bottomRows(m).setZero();
95 const double sqrtLambda = std::sqrt(lambda);
96 for (
size_t j = 0; j < m; ++j)
97 Xa(n + j, j + 1) = sqrtLambda;
99 Eigen::VectorXd Ya(n + m);
101 Ya.tail(m).setZero();
103 Wa = Xa.colPivHouseholderQr().solve(Ya);
106 Wa = X.colPivHouseholderQr().solve(Y);
110 for (
size_t i = 0; i < m; ++i)