Многопеременная линейная регрессия на бостонском наборе данных в python - PullRequest
0 голосов
/ 10 февраля 2019

Я пытался выполнить многопараметрическую линейную регрессию для набора данных Бостона.Я заметил странное поведение в моей функции стоимости.В течение первой 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()

Графикколичество нет и стоимость против

...