有兩種定義。Arthur Samuel如此描述機器學習:一個領域的研究,旨在研究,在不進行編程的狀況下,讓計算機具備學習能力。算法
Tom Mitchell給出了一個更爲現代的定義:一個計算機程序從經驗E以及評判標準P中學習如何完成任務T,隨着E的累積,P獲得提高。編程
例如,下棋遊戲中:機器學習
整體來講,任何機器學習問題能夠分爲監督學習(supervised learning)
和無監督學習(unsupervised learning)
函數
在監督學習中,給定一個數據集,而且咱們已經知道輸出看起來是什麼樣子的,知道數據和輸出之間是存在聯繫的。學習
監督學習可分爲「迴歸(regression)」
和「分類(classification)」
兩種類型的問題。在迴歸問題中,咱們試圖預測連續的結果,換句話說,咱們試圖將輸入變量映射到某種連續函數。在分類問題中,卻試圖預測離散結果,換句話說,咱們試圖將輸入變量映射進離散的類別中。spa
例子1:3d
給定一組關於房子大小的數據,預估出價格。從大小推算價格的函數的輸出是連續的,因此這是個迴歸問題。code
若是換一種問法:「預估房價與指訂價格的大小關係」。這個問題就轉化爲分類問題了,由於咱們試圖將房價分爲兩種離散的類別中(大於或小於)。blog
例子2:遊戲
a) 迴歸:給定一張男性或女性的照片,推算年齡。
b) 分類:給定一張男性或女性的照片,估計他/她是高中生仍是大學生。另外一個分類的例子:銀行須要根據跟人信用歷史,判斷是否要給其貸款。
無監督學習是指在幾乎對結果一無所知的狀況下,趨近結果。在對輸入數據的變量缺乏必要的認識的狀況下,從中獲取一些結構。經過將數據中變量的關聯,將數據進行聚類,從而獲取這些結構。無監督學習對於預測結果是沒有反饋的。
例如:
聚類:從1,000,000個不一樣的基因中,找到某種方式,可以自動將具備某種類似性或關聯的基因進行分組,這些變量多是壽命,位置,功能等。
非聚類:「雞尾酒算法」,可否從嘈雜環境中識別不一樣的聲音。(例如,在雞尾酒會上,從混合的聲音中區分人聲或音樂聲)
這裏以監督學習中的房子大小預測房價問題爲例。使用$ x^{(i)} $指代輸入變量(這裏是房屋面積),$ y^{(i)} $指代輸出或者咱們須要預測的結果(這裏是房屋價格)。元組($ x^{(i)}, y^{(i)} $)是訓練用例數據集,m
個訓練用例$ (x^{(i)},y^{(i)});i=1,...,m $稱爲訓練數據集。注意,上標(i)
,並無冪運算的功能。咱們也會使用X
,表徵輸入數據集,Y
表徵輸出數據集。
稍微正規的解釋一下監督學習是什麼。監督學習的目標是,給定一個訓練數據集,嘗試學習一個函數h: X → Y
,使得h(x)
成爲好的預測y的函數。因爲歷史緣由,這個h函數稱爲假設函數(hypothesis)
,下圖說明了這個流程:
若是咱們要預測的目標值是一個連續值時,例如房價預測問題,咱們稱這種機器學習問題爲迴歸(regression)問題
;若是y值只在少數的離散值中取值(例如,假設給定面積,預測這是個house仍是apartment),咱們稱爲分類(classification)問題
。
咱們可使用代價函數(cost function)
來衡量假設函數(hypothesis function)
的精準性。代價函數實際上計算的就是每個經由假設函數計算而來的y,與實際的y的差值的平均值。當這個差值最小時,假設函數最優。
若是hypothesis function
以下:
$$ h(x)=θ_0+θ_1x $$
這是一個線性函數,對於房價預測問題,咱們的最終目的是經過算法,獲得一組最優的$ (θ_0,θ_1) $使得對全部的訓練集合X(房屋面積)
,經過h(x)
計算獲得的Y(房屋價格)
與實際的Y
誤差最小,即擬合度
最高。爲了衡量h(x)
的擬合度,使用代價函數$ J(θ_0,θ_1) $以下:
$$ J(θ_0,θ_1) = {1 \over 2m} {\sum_{i=1}^m(h_θ(x_i)-y_i)^2} $$
經過觀察,不難發現,該公式實際計算的是,y的方差的均值。而且這個均值越小,說明擬合度越高。因此算法推導$ (θ_0,θ_1) $的過程,就是求$ J(θ_0,θ_1) $最小值的過程。
直觀的看,咱們能夠把訓練數據集當作散落在一個x-y的二維座標系中的點,試圖找到一條直線(由$ h_θ(x) $定義),穿過這些點。最終的目的是,找到一條這樣的一條直線,使得這些點離這條直線的垂直距離最近。理想狀態下,這條直線可以穿過全部的點,這時$ J(θ_0,θ_1) $爲0。
這個代價函數也稱爲平法偏差代價函數(Squared error function)
或均方偏差(Mean squared error)
。將均方除以2,是爲了梯度降低算法的計算。下圖總結了代價函數
:
爲了更直觀的觀察代價函數,咱們假設,須要預測的變量只有一個$ θ_1 $,那麼h(x)
以下:
$$ h(x)=θ_1x $$
這將是一條通過原點的直線。那麼容易想到,隨着斜率$ θ_1 $的變化,$ J(θ_1) $將呈現出一個以下相似拋物線的造型:
總能找到一個$ θ_1 $使得$ J(θ_1) $最小。
若是有兩個變量$ J(θ_0,θ_1) $:
$$ h(x)=θ_0+θ_1x $$
那麼$ J(θ_0,θ_1) $將同時受到兩個變量的影響,這將是一個三維的圖形:
所以,咱們總能找到一組$ (θ_0,θ_1) $,使得$ J(θ_0,θ_1) $最小。用三維圖觀察並不直觀,如今咱們引入一種叫contour plot
的圖。觀察上面的三維圖,咱們用一個平行於底面的平面穿過曲面,與曲面相交,造成一個相似橢圓的閉環,隨着這個平面高度的變化,將產生無數的相似橢圓的閉環,若是將這些橢圓閉環投影到底面,將造成一個相似靶環的圖形,就跟下圖的右圖同樣,這稱爲contour plot
:
在同一個環上的點,對應不一樣的$ (θ_0,θ_1) $取值,可是他們的$ J(θ_0,θ_1) $是相同的。而靶環
的中心點,就是可以使得$ J(θ_0,θ_1) $最小的$ (θ_0,θ_1) $取值:
如今咱們有了hypothesis function
和用於衡量hypothesis function
中參數$ (θ_0,θ_1) $取值擬合度的cost function
。如今將介紹第一個算法,稱爲Gradient Descent(梯度降低)
。算法的目的是找到一組變量$ (θ_0,θ_1) $,使得他們的代價函數$ J(θ_0,θ_1) $最小。咱們把代價函數假想成以下的三維圖,好似有一座座的山頭,若是咱們從某個山頭的某處出發,往下走,走到最低點,每一步往哪一個方向取決於當前往哪一個方向走最優,咱們可能會走到A點。若是換一個點出發,咱們可能走到B點:
在決定下一步往哪裏走的時候,咱們採起的方式是,找到當前這個點的切線方向(切線即導數),切線方向告訴咱們應該往哪一個方向走;另外一個影響因素是,每一步大小α
,這個參數咱們稱爲learning rate學習速率
。單次梯度降低迭代獲得的每每是局部最優解
,即上圖的A,B兩點是對於不一樣的起始點來講的最優解。
梯度降低算法描述以下:
重複以下步驟,直到收斂:
$$ θ_j := θ_j - α{∂ \over ∂θ_j}J(θ_0,θ_1), j=0,1 $$
上述公式中的:=
表示賦值,而不是數學意義上的判等。上式的迭代過程就是,從初始的$ (θ_0,θ_1) $開始,對於每組$ (θ_0,θ_1) $計算$ J(θ_0,θ_1) $的導數,而後獲得新的$ (θ_0,θ_1) $,重複計算,直到$ (θ_0,θ_1) $再也不變化,即收斂。
爲了更直觀的展現算法,咱們任然假設h(x)
只有一個參數$ θ_1 $:
$$ h(x)=θ_1x $$
那麼此時的算法能夠描述爲,重複以下過程直到收斂:
$$ θ_1 := θ_1 - α{∂ \over ∂θ_j}J(θ_1) $$
因爲$ J(θ_1) $是關於$ θ_1 $的二次函數,因此$ ∂ \over ∂θ_j $ 表示$ θ_1 $所在點的切線斜率。從下圖能夠看出,當$ θ_1 $在上升沿時,斜率爲正數,這會使得$ θ_1 $在迭代過程當中逐漸減少;當$ θ_1 $在降低沿時,斜率爲負數,這會使得$ θ_1 $在迭代過程當中逐漸減增大,總之都是趨近於最低點的$ θ_1 $。
因此能夠看到,算法巧妙的使用導數,讓迭代過程自動趨向於正確的方向。
在算法中,$ α $是一個可調參數,當$ α $過小時,每次迭代,$ θ_1 $的變化很小,這樣會算法的效率;而當$ α $太大時,每次迭代,$ θ_1 $的變化很大,這有可能會產生震盪,甚至沒法收斂:
理想狀況下,$ ∂ \over ∂θ_j $會在最低點,使得斜率爲0,此時:
$$ θ_1 := θ_1 − α ∗ 0 $$
這樣獲得的新的$ θ_1 $不變,這就是收斂。
再考慮有兩個變量$ (θ_0,θ_1) $的狀況:
$$ h(x)=θ_0+θ_1x $$
前面咱們將本來三維的代價函數,繪製成了contour plot
,不難想象,在梯度降低算法的迭代過程當中,$ (θ_0,θ_1) $老是從遠離靶心
的位置開始,向靠近靶心
的位置移動,最終收斂在靶心
:
有了直觀的認知後,咱們給出Gradient Descent(梯度降低)
的推導式,這樣可以方便計算機進行計算:
重複以下過程,直到收斂:
$$ θ_0 := θ_0 - α{1 \over m} {\sum_{i=1}^m(h_θ(x_i)-y_i)} $$
$$ θ_1 := θ_1 - α{1 \over m} {\sum_{i=1}^m((h_θ(x_i)-y_i)x_i)} $$
具體的推導過程省略。