2016-08-25 5 views
0

Я изучаю компьютерное обучение. Поэтому я делаю некоторые простые практики с данными, которые я нахожу в Интернете. Прямо сейчас я пытаюсь реализовать линейную регрессию с помощью градиентного спуска в R. Когда я запускаю ее, я понимаю, что она не сходится, и моя стоимость идет бесконечно. Хотя я подозреваю, что это где-то в той части, где я вычисляю градиент, я не могу найти проблему. Поэтому давайте начнем представлять мои данные.Многомерная линейная регрессия - градиентный спуск в R

Мой набор данных содержит 4 столбца: ROLL ~ UNEM, HGRAD, INC Итак, цель найти связь между ROLL и другими.

  • Позвольте мне представить мой код

    datavar <- read.csv("dataset.csv") 
    attach(datavar) 
    
    X <- cbind(rep(1, 29), UNEM,HGRAD,INC) 
    y <- ROLL 
    
    # function where I calculate my prediction 
    h <- function(X, theta){ 
        return(t(theta) %*% X) 
    } 
    
    # function where I calculate the cost with current values 
    cost <- function(X, y, theta){ 
        result <- sum((X %*% theta - y)^2)/(2*length(y)) 
    
        return(result) 
    } 
    
    
    # here I calculate the gradient, 
    #mathematically speaking I calculate derivetive of cost function at given points 
    gradient <- function(X, y, theta){ 
        m <- nrow(X) 
        sum <- c(0,0,0,0) 
    
        for (i in 1 : m) { 
        sum <- sum + (h(X[i,], theta) - y[i]) * X[i,] 
        } 
        return(sum) 
    } 
    
    
    # The main algorithm 
    gradientDescent <- function(X, y, maxit){ 
        alpha <- 0.005 
        m <- nrow(X) 
        theta <- c(0,0,0,0) 
    
        cost_history <- rep(0,maxit) 
    
        for (i in 1 : maxit) { 
        theta <- theta - alpha*(1/m)*gradient(X, y, theta) 
    
        cost_history[i] <- cost(X, y, theta) 
        } 
    
        plot(1:maxit, cost_history, type = 'l') 
    
        return(theta) 
    } 
    

я запускаю код, как этот

gradientDescent(X, y, 20) 

Это выход я получаю:

-7.001406e+118 -5.427330e+119 -1.192040e+123 -1.956518e+122 

Итак, вы можете найти, где я был неправ. Я уже пробовал разные альфа-значения, не имел никакого значения. Кстати, я ценю любые советы хорошую практику от вас,

Благодаря

ответ

2

Ну, я думаю, что я наконец-то нашел ответ. Проблема заключалась в том, что я не применял никакого масштабирования функций. Couse Я, хотя это был необязательный приоритет для бесперебойной работы алгоритма. Теперь он работает так, как ожидалось. Вы можете попробовать запустить код с масштабированным набором данных, используя функцию шкалы().

Смежные вопросы