機器學習的類型
1.監(jiān)督學習
你需要給機器一個有明確答案的訓練樣本,讓機器根據(jù)已經(jīng)有的經(jīng)驗去對未知的情況進行預測,比如給定的訓練樣本是房間面積-房價的關系,對每一個訓練樣本中的面積,機器明確知道對應的房價.
2.無監(jiān)督學習
對輸出結果沒有明確的界定,比如對基因分類,在結果出來之前誰也不知道會分為幾類,類比監(jiān)督學習的例子(面積-售價,明確知道輸出是金額;判斷腫瘤良性還是惡性,也是明確知道結果會被分成兩類)
其中一種被稱為聚類算法,比如將新聞分類(被分類在一塊的新聞都描述同一件事),又或者在一段音頻中把不同音源的聲音區(qū)分開來.
3.Others:Reinforcement learning......
監(jiān)督學習
1.解決連續(xù)值問題(回歸問題)
預測連續(xù)值輸出, 比如房子面積-房價關系走勢
2.離散值問題(分類問題)
預測離散值輸出,比如判斷腫瘤是良性還是惡性
離散值和連續(xù)值的區(qū)別在于連續(xù)值屬于區(qū)間,比如數(shù)字區(qū)間[20,30]不可窮舉,離散值則可以窮舉,比如硬幣正反面.其實這么說也有點微妙,比如在房間面積-房價這個例子中,房價是錢,一般精確到分,理論上房價也是可以窮舉的,但是還是考慮成連續(xù)值而非離散值.
第一個監(jiān)督學習算法 -- 線性回歸

上圖中x軸是房屋面積,y軸是房價,圖中的點就是訓練樣本,我們的目的是預測房間面積對應的房價.
對于線性回歸算法來說,就是要找一個線性方程,通過該方程和輸入可以求出目標值,對于上圖線性方程將會是:
h(x) = θ0 + θ1 * x
其中h表示hypothesis,h(x)是房價,x是房屋面積.
我們不希望h(x)看起來太過夸張,換而言之就是線性方程和訓練樣本擬合度越高越好,直覺上來說就是線性方程需要"均勻的穿過訓練樣本".但是靠直覺選取線性方程肯定不行,我們需要找到一個可量化的值來表示線性方程的擬合程度,這里引出一個新的概念--代價函數(shù)(Cost Function).

我們的目標是選取合適的θ0,θ1使得代價函數(shù)最小,這樣h(x)和數(shù)據(jù)集的擬合度就最高.
Cost Function有很多種,在這里我們從平方差的角度來量化.上圖中m表示訓練數(shù)據(jù)集規(guī)模.
簡化問題
我們先把問題簡化然后看個實際的例子:
假設θ0 := 0
則h(x) = θ1 * x
則代價函數(shù)可以簡化成
假設訓練樣本如下圖,包含(1,1),(2,2),(3,3).此外還包含3個線性方程,按照斜率從大到小分別是
1.h(x) = 2x,即θ1 := 2
2.h(x) = 1x,即θ1 := 1
3.h(x) = 0.5*x,即θ1 := 0.5

之后求J(2),J(1),J(0.5)的值,得出對應的J(θ1)函數(shù)圖如下:

從J(θ1)圖可以看到,當θ1取1的時候,代價函數(shù)最小(0,與之對應的就是數(shù)據(jù)集和線性方程中斜率為1的線性方程),所以對于這個特定的訓練樣本,要想擬合度最高,θ1應該取1.
回到最初的問題
通過簡化問題我們已經(jīng)知道對于θ0:=0的情況,J(θ1)類似于一個一元二次函數(shù),如果把θ0也考慮進去的話,圖形將會是這樣,因為對于每一組θ0, θ1都有一個J(θ0, θ1)與之對應.

Gradient Descent(梯度下降算法)
為了找到min(J(θ0, θ1)),我們引入Gradient Descent算法,通常該算法適用于已知J(θ0, θ1.....θN-1, θN),要求min(J(θ0, θ1.....θN-1, θN))的情況.
梯度下降算法根據(jù)初始值的不同可能會得到不同的最優(yōu)解(局部最優(yōu)解),但是對于J(θ0, θ1)來說(如上圖)局部最優(yōu)解正是全局最優(yōu)解

注意更新的方式應該如下
temp0 := θ0 - LearningRate * Derivate
temp1 := θ1 - LearningRate * Derivate
θ0 := temp0
θ1 := temp1
而不是
θ0 := θ0 - LearningRate * Derivate
θ1 := θ1 - LearningRate * Derivate
關于α(學習速率,learning rate),和導數(shù)項的理解,首先先簡化問題,假設θ0:=0

導數(shù)項就是函數(shù)在某一點切線的斜率,當斜率為負數(shù)時,梯度下降算法在不斷遞歸中θ1在不斷增加,從圖上看就是當θ1<0時,θ1增加,直到J(θ1)=0,函數(shù)值收斂了.如果當斜率為正數(shù)時,梯度下降算法在不斷遞歸中θ1在不斷減少,從圖上看就是當θ1>0時,θ1減少,直到J(θ1)=0,函數(shù)值也收斂了,符合直覺.這樣一來學習速率也好理解了,學習速率越大,θ1的變化也就越大,反之亦然.
需要注意的一點是,在梯度下降算法不斷遞歸中,如果學習速率設置的過大可能導致錯過最優(yōu)解(如上圖想象θ1在一次計算中直接從負數(shù)->正數(shù),并且遞歸后所在點的斜率比遞歸前的大),這樣會導致函數(shù)無法收斂,不過如果一切運行正常,越接近最優(yōu)解導數(shù)項越來越小(趨近于0),you won't miss it.
理解了梯度下降算法在J(θ1)上的工作原理之后,至少可以在直覺上理解該算法在J(θ0, θ1)圖形上的工作原理.
多元線性回歸
不同于之前提到的房屋的價格只和面積(x1)有關,實際情況中hθ(x)會更復雜,如下表格所示,房屋的價格可能與很多因素有關
| 面積 | 臥室數(shù)量 | 樓層高度 | 房屋年齡 | 價格 |
|---|---|---|---|---|
| 100 | 3 | 3 | 20 | 200w |
| 200 | 6 | 3 | 20 | 450w |
| 140 | 3 | 19 | 5 | 360w |
上面表格中,面積(x1)/臥室數(shù)量x(2)/樓層高度(x3)/房屋年齡(x4)被稱為特征量.
一般使用n表示特征量的個數(shù),這個例子中n=4
x(i)表示第i個訓練樣本的特征值組,
xj(i)表示第i個訓練樣本的第j個特征值,x1(1) = 100
對于這種有多個特征值的情況,hθ(x)和單特征值是不一樣的
單元:hθ(x) = θ0 + θ1x1
多元:hθ(x) = θ0 + θ1x1 + θ2x2 + ... + θnxn
對于多元hθ(x),我們可以用矩陣來簡化表示,在上面的例子中首先稍微修改下方程得到hθ(x)=θ0x0 + θ1x1 + θ2x2 + θ3x3 + θ4*x4,并且令X0=1
那么我們可以得到特征值矩陣
參數(shù)矩陣
那么hθ(x)=PT * F
多元梯度下降算法
之前介紹的對于代價函數(shù)J(θ0, θ1)的梯度下降算法可以表示為
repeat until convergence{
(for j in 0,1)
}
那么對于多元代價函數(shù)J(θ0, θ1...θn)我們將θ0, θ1...θn看成一個一維向量θ則算法將變成
repeat until convergence{
(for j in 0....n)
}
上面公式翻譯過來就是對每一個特征量(j in 0...n)分別求該特征量θj在函數(shù)J(θ)的偏導數(shù)(切線的斜率),并使用該斜率*學習速率作為變化量去更新θj,直到θj收斂.
接下來我們在將這個偏導數(shù)展開,并帶入代價函數(shù)可以得到:
repeat until convergence{
(for j in 0....n)
}
特征縮放
特征縮放可以加速梯度下降函數(shù)的收斂.特征縮放是盡可能的讓所有特征值處在近似的區(qū)間內(nèi),但是又不丟失這些特征量的數(shù)據(jù)特征.常用的特征縮放方法有以下兩種:
1.Rescaling
Rescaling可以使特征值落在[0,1],[-1,1]這個區(qū)間內(nèi)
2.Mean Normalization
3.Feature scaling
根據(jù)Andrew Ng的說法,特征值落在[-1,1]和[-1/3,1/3]之間都ok,超過這個值的話就不太妙了.
特征縮放為什么可以使梯度下降算法收斂的更快
如何判斷梯度下降算法是否正常工作
描繪一個以梯度下降算法迭代執(zhí)行次數(shù)為X軸,代價函數(shù)的值為Y軸的函數(shù)圖,如果隨著迭代執(zhí)行次數(shù)的增加,代價函數(shù)的值在不斷減少,則說明梯度下降算法在正常工作.


學習速率α
1.如果α太小,則梯度下降算法收斂的慢
2.如果α過大則并不會隨著每次迭代代價函數(shù)的值越小,也因此可能導致代價函數(shù)無法收斂(如上圖所示).
創(chuàng)造新的特征值
假設為計算房屋價格的函數(shù),x1為房屋縱深(depth),x2為房屋寬度(frontage),那么創(chuàng)造一個新的特征值:
area(房屋面積) = depth * frontage,則原函數(shù)可以轉換為:
有時候這樣會得到更好的模型.
構造hθ(x)去更好的擬合數(shù)據(jù)(Polynomial Regression)
并不一定非要是線性函數(shù),也可以是二次函數(shù),三次函數(shù)或者平方根函數(shù)等等.
要視不同的數(shù)據(jù)樣本選擇不同形式的函數(shù),比如計算房價的例子,就不能夠使用二次函數(shù)去擬合,因為大多數(shù)情況下房價不會像二次函數(shù)一樣有下墜趨勢,此時我們可以選擇使用三次函數(shù)或者平方根函數(shù)的形式去更好的擬合數(shù)據(jù)
原函數(shù):
二次函數(shù):
三次函數(shù):
平方根函數(shù):
Normal Equation
之前求最小時對應的
值,我們使用的是Gradient Descent算法,Normal Equation則是另一種求
值的辦法.公式如下:
其中X被稱為designer matrix, y則是訓練樣本,具體如下:

上述公式從直覺上來講就是使的偏導數(shù)=0推導出來的.
對比Normal Equation 和 Gradient Descent算法的優(yōu)劣如下

根據(jù)Andrew Ng的說法,當特征值種類<=10000時,使用Normal Equation是可以接受的,當特征值種類>10000時,最好使用Gradient Descent.
Non-Invertibility
假如不可逆該怎么辦?事實上這種情況發(fā)生的概率很小, 但并不代表不會發(fā)生.導致這種情況出現(xiàn)的原因有兩個:
1.特征值之間存在依賴關系
比如表示房屋面積(平方米),
表示房屋面積(平方英尺),因為1m=3.28feet,所以始終存在
,像這種(線性依賴關系)很容易導致
不可逆.這種情況需要將特征值之間的依賴處理掉.
2.特征值太多
比如當m<=n的情況.對于這種情況要么想辦法減少特征值的種類,要么使用regularization.
如果使用octave的話使用pinv(pesudo invert)而不是inv方法來求你矩陣,這樣即使不可逆,依然可以求出
的值.
To Be Continued.. Stay tuned