1. 程式人生 > >機器學習之梯度下降演算法Gradient Descent

機器學習之梯度下降演算法Gradient Descent

      梯度下降演算法:

機器學習實現關鍵在於對引數的磨合,其中最關鍵的兩個數:代價函式J(θ),代價函式對θ的求導∂J/∂θj。

如果知道這兩個數,就能對引數進行磨合了:其中 α   為每步調整的幅度。

其中代價函式公式J(θ)

代價函式對θ的求導∂J/∂θj:

通過不斷減低代價函式而得到準確的引數。

例如:


演算法執行過程:給定初始引數p0,p1,通過演算法一步一步調整P0,P1,使得J變小。

梯度下降演算法適用範圍:監督學習。

監督學習有兩類問題:1.迴歸問題。2.分類問題。

1迴歸問題。

如房價預測。y = x1p1+x2p2+x3p3...;

      計算代價函式時h(x) = x1p1+x2p2+x3p3...

2分類問題 

       如良性惡性腫瘤預測。y = sigmoid(  x1p1+x2p2+x3p3....)有關;其中sigmoid(x) =  1/(1+ exp(-x))

cost J   : =      -log(h(x) )   if   y = 1;

                          -log(1-h(x))    if y =0;

結合起來可得

MATLAB編碼過程:

1.錄入資料:

data = load('data.txt');

X = data(:, 1); y = data(:, 2);

X = [ones(m, 1), data(:,1)]; % Add a column of ones to x

2.計算代價函式cost funtion:

迴歸問題:J = sum((sum(theta' .* X,2) - y).^2)/(2*m);其中(sum(theta' .* X,2)為h(x)

分類問題:J = sum(-y.*log(sigmoid(sum((theta' .* X),2))) - (1-y).*log(1-sigmoid(sum((theta' .* X),2))))/m;

3.執行gradient Descent梯度下降演算法:

預設引數theta,調整幅度alpha,調整次數iterations;

theta =gradientDescent(X, y, theta, alpha, iterations)

{

for iter = 1:num_iters

old_theta = theta;

theta(1)= theta(1) - alpha* sum((sum(old_theta' .* X,2) - y).*X(:,1))/m;

theta(2) = theta(2) - alpha* sum((sum(old_theta' .* X,2) - y).*X(:,2))/m;        

end

}