文章目錄
- 1 多元引入
- 2 矢量化
- 2.1 示例
- 2.2 非矢量化實現
- 2.3 矢量化實現
- 2.4 應用
- 3 特征縮放
- 3.1 舉例
- 3.2 必要性
- 3.3 方法
- 3.3.1 最大最小值縮放(Min-Max Scaling)
- 3.3.2 均值歸一化(Mean Normalization)
- 3.3.3 Z 分數歸一化(Z-Score Normalization)
- 3.4 小結
- 4 梯度下降與學習率
- 4.1 梯度下降
- 4.2 學習率
- 5 特征工程
- 5.1 示例
- 5.2 創建特征
- 6 多項式回歸
1 多元引入
? 在原始的線性回歸模型中,我們只有一個特征 x x x(例如房屋的大小),并預測目標變量 y y y(例如房屋的價格)。模型的形式為:
f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b?(x)=wx+b
? 然而,在實際應用中,我們通常有多個特征來預測目標變量。例如,
- 房屋大小
- 臥室數量
- 樓層數量
- 房屋的使用年限
- 等
? 這些額外的特征可以提供更多的信息,幫助我們更準確地預測價格。
? 為了處理多個特征,引入以下符號:
- X 1 X_1 X1?, X 2 X_2 X2?, X 3 X_3 X3?, X 4 X_4 X4? 分別表示四個特征(例如房屋大小、臥室數量、樓層數量、房屋使用年限)。
- X j X_j Xj? 表示第 j j j 個特征,其中 j j j 從 1 到 4。
- n n n 表示特征的總數,在這個例子中 n = 4 n=4 n=4。
- X ( i ) X^{(i)} X(i)表示第 i i i 個訓練示例的特征向量,例如 X ( 2 ) = [ 1416 , 3 , 2 , 40 ] X^{(2)} = [1416, 3, 2, 40] X(2)=[1416,3,2,40]。
- X j ( i ) X_j^{(i)} Xj(i)? 表示第 i i i 個訓練示例的第 j j j 個特征的值,例如 X 3 ( 2 ) = 2 X_3^{(2)}=2 X3(2)?=2(表示第二個訓練示例的樓層數量)。

? 此時,線性回歸模型的形式變為:
f w , b ( X ) = w 1 X 1 + w 2 X 2 + w 3 X 3 + w 4 X 4 + b f_{w,b}(X)=w_1X_1+w_2X_2+w_3X_3+w_4X_4+b fw,b?(X)=w1?X1?+w2?X2?+w3?X3?+w4?X4?+b
? 例如,一個可能的房價預測模型可能是:
f w , b ( X ) = 0.1 X 1 + 4 X 2 + 10 X 3 ? 2 X 4 + 80 f_{w,b}(X)=0.1X_1+4X_2+10X_3-2X_4+80 fw,b?(X)=0.1X1?+4X2?+10X3??2X4?+80
- b = 80 b=80 b=80 表示房屋的基本價格為 80,000 美元(假設沒有大小、臥室、樓層和年齡)。
- w 1 = 0.1 w1=0.1 w1=0.1 表示每增加一平方英尺,價格增加 100 美元。
- w 2 = 4 w2=4 w2=4 表示每增加一個臥室,價格增加 4,000 美元。
- w 3 = 10 w3=10 w3=10 表示每增加一層,價格增加 10,000 美元。
- w 4 = ? 2 w4=?2 w4=?2 表示每增加一年房屋使用年限,價格減少 2,000 美元。

? 為了簡化表示,我們可以將參數 w w w 和特征 X X X 表示為向量:
w ? = [ w 1 , w 2 , ? , w n ] X ? = [ X 1 , X 2 , ? , X n ] \vec{w}=[w_1,w_2,\cdots,w_n]\\ \vec{X}=[X_1,X_2,\cdots,X_n] w=[w1?,w2?,?,wn?]X=[X1?,X2?,?,Xn?]
? 因此,模型可表示為:
f w , b ( X ) = w ? ? X ? + b f_{w,b}(X)=\vec{w}\cdot\vec{X}+b fw,b?(X)=w?X+b
? 這里的點積是兩個向量的對應元素相乘后求和的結果:
w ? ? X ? = w 1 X 1 + w 2 X 2 + ? + w n X n \vec{w}\cdot\vec{X}=w_1X_1+w_2X_2+\cdots+w_nX_n w?X=w1?X1?+w2?X2?+?+wn?Xn?
2 矢量化
? 矢量化是一種將操作應用于整個向量或矩陣的技術,而不是逐個元素進行處理。在機器學習中,矢量化可以極大地提高代碼的效率,尤其是在處理大規模數據集時。
? 矢量化不僅可以縮短代碼,還能顯著提高算法的運行效率。通過編寫矢量化代碼,您可以利用現代數值線性代數庫(如 NumPy)以及 GPU(圖形處理單元)硬件,從而加速計算過程。
2.1 示例
? 假設我們有一個線性回歸模型,參數為 w w w 和 b b b,其中 w w w 是一個包含三個數字的向量,特征向量 x x x 也包含三個數字。這里 n = 3 n=3 n=3。
import numpy as npw = np.array([1.0, 2.5, -3.3]) # 參數向量
x = np.array([10, 20, 30]) # 特征向量
b = 4 # 偏置項
? 在 Python 中,數組的索引從 0 開始,因此:
- w [ 0 ] w[0] w[0] 對應 w 1 w_1 w1?
- w [ 1 ] w[1] w[1] 對應 w 2 w_2 w2?
- w [ 2 ] w[2] w[2] 對應 w 3 w_3 w3?

2.2 非矢量化實現
方法 1:逐個元素計算
f = w[0] * x[0] + w[1] * x[1] + w[2] * x[2] + b
? 這種方法在 n n n 較小時可行,但當 n n n 很大時(例如 100 或 100,000),代碼會變得冗長且效率低下。
方法 2:使用 for 循環
f = 0
for j in range(3):f += w[j] * x[j]
f += b
? 雖然這種方法比逐個元素計算更簡潔,但仍然沒有利用矢量化,效率不高。
? 這種實現方式會順序執行計算,即先計算索引 0 的值,然后是索引 1,索引 2。這種方式效率較低,尤其是在 n n n 很大時。
2.3 矢量化實現
? 使用 NumPy 的 dot
函數,可以將模型的計算簡化為一行代碼:
f = np.dot(w, x) + b
np.dot(w, x)
計算向量 w w w 和 x x x 的點積。- 點積的定義為: w ? ? x ? = w 1 x 1 + w 2 x 2 + ? + w n x n \vec{w}\cdot\vec{x}=w_1x_1+w_2x_2+\cdots+w_nx_n w?x=w1?x1?+w2?x2?+?+wn?xn?。
矢量化的優勢
-
代碼更簡潔
矢量化將復雜的計算簡化為一行代碼,使代碼更易讀、更易維護。
-
運行效率更高
矢量化利用現代計算機的并行計算能力,尤其是在使用 GPU 時,可以顯著加速計算過程。
底層原理
- NumPy 的
dot
函數能夠在計算機中使用并行硬件(如 CPU 或 GPU),從而比 for 循環或逐個元素計算更高效。 - 當 n n n 很大時,矢量化實現的效率優勢尤為明顯。
2.4 應用
? 假設我們有一個多元線性回歸模型,包含 16 個特征和 16 個參數 w 1 w_1 w1? 到 w 16 w_{16} w16?。我們需要更新這些參數,公式為:
w j = w j ? α ? d j w_j=w_j-\alpha\cdot d_j wj?=wj??α?dj?
其中 α α α 是學習率, d j d _ j dj? 是導數項。
非矢量化實現
for j in range(16):w[j] = w[j] - 0.1 * d[j]
? 這種實現方式會逐個更新每個參數,效率較低。
矢量化實現
w = w - 0.1 * d
? 在矢量化實現中,計算機可以同時更新所有 16 個參數,利用并行硬件高效完成計算。

3 特征縮放
3.1 舉例
? 假設我們有兩個特征:
- x 1 x_ 1 x1?:房屋的大小(范圍:300 到 2000 平方英尺)
- $ x_2$:臥室的數量(范圍:0 到 5)
? 我們使用這兩個特征來預測房屋的價格。假設一個房屋的面積為 2000 平方英尺,有 5 間臥室,價格為 500,000 美元。
-
參數示例 1
-
w 1 = 50 , w 2 = 0.1 , b = 50 w_1=50, w_2=0.1, b =50 w1?=50,w2?=0.1,b=50
-
預測價格:50×2000+0.1×5+50=100,000+0.5+50=100,050.5 千美元
-
這個預測與實際價格 500,000 美元相差甚遠。
-
-
參數示例 2
-
w 1 = 0.1 , w 2 = 50 , b = 50 w _1=0.1, w_2=50, b =50 w1?=0.1,w2?=50,b=50
-
預測價格:0.1×2000+50×5+50=200+250+50=500 千美元
-
這個預測與實際價格 500,000 美元一致。
-

結論
- 當特征的值范圍較大時(如房屋大小),對應的參數 w 1 w_1 w1? 應該較小。
- 當特征的值范圍較小時(如臥室數量),對應的參數 w 2 w_2 w2? 應該較大。
3.2 必要性
? 如果特征的值范圍差異很大,梯度下降可能會在等高線圖中來回彈跳,導致收斂速度變慢。例如:
- x 1 x_1 x1? 的范圍較大,導致 w 1 w_1 w1? 的微小變化對成本函數 J J J 的影響較大。
- x 2 x_2 x2? 的范圍較小,導致 w 2 w_2 w2? 的較大變化對成本函數 J J J 的影響較小。
? 這種情況下,等高線圖會呈現高瘦的橢圓形,梯度下降需要更長時間才能找到全局最小值。

? 特征縮放通過將不同特征的值范圍調整到相似的水平,使等高線圖更接近圓形,從而優化梯度下降的路徑。具體來說:
- 將 x 1 x_1 x1? 和 x 2 x_2 x2? 的值范圍都調整到 0 到 1 之間。
- 這樣,梯度下降可以更直接地找到全局最小值。

3.3 方法
3.3.1 最大最小值縮放(Min-Max Scaling)
? 將特征值縮放到 [ 0 , 1 ] [0,1] [0,1] 區間,公式為:
x s c a l e d = x ? x min ? x max ? ? x min ? x_{\mathrm{scaled}}=\frac{x-x_{\min}}{x_{\max}-x_{\min}} xscaled?=xmax??xmin?x?xmin??
-
特征 x 1 x_1 x1? 的范圍為 300 到 2000。
x 1 , s c a l e d = x 1 ? 300 2000 ? 300 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-300}{2000-300} x1,scaled?=2000?300x1??300?。
-
特征 x 2 x_2 x2? 的范圍為 0 到 5:
x 2 , s c a l e d = x 2 5 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2}{5} x2,scaled?=5x2??。
3.3.2 均值歸一化(Mean Normalization)
? 將特征值調整到以 0 為中心,公式為:
x s c a l e d = x ? μ x max ? ? x min ? x_{\mathrm{scaled}}=\frac{x-\mu}{x_{\max}-x_{\min}} xscaled?=xmax??xmin?x?μ?
- 特征 x 1 x_1 x1? 的均值為 600: x 1 , s c a l e d = x 1 ? 600 2000 ? 300 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-600}{2000-300} x1,scaled?=2000?300x1??600?。
縮放后的范圍為 -0.18 到 0.82。 - 特征 x 2 x_2 x2? 的均值為 2.3: x 2 , s c a l e d = x 2 ? 2.3 5 ? 0 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2-2.3}{5-0} x2,scaled?=5?0x2??2.3?。
縮放后的范圍為 -0.46 到 0.54。

3.3.3 Z 分數歸一化(Z-Score Normalization)
? 將特征值調整到均值為 0,標準差為 1,公式為:
x s c a l e d = x ? μ σ x_{\mathrm{scaled}}=\frac{x-\mu}{\sigma} xscaled?=σx?μ?
- 特征 x 1 x_1 x1? 的均值為 600,標準差為 450: x 1 , s c a l e d = x 1 ? 600 450 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-600}{450} x1,scaled?=450x1??600?。
縮放后的范圍為 -0.67 到 3.1。 - 特征 x 2 x_2 x2? 的均值為 2.3,標準差為 1.4: x 2 , s c a l e d = x 2 ? 2.3 1.4 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2-2.3}{1.4} x2,scaled?=1.4x2??2.3?。
縮放后的范圍為 -1.6 到 1.9。

3.4 小結
目標范圍
? 通常將特征值調整到 -1 到 1 之間,但 -3 到 3 或 -0.3 到 0.3 也是可接受的。
特殊情況
- 如果特征值范圍非常大(如 -100 到 100),建議進行縮放。
- 如果特征值范圍非常小(如 -0.001 到 0.001),也可以考慮縮放。
- 如果特征值范圍適中(如 0 到 3 或 -2 到 0.5),不縮放通常也沒有問題。

4 梯度下降與學習率
4.1 梯度下降
? 梯度下降的目標是通過迭代更新參數 w w w 和 b b b,以最小化成本函數 J J J。其更新規則為:
{ w = w ? α ? J ? w b = b ? α ? J ? b \left\{ \begin{aligned} & w=w-\alpha\frac{\partial J}{\partial w} \\ & b=b-\alpha\frac{\partial J}{\partial b} \end{aligned} \right. ? ? ???w=w?α?w?J?b=b?α?b?J??
? 其中, α α α 是學習率。
判斷梯度下降是否收斂的方法
-
繪制學習曲線
-
學習曲線:在每次梯度下降迭代后,計算并繪制成本函數 J J J 的值。橫軸是迭代次數,縱軸是成本 J J J。
-
正常情況:如果梯度下降正常運行,成本 J J J 應該在每次迭代后逐漸減小。
-
異常情況:如果 J J J 在某次迭代后增加,可能意味著學習率 α α α 過大,或者代碼中存在錯誤。
-
收斂判斷:當學習曲線趨于平穩(即 J J J 不再顯著下降)時,可以認為梯度下降已經收斂。
示例:
-
在 100 次迭代后, J J J 的值為某個點。
-
在 200 次迭代后, J J J 的值進一步減小。
-
在 300 次迭代后, J J J 的值趨于平穩,表明梯度下降已收斂。
-
-
自動收斂測試
-
定義:設置一個閾值 ? ? ?(例如 0.001),如果成本 J J J 在一次迭代中減少的幅度小于 ? ? ?,則認為梯度下降已收斂。
-
優點:自動化判斷,無需手動繪制學習曲線。
-
缺點:選擇合適的閾值 ? ? ? 可能比較困難。
-

不同應用程序中,梯度下降收斂所需的迭代次數可能差異很大。某些模型可能在 30 次迭代后收斂,而其他模型可能需要 1,000 或 100,000 次迭代。
很難提前預測梯度下降需要多少次迭代才能收斂,因此繪制學習曲線是一種有效的方法。
4.2 學習率
? 選擇合適的學習率 α α α 是優化梯度下降算法的關鍵。如果學習率太小,梯度下降會收斂得很慢;如果學習率太大,梯度下降可能無法收斂,甚至發散。在本視頻中,我們將探討如何為模型選擇一個合適的學習率。
- 學習率太小:梯度下降收斂速度很慢,需要大量迭代才能達到最小值。
- 學習率太大:梯度下降可能無法收斂,甚至導致成本函數 J J J 在每次迭代后增加。
示例
- 如果學習率太大,更新步驟可能會“跳過”最小值,導致成本函數 J J J 在每次迭代后波動或增加。
- 如果學習率太小,更新步驟會非常小,導致收斂速度緩慢。

選擇學習率的策略
-
嘗試一系列值
從較小的學習率開始,逐步增加,觀察成本 J J J 的變化。
- 例如,嘗試 α = 0.001 , 0.003 , 0.01 , 0.03 , 0.1 α =0.001,0.003,0.01,0.03,0.1 α=0.001,0.003,0.01,0.03,0.1 等。
- 對于每個 α α α,運行少量迭代,繪制成本 J J J 隨迭代次數的變化。
-
選擇合適的學習率
- 選擇使成本 J J J 快速且持續下降的最大可能學習率。
- 避免選擇過大的學習率,以免導致發散。
實踐建議
- 初始嘗試:從 α = 0.001 α =0.001 α=0.001 開始,逐步增加(例如每次增加 3 倍)。
- 觀察曲線:繪制成本 J J J 隨迭代次數的變化,選擇使 J J J 快速下降的 α α α。
- 避免過大:確保學習率不會導致成本 J J J 增加或波動。

5 特征工程
5.1 示例
? 假設我們有以下兩個特征來預測房屋價格:
- x 1 x_1 x1?:地塊的寬度(臨街面)
- x 2 x_2 x2?:地塊的深度
? 初始模型如下:
f w , b ( X ) = w 1 x 1 + w 2 x 2 + b f_{w,b}(X)=w_1x_1+w_2x_2+b fw,b?(X)=w1?x1?+w2?x2?+b
? 雖然這個模型可以正常工作,但可能不是最有效的。我們可以通過特征工程來改進模型。
5.2 創建特征
? 地塊的面積(寬度 × 深度)可能比單獨的寬度和深度更能預測房屋價格。因此,可以定義一個新特征:
x 3 = x 1 × x 2 x_3=x_1\times x_2 x3?=x1?×x2?
? 改進后的模型如下:
f w , b ( X ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + b f_{w,b}(X)=w_1x_1+w_2x_2+w_3x_3+b fw,b?(X)=w1?x1?+w2?x2?+w3?x3?+b
- 通過轉換或組合原始特征,可以創建新的、更有意義的特征。
- 特征工程不僅可以幫助擬合直線,還可以擬合曲線和非線性函數,從而更好地擬合數據。
6 多項式回歸
? 結合多元線性回歸和特征工程的思想,提出一種稱為多項式回歸的新算法,可以將曲線和非線性函數擬合到數據中。
? 假設我們有一個房屋數據集,其中特征 x x x 是房屋的大小(以平方英尺為單位)。數據分布可能不適合用直線擬合,而是更適合用曲線擬合。

? 多項式回歸通過將原始特征 x x x 提升為不同的冪次(如 x 2 , x 3 x_2,x_3 x2?,x3?)來創建新的特征。例如:
- 第一個特征: x x x(房屋大小)
- 第二個特征: x 2 x_2 x2?(房屋大小的平方)
- 第三個特征: x 3 x_3 x3?(房屋大小的立方)

二次函數
- 模型: f w , b ( X ) = w 1 x 1 + w 2 x 2 2 + b f_{w,b}(X)=w_1x_1+w_2x_2^2+b fw,b?(X)=w1?x1?+w2?x22?+b。
- 優點:可以擬合數據的二次曲線。
- 問題:二次函數最終會下降,這與房價隨面積增加而上升的預期不符。
三次函數
- 模型: f w , b ( X ) = w 1 x 1 + w 2 x 2 2 + w 3 x 3 3 + b f_{w,b}(X)=w_1x_1+w_2x_2^2+w_3x_3^3+b fw,b?(X)=w1?x1?+w2?x22?+w3?x33?+b。
- 優點:可以擬合更復雜的曲線,更好地適應數據。
- 特點:隨著面積的增加,曲線最終會恢復上升,符合房價的預期。
特征縮放的必要性
? 如果房屋大小的范圍是 1 到 1,000 平方英尺,那么 x 2 x_2 x2? 的范圍是 1 到 1,000,000, x 3 x_3 x3? 的范圍是 1 到 1,000,000,000。這些特征的值范圍差異很大,因此在應用梯度下降時,特征縮放變得尤為重要。