0

Я вычислительные коэффициенты, как это:Многофакторный регрессионный не получают те же коэффициенты, как sklearn

def estimate_multivariate(data, target): 
    x = np.array(data) 
    y = np.array(target) 
    inv = np.linalg.inv(np.dot(x.T,x)) 
    beta = np.dot(np.dot(inv, x.T), y) 
    return beta 

и получить эти результаты:

[[ 103.56793536] [ 63.93186848][-272.06215991][ 500.43324361] [ 327.45075839]] 

Однако если я создаю модель с sklearn.linear_model я получаю эти результаты:

[ 118.45775015 64.56441108 -256.2.43324362 327.45075841] 

Это происходит только тогда, когда я использую

preprocessing.PolynomialFeatures(degree=2) 
poly.fit_transform(x) 

со степенью больше 1. Когда я использую исходные данные, коэффициенты обоих методов одинаковы. Что могло бы объяснить это? Есть где-то усечение?

ответ

2

Просто чтобы проверить: какая модель от sklearn.linear_model вы использовали? LinearRegression? Все остальные модели регрессии из этого модуля наказываются, что может объяснить несоответствие.

Предполагая, что это с помощью LinearRegression, вы должны либо:

  • убедитесь, что вы должны иметь столбец в вашем массиве данных с постоянным значением 1 и относиться к бета этого столбца в качестве intercept_ линейной модели ,

  • или отключить перехват фитинг для линейной модели: LinearRegression(fit_intercept=False).fit(data, target).coef_

Предполагая, что вы также позаботились об этом, вы должны иметь в виду, что извлечение полиномиальных функций значительно увеличит количество функций, и если количество ваших образцов слишком мало, эмпирическая ковариационная матрица будет плохой, и вызов np.inv будет очень неустойчиво. Для справки LinearRegression использует итерированный наименьший квадратный решатель вместо формулы закрытой формы, содержащей np.inv.

При использовании n_features >> n_samples вы должны использовать оштрафованную модель линейной регрессии, такую ​​как sklearn.linear_model.Ridge вместо обычных наименьших квадратов.