Machine Learning(機器學習)之二

Machine Learning(機器學習)之一:juejin.im/post/5bcbf0…編程

矩陣與向量(矢量)

矩陣其實就是一個二維數組。數組

上面的矩陣有4行3列,因此它是一個4x3的矩陣。機器學習

向量實際上是一個一列多行的矩陣。編程語言

所以向量是矩陣的子集。上面向量是一個4x1的矩陣。

矩陣和向量有兩種方法表示:(以1爲開始索引、以0爲開始索引)函數

符號與術語post

  • Aij指矩陣A的第i行和第j列中的元素
  • 具備'n'行的向量被稱爲'n'維向量
  • vi指向量的第i行中的元素
  • 一般,咱們全部的向量和矩陣都是1索引的。請注意,對於某些編程語言,數組是0索引的
  • 矩陣一般用大寫名稱表示,而向量是小寫

矩陣的加減法和標量乘法學習

注意:只有相同維度的矩陣才能夠相加減。測試

加法和減法是逐元素的,所以只需添加或減去每一個相應的元素: spa

在標量乘法中,咱們簡單地將每一個元素乘以標量值: 3d

在標量除法中,咱們只需將每一個元素除以標量值:

矩陣向量乘法

咱們將矢量列映射到矩陣的每一行,將每一個元素相乘並對結果求和。

結果是一個向量。矩陣的列數必須等於向量的行數。

一個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(特徵量))。在這種狀況下,刪除一些功能或使用「正規化」(將在後面的課程中解釋)

上述問題的解決方案包括刪除與另外一個線性相關的特徵或當特徵太多時刪除一個或多個特徵。

相關文章
相關標籤/搜索