這是系列教程的第二篇文章,公式的推導可能會愈加復雜,請認真分析!come on~
<h4>符號及標記</h4>
在進行數學運算之前,我們需要規定一些數學標記,方便接下來的討論:
<h4>函數向量化</h4>
假設函數的向量化
如果我們的假設函數是:
=\theta_0 +\theta_1 x_1+\theta_2 x_2 +...+\theta_n x_n)
那么我們可以將上述式子向量化為:
=[\theta_0\ \theta_1\ \theta_2\ ...\theta_n]\cdot \begin{bmatrix}1 \ x_1 \ x_2 \ . \ . \ . \ x_n \end{bmatrix}= \theta^T\cdot X)
為了方便計算我們令:
也就是說,每個訓練集的第一個輸入值都假設為1。
舉個例子,假設我們有這樣一個訓練集,每個訓練樣本的輸入值都橫向展開,如下所示:
} & x_1^{(1)} \ x_0^{(2)} & x_1^{(2)} \ x_0^{(3)} & x_1^{(3)} \end{bmatrix})
比如,第一個訓練樣本的數據集為
其次,參數的矩陣為:

所以有:
 = X\cdot \theta)
代價函數的向量化
=\frac{1}{2m}\sum_{i=1}^{m}[h_{\theta}\left( x^i \right)-y{(i)}]2=\frac{1}{2m}(X\theta - \vec{y})^T(X\theta - \vec{y}))
梯度下降算法的公式為:
-y{(i)}]x{(i)}_{j})
其中 j=0,1,2, ... , m
將上述公式向量化,得到:
)
=\begin{bmatrix} \frac{\partial}{\partial \theta_0}J(\theta) \ \frac{\partial}{\partial \theta_1}J(\theta) \ \frac{\partial}{\partial \theta_2}J(\theta) \ . \ . \ . \ \frac{\partial}{\partial \theta_m}J(\theta) \end{bmatrix})
其中:
=\frac{1}{m}\sum_{i=1}{m}x_j{(i)}[h_{\theta}(x{i})-y{(i)}])
通過分析角標之間的關系,我們可以將上述式子向量化為:
=\frac{1}{m}X^T[X \theta-\vec{y}\ ])
也就是說,我們的梯度下降算法表示為:

<h4>正規化方程</h4>
在對訓練集應用梯度下降算法時,如果訓練集的數據比較大,比如上千上萬時,我們可能需要花費很長的時間來對訓練集進行梯度下降,因此,在應用訓練集數據進行訓練前,我們需要對數據做一些預處理。
當數據值比較大的時候,我們可以對數據值這樣處理:

其中u_i是該數據樣本的平均值,s_i是數據樣本的極差(極差的概念請自行百度)。
當然我們也可以有自己的方法對數據進行處理,只要能方便我們對訓練集應用梯度下降算法。不過在這里,我想要介紹利用正規化方程的方法來直接獲得假設函數的參數值。
如果對于數據集X和y,存在參數集θ滿足:

因此有:

^{-1}\cdot X^Ty = (X^T X){-1}XT y)
<h4>總結</h4>
下一篇教程就是實例代碼的實戰,上面的公式推導請好好消化,當然更多內容請參考機器學習。