機(jī)器學(xué)習(xí)系列2:誤差、梯度下降、交叉驗(yàn)證、歸一化和評價(jià)指標(biāo)

一、詳細(xì)理解誤差(error)與偏差(bias)和方差(variance)

1.偏差與方差


對圖片的解釋:
準(zhǔn):bias低,模型在樣本上擬合地好不好。low bias相當(dāng)于打靶時(shí)都落在靶心附近,但是手不一定穩(wěn)(分布比較亂)。
:variance低,模型在測試集上的表現(xiàn)好。low variance相當(dāng)于打靶時(shí)手很穩(wěn),分布緊密,但是不一定在靶心附近。
與模型復(fù)雜度的關(guān)系:模型約復(fù)雜,擬合能力越好,對訓(xùn)練樣本擬合地越好,偏差越小,但學(xué)到的非全局特征也多,方差就越大。所以,模型的尋優(yōu)就是在bias 和variance直接尋找trade-off。

2.error與bias和variance的關(guān)系

總體上說,誤差等于偏差加上方差,具體來看公式推導(dǎo)。
根據(jù)周志華《機(jī)器學(xué)習(xí)》,對偏差和方差以及噪聲的定義:

偏差度量了學(xué)習(xí)算法的期望預(yù)測與真實(shí)結(jié)果的偏離程度,刻畫了模型的擬合能力;

方差度量了同樣大小的訓(xùn)練集的變動所導(dǎo)致的學(xué)習(xí)性能的變化,刻畫了數(shù)據(jù)擾動造成的影響;

噪聲表達(dá)了在當(dāng)前任務(wù)上任何學(xué)習(xí)算法所能達(dá)到的期望泛化誤差的下界,即刻畫了學(xué)習(xí)問題本身的難度。

對一個(gè)測試樣本x,令y_Dx在數(shù)據(jù)集上的標(biāo)記(不一定是正確的,可能有噪聲);
y_Dx的真實(shí)標(biāo)記(一定是正確的);
f(x;D)為在訓(xùn)練集D上學(xué)到的模型f,且在x上給出的預(yù)測;
算法的期望預(yù)測為:\bar{f}(x)=E_D[f(x;D)]
使用樣本數(shù)相同的不用訓(xùn)練集產(chǎn)生的方差為:var(x)=E_D[(f(x;D)-\bar{f}(x)^2]
(根據(jù)方差的定義推導(dǎo):var(x)=E[(X-E[X])^2])
噪聲為:\varepsilon^2=E_D[(y_D-y)^2]
偏差等于期望的輸出與真實(shí)標(biāo)記之差:bias^2(x)=(\bar{f}(x)-y)^2
假設(shè)噪聲的期望值為0,即:E_D[y_D-y]=0
以線性回歸的MSE誤差為例:\begin{split} E(f;D)={} & E_D[f(x;D)-y_D)^2{} \\ &=E_D[(f(x;D)-\bar{f}(x)+\bar{f}(x)-y_D)^2]{} \\ &=E_D[(f(x;D)-\bar{f}(x))^2]+E_D[(\bar{f}(x)-y_D)^2]{} \\ & + E_D[2(f(x;D)-\bar{f}(x))(\bar{f}(x)-y_D)] {} \\ & = E_D[(f(x;D)-\bar{f}(x))^2]+E_D[(\bar{f}(x)-y_D)^2] {} \\ & = E_D[(f(x;D)-\bar{f}(x))^2]+E_D[(\bar{f}(x)-y+y-y_D)^2] {} \\ &= E_D[(f(x;D)-\bar{f}(x))^2]+E_D[(\bar{f}(x)-y)^2] +E_D[(y-y_D)^2] {} \\ &+ 2E_D[(\bar{f}(x)-y)(y-y_D)]{} \\ &= E_D[(f(x;D)-\bar{f}(x))^2]+(\bar{f}(x)-y)^2+E_D[(y-y_D)^2] {} \\ &=var(x)+bias^2(x)+\varepsilon^2 \end{split}
公式說明:第四行,由于\bar{f}(x)=E_D[f(x;D)],而E_D[\bar{f}(x)]=\bar{f}(x)(因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cbar%7Bf%7D(x)" alt="\bar{f}(x)" mathimg="1">是一個(gè)常數(shù)),故第三項(xiàng)等于0。
第八行,因?yàn)樵肼暤钠谕禐?,即E_D[y_D-y]=0,故第四項(xiàng)為0。
這就是誤差與偏差和方差的關(guān)系了。

3.過擬合與欠擬合

過擬合:bias很小,而variance很大,說明模型過于復(fù)雜,把訓(xùn)練樣本的自身的非全局特征都學(xué)過去了。
欠擬合:bias很大。模型太簡單,對訓(xùn)練樣本的一般性質(zhì)沒有學(xué)到位。

二、鞍點(diǎn)

1.什么是鞍點(diǎn)

定義:

目標(biāo)函數(shù)在此點(diǎn)上的梯度為0,但從該點(diǎn)出發(fā)的一個(gè)方向是函數(shù)的極大值點(diǎn),而在另一個(gè)點(diǎn)方向是函數(shù)的極小值點(diǎn)。

鞍點(diǎn)示意圖

2.鞍點(diǎn)給學(xué)習(xí)帶來的困難

在機(jī)器學(xué)習(xí)算法尋優(yōu)的過程中,鞍點(diǎn)造成的困難要比局部最小更麻煩;因?yàn)?br> 1):在高位參數(shù)空間呢,鞍點(diǎn)存在更多;
2):大量表面局部最優(yōu)解,對模型來說已經(jīng)足夠好了。
如果使用的是傳統(tǒng)的梯度下降算法(GD),或者叫做最速梯度下降,沿著當(dāng)前位置的最小梯度方向走,很容易陷在鞍點(diǎn)。

3.判斷鞍點(diǎn)的充分條件

海森矩陣(Hession matrix)是由函數(shù)f(x_1,x_2,...,x_n)的二階偏導(dǎo)組成的方陣:
H(f)=\begin{bmatrix} \frac{\partial^2{f}}{\partial x_1^2} & \frac{\partial^2{f}}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2{f}}{\partial x_1\partial x_n} \\ \frac{\partial^2{f}}{\partial x_2\partial x_1} & \frac{\partial^2{f}}{\partial x_2^2} & \cdots &\frac{\partial^2{f}}{\partial x_2\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2{f}}{\partial x_n\partial x_1} &\frac{\partial^2{f}}{\partial x_n\partial x_2} & \cdots & \frac{\partial^2{f}}{\partial x_n^2} \end{bmatrix}
根據(jù)矩陣的特征值可以將矩陣分成:
正定矩陣:所有特征值都大于零;
負(fù)定矩陣:所有特征值都小于零;
不定矩陣:特征值有正有負(fù)。
1.如果目標(biāo)函數(shù)某一穩(wěn)定點(diǎn)的H是正定的,即所有特征值都是正的,這個(gè)點(diǎn)是(局部)最小值,因?yàn)闊o論往什么方向看,導(dǎo)數(shù)都是正的。
2.如果H是負(fù)定的,說明這個(gè)點(diǎn)是(局部)最大值,同理,因?yàn)闊o論往什么方向看,導(dǎo)數(shù)都是負(fù)的。
3.如果H是不定的,導(dǎo)數(shù)有正有負(fù),說明這個(gè)點(diǎn)是一個(gè)鞍點(diǎn)。
4.如果特征值都是0,這種情況無法判斷沒需要參照更高維度的導(dǎo)數(shù)。
注意以上對于鞍點(diǎn)的判斷是充分條件,如果H不是不定矩陣,不能得出其一定不是鞍點(diǎn)的結(jié)論,或者說,如果一個(gè)點(diǎn)是鞍點(diǎn),不能反推出這個(gè)點(diǎn)的H矩陣一定是不定矩陣。

4.逃離鞍點(diǎn)的方法

可以采用隨機(jī)梯度下降法,或者小批量隨機(jī)梯度下降法,引入一定的隨機(jī)噪聲,可以跳出鞍點(diǎn)。
或者采用更高級的優(yōu)化方法:如深度學(xué)習(xí)中廣泛使用的動量法,RMSprop,Adam等。

三、梯度下降

以線性回歸為例:
h(x)=\theta^Tx J(\theta)=\frac{1}{2m}\sum_{i=1}^mh_\theta(x^i)-y^i)^2 \frac{\partial{J(\theta)}}{\partial \theta_j}=-\frac{1}{m}\sum_{i=1}^m(y^i-h_\theta(x^i)x_j^i

1.批量梯度下降(BGD):一次迭代對所有m個(gè)訓(xùn)練樣本都遍歷一遍

\begin{split} while\lgroup {}\\ {}&\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^i)-y^i)x_j^i \quad(對所有j){}\\ \rgroup \end{split}
也被稱為最速梯度下降,迭代的步數(shù)較少,但要一次遍歷所有數(shù)據(jù),數(shù)據(jù)量較大時(shí)會比較耗時(shí)。

2.隨機(jī)梯度下降(SGD):對每個(gè)樣本來進(jìn)行一次更新迭代

\begin{split} & 1.Random Shuffle Dataset {} \\ & 2.while\lgroup {}\\ {} & \quad \qquad for\ i \ i n\ 1\ to \ m:\lgroup {}\\ {}&\qquad \qquad \qquad \theta_j:=\theta_j-\alpha (h_\theta(x^i)-y^i)x_j^i \quad(對所有j){}\\ {}& \qquad \qquad \qquad\rgroup{}\\ \rgroup \end{split}

隨機(jī)梯度下降

SGD的噪音比BGD多,每次迭代的路線并不一定是最優(yōu)的,但整體是向著最優(yōu)的方向,而且SGD可以跳出局部最小和鞍點(diǎn)。

3.小批量梯度下降(MBGD)

在BGD與SGD之間去一個(gè)平衡,兼具兩者的特點(diǎn),既保證梯度方向的正確,也加快了速度,又引入了一定的噪聲。
假設(shè)批量大小為k\begin{split} & while\lgroup {}\\ {} & \quad \qquad for\ i \ i n\ 1\ to \ k:\lgroup {}\\ {}&\qquad \qquad \qquad \theta_j:=\theta_j-\alpha \frac{1}{k} \sum_{i=1}^k(h_\theta(x^i)-y^i)x_j^i \quad(對所有j){}\\ {}& \qquad \qquad \qquad\rgroup{}\\ \rgroup \end{split}
選擇問題:
如果數(shù)據(jù)量不大,使用批量梯度下降;
如果數(shù)據(jù)量較大,使用 小批量隨機(jī)梯度下降,具體需要調(diào)參,看硬件條件
代碼如下:

#下面實(shí)現(xiàn)的是批量梯度下降法
def batchGradientDescent(x, y, theta, alpha, m, maxIterations):
    xTrains = x.transpose()                             #得到它的轉(zhuǎn)置
    for i in range(0, maxIterations):
        hypothesis = np.dot(x, theta)
        loss = hypothesis - y
        # print loss
        gradient = np.dot(xTrains, loss) / m             #對所有的樣本進(jìn)行求和,然后除以樣本數(shù)
        theta = theta - alpha * gradient
    return theta

#下面實(shí)現(xiàn)的是隨機(jī)梯度下降法
def StochasticGradientDescent(x, y, theta, alpha, m, maxIterations):
    data = []
    for i in range(10):
        data.append(i)
    xTrains = x.transpose()     #變成3*10,沒一列代表一個(gè)訓(xùn)練樣本
    # 這里隨機(jī)挑選一個(gè)進(jìn)行更新點(diǎn)進(jìn)行即可(不用像上面一樣全部考慮)
    for i in range(0,maxIterations):
        hypothesis = np.dot(x, theta)
        loss = hypothesis - y                   #注意這里有10個(gè)樣本的,我下面隨機(jī)抽取一個(gè)進(jìn)行更新即可
        index = random.sample(data,1)           #任意選取一個(gè)樣本點(diǎn),得到它的下標(biāo),便于下面找到xTrains的對應(yīng)列
        index1 = index[0]                       #因?yàn)榛貋淼臅r(shí)候是list,我要取出變成int,更好解釋
        gradient = loss[index1]*x[index1]       #只取這一個(gè)點(diǎn)進(jìn)行更新計(jì)算
        theta = theta - alpha * gradient.T
    return theta

四、交叉驗(yàn)證法(corss validation)

先將數(shù)據(jù)集D劃分成k個(gè)大小相似的互斥子集:D=D_1\cup D_2\cup \cdots \cup D_k,\quad D_i \cap D_j = \varnothing,(j \ne j)
每個(gè)子集的分布盡量保持一致
訓(xùn)練時(shí),每次使用k-1個(gè)子集作為訓(xùn)練集,1個(gè)子集作為測試集,這樣就有k種選擇,進(jìn)行k次訓(xùn)練和測試,返回k個(gè)結(jié)果的均值。
一般也稱為k折交叉驗(yàn)證法,k可以取5,10,20等。
子集的劃分可能存在多種方式,為了減小因樣本劃分不同而引入的差別,k折交叉驗(yàn)證通常需要隨機(jī)使用不同的劃分重復(fù)p次,并取均值,這叫做pk折交叉驗(yàn)證。
k越大,模型的實(shí)際訓(xùn)練效果與樣本數(shù)據(jù)集D的期望預(yù)測結(jié)果越相似,特別的,當(dāng)k等于D中全部樣本個(gè)數(shù)m時(shí),意味著只保留一個(gè)樣本作為訓(xùn)練集,也被稱為留一法。
留一法的評估結(jié)果比較準(zhǔn)確,但是在樣本較大時(shí)很費(fèi)時(shí)間。

五、歸一化和標(biāo)準(zhǔn)化

以房價(jià)預(yù)測為例,令y=\theta_1x_1+\theta_2x_2
其中x_1是房間數(shù),x_2代表面積,面積的數(shù)值可能遠(yuǎn)遠(yuǎn)大于房間數(shù)。
未歸一化時(shí),目標(biāo)函數(shù)的等高線如下圖所示:

未歸一化

在尋找最優(yōu)解的時(shí)候,由于數(shù)據(jù)尺度不同,等高線比較“扁”,尋優(yōu)路徑歪歪扭扭。

歸一化后:

歸一化

歸一化之后,等高線比較“圓”,尋優(yōu)過程更加平緩,更容易收斂。
歸一化的公式:

標(biāo)準(zhǔn)化公式:

歸一化和標(biāo)準(zhǔn)化的本質(zhì)都是線性變換,先壓縮,后平移,線性變換不會改變數(shù)值的排序,反而還能提高數(shù)據(jù)的表現(xiàn)。

歸一化與標(biāo)準(zhǔn)化的區(qū)別:

歸一化:縮放僅跟數(shù)據(jù)的最大值,最小值的差別有關(guān);輸出在[0,1]之間;
標(biāo)準(zhǔn)化:跟每個(gè)數(shù)據(jù)都有關(guān);輸出范圍是[-\infty,+\infty]

什么時(shí)候用哪個(gè)?

1)對輸出范圍有要求時(shí),用歸一化;
2)數(shù)據(jù)較為穩(wěn)定,不存在極值和噪音,用歸一化;
3)若數(shù)據(jù)存在較多極端值和噪音,用標(biāo)準(zhǔn)化
一般都先采用標(biāo)準(zhǔn)化看看效果。

六、回歸模型的評價(jià)指標(biāo)

一般常用的評價(jià)指標(biāo)有:
RMSE(平方根誤差):\sqrt{\frac{1}{m}\sum_{i=1}^m(h_\theta(x^i)-y^i)^2 }
MAE(平均絕對誤差):
\frac{1}{m}\sum_{i=1}^m|h_\theta(x^i)-y^i|
MSE(平均平方誤差):\frac{1}{m}\sum_{i=1}^m(h_\theta(x^i)-y^i)^2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容