Я пытаюсь воспроизвести результаты numpy.polyfit
и следующего приложения numpy.polyval
на C ++, используя Armadillo .
Это моя попытка:
using namespace arma;
vec fastLm(const vec& y,
const mat& X,
int order)
{
mat extended_X(X);
// Column bind the higher order regressors to the initial matrix
for(int i = 2; i < order + 1; ++i)
{
extended_X = join_rows(extended_X, pow(X, i));
}
// Join another column, made of '1', in order to have the intercept
extended_X = join_rows(mat(X.n_rows, 1, fill::ones), extended_X);
// Solve the linear regression by OLS
colvec coef = solve(extended_X, y);
// Return the fit
return extended_X * coef;
}
, и я ожидаю получить те же результаты, что и:
import numpy as np
def fastLm(y, X, order):
# Fit the polynomial regression
rg = np.polyfit(X, y, order)
# Return the fit
C = np.polyval(rg, X)
return C
Однако мои тесты показывают несоответствия и странные результаты, причина которых я m возникают трудности с поиском и отладкой. Подскажите, пожалуйста, верен ли мой "перевод" или поправьте?