手把手帶你入門機器學習1 線性回歸

2021-10-17 19:07:39 字數 3496 閱讀 7954

機器學習已經越來越普及,漸漸的被應用到各行各業中。作為乙個程式設計師,如何學習機器學習呢?在本系列文章中,我根據我學習的經驗帶大家了解一下機器學習的基礎知識。

我原本是一名嵌入式開發工程師,2023年開始自學機器學習的知識,目前主要從事深度學習cv方向的工作。最初剛接觸機器學習,我也是苦於如何入門。在搜尋了很多資料後,找到了coursera上的machine learning課程,通過學習了完整的課程,最後掌握了機器學習的基礎知識,為以後學習深度學習打下了基礎。所以本系列文章,我將以machine learning課程和練習為基礎,帶大家了解什麼是機器學習。今天我們先來了解一下線性回歸。本篇文章是希望大家都能看懂,可以對線性回歸有乙個初步的了解,所以這裡不會深入的做一些原理的推導。

什麼是線性回歸呢?我們以房價的資料作為例子,來描述什麼是線性回歸。先看以下**中的資料。

面積(㎡)

**(萬元)

210460

141232

153315

85178……

觀察上面的資料,同時結合日常生活的中的常識,我們可以得出乙個結論,面積與**之間存在的某種關係,但是目前這種關係是什麼我們還不能確定,但我們可以先用公式表示它們的關係:

h =θ

0+xθ

1h=θ_0 + xθ_1

h=θ0​+

xθ1​

(1)其中h為**,x為面積。那麼如果我們確定了θ

0θ_0

θ0​和θ

1θ_1

θ1​的值,就可以了確定了面積和**之間的關係了。h和x都是**中的資料是已知的,可以使用大量的資料來確定這個兩個值,這樣面積和**之間就可以使用乙個線性函式表示,那麼確定這兩個值的過程就稱為線性回歸。

我們也知道房價不僅僅和面積有關,還可能跟其他很多因素有關。觀察下表,表中除了面積之外,又增加了幾個其他特徵。

面積(㎡)

臥室數量

樓層房齡

**(萬元)

2105145

46014132

40232

1533230

3158521

36178

這時我們的公式1更新為以下公式:

h =θ

0+x1

θ1+x

2θ2+

……+x

nθnh=θ_0+x_1θ_1+x_2θ_2+ ……+x_nθ_n

h=θ0​+

x1​θ

1​+x

2​θ2

​+……

+xn​

θn​ (2)

如果θ

0θ_0

θ0​到θ

nθ_n

θn​的值初始化為隨機值,那麼通過公式2計算出的房價h與真實值一定會存在誤差。如果調整引數θ

0θ_0

θ0​到θ

nθ_n

θn​的值使h的值盡量解決真實的**,那麼是不是能確定面積和**之間的關係,從而可以根據面積來**房屋的大致**。

既然使用公式2計算出房價h與真實值存在一定的誤差,那麼我們首先需要用乙個公式來描述這個誤差,這個公式就叫做損失函式,用j來表示。定義如下:

j =1

2m∑i

=1m(

h(x(

i))−

y(i)

)2j=\frac \sum_^m(h(x^)-y^)^2

j=2m1​

∑i=1

m​(h

(x(i

))−y

(i))

2 (3)

在上面公式3中,θ

θθ是需要求的未知變數,x與y是上面**中的已知量,那麼我們如何計算θ

θθ呢,這裡我們就會用到機器學習裡常用的一種方法梯度下降法。

梯度下降通過不斷的迭代去更新θ

\theta

θ的值來降低損失函式的值,公式如下:

reapeatj(\theta_0,\theta_1,...,\theta_n)

θj​:=θ

j​−α

∂θj​

∂​j(

θ0​,

θ1​,

...,

θn​)

(4)公式4中α

\alpha

α代表著學習率,一般是0.1、0.01等這樣小於1的實數,是需要根據實際情況進行調整的。

θ

j\theta_j

θj​代表著本次迭代需要更新的引數。∂∂θ

jj(θ

0,θ1

,...

,θn)

\fracj(\theta_0,\theta_1,...,\theta_n)

∂θj​∂​

j(θ0

​,θ1

​,..

.,θn

​)這部分是j對θ

j\theta_j

θj​的偏導,求出來的值是當前θ

j\theta_j

θj​的梯度值,是乙個向量,所以是有方向的。它的方向就是變化率最快的方向,也是該方向的最大值。通俗點說就是求當前θ

j\theta_j

θj​值對誤差做出的貢獻。所以可以通過迭代的方式用θ

j\theta_j

θj​減去學習率乘以θ

j\theta_j

θj​對誤差做出的貢獻更新引數θ

j\theta_j

θj​的值。更新後的θ

j\theta_j

θj​計算出的損失值會比原來小。通過若干次迭代,損失函式就會收斂到乙個比較小的值,就可以停止迭代,這個過程也可稱為訓練。注意,這裡只是簡述了一下梯度下降的過程,也就是訓練過程,在實際中還需考慮很多問題,比如區域性最優解,過擬合和欠擬合等,不過這些問題都會有解決辦法,後面的文章會講到。

j =θ

2j=\theta^2

j=θ2

(5)其實很容易可以看出這個是乙個開口向上的拋物線,而且它只有乙個最低點,也就是當θ

\theta

θ為0時,j=0

可以看到在第四次迭代的時候我們的損失函式j

jj的值就已經很小了,如果繼續迭代下去j

jj的值會趨近於0。這時我們可以停止訓練,得到了乙個合適的引數θ

=0.0016

\theta=0.0016

θ=0.00

16,梯度下降的過程大致如下圖。

我們從資料入手,簡單描述了一下什麼是線性回歸。學習了一元線性回歸的公式和多元線性回歸公式。同時,利用線性回歸的公式構造出乙個損失函式的公式。損失函式是在訓練過程中需要用到的,訓練的前提是需要有大量的資料,這裡以房價資料為例,我們可以通過梯度下降來計算θ

\theta

θ引數,來描述房屋特徵值與房價直接的關係,這樣就完成了線性回歸的過程。

Django 手把手帶你入門

一 開發環境 python 2.7 pycharm 4 二 django的安裝 開啟pycharm 新建專案 看圖操作 自動安裝django環境 三 建立第乙個 1.開啟views.py 匯入 編寫乙個index函式 先寫成硬編碼的形式 2.開啟urls.py 匯入上圖編寫的函式 在urlpatte...

手把手帶你學習C 的運算子

目錄 作用 用於執行 的運算 運算子型別 作用算術運算子 用於處理四則運算 賦值運算子 用於將表示式的值賦給變數 比較運算子 用於表示式的比較,並返回乙個真值或假值 邏輯運算子 用於根據表示式的值返回真值或假值 運算子術語 示例結果 正號 33 負號 3 3 加 10 515 減10 55 乘10 ...

手把手帶你入門numpy,從此資料處理不再慌 四

今天是numpy專題的第四篇文章,numpy中的陣列重塑與三元表示式。首先我們來看陣列重塑,所謂的重塑本質上就是改變陣列的shape。在保證陣列當中所有元素不變的前提下,變更陣列形狀的操作。比如常用的操作主要有兩個,乙個是轉置,另外乙個是reshape。轉置操作很簡單,它對應線性代數當中的轉置矩陣這...