算法代码中的循环矩阵在哪体现_「Machine Learning 学习小结」| 向量在梯度下降算法当中的应用...
寫在前面:
在之前的文章當中提到過,學習梯度下降算法,可能需要一點點線性代數的知識。在本篇文章當中,我們的討論就涉及到了向量。
筆者也曾提到,不妨把向量看成對數據進行批量操作的一種工具,這樣可能對我們理解接下來的知識有一些幫助。
推薦閱讀:吳恩達機器學習:
第五章:正規方程
第六章:矢量
Outline:
- 矢量
- 正規方程
一.矢量
在我們將向量應用到我們的梯度算法之前我們進行一個簡單的回顧。
這是我們的多元函數梯度下降算法。
我們來看一下預測函數的計算在MATLAB/C++中的代碼實現(吳恩達老師的課程中對Octave/MATLAB的簡單應用進行了講解,筆者認為大家可以系統的學習Python和MATLAB,這有助于我們接下來的算法實現)
C++實現:左側是未向量化;右側是向量化MATLAB:未向量化實現MATLAB:向量化實現通過上述代碼的實現,我們可以看出:相對于未向量化的循環結構,我們向量化之后對數據進行批量操作,兩個矩陣的一次乘法運算就可以得到我們的預測值,提高了我們的算法效率。
下面我們展示對梯度下降算法進行矢量化后的結果(這也是一個難點)
算法的表達上述表達式中θ是一個列向量,δ也是一個列向量,我們來看看他們具體是什么。
θ:是一個n+1維向量,分量是θ_0到θ_n
δ:
讀者可以耐下性子自己動筆計算驗證,向量化后的算法跟未向量化的算法是完全等價的,在這里我們對數據進行了批量計算,提高了我們的算法效率。也許對于剛剛接觸線性代數的朋友來數,這是難以理解的,但是不要心急,上述計算所具備的知識就是基本的向量加減運算,向量的乘法運算,耐心計算,搞明白上述算法的內涵。
總結一下,我們得到了向量化的梯度下降算法:
二.正規方程組
我們來回顧一下我們求解多元函數代價函數極小值點的數學原理是什么:各個一階偏導數為零。
除了這樣做,我們還有什么辦法?
我們來看看正規方程組法求解極小值點。
圖片源自:黃海廣|機器學習實際上,當特征變量的數目并不大(小于一萬)的時候,我們通常采用正規方程組的方法,而不是梯度下降算法。
熟悉線性代數的朋友可能知道,有時候可能會存在矩陣不可逆的情況,我們將這樣的矩陣稱之為奇異矩陣;但是我們的pinv函數,是一個求偽逆函數,這意味著即使我們的矩陣不可逆,我們的算法仍然可以正常運行。
我們給出正規方程組算法的證明(看懂它需要了解矩陣求導法則)
圖片源自:黃海廣|機器學習個人筆記圖片源自:黃海廣|機器學習個人筆記到這篇文章結束為止,我們要對線性回歸預測說一聲暫時的告別,希望大家可以結合視頻學習,自己敲敲代碼,實現自己的算法。多練習,多實踐。
第一次截稿日期:2019/5/4
總結
以上是生活随笔為你收集整理的算法代码中的循环矩阵在哪体现_「Machine Learning 学习小结」| 向量在梯度下降算法当中的应用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java tostring格式化日期_j
- 下一篇: db2存储过程 可以使用游标循环嵌套吗_