[Machine-Learning] 一個線性迴歸的簡單例子

這篇博客中作一個使用最小二乘法實現線性迴歸的簡單例子。數據結構

代碼來自《圖解機器學習》 圖3-2,使用MATLAB實現。機器學習

代碼link函數

用到的matlab函數

因爲之前對MATLAB也不是很是熟悉,這裏用到了一些MATLAB的 內建函數 ,順便學習一下。學習

linespace

linspace用於產生指定範圍內的指定數量點數,相鄰數據跨度相同,並返回一個行向量:spa

linspace

若是咱們須要產生列向量,咱們使用'就能夠了:.net

linspace-with-column-vector

pi

內置的常量,圓周率。code

pi

代碼

line 1

n=50; N=1000; x=linspace(-3,3,n)'; X=linspace(-3,3,N)';

這句先定義了n和N兩個整形變量,而後生成了2個長度分別爲50和100的列向量,數據結構爲:blog

line-1

大概看下x,是這個樣子的:get

x

x是列向量(這麼細緻是爲了能在數學上面有一個更加深入的瞭解)。pix 的內容就是x的內容都乘了一個π博客

line 2

pix=pi*x; y=sin(pix)./(pix)+0.1*x+0.05*randn(n,1);

獲取y軸座標,並加入一些隨機的「噪聲」,用於迴歸。

line 3

p(:,1)=ones(n,1); P(:,1)=ones(N,1);

這裏創建了二個列向量,分別是pP,形狀是這樣的:

p-and-P

這兩個列向量裏面全部元素都是1;其實我奇怪爲何不p = ones(n,1);,多是方便後面的格式統一吧。

line 4-7 (for循環)

for j=1:15
  p(:,2*j)=sin(j/2*x); p(:,2*j+1)=cos(j/2*x);
  P(:,2*j)=sin(j/2*X); P(:,2*j+1)=cos(j/2*X);
end

直接循環不是很直觀,先手動作一兩步試試:

咱們此次僅對p這個矩陣進行操做,當j = 1 的時候:

1

而後j = 2 的時候:

2

咱們會發現,每次執行一次循環,p矩陣就會增長2列,咱們能夠根據語句的內容看出來增長了的內容和x與j的關係。在循環結束的時候,這個矩陣會有31列。

line 8

t=p\y; F=P*t;

我以爲這行t = p \ y; 這句最關鍵了,\左除,用於解出矩陣t 使得 p * t = y

而後經過解出的t,算出F = p * t

line 9-10

figure(1); clf; hold on; axis([-2.8 2.8 -0.5 1.2]);
plot(X,F,'g-'); plot(x,y,'bo');

這兩行技術含量不大,就是畫圖了:

這個示意圖可讓咱們大體看出迴歸的過程。

相關文章
相關標籤/搜索