机器学习
多元線性回歸(Linear Regression with Multiple Variables)
多元(Multiple Features)
多元線性回歸又稱“multivariate linear regression”。
現(xiàn)在介紹一種可以表示任意輸入變量的符號:
(x_j^{(i)} = j 在 i^{th} 的訓練樣本的值。)
(x^{(i)} = 所有 i^{th} 訓練樣本的值組成的列向量。 )
(m = 訓練樣本的數(shù)目 )
(n = |x^{(i)}| 特性的數(shù)量。)
現(xiàn)在定義假設(shè)函數(shù)的多變量形式,包含以下各種參數(shù):
(h_ heta (x) = heta_0 + heta_1 x_1 + heta_2 x_2 + heta_3 x_3 + cdots + heta_n x_n)
為了便于理解,我們可以將 ( heta_0) 當作房子的基本價格,( heta_1) 當作每平方米的價格,( heta_2) 當作每層的價格等等。則 (x_1) 代表房子的平方米數(shù),(x_2) 代表房子的層數(shù)等等。
使用矩陣乘法定義,我們的多元假設(shè)函數(shù)可以表示為:
[egin{align*}
h_ heta(x) =
egin{bmatrix}
heta_0 hspace{2em} heta_1 hspace{2em} ... hspace{2em} heta_n
end{bmatrix}
egin{bmatrix}
x_0
ewline
x_1
ewline
vdots
ewline
x_n
end{bmatrix}
= heta^T x
end{align*}
]
這是一個向量化的假設(shè)函數(shù)的一個訓練組。
訓練樣本逐行儲存在 (X) 中, 例如:
[egin{align*}
X =
egin{bmatrix}
x^{(1)}_0 & x^{(1)}_1
ewline
x^{(2)}_0 & x^{(2)}_1
ewline
x^{(3)}_0 & x^{(3)}_1
end{bmatrix}
&
, heta =
egin{bmatrix}
heta_0
ewline
heta_1
ewline
end{bmatrix}
end{align*}
]
你可以將假設(shè)作為一個 ((m imes 1)) 的列向量計算:
(h_ heta(X) = X heta)
成本函數(shù)(Cost function)
(對于向量 heta ( mathbb{R}^{n+1} 或者 mathbb{R}^{(n+1) imes 1} )),成本函數(shù)為:
(J( heta) = dfrac {1}{2m} displaystyle sum_{i=1}^m left (h_ heta (x^{(i)}) - y^{(i)} ight)^2)
使用向量計算:
(J( heta) = frac{1}{2m} (X heta - vec{y})^{T} (X heta - vec{y}))
(其中 vec{y} 表示所有 y 的值。)
多元梯度下降(Gradient Desent for Mulitple Variables)
梯度下降等式和之前的形式類似,我們只需要重復計算'n'個即可:
[egin{align*}
& ext{repeat until convergence:} ; lbrace
ewline
; & heta_0 := heta_0 - alpha frac{1}{m} sumlimits_{i=1}^{m} (h_ heta(x^{(i)}) - y^{(i)}) cdot x_0^{(i)}
ewline
; & heta_1 := heta_1 - alpha frac{1}{m} sumlimits_{i=1}^{m} (h_ heta(x^{(i)}) - y^{(i)}) cdot x_1^{(i)}
ewline
; & heta_2 := heta_2 - alpha frac{1}{m} sumlimits_{i=1}^{m} (h_ heta(x^{(i)}) - y^{(i)}) cdot x_2^{(i)}
ewline
& cdots
ewline brace
end{align*}
]
也可以這么表示:
[egin{align*}
& ext{repeat until convergence:} ; lbrace
ewline
; & heta_j := heta_j - alpha frac{1}{m} sumlimits_{i=1}^{m} (h_ heta(x^{(i)}) - y^{(i)}) cdot x_j^{(i)} ; & ext{for j := 0..n}
ewline brace
end{align*}
]
矩陣符號(Matrix Notation)
梯度下降規(guī)則可以表示為:
[large
heta := heta - alpha
abla J( heta)
]
其中 (
abla J( heta)) 是列向量的表示形式:
[egin{align*}
; &frac{partial J( heta)}{partial heta_j} &=& frac{1}{m} sumlimits_{i=1}^{m} left(h_ heta(x^{(i)}) - y^{(i)} ight) cdot x_j^{(i)}
ewline
; & &=& frac{1}{m} sumlimits_{i=1}^{m} x_j^{(i)} cdot left(h_ heta(x^{(i)}) - y^{(i)} ight)
end{align*}
]
第 j 個梯度元素可以由兩部分和構(gòu)成:
[egin{align*}
; &frac{partial J( heta)}{partial heta_j} &=& frac{1}{m} sumlimits_{i=1}^{m} left(h_ heta(x^{(i)}) - y^{(i)} ight) cdot x_j^{(i)}
ewline
; & &=& frac{1}{m} sumlimits_{i=1}^{m} x_j^{(i)} cdot left(h_ heta(x^{(i)}) - y^{(i)} ight)
end{align*}
]
有時,其中的兩部分可以由兩個向量表示。
(其中的,x_j^{(i)} ,for i = 1,…,m 代表第 j列 m 個元素,向量 vec{x_j} 取自訓練組矩陣 X 。)
另一部分 (left(h_ heta(x^{(i)}) - y^{(i)} ight)是預(yù)測值 h_ heta(x^{(i)}) 和 真實值 y^{(i)} 的偏差量的向量。重寫 frac{partial J( heta)}{partial heta_j} ,我們得到:)
[egin{align*}
; &frac{partial J( heta)}{partial heta_j} &=& frac1m vec{x_j}^{T} (X heta - vec{y})
ewline
ewline
ewline
; &
abla J( heta) & = & frac 1m X^{T} (X heta - vec{y})
ewline
end{align*}
]
最后,梯度下降規(guī)則的矩陣形式(向量化)表示為:
( heta := heta - frac{alpha}{m} X^{T} (X heta - vec{y}))
數(shù)值一般化(Feature Normalization)
我們可以通過將每個輸入值粗略的控制到一個范圍加速梯度下降。其中的原理是因為 ( heta) 在小的范圍內(nèi)下降速度很快,大的范圍內(nèi)下降速度很慢,因此當數(shù)據(jù)不均勻的時候可能會一直擺動不會降到最佳點。
防止這種情況發(fā)生的方法就是修正輸入變量的范圍讓他們粗略的相同:
(-1 le x_i le 1)
或
(-0.5 le x_i le 0.5)
這些沒有額外的需求,我們僅僅嘗試加速計算。目標是讓所有輸入變量粗略的限制在這個范圍。
有兩種方法可以幫助我們:數(shù)值縮放(feature scaling)和均一化(mean normalization)。數(shù)值縮放通過輸入變量的范圍分割輸入值,結(jié)果是產(chǎn)生一個新的范圍為1的值。均一化則是減去輸入變量的平均值,得到一個新的為0的平均值。可以通過一下公式使用這兩種方法調(diào)整你的輸入值:
(x_i := dfrac{x_i - mu_i}{s_i})
其中 (mu_i) 是所有值的平均值,(s_i) 是范圍(最大值-最小值),或者 (s_i) 也可以是標準差(standard deviation)。
特性和多項式回歸(Features and Polynomial Regression)
我們可以通過兩種不同的方式改進假設(shè)函數(shù)的特性和形式。
我們可以將多個特性組合成一個。例如,我們可以將 (x_1 和 x_2 通過 x_1 cdot x_2 組合成一個新特性 x_3。)
多項式回歸(Polynomial Regression)
我們的假設(shè)函數(shù)不必是線性的(一條直線)如果無法與數(shù)據(jù)匹配的很好。
我們可以改變行為或通過平方,立方或者平方根函數(shù)或者其他形式繪成曲線。
例如,如果我們的假設(shè)函數(shù)為(h_ heta(x) = heta_0 + heta_1 x_1) ,我們可以根據(jù) (x_1) 創(chuàng)建一個新特性,得到二次函數(shù) (h_ heta(x) = heta_0 + heta_1 x_1 + heta_2 x_1^2) 或者三次函數(shù) (h_ heta(x) = heta_0 + heta_1 x_1 + heta_2 x_1^2 + heta_3 x_1^3)
在三次函數(shù)中,我們創(chuàng)建了新特性 (x_2 和 x_3 ,其中 x_2=x_1^2,x_3 = x_1^3)
平方根函數(shù):
(h_ heta(x) = heta_0 + heta_1 x_1 + heta_2 sqrt{x_1})
一般等式(Normal Equation)
一般等式是一種不需要迭代就可以尋找最適值的方法。
( heta = (X^T X){-1}XT y)
使用一般等式時不需要數(shù)值縮放(feature scaling)。
梯度下降和一般等式的對比:
使用一般等式計算 (mathcal{O}(n^3)) 逆矩陣會很復雜。所以如果我們由很多數(shù)量的特性時,一般等式會很慢。實踐證明,n 小于 10,000 時用一般等式。
一般等式不可逆(Normal Equation Noninvertibility)
當使用一般等式時使用 'pinv' 函數(shù),不使用 'inv' 。
總結(jié)
- 上一篇: 20175213 2018-2019-2
- 下一篇: 数据库容量和内存测算的一些想法