機器學習已經越來越普及,漸漸的被應用到各行各業中。作為乙個程式設計師,如何學習機器學習呢?在本系列文章中,我根據我學習的經驗帶大家了解一下機器學習的基礎知識。
我原本是一名嵌入式開發工程師,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。轉置操作很簡單,它對應線性代數當中的轉置矩陣這...