Многовариантная линейная регрессия не становится более точной с более высокой степенью полинома? - PullRequest
0 голосов
/ 18 марта 2019

Я вычисляю MSE на тренировочном наборе , поэтому я ожидаю, что MSE уменьшится при использовании более высоких полиномов. Однако с 4 по 5 степень MSE значительно увеличивается. В чем может быть причина?

import pandas as pd, numpy as np
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt

path = "https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/automobileEDA.csv"
df = pd.read_csv(path)
r=[]
max_degrees = 10

y = df['price'].astype('float')
x = df[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']].astype('float')

for i in range(1,max_degrees+1):
    Input = [('scale', StandardScaler()), ('polynomial', PolynomialFeatures(degree=i)), ('model', LinearRegression())]
    pipe = Pipeline(Input)
    pipe.fit(x,y)
    yhat = pipe.predict(x)
    r.append(mean_squared_error(yhat, y))
    print("MSE for MLR of degree "+str(i)+" = "+str(round(mean_squared_error(yhat, y)/1e6,1)))

plt.figure(figsize=(10,3))
plt.plot(list(range(1,max_degrees+1)),r)
plt.show()

Результаты:

image

1 Ответ

2 голосов
/ 18 марта 2019

Изначально у вас есть 200 наблюдений в y и 4 объекта (столбца) в X, которые вы затем масштабируете и преобразуете в полиномиальные элементы.

Степень 4, таким образом, имеет 120 <200 полиномиальных элементов, тогда как степень 5 равнапервый имеет 210> 200 полиномиальных признаков, а именно больше признаков, чем наблюдений.

Когда имеется больше признаков, чем наблюдений, линейная регрессия плохо определена и не должна использоваться, как объяснено здесь .Это может объяснить внезапное ухудшение подгонки набора поездов при переходе от степени 4 к степени 5. Похоже, что для более высоких степеней решатель LR был в состоянии превзойти данные поезда.

...