機器學習入門1 1 線性回歸

2022-06-01 04:39:07 字數 4437 閱讀 6867

我在csdn也同步發表了此文: 理解線性回歸是我個人認為的了解機器學習為何物的最好的方式之一,線性回歸不需要很難的數學基礎。

標題中說的是多變數線性回歸,實際上還有單變數線性回歸,但後者較為簡單,我們稍後會提及

*圖1*

多變數意味著多特徵,上圖就顯示了房價和很多特徵的對應關係,這些特徵中有房屋面積、臥室數量、樓層數量、房屋年齡。

根據這四個特徵,我們來定義特徵矩陣:

\[x^ = \left[ \begin

2104 \\

5 \\

1 \\

45 \end \right]

\]這個就代表**中的第一組特徵,其中x\(_j^\)表示第i組特徵的第j個元素,比如x\(_2^\) = 5

我們在圖1中列舉了4個已知的房價以及它們的特徵,那麼我們如何建立房價和特徵之間的關係呢?

我們來建立乙個引數矩陣:

\[θ = \left[ \begin

θ_0 \\

θ_1 \\

θ_2 \\

θ_3 \\

θ_4 \end \right]

\]其中\(θ_1\)~\(θ_4\)對應房價的四個特徵,\(θ_0\)是額外加上去的引數,對應偏置量(bias),我們可以先不管它,在後面的學習中我們自然會知道這個是幹什麼用的

針對本例,我們定義假設函式h_θ(x)如下:

\(h_θ(x) = θ_0 + θ_1x_1 + θ_2x_2 + θ_3x_3 + θ_4x_4\)

這個函式所計算的就是我們的房價**值,比如說

y_\(^\) = \(h_θ(x^) = θ_0 + θ_1x_1^ + θ_2x_2^ + θ_3x_3^ + θ_4x_4^\) = \(θ^tx^\)

計算的就是依據第i套房子的特徵**的此套房的**

現在我們可以講講機器學習的目標了,在上一模組,我們提到了房價的**值y_\(^\)的計算方法,

經過計算後,第i組特徵值\(x^\)對應乙個房價**值y_\(^\)和乙個真實房價值\(y^\),

而機器學習要做的,就是盡量使房價**值和房價真實值之間的差距減少

笨笨的a:機器學習如何實現房價**值和真實值之間的差距減少?

聰明的b反問:那你覺得是什麼決定了房價的**值?

笨笨的a答:當然是房子的特徵和θ引數矩陣的值

聰明的b再問:那你覺得機器學習能調整哪一項的值?

笨笨的a:我覺得,emmmmm,房子的特徵是一定的,機器學習程式只能改變θ的值吧

聰明的b:你也難得聰明一回。機器學習正是通過調整θ引數矩陣的值,從而使得**值不斷地接近真實值的。

機器學習的訓練過程:已知乙個資料集(比如圖1就是乙個資料集),資料集中給定了多組(實際上應當是相當多組)特徵和真實值之間的對應關係。給θ引數矩陣設定初值,通過假設函式\(h_θ(x)\)計算出**值,通過不斷調整θ引數矩陣的取值,減少**值和已知的真實值之間的差距。

機器學習的最終成果:乙個較好的θ引數矩陣。我們使用這個θ,對房價未知的房子進行**值的計算。乙個好的機器學習成果會較為準確地**出乙個和真實值差距非常小的值

梯度下降演算法是我個人認為的最好的了解機器學習優化演算法的方法,它只需要一點點高等數學基礎,如果你高等數學學得不太好也沒關係,只要你了解梯度就能繼續往下看。

(如果你連梯度是什麼也不清楚,只要你了解導數,也應該能接受以下的內容,但我要提醒你,數學水平是機器學習的瓶頸之一。但不用擔心,如果你只是想早日學會寫**,你可以先」強行理解「這幾篇文章的內容。畢竟,不是每個領域的實踐都是受限於對理論的了解上的

注意梯度下降演算法只是眾多優化演算法中的一種

顧名思義,**值和真實值差距越大,損失函式的值越大。

我們定義損失函式如下:

\(j(θ_0,θ_1...θ_n)\) = \(\frac\sum_^m\)

\(-y^)}^2\)

顯然,本文房價**的例子的損失函式如下:

\(j(θ_0,θ_1,θ_2,θ_3,θ_4)\) = \(\frac\sum_^4\)

\(-y^)}^2\)

由於本文房價**的例子中一共給了4組資料,所以上式中m=4,每組資料有4個特徵,所以θ引數矩陣中有5個分量。

損失函式j(θ)是關於θ引數矩陣的函式,我們的目標是使得j(θ)的值盡可能小,所以我們採用較為經典的梯度下降演算法。

以下我們以乙個簡單的例子告訴你什麼是梯度下降演算法

如果你不知道梯度是什麼,那麼這部分就是為你準備的,當然你想看完這幾行就理解梯度也不太可能(需要你自己再查些梯度定義來了解)

乙個簡單的例子:

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手寫數字識別程式,是乙個分類問題,線性回歸似乎無法解決這種問題,所以之後的文章中,我會詳細介紹邏輯回歸的概念。

但了解那個之前,以下幾個問題你能回答嗎:

1、機器學習的目標是什麼?

2、假設函式\(h_θ\)是幹什麼用的?

3、梯度下降演算法又被稱為「最速下降」,為什麼?

4、學習率為什麼不能太大?

5、你更喜歡泰迪還是哈士奇?

enjoy the symphony of the storm. ——umbrellalalalala

機器學習 機器學習入門04 線性回歸

總的來說,分類 classification 和回歸 regression 是機器學習中的兩大類問題。它們其實都是在做同一件事情 將輸入轉化為輸出。區別在於,分類得到的輸出是離散值,例如之前的癌症問題中的良性 0 和惡性 1 而回歸的得到的輸出是連續值。本篇文章,將開始討論回歸問題。我們從最簡單的線...

機器學習入門(一) 線性回歸

機器學習入門 一 線性回歸 基本要素 1 模型 例如針對房價建立簡單模型,只考慮 與時間的關係 price w area area w age age b 2 資料集 找到一組真實資料並稱之為訓練集,我們希望通過訓練集找到與真實情況最接近的上訴模型的未知引數。一條資料稱之為樣本,其 為乙個標籤。被 ...

機器學習簡單入門筆記 線性回歸

試圖通過屬性的線性組合來進行 的函式 結果和真實結果之間存在誤差 為了找到擬合效果最好的函式,使誤差降到最低,需要引入誤差函式來判定舞茶道大小 在這裡插入描述 t 70 所以,尋找目標函式就是尋找一組權值w使得損失函式最小 方法一 正規方程 方法二 梯度下降 我們以單變數中的w0,w1為例子理解找到...