線性迴歸演算法

KpHang 發表於 2022-07-04
演算法

預測函式

單變數線性迴歸:\(h{_\theta(x)} = \theta{_0} + \theta{_1}x\);令\(x_0 = 1\);則\(h{_\theta(x)} = \theta{_0}x_0 + \theta{_1}x_1\)

多變數線性迴歸:\({{h}_{\theta }}\left( x \right)={{\theta }_{0}}{{x}_{0}}+{{\theta }_{1}}{{x}_{1}}+{{\theta }_{2}}{{x}_{2}}+...+{{\theta }_{n}}{{x}_{n}}\)\(x_0 = 1\)

\[\begin{align*}h_\theta(x) =\begin{bmatrix}\theta_0 \hspace{2em} \theta_1 \hspace{2em} ... \hspace{2em} \theta_n\end{bmatrix}\begin{bmatrix}x_0 \newline x_1 \newline \vdots \newline x_n\end{bmatrix}= \theta^T X\end{align*} \]

代價函式

  • 損失函式:對於單個樣本而言,指的是一個樣本的誤差;
  • 代價函式:範圍是整個訓練集,此處簡單理解為所有樣本誤差的平均;

平方差代價函式:$$J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}}$$

  • 額外1/2是因為:用於消除梯度下降時求偏導數所出現的2;

代價函式還有其他種類,如:交叉熵代價函式。

目標:不斷迭代\(\theta\),力爭讓代價函式最小,越小預測結果越準確。

梯度下降

方向導數與梯度

  • 導數:在二維平面中,曲線上某一點沿著x軸方向變化率,即函式在該點的斜率;
  • 偏導數:在三維空間中,曲面上某一點沿著x軸方向或y軸方向變化率;\(\frac{\partial f}{\partial x}\)\(\frac{\partial f}{\partial y}\)
  • 方向導數:在三維空間中,曲面上某一點沿著任一方向的變化率;

方向導數(是一個數)

image-20220620102350582

二元函式 z = f ( x , y )的方向導數求法:

\(\frac {\partial f} {\partial \overrightarrow l} = \frac{\partial f}{\partial x}\cos\alpha + \frac{\partial f}{\partial y}\cos\beta = \{\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}\}\{\cos\alpha, \cos\beta\}\)

梯度(是一個向量):表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。

0b789788fc15889fe33fb44818c40852.png (400×253) (ai-start.com)

86c827fe0978ebdd608505cd45feb774.png (600×291) (ai-start.com)

  • 沿著等高線密集的方向,可以更快到達最低點。

梯度的求法,以 z = f ( x, y ) :$grad f(x, y) = \frac{\partial f}{\partial x}i + \frac{\partial f}{\partial y}j $

梯度的公式中的偏導,和梯度下降公式中的偏導聯絡起來。

梯度下降的直觀理解

假定代價函式只有一個變數,對應多個引數,求偏導時是一樣的效果;

image-20220621170150987

repeat until convergen { \(\theta_1:=\theta_1-\alpha \frac{d}{d\theta_1} J(\theta_1)\) }

  • \(\alpha\):學習率,可以理解為下降的步長;
  • \(\alpha\)大小可以不用變化,因為隨著\(\theta\)的變化,(偏)導數會不斷減小,因此他們之積也會不斷減小,直到收斂;
  • \(\alpha\)取值不易太大或太小,會造成難以收斂的情況;

批量梯度下降

關於批量的解釋:是在梯度下降的每一步中,我們都用到了所有的訓練樣本,從下面公式的求和符號可以明顯看出。另外,也可以這樣理解,每次下降我們要追求的是總損失也就是代價的最小,這是一個整體的最小,而不是單個樣本最小,只擬合到一個點,毫無意義。

迭代核心:

\[{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta \right) \]

很簡單的求一下偏導,就得到下面結果:

\[\begin{align*} & \text{repeat until convergence:} \; \lbrace \newline \; & \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)}\newline \; & \theta_1 := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_1^{(i)} \newline \; & \theta_2 := \theta_2 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_2^{(i)} \newline & \cdots \newline \rbrace \end{align*} \]

In other words:

\[\begin{align*}& \text{repeat until convergence:} \; \lbrace \newline \; & \theta_j := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} \; & \text{for j := 0...n}\newline \rbrace\end{align*} \]

特徵放縮

線性迴歸演算法

樣本集中的每個特徵的範圍儘可能的接近,更容易收斂。

標準化

\[x^{'} = \frac{x - \bar{x}}{\sigma} \]

均值歸一化

\[x^{'} = \frac{x - mean(x)}{max(x) - min(x)} \]

最大-最小值歸一化

\[x^{'} = \frac{x - min(x)}{max(x) - min(x)} \]

正規方程(Normal equation)

正規方程是通過求解下面的方程來找出使得代價函式最小的引數的:\(\frac{\partial }{\partial {{\theta }_{j}}}J\left( {{\theta }_{j}} \right)=0\)

多元函式求極值,令所有偏導等於0;
正規方程的推導過程:【機器學習】正規方程的推導過程,看完我不信你不懂!_性感博主線上瞎搞的部落格-CSDN部落格_正規方程推導過程

正規方程求解:

\[\theta ={{\left( {{X}^{T}}X \right)}^{-1}}{{X}^{T}}y \]

梯度下降 正規方程
需要選擇學習率 不需要
需要多次迭代 一次運算得出
當特徵數量大時也能較好適用 需要計算 如果特徵數量n較大則運算代價大,因為矩陣逆的計算時間複雜度為,通常來說當小於10000 時還是可以接受的
適用於各種型別的模型 只適用於線性模型,不適合邏輯迴歸模型等其他模型

程式碼實戰

以上的所有內容都有程式碼演示,詳情可以檢視:AndrewNg-ML-Exs-by-Python/ML-Exercise1.ipynb at master · KpiHang/AndrewNg-ML-Exs-by-Python (github.com)

相關文章