注:其實自認為還是非常喜歡數學的,但是對於復雜的公式還是有種恐懼感,就像最開始學英語時,對英語的感覺一樣。但是數學與英語不同的地方在於,你可以盡情的刨根問底,從最基礎的知識開始了解,直到最終把一個符號或者公式的含義弄明白。在機器學習的過程中,也會碰到各種各樣的符號,尤其是遇到多參數,多樣本的情況時,更是讓人眼花繚亂。最近學習完coursera上吳恩達老師的機器學習前兩周的課程,有種豁然開朗的感覺。在此做一個小結。
1. 一些基本概念
圖1. 機器學習的基本過程
圖1展示了機器學習的基本過程。對於學過高中數學的人來說,解方程是我們再熟悉不過的事情了。例如一個二元一次方程組,其解(如果存在的話)就是平面上兩條直線的交點,此時方程以及參數(方程的系數)都是確定的。我們通常意義上的算法相當於一個定義好的函數(圖1中的$h$),應用該算法的過程就是帶入不同的自變量求函數值的過程。然而在機器學習算法中,最大的不同在於沒有一個"定義好的函數",而是需要通過收集到的數據訓練出一個函數(圖1中從Training Set到$h$的過程),本質上是對訓練集中數據的一種概括和總結。例如只有兩個參數的線性回歸就是在二維平面上找一條適合描述訓練集中樣本點變化規律的直線的過程。
傳統的確定性算法與機器學習算法的區別可以用下圖表示:
圖2:傳統編程與機器學習之間的差別,source
如果將一個程序大致分為三個部分:輸入、輸出和算法,那么傳統編程中已知的是輸入和算法,需要求輸出;機器學習中則是已知輸入和輸出,需要通過訓練(學習)來得到有泛化能力的算法。
開普勒通過分析第谷留下的大約20年的天文觀測數據,建立的開普勒三大定律;孟德爾通過分析他自己在豌豆實驗中獲得的不同性狀數據,建立了孟德爾遺傳定律。這兩位科學家所做的事情,其本質也是對實驗數據的概括、總結,最終提煉出了具有高度概括和普適價值的基本定律。這樣想想,機器學習算法確實有了幾分智能的味道。
- 訓練集(Training Set):為了研究一個變量(x)與另一個變量(y)的關系,而通過觀察、測量等方式獲得的一組數據。這組數據中收集了x和與之對應的y——一個數據對(x, y)。例如我們要研究房屋面積(x)和售價(y)之間的關系,每觀察一套已出售的房屋,就得到一個數據對(x, y)。觀察10套已出售的房屋,就可以得到10個這樣的數據對,這時就得到了一個用來研究房屋面積和售價之間的關系的訓練集了(雖然樣本量比較小)。這些數據集一般采集自現實環境中,屬於現象(我們的目的是透過現象看本質)。
- 樣本(Sample):訓練集中采集數據的對象就是一個樣本,例如一套已出售的房屋。
- 模型(Model):由於某些歷史原因,機器學習中的模型也被叫做假設(hypothesis, h),這個h就是我們透過現象想要尋找的"本質"。建立模型的過程通常就是確定一個函數表達式的過程(是否還記得寒假作業中的這類題目:觀察一組數,寫出下一個數是什么?)。最常見的模型是回歸模型(線性回歸或邏輯回歸等),例如我們假設房屋面積與售價之間的關系是一個線性回歸模型,則可以寫成:$$h(\theta) = \theta_0 + \theta_1 x \qquad \ldots (1)$$ 其中h是函數(可能更習慣叫做y,但在機器學習中y一般表示已知的函數值,即后面的因變量;這里的h相當於預測得到的y),θ是函數的參數(也可以看做是每個自變量的權重,權重越大,對y的影響也越大),x是自變量。
- 訓練模型(Training Model):選定模型(選擇合適的模型需要豐富的經驗)后,函數的一般形式就確定了。通常所說的訓練模型是指利用訓練集求解函數的待定參數的過程。上面的(1)式與直線方程的一般形式y = ax + b是相同的,這里不過換了一種寫法。此時我們知道模型是一條直線,為了確定這條直線的確定方程,我們需要求出兩個未知的參數——θ0(截距)和θ1(斜率),如果訓練集中只有兩個樣本,那就只是求一個二元二次方程組就解決問題了。
- 特征(Feature):特征就是在一個模型中,所有想研究的自變量(x)的集合。例如我們在研究房屋售價的模型中,所有可能影響售價的因素都可以看成是一個特征,房屋面積、所在城市、房間個數等。在建立模型的過程中,特征的選擇是一個大學問,甚至有專門的分支來研究特征選擇或特征表示。
2. 訓練集的表示
上面提到過,訓練集就是許多的(x, y)數據對的集合。其中x是因變量,y是自變量。通常認為x的變化引起了y的改變,即x的值決定了y的值。在預測房屋價格的模型中,假如我們能找到所有影響房屋價格的因素(所有的x),並且確定各個因素准確的參數(θ),那么理論上可以准確的預測出任何房屋的價格(y)。
2.1 單因素訓練集中自變量的表示方法
- 單因素相當於方程中只有一個自變量,這個自變量可以用一個小寫字母x來表示;
- 如果收集了多個樣本,則通過在右上角添加帶括號的角標的方式區分,表示為x(1), x(2), ..., x(m),其中m表示樣本的個數;
- 矩陣的表示:向量一般用小寫字母表示,矩陣用大寫字母表示。所有單因素樣本中的x可以用一個m x 1(m行1列)的列向量x(小寫字母)(只有一列的矩陣就是一個列向量)來表示:$$x = \begin{pmatrix} x^{(1)} \\ x^{(2)} \\ \vdots \\ x^{(m)} \end{pmatrix}$$
2.2 多因素訓練集中自變量的表示方法
- 多因素相當於方程中有多個自變量(多個feature),不同的自變量之間使用右下角添加不帶括號的角標來區分,表示為x1, x2, ..., xn,其中n表示feature的個數;
- 當存在多個樣本時,可以用一個m x n(m行n列)的矩陣X(大寫字母)來表示:$$X = \begin{bmatrix} x_{1}^{(1)} & x_{2}^{(1)} & \ldots & x_{n}^{(1)}\\ x_{1}^{(2)} & x_{2}^{(2)} & \ldots & x_{n}^{(2)}\\ \vdots & \vdots & \ddots & \vdots \\ x_{1}^{(m)} & x_{2}^{(m)} & \ldots & x_{n}^{(m)} \end{bmatrix}$$
2.3 訓練集中因變量的表示方法
無論是單因素還是多因素,每一個樣本中都只包含一個因變量(y),因此只需要區分不同樣本間的y,y(1), y(2), ..., y(m),其中m表示樣本的個數;
用列向量y表示為:$$y = \begin{pmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{pmatrix}$$
3. 參數的表示
也許是某種約定,在機器學習中,一般都是用θ來表示參數,參數是自變量X的參數(也可以看做是每個自變量的權重,權重越大的自變量對y的影響也越大),理論上,有多少個自變量就有多少個參數,但就像在直線方程y = ax + b中表現出來的那樣,除了x的參數a,還有一個常數項b。因此參數一般比自變量的個數多一個,當有n個自變量的時候,會有n+1個參數。
最終的模型是由一個特定的方程來表示的,方程中的未知參數,是在訓練模型的過程中確定的。這些參數對於所有的樣本都是相同的,例如第一個樣本x(1)中的第一個自變量x1的參數與任意其他樣本x(i)中第一個自變量x1的參數是相同的。因此不用區分樣本間的參數,只用區分不同自變量之間的參數,可以使用一個n+1維的列向量θ來表示所有的參數:
$$\theta = \begin{pmatrix} \theta_0 \\ \theta_1 \\ \vdots \\ \theta_n \end{pmatrix}$$
4. 模型的表示
這里說的模型就是一個特定的函數,上面已經提過,模型一般使用h來表示。下面用線性回歸模型來舉例說明模型的符號表示。
4.1 直接表示
直接表示方法是我們在沒有學習線性代數之前的代數表示方式。
- 單變量線性回歸方程:$$h_\theta (x) = \theta_0 + \theta_1 x$$
- 多變量線性回歸方程:$$h_\theta (x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \ldots + \theta_n x_n$$
4.2 矩陣表示
學習了線性代數后,可以使用矩陣來表示上面的方程,不僅表示起來方便,直接進行矩陣運算效率也更高效。在這里需要特別說明的一點是,為了配合矩陣的表示,在上面的方程中添加了x0,並且x0=1,且將θ0作為x0的參數。
- 單變量/多變量線性回歸方程:$$h_\theta (x) = X \theta = \begin{bmatrix} x_{0}^{(1)} & x_{1}^{(1)} & \ldots & x_{n}^{(1)}\\ x_{0}^{(2)} & x_{1}^{(2)} & \ldots & x_{n}^{(2)}\\ \vdots & \vdots & \ddots & \vdots \\ x_{0}^{(m)} & x_{1}^{(m)} & \ldots & x_{n}^{(m)} \end{bmatrix} \begin{bmatrix} \theta_0 \\ \theta_1 \\ \vdots \\ \theta_n \end{bmatrix}$$,此時X是一個m x (n+1)的矩陣,每一行表示一個樣本,每一列表示一個特征,結果是一個m x 1的列向量,其中m表示樣本的個數,n表示變量的個數(X中的每一列具有同樣的參數,一列表示在不同的樣本中同一個特征的取值);
- 當只有一個樣本多個變量時,還可以表示為:$$h_\theta (x) = \theta^T x = \begin{bmatrix} \theta_0 & \theta_1 & \ldots & \theta_n \end{bmatrix} \begin{bmatrix} x_0 \\ x_1 \\ \vdots \\ x_n \end{bmatrix}$$,此時x是一個(n+1)維的列向量,每一行表示一個變量的值。
Reference
https://www.coursera.org/learn/machine-learning
http://blog.sciencenet.cn/blog-100379-1037923.html
https://www.sumologic.com/blog/devops/machine-learning-deep-learning/