線性迴歸梯度下降 Octave
阿新 • • 發佈:2018-12-15
首先對一堆樣本點我們假設目標函式為:
在Gradient Descent Algorithm中,我們利用不斷推導得到兩個對此演算法非常重要的公式,一個是J(θ)是代價函式:
使用偏導數的方式使得theta的值逐步取得滿足當前代價函式的最小值,
我們在梯度下降中,直接使用這兩個公式,來繪製J(θ)的分佈曲面,以及θ的求解路徑。
命題為:我們為一家連鎖餐飲企業新店開張的選址進行利潤估算,手中掌握了該連鎖集團所轄店鋪當地人口資料,及利潤金額,需要使用線性迴歸演算法來建立人口與利潤的關係,進而為新店進行利潤估算,以評估店鋪運營前景。
首先我們將該企業的資料繪製在座標圖上,如下圖所示,我們需要建立的模型是一條直線,能夠在最佳程度上,擬合population與profit之間的關係。其模型為:
關鍵程式碼:
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters) %GRADIENTDESCENT Performs gradient descent to learn theta % theta = GRADIENTDESCENT(X, y, theta, alpha, num_iters) updates theta by % taking num_iters gradient steps with learning rate alpha % Initialize some useful values m = length(y); % number of training examples J_history = zeros(num_iters, 1); for iter = 1:num_iters % ====================== YOUR CODE HERE ====================== % Instructions: Perform a single gradient step on the parameter vector % theta. % % Hint: While debugging, it can be useful to print out the values % of the cost function (computeCost) and gradient here. % x = X.*((X*theta)-y); theta = theta - (alpha*sum(x)/m)'; % ============================================================ % Save the cost J in every iteration J_history(iter) = computeCost(X, y, theta); end end
下圖是J(θ)的分佈曲面:
取得最小theta值時的h(x)函式影象:
我們求得的最佳θ值在在影象得最低點,極小值也是最小值: