在以前的內容中,只探討了單一特徵的迴歸模型,也就是 m 個樣本實例中,每一個樣本實例 x 只有一個特徵,好比房價預測中的 m 個樣本中,每一個樣本只有「房間尺寸」這一個特徵。html
在實際狀況中,更多的是涉及到多維特徵模型,好比影響房價的因素(即特徵)除了房間尺寸外,還有房間數、樓層等等。這時就須要引入多維特徵。python
多維特徵:在 m 個樣本實例中,每一個樣本實例 x 都有 n 個特徵。註釋表示爲:x j(i),表明特徵矩陣中的第 i 行的第 j 個特徵,也就是第 i 個訓練實例的第 j 個特徵。
算法
支持多變量的假設函數 h 能夠表示爲:hθ(x) = θ0x0+θ1x1+θ2x2+...+θnxn ,其中 x0 爲人爲引入,x0 = 1。此時模型中的參數 θ 是一個 n+1 維的向量,任何一個訓練實例也都是 n+1 維的向量,特徵矩陣X的維度是 m*( n+1 )。 所以公式能夠簡化爲:hθ(x) = θTX,其中上標T表明矩陣轉置。微信
與單變量線性迴歸相似,在多變量線性迴歸中,咱們也構建一個代價函數,則這個代價函數是全部建模偏差的平方和,即:機器學習
接下來就是要經過梯度降低的方法來使得代價函數最小:函數
公式中的 ( hθ(x(i)) - y(i) ) * xj(i) 是代價函數 J(θ) 對 θ 的導數。學習
matlab代碼示例:spa
theta = theta - alpha * ( 1 / m ) * X' * ( ( theta' * X' )' - y ) 其中X:( m , n + 1 ) ,theta:( n + 1 , 1 ) ,y:( m , 1 ) ,m 表明樣本數,n表明特徵數。3d
在咱們面對多維特徵問題的時候,咱們要保證這些特徵都具備相近的尺度,這將幫助梯度降低算法更快地收斂。htm
歸一化(特徵縮放)的優勢:
(1)歸一化後加快了梯度降低求最優解的速度。
(2)歸一化有可能提升精度(歸一化是讓不一樣維度之間的特徵在數值上有必定的比較性)。
下圖能更清晰的體現歸一化和未歸一化時最優解尋解過程的區別:
未歸一化:
歸一化:
從上面能夠看出,數據歸一化後,最優解的尋優過程明顯會變得平緩,更容易正確的收斂到最優解。
兩種歸一化的方法:
(1)min-max標準化
定義:也稱爲離差標準化,是對原始數據的線性變換,使得結果映射到0-1之間。
本質:把數變爲【0,1】之間的小數。
轉換函數:(X-Min)/(Max-Min)
若是想要將數據映射到-1,1,則將公式換成:(X-Mean)/(Max-Min)
其中:max爲樣本數據的最大值,min爲樣本數據的最小值,Mean表示數據的均值。
(2)Z-score(0均值)標準化方法
定義:這種方法給與原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。通過處理的數據符合標準正態分佈,即均值爲0,標準差爲1.
本質:把有量綱表達式變成無量綱表達式。
轉換函數:(X-Mean)/(Standard deviation)
其中,Mean爲全部樣本數據的均值。Standard deviation爲全部樣本數據的標準差。
梯度降低算法收斂所須要的迭代次數根據模型的不一樣而不一樣,咱們不能提早預知,咱們能夠繪製迭代次數和代價函數的圖表來觀測算法在什麼時候趨於收斂。
梯度降低算法的每次迭代受到學習率的影響,若是學習率 𝑎 太小,則達到收斂所需的迭代次數會很是高;若是學習率 𝑎 過大,每次迭代可能不會減少代價函數,可能會越過局部最小值致使沒法收斂。
藍色線正確的狀況,綠色和黑色爲錯誤的狀況(通常須要使用更小的學習率 𝑎 )
一般能夠考慮嘗試些學習率:
𝛼 = 0.01,0.03,0.1,0.3,1,3,10
以下圖所示,線性迴歸並不適用於全部數據,有時咱們須要曲線來適應咱們的數據,好比一個二次方模型 h𝜃(x) = 𝜃0 + 𝜃1x1 + 𝜃2x22 或者三次方模型。
若是假設中出現了高階項,那麼這個模型仍是線性模型嗎?
若是把假設函數當作是特徵 x 的方程,那麼該方程就是非線性方程;若是看出是參數 𝜃 的方程,那麼 x 的高階項均可以認爲是 𝜃 的參數。很明顯,在線性迴歸中採用了後一種的解釋方式。
區別於利用迭代的方式求解最優解,正規方程是求解下面的方程來找出使得代價函數最小的參數:
假設咱們的訓練集特徵矩陣爲 X(包含了 x0 = 1)而且咱們的訓練集結果爲向量 y,則利用正規方程解出向量 𝜃 = ( XT X )−1 XT y 。
推導過程以下:
matlab程序: pinv ( X' * X ) * X' * y
python程序:
梯度降低與正規方程的比較:
利用正規方程解出向量 𝜃 = ( XT X )−1 XT y 時,若是 XT X 不可逆,該如何處理呢?
首先不可逆的狀況很是少見,當矩陣的特徵是線性相關,以及特徵遠遠大於樣本數量(m < n)時會出現不可逆的狀況。
在matlab中有兩個函數能夠求解矩陣的逆,一個是 pin() 函數,一個是 inv() 函數。前者是所謂的僞逆,後者是逆。使用 pinv() 函數能夠展示數學上的過程,即使矩陣 X'X 是不可逆的,也將計算出 𝜃 的值。
以上,就是吳恩達機器學習課程第四章的主要內容。