Machine Learning(機器學習)之一:juejin.im/post/5bcbf0…
矩陣與向量(向量)
矩陣其實就是一個二維陣列。
上面的矩陣有4行3列,所以它是一個4x3的矩陣。
向量其實是一個一列多行的矩陣。
因此向量是矩陣的子集。上面向量是一個4x1的矩陣。矩陣和向量有兩種方法表示:(以1為開始索引、以0為開始索引)
符號與術語
- Aij指矩陣A的第i行和第j列中的元素
- 具有'n'行的向量被稱為'n'維向量
- vi指向量的第i行中的元素
- 通常,我們所有的向量和矩陣都是1索引的。請注意,對於某些程式語言,陣列是0索引的
- 矩陣通常用大寫名稱表示,而向量是小寫
矩陣的加減法和標量乘法
注意:只有相同維度的矩陣才可以相加減。
加法和減法是逐元素的,因此只需新增或減去每個相應的元素:
在標量乘法中,我們簡單地將每個元素乘以標量值:
在標量除法中,我們只需將每個元素除以標量值:
矩陣向量乘法
我們將向量列對映到矩陣的每一行,將每個元素相乘並對結果求和。
結果是一個向量。矩陣的列數必須等於向量的行數。一個m×n矩陣乘以一個NX 1向量中的結果MX 1個向量。
小技巧:
在估算房價的例子中,如果你使用矩陣向量相乘的方法,在計算機中,使用任何語言(不僅僅是Octave,還有C++、Java、Python等高階語言,以及其他語言),都可以很快的實現。 事實證明,像左邊這樣子寫程式碼,不僅可以簡化你的程式碼,還能提高效率。矩陣-矩陣乘法
一個m×n矩陣乘以一個n×o矩陣等於一個m×o矩陣。在上面的例子中,3×2矩陣乘以2×2矩陣得到3×2矩陣。為了乘以兩個矩陣,第一矩陣的列數必須等於第二矩陣的行數。
- tips:可利用矩陣乘法,將大量運算打包到一次矩陣的乘法運算中。
小技巧:與上面提到的小技巧一樣,在房價預測的例子,如果有多個預測函式,可使用矩陣-矩陣相乘的方法,來簡化程式碼和提高效率。如下圖
矩陣乘法屬性
1.矩陣乘法是不可交換的: A∗B≠B∗A
例:A是一個m * n的矩陣,B是一個n * m的矩陣,那麼A * B是一個m * m的矩陣,而B * A是一個n * n的矩陣。即使兩個矩陣的行列都相同,得出的矩陣數值上也是不一樣的。
2.矩陣乘法是關聯的:(A∗B)∗C=A∗(B∗C)
3.單位矩陣:
線上性代數中,n階單位矩陣,是一個n*n的方形矩陣,其主對角線元素為1,其餘元素
為0。單位矩陣以In表示;如果階數可忽略,或可由前後文確定的話,也可簡記為I(或者E)。
複製程式碼
A、B為一個m * n的矩陣,I是一個單位矩陣n * n,則:
逆矩陣
如果A是一個m * m的矩陣(m * m的矩陣稱為方陣),且A有一個逆矩陣,則:A與A的逆矩陣相乘等於單位矩陣。
- 非方陣的矩陣沒有逆矩陣。
- 不是所以方陣都有逆矩陣。如
- 沒有逆的矩陣稱為奇異矩陣或者退化矩陣。
我們可用Octave軟體來計算逆矩陣:
We can compute inverses of matrices in octave with the pinv(A)pinv(A) function and in Matlab with the inv(A)inv(A) function.
矩陣的轉置
矩陣的轉置就像將矩陣沿順時針方向旋轉90 °然後將其反轉。或者可以看作 畫一條45度的斜線 然後你以這條線求映象。
或者是另外一種說法:
We can compute transposition of matrices in matlab with the transpose(A) function or A
多元線性迴歸
具有多個變數的線性迴歸也稱為“多元線性迴歸”
回顧一下前面預測房價的線性迴歸例子,只有一個單一特徵量房屋面積X,我們得出的假設函式是這樣的:
但是如果在有多個特徵量的情況下,比如我們還得考慮房子臥室的數量,樓層多高以及房子的使用年限,這樣就給了我們更多的資訊來預測房子的價格。
我們現在為方程式引入符號,其中我們可以有任意數量的輸入變數。
適應這些多個特徵的假設函式的多變數形式如下:
結合例子,我們將θ0考慮成是房子的基本價格,θ1是每平方米的價格,θ2是每層樓的價格等。x1考慮成是房子的平方米數,x2是樓層數等等。
使用矩陣乘法的定義,我們的多變數假設函式可以簡潔地表示為:
多元線性迴歸的梯度下降
梯度下降方程本身通常是相同的形式; 我們只需要為'n'功能重複它:
重複直到收斂:
另一種表達方式:
重複直到收斂:
下圖是將只有一個變數的梯度下降與具有多個梯度下降進行比較:
實踐中的梯度下降——特徵縮放(Feature Scaling)、均值歸一化(Mean Normalization)
我們可以通過將每個輸入值放在大致相同的範圍內來加速梯度下降。這是因為θ將在小範圍內快速下降並且在大範圍內緩慢下降,因此當變數非常不均勻時,將無效地振盪到最佳值。
防止這種情況的方法是修改輸入變數的範圍,使它們大致相同。理想的情況是:
有兩種方法來縮小範圍,分別是特徵縮放和均值歸一化。
特徵縮放是將輸入值除以輸入變數的範圍(即最大值減去最小值),從而產生僅1的新範圍。
均值歸一化是將(輸入值減去所有輸入變數的平均值)除以輸入變數的範圍,從而產生接近0的新範圍。
μi是特徵(i)的所有值的平均值。
Si是值的範圍或是標準偏差。
請注意,除以範圍或除以標準偏差,會得到不同的結果。
實踐中的梯度下降2——學習速率α(learning rate)
除錯梯度下降。在x軸上繪製具有迭代次數的圖。現在繪製成本函式,J(θ)超過梯度下降的迭代次數。如果J(θ)增加,那麼你可能需要減少α。
自動收斂測試。如果J(θ)在一次迭代中減小小於E,則說明收斂。E是一個很小的值,例如10−3。但是在實踐中很難選擇這個很小的值E。
已經證明,如果學習率α足夠小,則J(θ)將在每次迭代時減小。
總結一下:
如果,α太小:收斂慢。
如果,α太大:可能不會在每次迭代時減少,因此可能不會收斂。
特徵和多項式迴歸
我們可以通過幾種不同的方式改進我們的特徵和假設函式的形式。
我們可以將多個特徵合二為一,或合多為一。例如,我們可以將x1和x2結合成x3。
多項式迴歸
如果不能很好地擬合資料,我們的假設函式不必是線性的(直線)。
我們可以通過使其成為二次,三次或平方根函式(或任何其他形式)來改變我們的假設函式的行為或曲線。
正規方程
梯度下降是一種最小化J的方法(詳情見前面的文章)。而正規方程就是另外一種方法,它是明確地求出最小值θ,而不是利用迭代來算出θ。
在“正規方程”方法中,我們將通過明確地將其導數相對於θj進行最小化並將它們設定為零來最小化J. 這允許我們在沒有迭代的情況下找到最佳θ。正規方程式如下:
以下是梯度下降和正規方程的比較:
梯度下降的優點是:當特徵量n很大時,也能很有效缺點是:需要選擇好學習速率,需要進行多次迭代
正規方程的優點是:無需選擇學習速率,也無需進行多次迭代
缺點是:需要計算矩陣X的裝置乘以矩陣X再求其逆。且當特徵量n很大時,計算會很慢
使用正規方程,計算反演具有複雜性O(n^3)。因此,如果我們有非常多的特徵,那麼正規方程將會很慢。實際上,當n超過10,000時,可能是從正常解決方案轉變為迭代過程的好時機。
正規方程不可逆性
在用Octave求解正規方程時,我們使用'pinv'函式而不是'inv'。'pinv'函式會給你一個θ即使X ^ TX不可逆。
如果 X ^ TX是不可逆的,常見原因可能是:
- 冗餘功能,其中兩個特徵密切相關(即它們與線性相關)
- 功能太多(例如m(訓練集)≤n(特徵量))。在這種情況下,刪除一些功能或使用“正規化”(將在後面的課程中解釋)
上述問題的解決方案包括刪除與另一個線性相關的特徵或當特徵太多時刪除一個或多個特徵。