Я пытался выполнить многопараметрическую линейную регрессию для набора данных Бостона.Я заметил странное поведение в моей функции стоимости.В течение первой 150-200 итераций функция стоимости уменьшается примерно с (5-7) до 1, но после 200 итераций стоимость продолжает увеличиваться.В конце 1000-й итерации значение стоимости достигает примерно 120. Я не понимаю, почему функция стоимости показывает такое поведение, потому что из того, что я знаю, когда функция стоимости нашла оптимальное значение, она почти остается постоянной.что я должен из этого сделать? `
data = datasets.load_boston(return_X_y=False)
df = pd.DataFrame(data.data, columns=data.feature_names)
df = (df - df.mean())/df.std()
X = df
Y = data.target
Y = (Y-Y.mean())/Y.std()
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.26,
random_state = 17)
X_train = np.matrix(X_train)
X0 = np.ones((len(X_train),1)) #adding column of 1's
X_train= np.hstack((X0, X_train))
X01 = np.ones((len(X_test),1))
X_test= np.hstack((X01,X_test))
np.random.seed(10)
theta = np.random.rand(14)
theta = theta.reshape(-1,1)
theta = theta.reshape(-1,1)
def computeCost(X, Y, theta):
m = len(X)
yp = np.dot(X, theta)
error = yp - Y
cost = 1/(2*m) * np.dot(error.T, error)
return cost
def GradientDescent(X, Y, theta, alpha,itera):
J = np.zeros((itera,1))
m = len(X)
E = (np.dot(X, theta)) - Y
for i in range(1,itera):
theta = theta - (alpha * (1/m) * np.dot(X.T, E))
print("shape of theta", theta.shape)
J[i] = computeCost(X,Y, theta)
print("cost at ", i, " || ", J[i])
return J, theta
Я нормализовал данные, используя формулу
data = (data-data.mean())/data.std()
Графикколичество нет и стоимость против