Учебник по полиномиальной регрессии в Python
Ранее мы прошли линейную регрессию в блокноте здесь.
Очевидно, что многие отношения нелинейны, поэтому для нелинейных отношений нам нужно что-то еще.
Давайте рассмотрим, как провести полиномиальную регрессию в этом посте.
Во-первых, что такое полиномиальная регрессия?
Это просто регрессия более высокого порядка.
Зачем нам это нужно?
Иногда линия просто не проходит, и вам нужна кривая.
Мы используем те же данные, что и в последнем посте о линейной регрессии. Поэтому мы не будем вдаваться в это.
Во-первых, мы импортируем и объявляем все экземпляры, которые нам нужны для линейной, кубической и квадратичной регрессии.
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# Recall we set interaction_only to True in Basics - Exploring Interactions. Here we want all terms in so we turn it off
linear_regression = linear_model.LinearRegression(normalize=False, fit_intercept=True)
create_cubic = PolynomialFeatures(degree=3, interaction_only=False, include_bias=False)
create_quadratic = PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)
# Putting these in a pipline as before
linear_predictor = make_pipeline(linear_regression)
quadratic_predictor = make_pipeline(create_quadratic, linear_regression)
cubic_predictor = make_pipeline(create_cubic, linear_regression)
С этими настройками регрессия очень проста.
Для линейной регрессии нам просто нужно подключить переменные к linear_predictor, который мы настроили выше.
regr_line = scatter.plot(xt, linear_predictor.fit(x,y).predict(xt), '-', color='red', linewidth=2)
То же самое для квадратичной (степень 2) и кубической (степень 3) регрессии.
regr_line = scatter.plot(xt, quadratic_predictor.fit(x,y).predict(xt), '-', color='red', linewidth=2)
regr_line = scatter.plot(xt, cubic_predictor.fit(x,y).predict(xt), '-', color='red', linewidth=2)
Мы могли бы сойти с ума и сделать регрессию в любой произвольной степени.
create_ten = PolynomialFeatures(degree=10, interaction_only=False, include_bias=False)
ten_predictor = make_pipeline(create_ten, linear_regression)
scatter = merged.plot(kind='scatter', x=predictor, y='Resale Index', xlim=x_range, ylim=y_range)
regr_line = scatter.plot(xt, ten_predictor.fit(x,y).predict(xt), '-', color='red', linewidth=2)
Он подходит идеально. Но это также означает, что это будет ужасный предиктор, как только мы применим линию к любому другому набору данных.
Полный набор кода находится в блокноте здесь.
playgrd.com || facebook.com/playgrdstar || instagram.com/playgrdstar/