2015-07-14 2 views
1

Из того, что я понимаю, полиномиальная регрессия - это специфический тип регрессионного анализа, который более сложный, чем линейная регрессия. Есть ли модуль python, который может это сделать? Я посмотрел в matplotlib, scikitand numpy, но может найти только линейный регрессионный анализ.полиномиальная регрессия с использованием python

А можно ли вычислить коэффициент корреляции ни одной линейной линии?

ответ

4

scikit поддерживает линейную и полиномиальную регрессию.

Проверьте страницу Generalized Linear Models в разделе Полиномиальная регрессия: линейные модели с базовыми функциями.

Пример:

>>> from sklearn.preprocessing import PolynomialFeatures 
>>> import numpy as np 
>>> X = np.arange(6).reshape(3, 2) 
>>> X 
array([[0, 1], 
     [2, 3], 
     [4, 5]]) 
>>> poly = PolynomialFeatures(degree=2) 
>>> poly.fit_transform(X) 
array([[ 1, 0, 1, 0, 0, 1], 
     [ 1, 2, 3, 4, 6, 9], 
     [ 1, 4, 5, 16, 20, 25]]) 

В особенности X были преобразованы из [x_1, x_2] в [1, x_1, x_2, x_1^2, x_1 x_2, x_2^2], и теперь могут быть использованы в любой линейной модели.

Этот вид предварительной обработки может быть упрощен с помощью инструментов Pipeline. Один объект, представляющий собой простой полиномиальной регрессии может быть создан и используется следующим образом:

>>> from sklearn.preprocessing import PolynomialFeatures 
>>> from sklearn.linear_model import LinearRegression 
>>> from sklearn.pipeline import Pipeline 
>>> model = Pipeline([('poly', PolynomialFeatures(degree=3)), 
...     ('linear', LinearRegression(fit_intercept=False))]) 
>>> # fit to an order-3 polynomial data 
>>> x = np.arange(5) 
>>> y = 3 - 2 * x + x ** 2 - x ** 3 
>>> model = model.fit(x[:, np.newaxis], y) 
>>> model.named_steps['linear'].coef_ 
array([ 3., -2., 1., -1.]) 

Линейная модель обучен на полиномиальных функций может точно восстановить входные коэффициенты полинома.

В некоторых случаях нет необходимости включать более высокие мощности какой-либо одной функции, но только так называемые функции взаимодействия, которые объединяются не более чем в d различных функциях. Их можно получить от PolynomialFeatures с настройкой interaction_only=True.

+0

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

+0

Я думаю, что вы всегда можете вычислить [Коэффициент корреляции] (http://mathworld.wolfram.com/CorrelationCoefficient.html) – fferri

+0

Проверьте это http://docs.scipy.org/doc/scipy-0.14.0/reference /generated/scipy.stats.pearsonr.html – fferri

4

У вас есть просмотр NumPy's polyfit? См. reference.

Из их примеров:

>>> import numpy as np 
>>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) 
>>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0]) 
>>> z = np.polyfit(x, y, 3) 
>>> z 
[ 0.08703704 -0.81349206 1.69312169 -0.03968254] 
Смежные вопросы