日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习第4天:线性回归及梯度下降

發布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习第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天:线性回归及梯度下降的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。