機器學習 Linear Regression——線性迴歸實驗

完整的數據和代碼已經更新至GitHub,歡迎fork~GitHub鏈接

This first exercise will give you practice with linear regression

實驗內容

一、下載提供的數據,讀入數據,畫出相應的座標點

二、使用數據,擬合出一條直線來,使用機器學習所講的線性迴歸的方法來擬合出一條直線

三、理解損失函數,通過數據來畫出損失函數的圖像,進行可視化

實驗步驟

一、讀入數據,然後使用plot函數,畫出散點圖

如下圖所示:
在這裏插入圖片描述

二、 使用以下規則,更新 theta,先對x多增加一列,實現x的維數和theta的維數可以實現乘法,在使用如下的公式來更新 theta
hθ(x)=θTx=i=0nθixi,θj=θjα1mi=1n(hθ(x(i))y(i))xj(i) h_{\theta}(x)=\theta^Tx=\sum_{i=0}^{n}\theta_ix_i, \\ \theta_j=\theta_j-\alpha*\frac{1}{m}\sum_{i=1}^{n}(h_\theta(x^{(i)})-y^{(i)})x_{j}^{(i)}
一共更新1500輪,最後通過plot函數來畫出函數圖像
在這裏插入圖片描述
這就是我們擬合出來的函數圖像,顯示擬合效果還是不錯的,而且loss函數也是一直在減小的

三、畫出損失函數的圖像,使用,以下數據:

J_vals=zeros(100,100);
theta0=linspace(-3,3,100);
theta1=linspace(-1,1,100);
#損失函數,定義爲(y^-y)2 再求和,除以2*m,即爲損失函數:
loss=@(theta,x,y) mean((h(x,theta)-y).^2)/2;

因爲這是三維圖像,使用surf函數進行畫圖,結果如下:
在這裏插入圖片描述
在這裏插入圖片描述

通過觀察,我們會發現,損失函數,是從各個方向趨於一個最小值,而這個最小值,正是我們需要達到的目標。

附:完整源代碼

x = load ( 'F:\\Machine Learning\\exp\\ex1Data\\ex1x.dat') ; %50維
y = load ( 'F:\\Machine Learning\\exp\\ex1Data\\ex1y.dat') ; %50維
figure % open a new f i g u r e window
plot (x , y , ' o ' ) ;
ylabel ( 'Height in meters ')
xlabel ( 'Age in years ' )
u=0;
m=length(y); 
x=[ones(m,1),x]; % 50*2維度
h=@(x,theta) x*theta;
alpha=0.07;
theta=zeros(2,1); % 2*1維度
loss=@(theta,x,y) mean((h(x,theta)-y).^2)/2;
iteration=@(theta,alpha,y,x) theta-alpha*(x'*(h(x,theta)-y))/m;

for j=1:1500
    theta=iteration(theta,alpha,y,x);
end
hold on
plot(x(:,2),x*theta,'-');
legend( ' Training data ' , ' Linear regression' );

J_vals=zeros(100,100);
theta0=linspace(-3,3,100);
theta1=linspace(-1,1,100);
for i=1:length(theta0)
for j=1:length(theta1)
    t=[theta0(i);theta1(j)];
    J_vals(i,j)=loss(t,x,y);
end
end
J_vals =J_vals';
figure ;
surf (theta0, theta1, J_vals);
xlabel ( 'ntheta0' ) ; ylabel ( 'ntheta1' );
      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章