機器學習入門1.1——線性迴歸

本文是原創文章,未經博主容許不得轉載
我在csdn也同步發表了此文: https://blog.csdn.net/umbrellalalalala/article/details/80217105
本文受衆:機器學習零基礎者算法

1、由房價預測問題引出多變量線性迴歸

我爲何從線性迴歸開始

理解線性迴歸是我我的認爲的瞭解機器學習爲什麼物的最好的方式之一,線性迴歸不須要很難的數學基礎。機器學習

什麼是特徵

標題中說的是多變量線性迴歸,實際上還有單變量線性迴歸,但後者較爲簡單,咱們稍後會說起函數

圖1

圖1

多變量意味着多特徵,上圖就顯示了房價和不少特徵的對應關係,這些特徵中有房屋面積、臥室數量、樓層數量、房屋年齡。
根據這四個特徵,咱們來定義特徵矩陣:
\[ x^{(1)} = \left[ \begin{array}{c} 2104 \\ 5 \\ 1 \\ 45 \end{array} \right] \]
這個就表明表格中的第一組特徵,其中x\(_j^{(i)}\)表示第i組特徵的第j個元素,好比x\(_2^{(1)}\) = 5學習

預測房價

咱們在圖1中列舉了4個已知的房價以及它們的特徵,那麼咱們如何創建房價和特徵之間的關係呢?
咱們來創建一個參數矩陣:
\[ θ = \left[ \begin{array}{c} θ_0 \\ θ_1 \\ θ_2 \\ θ_3 \\ θ_4 \end{array} \right] \]
其中\(θ_1\)~\(θ_4\)對應房價的四個特徵,\(θ_0\)是額外加上去的參數,對應偏置量(bias),咱們能夠先無論它,在後面的學習中咱們天然會知道這個是幹什麼用的
針對本例,咱們定義假設函數h_θ(x)以下:
\(h_θ(x) = θ_0 + θ_1x_1 + θ_2x_2 + θ_3x_3 + θ_4x_4\)
這個函數所計算的就是咱們的房價預測值,好比說
y_\(^{(i)}\) = \(h_θ(x^{(i)}) = θ_0 + θ_1x_1^{(i)} + θ_2x_2^{(i)} + θ_3x_3^{(i)} + θ_4x_4^{(i)}\) = \(θ^Tx^{(i)}\)
計算的就是依據第i套房子的特徵預測的此套房的價格優化

機器學習的目標

如今咱們能夠講講機器學習的目標了,在上一模塊,咱們提到了房價的預測值y_\(^{(i)}\)的計算方法,
通過計算後,第i組特徵值\(x^{(i)}\)對應一個房價預測值y_\(^{(i)}\)和一個真實房價值\(y^{(i)}\)
而機器學習要作的,就是儘可能使房價預測值和房價真實值之間的差距減小spa


笨笨的A:機器學習如何實現房價預測值和真實值之間的差距減小?
聰明的B反問:那你以爲是什麼決定了房價的預測值?
笨笨的A答:固然是房子的特徵和θ參數矩陣的值
聰明的B再問:那你以爲機器學習能調整哪一項的值?
笨笨的A:我以爲,emmmmm,房子的特徵是必定的,機器學習程序只能改變θ的值吧
聰明的B:你也可貴聰明一回。機器學習正是經過調整θ參數矩陣的值,從而使得預測值不斷地接近真實值的。.net


機器學習的訓練過程:已知一個數據集(好比圖1就是一個數據集),數據集中給定了多組(實際上應當是至關多組)特徵和真實值之間的對應關係。給θ參數矩陣設置初值,經過假設函數\(h_θ(x)\)計算出預測值,經過不斷調整θ參數矩陣的取值,減小預測值和已知的真實值之間的差距。
機器學習的最終成果:一個較好的θ參數矩陣。咱們使用這個θ,對房價未知的房子進行預測值的計算。一個好的機器學習成果會較爲準確地預測出一個和真實值差距很是小的值orm

2、★梯度降低算法

爲何從梯度降低算法開始

梯度降低算法是我我的認爲的最好的瞭解機器學習優化算法的方法,它只須要一點點高等數學基礎,若是你高等數學學得不太好也不要緊,只要你瞭解梯度就能繼續往下看。
(若是你連梯度是什麼也不清楚,只要你瞭解導數,也應該能接受如下的內容,但我要提醒你,數學水平是機器學習的瓶頸之一。但不用擔憂,若是你只是想早日學會寫代碼,你能夠先」強行理解「這幾篇文章的內容。畢竟,不是每一個領域的實踐都是受限於對理論的瞭解上的
注意梯度降低算法只是衆多優化算法中的一種blog

損失函數

顧名思義,預測值和真實值差距越大,損失函數的值越大。
咱們定義損失函數以下:
\(J(θ_0,θ_1...θ_n)\) = \(\frac{1}{2m}\sum_{i=1}^m\) \({(h_θx^{(i)}-y^{(i)})}^2\)
顯然,本文房價預測的例子的損失函數以下:
\(J(θ_0,θ_1,θ_2,θ_3,θ_4)\) = \(\frac{1}{2×4}\sum_{i=1}^4\) \({(h_θx^{(i)}-y^{(i)})}^2\)
因爲本文房價預測的例子中一共給了4組數據,因此上式中m=4,每組數據有4個特徵,因此θ參數矩陣中有5個份量。
損失函數J(θ)是關於θ參數矩陣的函數,咱們的目標是使得J(θ)的值儘量小,因此咱們採用較爲經典的梯度降低算法。
如下咱們以一個簡單的例子告訴你什麼是梯度降低算法get

梯度降低算法原理

若是瞭解梯度可跳過

若是你不知道梯度是什麼,那麼這部分就是爲你準備的,固然你想看完這幾行就理解梯度也不太可能(須要你本身再查些梯度定義來了解)
一個簡單的例子:
f(x) = \(x^2\)
咱們如何求其最小值?
顯然,先求其導數,f\(^{'}(x)\) = 2x,
而後,咱們求出導數爲0的點,即爲此函數的極值點,經計算極值點爲x=0。
本身畫個圖分析,不管是向極值點左側仍是向極值點右側,函數值都是愈來愈大的,因此x=0爲函數的極小值點,因此最小值爲f(0)=0。
咱們注意到在本例中:
若當前點在極小值點左側,那麼最小值點在當前點的右邊;若當前點在極小值點右側,那麼最小值點在當前點的左邊
不難證實:
若當前點的導數值爲負,那麼最小值點在當前點的右邊(x軸的正方向);若當前點的導數值爲正,那麼最小值點在當前點的左邊(x軸的負方向)
不難發現,最小值點的方向老是和導數的「方向」是相反的。
以上例子只是一元函數的狀況,尚不牽扯梯度的概念,


笨笨的A:啥是梯度呀?
聰明的B:這都不知道,你登過山沒?
笨笨的A:登過呀,並且我還發現,朝着最陡峭的方向前進,上升的速度會變快呢
聰明的B:廢話,這是常識。並且你剛說的「最陡峭的方向」和「梯度」是一個意思
笨笨的A:6個字的詞和2個字的詞怎麼能是一個意思呢
聰明的B:真拿你沒辦法。就像沿着最陡峭的方向爬山高度上升最快同樣,若是某點沿着梯度的方向」前進「,那麼此點的函數值也是變大得最快的。
笨笨的A:好吧,我再思考一下。

以後,笨笨的A查閱了一些資料,發現梯度的概念沒有想象中那麼難。


梯度的方向就是函數值增加最快的方向


以上的例子,咱們用導數分析一元函數的最小值,而房價預測的損失函數是一個五元函數,很多機器學習模型的損失函數也爲多元函數
因此咱們須要用梯度來分析其最小值。使得函數取得最小值的方法就是,沿着梯度的負方向移動(想象一下你下山的時候沿着什麼方向降低最快?)

好了,不瞭解梯度的夥計們,我只能幫大家到這了,畢竟這不是數學博客,剩下的靠大家本身瞭解了(若是隻是想早日寫出機器學習程序,能夠接着往下看,理論以後再補也不遲)

梯度降低公式


對於θ矩陣中的每個份量,都分別執行這個公式。
這就是梯度降低算法。
你可能注意到了上式中有一個α,那是學習率,咱們在接下來會介紹

學習率

咱們在上面已經講到,沿着梯度的負方向移動當前點是函數值減小最快的方向。但每次移動多少呢?
想象如下下山的時候,咱們以最陡峭的方式下山,膽小的(好比你家的泰迪犬)可能會「蹭着」往下走,花了大半天時間纔到谷底;膽大的(好比你家的哈士奇)可能跟脫繮的野狗同樣拽着你往下死命衝。


學習率就是更新參數的速度,對於梯度降低算法而言,至關於沿着最陡峭的方向下山時,每一步走多遠。


泰迪犬花了大半天才到谷底,哈士奇可能半小時就拽着你到了谷底。
那麼學習率是否是越大越好呢?固然不是!不過緣由並非哈士奇的速度會把你嚇出心臟病。


學習率過大的後果:可能會越過函數局部最小值而致使沒法收斂
意思就是:下山時若是你一步邁得太大,以致於你能越過谷底直接一步走到了對面的山峯上,那你就會在山谷間來回「振盪」……


因此,學習率不能過大(越過局部最小值),也不能太小(訓練效率低下)

小結

至此,你已經瞭解到了最基本的線性迴歸概念,足夠你寫代碼了。
tensorflow官方的第一個程序是mnist手寫數字識別程序,是一個分類問題,線性迴歸彷佛沒法解決這種問題,因此以後的文章中,我會詳細介紹邏輯迴歸的概念。
但瞭解那個以前,如下幾個問題你能回答嗎:


一、機器學習的目標是什麼?
二、假設函數\(h_θ{x^(i)}\)是幹什麼用的?
三、梯度降低算法又被稱爲「最速降低」,爲何?
四、學習率爲何不能太大?
五、你更喜歡泰迪仍是哈士奇?


Enjoy the symphony of the storm. ——umbrellalalalala

相關文章
相關標籤/搜索