Модель полностью испорчена после тренировки на тренировочном наборе после использования train_test_split - PullRequest
0 голосов
/ 19 октября 2018

Набор данных генерируется следующим образом:

from numpy.random import normal
def make_labels(X, f, noise=0) :
   return map(lambda x : f(x) + (normal(0,noise) if noise>0 else 0), X)

def make_instances(x1, x2, N) :
return np.array([np.array([x]) for x in np.linspace(x1,x2,N)])

def f(x):
   return 5 + x - 2 * x**2 - 5 * x**3

X = make_instances(-5, 5, 50)
y_map = make_labels(X, f, 200)
y = np.array(list(y_map))

Моя задача - кодировать функцию поезда, а затем модель поезда на исходном наборе и на раздельном множестве.Это моя функция поезда:

def train(X, y, d):
  poly = sklearn.preprocessing.PolynomialFeatures(d)
  phi = poly.fit_transform(X)
  w = np.matmul(np.linalg.pinv(phi), y)
  h = np.matmul(phi, w)
  return h

Сначала я обучил модель на исходном наборе данных следующим образом (например, со степенью полиномиальных признаков = 3):

h = train(X, y, 3)

И результат был таким:

plt.grid()
plt.scatter(X, y)
plt.plot(X, h, 'r')

train_on_original_set

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

X_train, X_test, y_train, y_test= sklearn.model_selection.train_test_split(X, y, test_size = 0.5)
h_train = train(X_train, y_train, 3)

Результат странный:

plt.grid()
plt.scatter(X, y)
plt.plot(X_train, h_train, 'r')

train_on_train_set_after_split

1 Ответ

0 голосов
/ 19 октября 2018

Положите shuffle = False.Как указано здесь, по умолчанию это True: http://scikit -learn.org / stable / modules / generate / sklearn.model_selection.train_test_split.html # sklearn.model_selection.train_test_split

...