機器學習光速入門

機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及機率論、統計學、逼近論、凸分析、算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行爲,以獲取新的知識或技能,從新組織已有的知識結構使之不斷改善自身的性能。
複製代碼

有監督學習

訓練數據由一組訓練實例組成。在監督學習中,每個例子都是一對由一個輸入對象(一般是一個向量)和一個指望的輸出值(也被稱爲監督信號)。有監督學習算法分析訓練數據,併產生一個推斷的功能,它能夠用於映射新的例子。一個最佳的方案將容許該算法正確地在標籤不可見的狀況下肯定類標籤。用已知某種或某些特性的樣本做爲訓練集,以創建一個數學模型(如模式識別中的判別模型,人工神經網絡法中的權重模型等),再用已創建的模型來預測未知樣本,此種方法稱爲有監督學習。是最多見的機器學習方法。
複製代碼

線性迴歸 (梯度降低算法)

線性迴歸是利用數理統計中迴歸分析,來肯定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法,運用十分普遍。其表達形式爲y = w'x+e,e爲偏差服從均值爲0的正態分佈。迴歸分析中,只包括一個自變量和一個因變量,且兩者的關係可用一條直線近似表示,這種迴歸分析稱爲一元線性迴歸分析。若是迴歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關係,則稱爲多元線性迴歸分析。
複製代碼

自學了一陣子的機器學習,也算是小有收穫,先從最簡單的線性迴歸開始走起 :)算法

話說有一天你走在大街上,路過一家房產中介,玻璃窗上標滿了各種型房產的價格,你在感嘆工做十年都買不起一個廁所的同時也在思考,房子的價格是由哪些因素決定的呢 ? (ps: 房子爲何那麼貴呢???) 通常狀況下,房子越大,價格越貴,那麼能夠認爲房子的面積算是影響房子價格的一個因素。假設房子的價格僅由房子的面積房間的數量決定,那麼房子價格的線性表達式即爲:網絡

h_\theta(x) = \theta_0 + \theta_1x_{房子的面積} + \theta_2x_{房間的數量}

\theta 表示各個特徵的權重 ,其中 \theta_0 表示截距項(常數項) , 當特徵數量龐大時,咱們能夠用如下表達式來簡化線性方程:機器學習

h_\theta(x) = \sum_{i=0}^{n}\theta_ix_i = \theta^Tx

其中 n 表明特徵的數量, x_0 = 1 而且右式中 \thetax 爲向量表達式函數

至此 , 咱們的假設方程已經誕生了!那麼問題來了,咱們要如何去選擇 \theta 呢? 爲了解決這個問題,咱們在這裏定義平方損失函數爲:oop

J(\theta) = \frac{1}{2}\sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2

其中 m 表明 訓練樣本的數量x^{(i)}表明第 i訓練樣本的特徵y^{(i)}表明第 i訓練樣本的目標, 不難看出,損失函數的值越小,假設函數值真實目標值越接近性能

這時候,咱們能夠用梯度降低算法來找出可以最小化損失函數\theta學習

先介紹一下什麼是梯度:spa

梯度的本意是一個向量(矢量),表示某一函數在該點處的方向導數沿着該方向取得最大值,即函數在該點處沿着該方向(此梯度的方向)變化最快,變化率最大(爲該梯度的模)。 				---- 百度百科
複製代碼

通俗點說,梯度就是表示函數最大變化方向的向量,對於一元函數來講,梯度就是該函數的導數.net

那麼什麼是梯度降低呢?梯度降低就是說函數在當前點的平面(高維則不是平面)上沿着梯度負方向降低速率最快,那麼這是爲何呢? 請看如下推導過程:3d

梯度降低原理推導
也就是說根據下列式子便可獲得咱們想要的 \theta

\theta_j := \theta_j - \alpha_{學習速率}\frac{\partial}{\partial\theta_j}J(\theta)

那麼上式中的 \frac{\partial}{\partial\theta_j}J(\theta) 怎麼求呢?

\frac{\partial}{\partial\theta_j}J(\theta) = \frac{\partial}{\partial\theta_j}\frac{1}{2}\sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2
= \sum_{i=1}^{m}\frac{1}{2}\frac{\partial}{\partial\theta_j}(h_\theta(x^{(i)}) - y^{(i)})^2
= \sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})\frac{1}{2}\cdot 2 \frac{\partial}{\partial\theta_j} (\sum_{j=0}^{n}\theta_jx^{(i)}_j - y^{(i)})
= \sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}

最後咱們獲得批量梯度降低算法:

Repeat until convergent{

\theta_j := \theta_j - \alpha\sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}

            (for every j) }

當目標函數是凸函數時,梯度降低法的解是全局解。通常狀況下,其解不保證是全局最優解。在這裏, J(\theta) 是凸函數,因此咱們能夠得到全局最優解 (假設學習速率\alpha 足夠小)

根據批量梯度降低算法每次權重迭代都須要對整個訓練集進行運算 (速度慢!),因此當訓練集特別大的時候咱們能夠考慮選擇隨機梯度降低算法:

Loop{             for i=1 to m, {

\theta_j := \theta_j - \alpha(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}

            (for every j)         } } 能夠看出,隨機梯度降低每次權重迭代僅須要對單個訓練樣本進行運算,速度上對比批量梯度降低要提高很多,雖然經過隨機梯度降低不必定能保證 \theta 收斂 (在J(\theta)最小值處波動),可是基本上能夠得到一個接近最小值的近似值 至此,相信你們對梯度降低算法有了初步的認識,咱們下一章見。

有任何問題歡迎隨時討論喲~

相關文章
相關標籤/搜索