机器学习第4天:线性回归及梯度下降
文章目錄
- 一、簡單線性回歸(即一元線性回歸)
- 二、代價函數
- 數學表達式:
- 代碼實現:
- 實例說明
- 三、梯度下降
- 數學表達式:
- 具體方法
- 代碼實現:
- 代價隨迭代次數的變化
一、簡單線性回歸(即一元線性回歸)
線性回歸屬于監督學習,因此方法和監督學習應該是一樣的,先給定一個訓練集,根據這個訓練集學習出一個線性函數,然后測試這個函數訓練的好不好(即此函數是否足夠擬合訓練集數據),挑選出最好的函數(cost function最小)即可。
注意:
1.因為是線性回歸,所以學習到的函數為線性函數,即直線函數;
2.因為是單變量,因此只有一個x;
線性回歸模型:
二、代價函數
看過了簡單線性回歸,我們肯定有一個疑問,怎么樣能夠看出線性函數擬合的好不好呢?
我們需要使用到Cost Function(代價函數),代價函數越小,說明線性回歸地越好(和訓練集擬合地越好),當然最小就是0,即完全擬合;
雖然我們現在還不知道Cost Function內部到底是什么樣的,但是我們的目標是:給定輸入向量x,輸出向量y,theta向量,輸出Cost值;
數學表達式:
代碼實現:
# 計算代價函數 def computerCost(X,y,theta):m = len(y)J = 0J = (np.transpose(X*theta-y))*(X*theta-y)/(2*m) #計算代價Jreturn J肯能對代價函數還是比較懵逼,那就看看具體的東西。
實例說明
比如給定數據集(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,則cost function:
J(0,0.5) = 1/(2*3) * [(h(1)-1)2+(h(2)-2)2+(h(3)-3)^2] = 0.58;
theta0,theta1分別代表數學表達式中的θ0\theta_{0}θ0?和θ1\theta_{1}θ1?
如果theta0 一直為 0, 則theta1與J的函數為:
如果有theta0與theta1都不固定,則theta0、theta1、J 的函數為:
當然我們也能夠用二維的圖來表示,即等高線圖:
注意:如果是線性回歸,則costfunctionJ與的函數一定是碗狀的,即只有一個最小點。
三、梯度下降
在知道了如何看出線性函數擬合好不與好后,又生出了一個問題,我們如何調整函數的參數使擬合程度達到最佳呢?
人工手動調試是肯定不行的太耗時間,而且結果不一定讓我們滿意。這時就需要引入梯度下降的概念找出cost function函數的最小值。
梯度下降原理:將函數比作一座山,我們站在某個山坡上,往四周看,從哪個方向向下走一小步,能夠下降的最快。
數學表達式:
- 其中α\alphaα為學習速率,控制梯度下降的速度,一般取0.01,0.03,0.1,0.3…
- m為Y的長度,即訓練集中元素的個數
- θj\theta_{j}θj?為代價函數
具體方法
(1)先確定向下一步的步伐大小,我們稱為Learning rate(即α\alphaα)。
(2)任意給定一個初始值。
(3)確定一個向下的方向,并向下走預先規定的步伐,并更新。
(4)當下降的高度小于某個定義的值,則停止下降。
初始點不同,獲得的最小值也不同,因此梯度下降求得的只是局部最小值。
代碼實現:
# 梯度下降算法 def gradientDescent(X,y,theta,alpha,num_iters):m = len(y) n = len(theta)temp = np.matrix(np.zeros((n,num_iters))) # 暫存每次迭代計算的theta,轉化為矩陣形式J_history = np.zeros((num_iters,1)) #記錄每次迭代計算的代價值for i in range(num_iters): # 遍歷迭代次數 h = np.dot(X,theta) # 計算內積,matrix可以直接乘temp[:,i] = theta - ((alpha/m)*(np.dot(np.transpose(X),h-y))) #梯度的計算theta = temp[:,i]J_history[i] = computerCost(X,y,theta) #調用計算代價函數print(".")return theta,J_history剛開始不宜研究過深,后期再對線性回歸內容進行補充。
代價隨迭代次數的變化
在梯度下降的過程中代價會隨迭代次數的增加而減少,但并不是迭代次數越多越好,當迭代次數達到一定值后,代價值幾乎不會有變化。
參考文章:機器學習入門:線性回歸及梯度下降,我精減了他這篇博客的內容,并加入python的代碼實現。
總結
以上是生活随笔為你收集整理的机器学习第4天:线性回归及梯度下降的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习第3天:多元线性回归
- 下一篇: 机器学习第5天:逻辑回归