創建你自己的模型演算法-Gradient Descent
在Coursera上看了Dr. NG的 Machine Learning。 就用R語言寫了Gradient Descent演算法。
以下是實現思路。
- 創建有5個自變數一個常數的X數據集,一個應變數y的數據集以及一個參數集合 。目標函數則為
- 創建Cost Funcion。
- 用Gradient Descent求出最優參數集合 。
#Create a dataset that has 5 variables and one DV yset.seed(1)x <- matrix(rnorm(4000), ncol = 5)X<-cbind(rep(1, 800), x)#X is a 800x6 matrix,y <- rnorm(800)#y is a 800x1 column vectortheta<-rep(0,6)#theta is a 6x1 column vector#Cost FunctionCostFun<-function(X, y, theta){ J <- sum((X%*%theta- y)^2)/2 return(J)}#Gradient DescentGradDescent<-function(X, y, theta, alpha, i){ hist <- rep(0, i) for(i in 1:i){ theta <- theta - alpha*(t(X)%*%(X%*%theta - y)) hist[i] <- CostFun(X, y, theta) } return(results)}
t(X): 把X轉置然後進行矩陣運算。
hist[i]:經過之前寫的cost function算出每次cost history並記錄在其中。
接下來就是輸入參數擬合。
#Find the right fitalpha <- .00005i <- 200results <- GradDescent(X, y, theta, alpha, i)theta <- results[[1]]cost_hist <- results[[2]]print(theta) [,1][1,] -0.007200831[2,] -0.048239943[3,] -0.027426464[4,] -0.005848687[5,] 0.027033944[6,] 0.044072725library(ggplot2)plotcosthis<-data.frame(1:i,results[[2]])names(plotcosthis)=c("i","cost_his")ggplot(plotcosthis,aes(i,cost_hist))+ geom_line()
列印theta我們得到
[,1]
[1,] -0.007200831[2,] -0.048239943[3,] -0.027426464[4,] -0.005848687[5,] 0.027033944
[6,] 0.044072725所以我們用Gradient Descent演算法得到的公式為:
推薦閱讀:
※Learn R | 交互可視化之Plotly包(三)
※R語言流量結構分布圖——炫酷和弦圖
※R語言可視化——案例綜合運用