Какие регрессионные модели должны быть наиболее подходящими для этого обычного графика рассеяния, но с необычным распределением? - PullRequest
0 голосов
/ 26 апреля 2020

Мне нужно подогнать две разные модели регрессии к следующим df (например, кривые, принадлежащие двум разным семействам).

Таким образом, если подумать о типе регрессии, который я знаю, то есть:

  • Линейная регрессия (зеленая в пи c ниже, просто чтобы показать)
  • Полиномиальная регрессия
  • Хребетная регрессия
  • Лассо-регрессия
  • Elasti cNet регрессия

df очень прост, всего два столбца x и y с 450 записями в каждом.

Диаграмма рассеяния следующая:

enter image description here

НО, когда я go через процесс составления графика поезда / теста получаю следующий:

enter image description here

Теперь ясно, что простой линейной модели не может быть достаточно с распределением поезда / теста, подобным этому.

НО, когда я перехожу к исследованию MSE (среднеквадратическая ошибка), я получаю кое-что интересное:

Train Error: 0.06336815111266955
Test Error: 0.06359148208824823

Я уверен в коде (t шляпа я не сообщила) Я проверил это с другим набором игрушек и работал отлично.

Может кто-нибудь мне помочь, пожалуйста?

Большое спасибо заранее!

РЕДАКТИРОВАТЬ: в процессе подгонки модели я применил MinMaxScaler() в диапазоне [0,1] функция

1 Ответ

0 голосов
/ 26 апреля 2020

Не совсем уверен, где это пошло не так, может быть комбинацией разделения для поезда / теста или неправильной подгонки, ниже я симулирую некоторые данные, которые выглядят как ваши, и вы можете увидеть, как они работают:

import numpy as np
from sklearn import linear_model
import seaborn as sns
from sklearn.preprocessing import PolynomialFeatures

LR = linear_model.LinearRegression()

x = np.linspace(7, 15, num=100)
y = x + 2*x**2 + np.random.normal(0,5,size=100)
poly = PolynomialFeatures(2)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

clf = linear_model.LinearRegression()
clf.fit(poly.fit_transform(X_train.reshape(-1,1)), y_train)
pred_train = clf.predict(poly.fit_transform(X_train.reshape(-1,1)))
pred_test = clf.predict(poly.fit_transform(X_test.reshape(-1,1)))

Мы можем построить результаты для поезда:

df = pd.DataFrame({'x':X_train,'y':y_train,'pred':pred_train})
sns.scatterplot(x='x',y='y',data=df)
sns.lineplot(x='x',y='pred',data=df,color="orange")

enter image description here

df = pd.DataFrame({'x':X_test,'y':y_test,'pred':pred_test})
sns.scatterplot(x='x',y='y',data=df)
sns.lineplot(x='x',y='pred',data=df,color="orange")

enter image description here

...