正規(guī)方程(Normal Equation)
到目前為止,我們都在使用梯度下降算法將代價(jià)函數(shù)J(θ)最小化。但對(duì)于某些線性回歸問(wèn)題,我們引入正規(guī)方程來(lái)求解最優(yōu)的θ值,從而使得代價(jià)函數(shù)J(θ)最小化。
正規(guī)方程是通過(guò)求解如下的方程來(lái)使得代價(jià)函數(shù)J(θ)最小的參數(shù)θ的值:
假設(shè)我們使用如下數(shù)據(jù)集作為我們的訓(xùn)練集:
我們可以構(gòu)建出如下數(shù)據(jù)表:
x0 | x1 | x2 | x3 | x4 | y |
---|---|---|---|---|---|
1 | 2104 | 5 | 1 | 45 | 460 |
1 | 1416 | 3 | 2 | 40 | 232 |
1 | 1534 | 3 | 2 | 30 | 315 |
1 | 852 | 2 | 1 | 36 | 178 |
其中,x0為我們添加的特征變量,這樣我們由x0 至 x4可構(gòu)建訓(xùn)練集特征矩陣X,由y可構(gòu)建訓(xùn)練集結(jié)果矩陣Y。至此,我們利用正規(guī)方程解出參數(shù)θ = (XTX)-1XTY。
在Octave中,正規(guī)方程寫為:pinv(X'X)X'*Y。
注:對(duì)于不可逆的矩陣(通常特征變量存在線性相關(guān)或特征變量數(shù)量過(guò)多,即特征變量數(shù)量大于訓(xùn)練集中的訓(xùn)練數(shù)據(jù)。),正規(guī)方程方法不可使用。
梯度下降算法與正規(guī)方程法的比較:
梯度下降算法 | 正規(guī)方程 |
---|---|
需要選擇學(xué)習(xí)率α | 不需要 |
需要多次迭代 | 一次運(yùn)算得出 |
當(dāng)特征數(shù)量n越大時(shí)越適用 | 通常當(dāng)特征數(shù)量n≤10000時(shí)適用 |
補(bǔ)充筆記
Normal Equation
Gradient descent gives one way of minimizing J. Let’s discuss a second way of doing so, this time performing the minimization explicitly and without resorting to an iterative algorithm. In the "Normal Equation" method, we will minimize J by explicitly taking its derivatives with respect to the θj ’s, and setting them to zero. This allows us to find the optimum theta without iteration. The normal equation formula is given below:
θ = (XTX)-1XTy
There is no need to do feature scaling with the normal equation.
The following is a comparison of gradient descent and the normal equation:
Gradient Descent | Normal Equation |
---|---|
Need to choose α | No need to choose α |
Needs many iterations | No need to iterate |
O(kn2) | O(n3, need to calculate inverse of XTX) |
Works well when n is large | Slow if n is very large |
With the normal equation, computing the inversion has complexity O(n3). So if we have a very large number of features, the normal equation will be slow. In practice, when n exceeds 10,000 it might be a good time to go from a normal solution to an iterative process.
Normal Equation Noninvertibility
When implementing the normal equation in octave we want to use the 'pinv' function rather than 'inv.' The 'pinv' function will give you a value of θ even if XTX is not invertible.
If XTX is noninvertible, the common causes might be having :
- Redundant features, where two features are very closely related (i.e. they are linearly dependent)
- Too many features (e.g. m ≤ n). In this case, delete some features or use "regularization" (to be explained in a later lesson).
Solutions to the above problems include deleting a feature that is linearly dependent with another or deleting one or more features when there are too many features.