Набор данных генерируется следующим образом:
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