1. 程式人生 > >機器學習(二)——Multivation Linear Regression

機器學習(二)——Multivation Linear Regression

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

根據所給資料,給出使用梯度下降演算法的多元線性迴歸模型,並能夠正確繪製出J(θ)的影象。

實驗步驟與內容:

  1. 資料處理
    在這裡插入圖片描述

  2. 使用J(θ)選擇學習率
    實驗檔案中給出了學習率的大致範圍為0.0001<=α<=10,而更精確的學習率就需要自己去執行梯度下降、觀察成本函式,並進行相應的調整了。
    在這裡插入圖片描述

  3. 將成本函式變為可執行程式碼
    在這裡插入圖片描述
    其中
    在這裡插入圖片描述
    而我們在上一個實驗中,已經在theta0和theta1網格上計算出了J(θ),現在可以參考上個實驗的資料,來進行梯度下降的控制。

  4. 調整學習率進行繪圖
    α=0.01
    在這裡插入圖片描述
    α=0.04
    在這裡插入圖片描述
    α=0.07
    在這裡插入圖片描述
    α=0.11
    在這裡插入圖片描述
    α=0.15
    在這裡插入圖片描述


    最終感覺α=0.07的時候與預期結果最為相似。

在迴歸分析中,如果有兩個或兩個以上的自變數,就稱為多元迴歸。事實上,一種現象常常是與多個因素相聯絡的,由多個自變數的最優組合共同來預測或估計因變數,比只用一個自變數進行預測或估計更有效,更符合實際。

不過和一元線性迴歸相比,難度也上升了一些,例如對J(θ)的處理,以及梯度下降的迴圈,都讓我花費了大量的時間,不過結果還算可以,較為良好的找到了適合的學習率。


程式原始碼:

clc,clear
x=load('ex2x.dat');
y=load('ex2y.dat');
sigma = std ( x ) ;
mu = mean( x ) ;
m=length(y);
n=size(x,2)+1;
for i=1:m%資料處理
    x(i,:)=(x(i,:)-mu)./sigma;
end
x = [ones(m, 1) x];
theta = zeros ( size ( x ( 1 , : ) ) )' ; % initialize fitting parameters
alpha =0.15; % Your initial learning rate 
J = zeros (50 , 1 ) ;
iterations = 50;%設定迭代次數

for num_iterations = 1:50
    H=x*theta;
    T=zeros(n,1);
    for i=1:m
        T=T+(H(i)-y(i))*x(i,:)';
    end
J ( num_iterations ) =sum((x*theta - y).^2)/(2*m); % 成本函式 
theta = theta-alpha*T/m;% 梯度下降更新 
end
% now plot J
% technically , the first J starts at the zero-eth iteration
% but Matlab/Octave doesn ' t have a zero index
figure ;
plot ( 0 : 49 , J ( 1 : 50 ) , '-' )
xlabel ( 'Number of iterations ' )
ylabel ( ' Cost J '