В sklearn, как я могу получить, какой коэффициент соответствует какому параметру в полиномиальной линейной регрессии? - PullRequest
1 голос
/ 07 мая 2019

Я делаю линейную регрессию с scikit-learn в Python3.У меня есть массив данных x и y, и я хочу реализовать линейную регрессию с использованием полинома 3-й степени (а затем применить подогнанную линию к моим данным).После этого я хочу выяснить, каково истинное уравнение этого полинома.Однако я не знаю порядок результатов при использовании команды model.coeff_.

Кстати, у меня есть только одна независимая переменная x.Давайте предположим, что мне нужно уравнение типа: y = a*x + b*x^2 + c*x^3 + intercept.Я пытался использовать команду model.coeff_, но я не уверен, каков порядок печатного результата.

    # The data
    ----------------------
    utility = np.array([100, 96.64, 43.94, 24.48, 0, 0.05])
    windiness = np.array([0, 2.5, 6.7, 12.3, 15.5, 19, 20])
    windiness = windiness[:, np.newaxis]
    utility = utility[:, np.newaxis]

    # Regression
    -----------------------
    polynomial_features= PolynomialFeatures(degree=3)
    x_poly = polynomial_features.fit_transform(windiness)
    model = LinearRegression()
    model.fit(x_poly, utility)
    y_poly_pred = model.predict(x_poly)

Итак, print(model.coef_) выводит

[[ 0.        , -6.78066221, -0.19310896,  0.01361347]]

Но какое числоа, что б и т. д.

1 Ответ

1 голос
/ 07 мая 2019

Прежде всего, ваша переменная windiness содержит одно дополнительное значение, поэтому вам нужно удалить одно, убедитесь, что длина переменной и на входе, и на выходе. Теперь давайте продолжим с вашим обновленным кодом. Я удалил 0 для простоты.

utility = np.array([100, 96.64, 43.94, 24.48, 0, 0.05])
windiness = np.array([2.5, 6.7, 12.3, 15.5, 19, 20])
windiness = windiness[:, np.newaxis]
utility = utility[:, np.newaxis]

polynomial_features= PolynomialFeatures(degree=3)
x_poly = polynomial_features.fit_transform(windiness)
model = LinearRegression()
model.fit(x_poly, utility)
y_poly_pred = model.predict(x_poly)

Теперь давайте напечатаем ваш новый преобразованный вектор элементов

print(x_poly)

Вы должны получить вывод, подобный этому

[[1.000000e+00 2.500000e+00 6.250000e+00 1.562500e+01]
 [1.000000e+00 6.700000e+00 4.489000e+01 3.007630e+02]
 [1.000000e+00 1.230000e+01 1.512900e+02 1.860867e+03]
 [1.000000e+00 1.550000e+01 2.402500e+02 3.723875e+03]
 [1.000000e+00 1.900000e+01 3.610000e+02 6.859000e+03]
 [1.000000e+00 2.000000e+01 4.000000e+02 8.000000e+03]]

Здесь мы видим, что первая особенность - это X ^ 0, вторая - это X ^ 1, третья - это X ^ 2, а четвертая - это X ^ 3. Теперь он изменился с полиномиальной на эквивалентную линейную модель.

Коэффициент вашей модели можно увидеть по этому print(model.coef_). Вы получаете это [[ 0.0 11.125 -1.718 0.047]]

Теперь давайте смоделируем полином 3-го порядка следующим образом y[0] = model.intercept_ + 0.0 * X[0]^0 + 11.125 * X[0]^1 + (-1.718) * X[0]^2 + 0.047*X[0]^3

Короче говоря, коэффициенты следующие a = 11.125 b = -1.718 c = 0.047.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...