機器學習(二)——Multivation Linear Regression
阿新 • • 發佈:2018-11-11
根據所給資料,給出使用梯度下降演算法的多元線性迴歸模型,並能夠正確繪製出J(θ)的影象。
實驗步驟與內容:
-
資料處理
-
使用J(θ)選擇學習率
實驗檔案中給出了學習率的大致範圍為0.0001<=α<=10,而更精確的學習率就需要自己去執行梯度下降、觀察成本函式,並進行相應的調整了。
-
將成本函式變為可執行程式碼
其中
而我們在上一個實驗中,已經在theta0和theta1網格上計算出了J(θ),現在可以參考上個實驗的資料,來進行梯度下降的控制。 -
調整學習率進行繪圖
α=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 '