線性回歸與梯度下降_第1頁
線性回歸與梯度下降_第2頁
線性回歸與梯度下降_第3頁
線性回歸與梯度下降_第4頁
線性回歸與梯度下降_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、本文會講到:線性回歸的定義單變量線性回歸cost function:評價線性回歸是否擬合訓練集的方法梯度下降:解決線性回歸的方法之一feature scaling :加快梯度下降執(zhí)行速度的方法多變量線性回歸Linear Regression注意一句話:多變量線性回歸之前必須要Feature Scaling!方法:線性回歸屬于監(jiān)督學習,因此方法和監(jiān)督學習應該是一樣的,先給定一個訓練集,根 據這個訓練集學習出一個線性函數,然后測試這個函數訓練的好不好(即此函數是否足夠擬 合訓練集數據),挑選出最好的函數(cost function最小)即可;注意:因為是線性回歸,所以學習到的函數為線性函數,即直線

2、函數;因為是單變量,因此只有一個X; 我們能夠給出單變量線性回歸的模型:膈 3)= Oq +。許我們常稱 x 為 feature,h(x)為 hypothesis;從上面“方法”中,我們肯定有一個疑問,怎么樣能夠看出線性函數擬合的好不好呢?我們需要使用到Cost Function (代價函數),代價函數越小,說明線性回歸地越好(和訓練 集擬合地越好),當然最小就是0,即完全擬合; 舉個實際的例子:我們想要根據房子的大小,預測房子的價格,給定如下數據集:Size in feet2 (x)Price ($) in 1000s (y)210414161534460232315852 Bl178i-

3、n 根據以上的數據集畫在圖上,如下圖所示:Housing Prices (Portland, ORPrice(in 1000sof dollars)Size (feet2)我們需要根據這些點擬合出一條直線,使得cost Function最小;雖然我們現在還不知道Cost Function內部到底是什么樣的,但是我們的目標是:給定輸入 向量x,輸出向量y,theta向量,輸出Cost值;以上我們對單變量線性回歸的大致過程進行了描述;Cost FunctionCost Function的用途:對假設的函數進行評價,cost function越小的函數,說明擬合訓練數據擬合的越好;下圖詳細說明了當c

4、ost function為黑盒的時候,cost function的作用;(11 vector x vector y(3) vector th&ta蟀:比即存在數據生心 g 料罰,則虹Q2外y = 1;2.3: 如果侵設預刪了國裁為丫 - x ,則發(fā)Slco&t value - 0 ;如果假設預測了函數為y = 2x ,則發(fā)睨st value = 1;如果假設預刨了函數為y -救,則發(fā)Hlmst value - 2 ;則痢i誰現y-x的cost仰1睥最小,因此選擇y-x作為我Cl的 hypothesis但是我們肯定想知道cost Function的內部構造是什么?因此我們下面給出公式:IJ泌1)

5、=總支(膈(/) ,)i1其中:杼)表示向量x中的第i個元素;儼)表示向量y中的第i個元素;膈(那)表示已知的假設函數;m為訓練集的數量;比如給定數據集(1,1)、(2,2)、(3,3)則x = 1;2;3,y = 1;2;3(此處的語法為Octave語言的語法,表示3*1的矩陣)如果我們預測 theta0 = 0, theta1 = 1,則 h(x) = x,則 cost function:J(0,1) = 1/(2*3) * (h(1)-1廣2+(h(2)-2廣2+(h(3)-3廣2 = 0;如果我們預測 theta0 = 0, theta1 = 0.5,則 h(x) = 0.5x,則 c

6、ost function:J(0,0.5) = 1/(2*3) * (h(1)-1廣2+(h(2)-2廣2+(h(3)-3廣2 = 0.58;如果theta0 一直為0,則thetal與J的函數為:如果有theta0與thetal都不固定,則theta0、thetal、J的函數為:當然我們也能夠用二維的圖來表示,即等高線圖;-50005D0 V0OT 15002000即只有一個注意:如果是線性回歸,則costfunctionJ與的函數一定是碗狀的,最小點;以上我們講解了 cost function的定義、公式;Gradient Descent (梯度下降)但是又一個問題引出了,雖然給定一個函數

7、,我們能夠根據cost function知道這個函數擬 合的好不好,但是畢竟函數有這么多,總不可能一個一個試吧?因此我們引出了梯度下降:能夠找出cost function函數的最小值;梯度下降原理:將函數比作一座山,我們站在某個山坡上,往四周看,從哪個方向向下走一 小步,能夠下降的最快;當然解決問題的方法有很多,梯度下降只是其中一個,還有一種方法叫Normal Equation ;方法:先確定向下一步的步伐大小,我們稱為Learning rate;任意給定一個初始值:* ;確定一個向下的方向,并向下走預先規(guī)定的步伐,并更新;當下降的高度小于某個定義的值,則停止下降;算法:-終止翁牛repeat

8、 untilLearning rate決定了下降的步伐大土決se 了下降的方向小J(.iipda同dtempl= CtJ (0i)f出0 q rrnpO61 :=坨mplv特點:初始點不同,獲得的最小值也不同,因此梯度下降求得的只是局部最小值;越接近最小值時,下降速度越慢; 問題:如果、初始值就在local minimum的位置,則七1 會如何變化?答:因為已經在local minimum位置,所以derivative肯定是0,因此不會變化;如果取到一個正確的f 值,則cost function應該越來越小;問題:怎么取 值?答:隨時觀察值,如果cost function變小了,則ok,反之,

9、則再取一個更小的值;下圖就詳細的說明了梯度下降的過程:最小值從上面的圖可以看出:初始點不同,獲得的最小值也不同,因此梯度下降求得的只是局部 最小值;注意:下降的步伐大小非常重要,因為如果太小,則找到函數最小值的速度就很慢,如果太大,則可能會出現overshoot the minimum的現象;卜圖就是overshoot minimum 現象:如果Learning rate取值后發(fā)現J function增長了,則需要減小Learning rate的值;Integrating with Gradient Descent & Linear Regression梯度下降能夠求出一個函數的最小值;線性回

10、歸需要求出,使得cost function的最小;因此我們能夠對cost function運用梯度下降,即將梯度下降和線性回歸進行整合,如下圖 所示:Gradient descent algorithmLinear Regression Model膈3) =+務呈repeat until convcrgcncc?。?。1 丈(膈o)一於)廈梯度下降是通過不停的迭代,而我們比較關注迭代的次數,因為這關系到梯度下降的執(zhí)行速度,為了減少迭代次數,因此引入了 Feature Scaling;Feature Scaling此種方法應用于梯度下降,為了加快梯度下降的執(zhí)行速度思想:將各個feature的值標

11、準化,使得取值范圍大致都在-1=x=1之間;常用的方法是 Mean Normalization,即,其中就訓練集中當前知him的平均值,mx為孤能取的最大值,min為x能取的最小值max.- min或者:X-mean(X)/std(X);舉個實際的例子,有兩個Feature:size,取值范圍02000;(2)#bedroom,取值范圍 05;貝0通過 feature scaling 后, 滄巴一1000_ #bedrooms25 2000妲5練習題我們想要通過期中開始成績預測期末考試成績,我們希望得到的方程為:標弟)=缸-Ml - &Q給定以下訓練集:midterm exam(midterm

12、 exam)2final exam89792196725184749488368769476178我們想對(midterm exam)A2 進行 feature scaling,貝0 經過 feature scaling 后的值為多 少?max = 8836,min=4761,mean=6675.5,則 x=(4761-6675.5)/(8836-4761) = -0.47;多變量線性回歸前面我們只介紹了單變量的線性回歸,即只有一個輸入變量,現實世界不可能這么簡單,因 此此處我們要介紹多變量的線性回歸;舉個例子:房價其實由彳艮多因素決定,比如 size、number of bedrooms、n

13、umber of floors、age of home 等,這里我們假設房價由4個因素決定,如下圖所示:Size (feet1!Number of bedroomsNumber of floorsAge of home Ivears)Price ($1000)21045145460141632402321534323031S8522136178 + 4a -is 4 I- + -Iaai-我們前面定義過單變量線性回歸的模型:膈(8)=仇)OyX這里我們可以定義出多變量線性回歸的模型:+ 皈偌 2 + + 0nXnCost function 如下:I J(佻Ml)=去丈(標()一此)2 i=l如

14、果我們要用梯度下降解決多變量的線性回歸,則我們還是可以用傳統的梯度下降算法進行 計算:Repeat 的快隔加惴記錄陽e知:=0-a交(人如叫_舟依?!钡囊挥耖ㄈ鏮必)即-1.e| 瓣 苗:=住土用3) (simultaneously upd-ate 0j for_i=i7 fJtl為:=的-在*(膈3勺-MWi=l總練習題:我們想要根據一個學生第一年的成績預測第二年的成績,x為第一年得到A的數量,y為 第二年得到A的數量,給定以下數據集:xy34214301訓練集的個數是多少? 4個;J(0,1)的結果是多少?J(0,1) = 1/(2*4)*(3-4)A2+(2-1)A2+(4-3)A2+

15、(0-1)A2 = 1/8*(1+1+1+1) = 1/2 = 0.5我們也可以通過vectorization的方法快速算出J(0,1):dv= :,=8=二昨) = 0= =人_ n伽工)一方=1 01oj -11(機對-面二4 = /皿1)=我3 = /1)另一種線性回歸方法:Normal Equation;Gradient Descent 與 Normal Equation 的優(yōu)缺點;前面我們通過Gradient Descent的方法進行了線性回歸,但是梯度下降有如下特點:(1)需要預先選定Learning rate;(2)需要多次 iteration;需要 Feature Scalin

16、g;因此可能會比較麻煩,這里介紹一種適用于Feature數量較少時使用的方法:NormalEquation;當 Feature 數量小于 100000 時使用 Normal Equation;當 Feature 數量大于 100000 時使用 Gradient Descent;Normal Equation 的特點:簡單、方便、不需要 Feature Scaling;其中Normal Equation的公式:e = (XTX)-1XTy其中表示第 i 個 training example; 表示第i個training example里的第j個feature的值;m %#training exa

17、mple;n %#feature; 舉個實際的例子:Examples:0Size (feet2)Number of bedroomsNumber of floors 旬Age of hom (years)X412104514511416324011534323018522136130004138111112104514514163240L5343230852213630004138X) -*T y一、算法實現由前面的理論,我們知道了用梯度下降解決線性回歸的公式:repeal until coiivergeiice m矗:=% 一驀丈(如例)-妁Oi =伉一驀寸(知(工)-儼),土i=l梯度下降

18、解決線性回歸思路:until convprgpnrA 喝:=侃f ct土81 :一 a 土算法實現:ComputeCost 函數:plain view plaincopyfor t=l:num iterstempi = theta(l) - (alpha / m) temp2 二 theta(Z) - (alpha / m) theta(l) = tempi;theta(2) - temp2;endfunction J = computeCost(X, y, theta)2.m = length(y); % number of training examplesJ = 0;prediction

19、s = X * theta;J = 1/(2*m)*(predictions - y)*(predictions - y);7.endgradientDescent 函數:plain view plaincopyfunction theta, J_history = gradientDescent(X, y, theta, alpha, num_iters)% X is m*(n+1) matrix% y is m*1% theta is (n+1)*1 matrix% alpha is a number% num_iters is number of iterators7.8.m = len

20、gth(y); % number of training examplesJ_history = zeros(num_iters, 1); %cost function 的值的變化過程%預先定義了迭代的次數12.for iter = 1:num_iters14.temp1 = theta(1)-(alpha/m)*sum(X*theta-y).*X(:,1);temp2 = theta(2)-(alpha/m)*sum(X*theta-y).*X(:,2);theta(1) = temp1;theta(2) = temp2;J_history(iter) =computeCost(X,y, t

21、heta);20.end22.end二、數據可視化我們通過算法實現能夠求出函數h(x),但是我們還需要將數據可視化:畫出訓練集的散點圖+擬合后的直線;畫出J(theta)為z軸,theta0為x軸,thetal為y軸的三維曲線;畫出(2)的三維曲線的等高線圖;1.畫散點圖+擬合的直線描述:給定ex1data1.txt,文件中有兩列數據,每一列代表一個維度,第一列代表X,第二列代表 Y,用 Octave畫出散布圖(Scalar Plot),數據的形式如下:6.1101,17.5925.5277,9.13028.5186,13.6627.0032,11.8545.8598,6.82338.3829

22、,11.886data = load(ex1data1.txt);%導入該文件,并賦予 data 變量X = data( : , 1 ); Y = data( : , 2);%將兩列分別賦予X和YX = ones(size(X,1),1),X;%在 X 的左邊添加一列 1plot(X,Y,rx,MarkerSize, 4);%畫圖,將 X 向量作為 X 軸,Y 向量作為 Y 軸,每個點用“x”表示,r表示紅點,每個點的大小為4;axis(4 24 -5 25);%調整x和y軸的起始坐標和最高坐標;xlabel(x);%給 x 軸標號為x最后見下圖:%給y軸標號為y;(7)ylabel(y);經

23、過計算,算出theta值:theta,J_history = gradientDescent(X, y, theta, alpha, num_iters);即可通過:plot(X(:,2), X*theta);%畫出最后擬合的直線5W1520Popifafiicn E City in SlO.OOQsE.Z1ED1 E4.14TZ以上呈現了線性回歸的結果;以下兩種都是可視化J(theta);2.Surface Plot描述:數據如上一題一樣,我們想要繪制出對于這些數據的cost function,我們將繪制出三維圖形和contour plot;我們如果要繪制cost function,我們必須

24、預先寫好cost function的公式:function J = computeCost(X, y, theta)m = length(y);J = 0;predictions = X * theta;J = 1/(2*m)*sum(predictions - y) .A 2);end實現:theta0_vals = linspace(-10, 10, 100);%從-10 到 10 之間取 100 個數組成一個向量theta1_vals = linspace(-1,4, 100);%從-1 到 4 之間取 100 個數組成一個向量J_vals = zeros(length(theta0_v

25、als), length(theta1_vals); % 初始化 J_vals 矩陣,對于 某個 theta0 和 theta1,J_vals 都有對應的 cost function 值;計算每個(theta0,theta1)所對應的 J_vals;fori = 1:length(theta0_vals)for j = 1:length(theta1_vals)t = theta0_vals(i); theta1_vals(j);J_vals(i,j) = computeCost(X, y, t);endendfigure;%創(chuàng)建一個圖surf(theta0_vals,theta1_vals,

26、J_vals); %x 軸為 theta0_vals,y 軸為 theta1_vals,z 軸為J_vals;xlabel(theta_0); %添加 x 軸標志ylabel(theta_1); %添加 y 軸標志此圖而且可以轉動;Contour Plot實現:theta0_vals = linspace(-10, 10, 100);%從-10 到 10 之間取 100 個數組成一個向量theta1_vals = linspace(-1,4, 100);%從-1 到 4 之間取 100 個數組成一個向量J_vals = zeros(length(theta0_vals), length(the

27、ta1_vals); % 初始化 J_vals 矩陣,對于 某個 theta0 和 theta1,J_vals 都有對應的 cost function 值;計算每個(theta0,theta1)所對應的 J_vals;fori = 1:length(theta0_vals)for j = 1:length(theta1_vals)t = theta0_vals(i); theta1_vals(j);J_vals(i,j) = computeCost(X, y, t);endendfigure;%創(chuàng)建一個圖contour(theta0_vals, theta1_vals, J_vals, log

28、space(-2, 3, 20); % 畫等高線圖xlabel(theta_0); ylabel(theta_1);111765,虬4。砌4.IICZJ如果我們想要在等高線圖上畫出線性回歸的theta0與thetal的結果,則可以:plot(theta(1), theta(2), rx, MarkerSize, 10, LineWidth, 2);4.畫圖查看Learning Rate是否合理我們在gradientDescent函數中返回的值里有J_history向量,此向量記錄了每次迭代后cost function的值,因此我們只需要將x軸為迭代的次數,y軸為cost function的值,

29、即可畫圖:(1)theta,J_history = gradientDescent(X, y, theta, alpha, num_iters); figure;plot(1:length(J_history), J_history, -b, LineWidth, 2);xlabel(Number of iterations);ylabel(Cost J);7010H:I liW.59*010相叩1。3ei-OlO宅 1當然,我們也可以將不同的alpha值都畫在一張圖上,可以比較取各個alpha時,c ost function 的變化趨勢;(1)alpha=0.01;theta,J1 = gr

30、adientDescent(X, y, zeros(3,1), alpha, num_iters);alpha=0.03;theta,J2 = gradientDescent(X, y, zeros(3,1), alpha, num_iters);alpha=0.1;theta,J3 = gradientDescent(X, y, zeros(3,1), alpha, num_iters);plot(1:numel(J1), J1, -b, LineWidth, 2);plot(1:numel(J2), J2, -r, LineWidth, 2);plot(1:numel(J3), J3, -k, LineWidth, 2);76*010le+010Se*4104e*aio3e102eKH0alpha-0.01aJpha=a.1多元線性回歸其實方法和單變量線性回歸差不多,我們這里直接給出算法:computeCostMulti 函數plain view plaincopy1. function J = computeCostMulti(X, y, theta)2.m = l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論