Как интерпретировать модель после получения набора коэффициентов для многовариантной полиномиальной регрессии? - PullRequest
0 голосов
/ 04 июня 2019

Я решал проблему многофакторной полиномиальной регрессии в рамках онлайн-курса, где нужно получить модель (полиномиальную форму) для определения «цены автомобиля» в зависимости от «лошадиных сил», «снаряженной массы». », 'двигатель-размер'," шоссе миль на галлон. Код, приведенный на слайде курса, у меня не сработал, и поэтому я попытался решить проблему самостоятельно, используя немного другой подход, и (не уверен) я добился успеха.

Теперь я хочу определить, какой коэффициент принадлежит какой переменной и к какой степени.

   from sklearn.linear_model import LinearRegression
   from sklearn.preprocessing import PolynomialFeatures

   lm=LinearRegression()
   pr=PolynomialFeatures(degree=2, include_bias=False)

   zi=df[['horsepower','curb-weight','engine-size','highway-mpg']]
   y=df["price"]

   x_poly=pr.fit_transform(zi)
   lm.fit(x_poly,y)
   y_poly_pred=lm.predict(x_poly)

   print(lm.intercept_)

   print(lm.coef_)

Вывод 'print (lm.coef_)' представляет собой массив:

[  3.76158683e+02,   1.09866844e+01,  -1.15342835e+02,   2.20081486e+02,
   1.67487147e+00,  -1.85925420e-01,  -1.27963440e+00,  -1.97616945e+00,
   5.93872420e-04,   1.11397083e-01,  -2.12935236e-01,   1.04605018e-01,
   2.69312438e-01,   4.36657298e+00]

Как я могу назначить или узнать, каким переменным и каким степеням соответствует каждый из этих коэффициентов?

1 Ответ

1 голос
/ 04 июня 2019

Один из способов сделать это, вы можете получить имена столбцов ploymomialfeature, такие как

pr.get_feature_names(zi.columns)

и

pd.DataFrame(zip(pr.get_feature_names(zi.columns),lm.coef_),columns=["feature","coef_"])

Выше следует напечатать коэф для каждой функции

Рабочий пример:

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

import pandas as pd
import numpy as np

data = pd.DataFrame.from_dict({
    'x': np.random.randint(low=1, high=10, size=5),
    'y': np.random.randint(low=-1, high=1, size=5),
})

lm=LinearRegression()
p = PolynomialFeatures(degree=2)

p_data = p.fit_transform(data)

lm.fit(p_data,data['y'])

print (p.get_feature_names(data.columns))

coefmapping = pd.DataFrame(zip(p.get_feature_names(data.columns),lm.coef_),columns=["feature","coef_"])

print(coefmapping)

Выход:

  feature         coef_
0       1 -1.204939e-14
1       x -1.165951e-15
2       y  5.000000e-01
3     x^2 -6.938894e-18
4     x y -3.156113e-16
5     y^2 -5.000000e-01
...