2.線性迴歸的損失和優化問題
思考:
假設剛才的房子例子,真實的資料之間存在這樣的關係
真實關係:真實房子價格 = 0.02×中心區域的距離 + 0.04×城市一氧化氮濃度 + (-0.12×自住房平均房價) + 0.254×城鎮犯罪率
那麼現在呢,我們隨意指定一個關係(猜測)
隨機指定關係:預測房子價格 = 0.25×中心區域的距離 + 0.14×城市一氧化氮濃度 + 0.42×自住房平均房價 + 0.34×城鎮犯罪率
請問這樣的話,會發生什麼?真實結果與我們預測的結果之間是不是存在一定的誤差呢?類似這樣樣子
既然存在誤差,那我們就將這個誤差給衡量出來
1 損失函式
總損失定義為:
- yi為第i個訓練樣本的真實值
- h(xi)為第i個訓練樣本特徵值組合預測函式
- 又稱最小二乘法
如何去減少這個損失,使我們預測的更加準確些?既然存在了這個損失,我們一直說機器學習有自動學習的功能,線上性迴歸這裡更是能夠體現。這裡可以通過一些優化方法去優化(其實是數學當中的求導功能)迴歸的總損失!!!
2 優化演算法
如何去求模型當中的W,使得損失最小?(目的是找到最小損失對應的W值)
線性迴歸經常使用的兩種優化演算法
2.1 正規方程
2.1.1 什麼是正規方程
理解:X為特徵值矩陣,y為目標值矩陣。直接求到最好的結果
缺點:當特徵過多過複雜時,求解速度太慢並且得不到結果
2.1.2 正規方程求解舉例
以下表示資料為例:
即:
運用正規方程方法求解引數:
2.1.3 正規方程的推導
把該損失函式轉換成矩陣寫法:
其中y是真實值矩陣,X是特徵值矩陣,w是權重矩陣
對其求解關於w的最小值,起止y,X 均已知二次函式直接求導,導數為零的位置,即為最小值。
求導:
注:式(1)到式(2)推導過程中, X是一個m行n列的矩陣,並不能保證其有逆矩陣,但是右乘XT把其變成一個方陣,保證其有逆矩陣。
式(5)到式(6)推導過程中,和上類似。
- 推導方式二【拓展】:
https://www.jianshu.com/p/2b6633bd4d47
2.2 梯度下降(Gradient Descent)
2.2.1 什麼是梯度下降
梯度下降法的基本思想可以類比為一個下山的過程。
梯度下降的基本過程就和下山的場景很類似。
首先,我們有一個可微分的函式。這個函式就代表著一座山。
我們的目標就是找到這個函式的最小值,也就是山底。
根據之前的場景假設,最快的下山的方式就是找到當前位置最陡峭的方向,然後沿著此方向向下走,對應到函式中,就是找到給定點的梯度,然後朝著梯度相反的方向,就能讓函式值下降的最快!因為梯度的方向就是函式之變化最快的方向。 所以,我們重複利用這個方法,反覆求取梯度,最後就能到達區域性的最小值,這就類似於我們下山的過程。而求取梯度就確定了最陡峭的方向,也就是場景中測量方向的手段。
2.2.2 梯度的概念
梯度是微積分中一個很重要的概念
在單變數的函式中,梯度其實就是函式的微分,代表著函式在某個給定點的切線的斜率
在多變數函式中,梯度是一個向量,向量有方向,梯度的方向就指出了函式在給定點的上升最快的方向
這也就說明了為什麼我們需要千方百計的求取梯度!我們需要到達山底,就需要在每一步觀測到此時最陡峭的地方,梯度就恰巧告訴了我們這個方向。梯度的方向是函式在給定點上升最快的方向,那麼梯度的反方向就是函式在給定點下降最快的方向,這正是我們所需要的。所以我們只要沿著梯度的反方向一直走,就能走到區域性的最低點!
2.2.3 梯度下降舉例
- 1. 單變數函式的梯度下降**
我們假設有一個單變數的函式 :J(θ) = θ2
函式的微分:J、(θ) = 2θ
初始化,起點為: θ0= 1
學習率:α = 0.4
我們開始進行梯度下降的迭代計算過程:
如圖,經過四次的運算,也就是走了四步,基本就抵達了函式的最低點,也就是山底
- 2.多變數函式的梯度下降
我們假設有一個目標函式 ::J(θ) = θ12+ θ22
現在要通過梯度下降法計算這個函式的最小值。我們通過觀察就能發現最小值其實就是 (0,0)點。但是接下 來,我們會從梯度下降演算法開始一步步計算到這個最小值! 我們假設初始的起點為: θ0= (1, 3)
初始的學習率為:α = 0.1
函式的梯度為:▽:J(θ) =< 2θ1,2θ2>
進行多次迭代:
我們發現,已經基本靠近函式的最小值點
2.2.4 梯度下降(Gradient Descent)公式
-
1) α是什麼含義?
α在梯度下降演算法中被稱作為學習率或者步長,意味著我們可以通過α來控制每一步走的距離,以保證不要步子跨的太大扯著蛋,哈哈,其實就是不要走太快,錯過了最低點。同時也要保證不要走的太慢,導致太陽下山了,還沒有走到山下。所以α的選擇在梯度下降法中往往是很重要的!α不能太大也不能太小,太小的話,可能導致遲遲走不到最低點,太大的話,會導致錯過最低點!
- 2) 為什麼梯度要乘以一個負號?
梯度前加一個負號,就意味著朝著梯度相反的方向前進!我們在前文提到,梯度的方向實際就是函式在此點上升最快的方向!而我們需要朝著下降最快的方向走,自然就是負的梯度的方向,所以此處需要加上負號
以有了梯度下降這樣一個優化演算法,迴歸就有了"自動學習"的能力
-
優化動態圖演示
- 梯度下降和正規方程的對比
梯度下降 | 正規方程 |
---|---|
需要選擇學習率 | 不需要 |
需要迭代求解 | 一次運算得出 |
特徵數量較大可以使用 | 需要計算方程,時間複雜度高O(n3) |
- 選擇:
- 小規模資料:
- LinearRegression(不能解決擬合問題)
- 嶺迴歸
- 大規模資料:SGDRegressor
- 小規模資料: