吳恩達機器學習複習2:多重特徵、多重變數的梯度下降、梯度下降實踐Ⅰ:數據特徵縮放、梯度下降實踐Ⅱ:學習率、特徵和多項式回歸、正規方程法、向量化

  • 2022 年 10 月 9 日
  • 筆記

【多重特徵】

多變數線性回歸

可以有任何輸入變數的等式的表示方法

 

 假設

 

 使用矩陣乘法的定義,我們的多變數假設功能可以被簡潔地描述為

 

 這是未來我們為訓練例子的準備的假設函數的向量化

【多重變數的梯度下降】

假設

參數

代價函數

 

 

 

 

 

 

梯度下降的步驟

原來的演算法(n=1)

反覆做{

角度0 = 原角度0-學習率 *(1/m)  求和[  假設函數值-實際函數值  ]

角度1 = 原角度1-學習率 *(1/m)  求和[(假設函數值-實際函數值)*  自變數  ]

}

新的演算法(n>=1)

反覆做{

角度j = 原角度1-學習率 *(1/m)  求和[(假設函數值-實際函數值)*  自變數  ]

}

 

【梯度下降實踐Ⅰ:數據特徵縮放】

思想: 使得確定的特徵在一個相似的衡量尺度上

 

平均值歸一化

把x換成x-μ,使特徵接近大約零平均值

 

標準化

現在你知道了特徵放大,如果你運用這個簡單的技巧,它會讓梯度下降運行得更快,並且在更小的迭代步數里收斂。

把你的輸入值以粗略的相同的範圍,加速梯度下降

【梯度下降實踐Ⅱ:學習率】

 

debug除錯:使得梯度下降正確工作

如何選擇除錯率?

找到你希望用來最小化代價函數的theta值

x軸代表梯度下降的迭代次數

 

 迭代100次後得到一個theta,又得出一個代價函數J(theta)。

 

 當梯度下降不能正常工作時

 

 有關學習率選擇與梯度下降影像的選擇題

 

 在圖C中,代價函數值在增加,說明學習率太高了

A和B都收斂到一個代價函數的最優點,但是B收斂太慢了,說明學習率太低

 

總結:

學習率太小:收斂慢

學習率太大:代價函數隨迭代次數增加而增加,甚至不收斂

 

{為梯度下降除錯}

畫一個該梯度下降的迭代次數與代價函數值的圖
如果代價函數甚至增加了,你可能需要減小學習率啦

 

{自動收斂測試}

如果代價函數每次都比E(10的-3次方)減少得還要慢,說明是收斂的
然而實際上很難選擇門檻值

 

【特徵和多項式回歸】

 

 

 提高特徵和假設函數的形式,以一系列不同的方式

{多項式回歸}

我們的假設函數不需要是線性,如果能和數據擬合得很好的話

我們可以改變行為或我們假設函數的曲線,通過製造一個二次的、三次的或平方根函數(或任何形式)

 

 注意:如果你以這種方式選擇特徵,那麼特徵縮放就變得很重要了!

【正規方程法】

 在正規方程法的方法中,通過對theta j求導,最小化代價函數,然後把它們設為0.

這讓我們得以不用迭代就能找到最優化值。

 

 不需要用正規方程法做特徵縮放

*梯度下降法和正規方程法的比較

 

 用正規方程法計算轉置有O(n^3)的複雜度

所以如果我們有更大數量的特徵,那麼用正規方程法就會很慢。

實際上,當n超過1萬時,從正規解法到迭代過程會有一個很好的時間。

 

 正規方程的不可逆

在matlab里執行正規方程時,我們一般用pinv功能,它能返回theta值(即使X^TX不可逆的時候)

常見的原因是:

1.冗餘的特徵,有兩個特徵是相關的(儘管不是線性獨立)

2.太多的特徵了。在本例中,刪除一些特徵或使用歸一化

解決方法:

1.刪除互相線性獨立的一個特徵

2.如果特徵太多了,刪除一個或多個特徵

【向量化】

 向量化的例子

h(x)=sum(theta_j*x_j)=theta^T*x

 

 

 

 

 

 

%matlab
%未向量化執行法
prediction=0.0;
for j=1:n+1;
    prediction=prediction+theta(j)*x(j)
end;

double prediction =0.0;
for(int j = 0;j<=n;j++)
    prediction+=theta[j]*x[j];


%向量化執行方法
prediction=theta'*x;

double prediction=theta.transpose()*x;