天天看點

3.1 代價函數

3.1 代價函數(cost function)

    代價函數有助于将最可能的線性函數與我們的資料相拟合。線上性回歸中,我們有一個這樣的資料集,m表示訓練集樣本數,而我們的假設函數,也就是我們用來進行預測的函數,是圖中所示的線性函數形式。

3.1 代價函數

    接下來,我們引入一些術語,Ɵ0和Ɵ1,這些Ɵi我們将它稱作為模型參數,我們要做的就是如何去選擇這兩個參數。對于不同的Ɵ0和Ɵ1,我們會得到不同的假設函數,如下圖所示。

3.1 代價函數

    線上性回歸中,我們有一個訓練集,可能如下圖所示。我們要做的是得出Ɵ0和Ɵ1,使我們得到的假設函數表示的直線盡量的與這些資料點相拟合。我們怎麼選擇Ɵ0和Ɵ1呢?我們的想法是我們要選擇能夠使h(x),也就是輸入x是我們的預測的值,最接近該樣本對應的y值的參數Ɵ0和Ɵ1。在房子價格預測的例子中,x表示要買出的房子的尺寸大小,y表示賣出的房子的實際價格,我們要盡量選擇參數,使得在給出的訓練集中,給出的x的值,能夠很好的預測y的值。

    讓我們給出更加标準的定義,線上性回歸問題中,我們要解決的是一個最小化的問題,寫出關于Ɵ0和Ɵ1的最小化式子,想要h(x)和y之間的差異要小,所要做的事情就是盡量減少預測輸出的價格與房子的實際價格的平方最小。接下來進行更加詳細的闡述。别忘了,我們使用(x(i),y(i))代表第i個樣本,我所要做的就是對所有的樣本,預測輸出的結果與實際價格差的平方進行一個求和,如下圖所示。我們要盡量減小預測值和實際值的這個平方誤差和。1/m表示嘗試是平均誤差最小,1/2m,通常是這個數的一半。

3.1 代價函數

    簡單的說,我們将這個問題變為找到能使我的訓練集中的預測值與實際值的差的平方和的1/2m最小的Ɵ0和Ɵ1的值。是以,這将是我的線性回歸的整體的目标函數(這就是代價函數),為了使它更加的清楚,我們需要改寫這個函數。按照慣例,我們定義一個代價函數J,如下圖所示,我們要做的是對Ɵ0和Ɵ1求J的最小值,J就是代價函數。

3.1 代價函數

    代價函數也被稱為平方誤差函數(Squared error function),有時也被稱為平方均方誤差(Mean squared error)。為什麼我們要求出誤差的平方和,是因為誤差平方代價函數,對于大多數問題,特别是線性回歸問題都是一個合理的選擇,其他代價函數也能很好的發揮作用,但是平方誤差函數可能是解決線性回歸問題最常用的手段了。在後面将更加詳細的介紹J的工作原理以及嘗試更加直覺的解釋它在計算什麼,以及我們使用它的目的。

    總結,我們可以使用代價函數來衡量我們得到的假設函數的準确度。

3.1.1 代價函數Intuition I

上面我們介紹了代價函數數學上的定義,在這裡讓我們通過一些例子來擷取一些直覺的感受,看看代價函數到底是在幹什麼?

    回顧一下,上次我們講到,我們想找到一條直線來拟合我們的資料。我們用 θ0和θ1 等參數得到了這個假設h,而且通過選擇不同的參數,我們會得到不同的直線拟合,然後我們還有一個代價函數(cost function),這就是我們的優化目标(goal)。

3.1 代價函數

    為了便于我們了解,我們需要将代價函數簡化,如下圖右邊所示。 也就是我們可以将這個函數看成是 把 θ0 設為0,假設函數變為θ1*x,是以我隻有一個參數,唯一的差別是現在 h(x) 等于 θ1*x,隻有一個參數 θ1 ,是以我的 優化目标是将 J(θ1) 最小化,用圖形來表示就是如果θ0 等于零,也就意味這我們選擇的假設函數會經過原點。如下圖所示。

3.1 代價函數

    試着更好的了解代價函數這個概念,我們需要了解這兩個重要的函數,一個是假設函數,一個是代價函數。

    假設函數就是一個關于x房子大小的函數,與此不同的數,代價函數是關于θ1的函數,而θ1控制着這條直線的斜率,我們将這些函數畫出來,試着更好的了解它們,如下圖所示。

    先從假設函數開始,我們的資料集包含了三個點(1,1)(2,2),(3,3)。選擇θ1=1,我們的假設函數看起來就是下圖所示的一條直線,橫軸表示的是房子的價格x。我們将θ1定為1,我們想要做的是算出在θ1=1的時候J(θ1)是多少。

是以我們按照這個思路來計算代價函數的大小和之前一樣代價函數定義如圖中所示, 對這個誤差平方項進行求和,簡化以後就等 三個0的平方和,當然還0。 現在在代價函數裡,我們發現所有這些值都等于0 因為對于我所標明的這三個訓練樣本 ( 1 ,1 ) (2,2) 和 (3,3) ,如果 θ1 等于 1 那麼 h(x(i)) 就會正好等于 y(i),是以 h(x) - y 所有的這些值都會等于零,這也就是為什麼 J(1) 等于零。

3.1 代價函數

在下圖的右邊是對應的代價函數,要注意的是我們的代價函數是關于θ1的函數,當我們描述代價函數的時候,橫軸表示的是θ1,J(1)等于0,我們有了一個點,我們來看其他一些樣本,θ1可以被設定為某個範圍内的各種取值,可以使負數等,如果θ1=0.5會發生什麼?

如下圖所示,我們發現代價函數後面的求和,就是藍色線段的高度的平方求和,我們可以計算出J(0.5)=0.58,如下圖中所示,将這個點在右邊圖中畫出來,

這樣一步步的得到更多的點,我們就可以一步步的畫出代價函數對應的曲線。如下圖右邊所示。

    我們回顧一下,對于不同的θ1的取值,對應着不同的假設函數,或者說對應于左邊一條不同的拟合直線,對于任意的θ1,你可以計算出不同的J(θ1),我們可以利用這些畫出右邊的這條曲線。現在,你還記得學習算法的優化目标是我們想找一個θ1,使得J(θ1)最小,看圖中J(θ1)的曲線可以知道,使J(θ1)最小的θ1的值是1,從圖中的左邊可以看出,θ1=1确實對應着最佳的資料拟合直線,我們最後能夠完美的拟合,這就是為什麼最小化J(θ1),對應着尋找一個最佳拟合直線的目标。

3.1 代價函數

    這裡我們使用圖形幫助我們了解代價函數,為了便于了解,我們将θ0設定為0,下面我們将回到原來的問題,即不将θ0設定為0,畫出存在θ1和θ0的代價函數的圖形,希望能夠幫助我們更好的了解代價函數。

3.1.2 代價函數Intuition II

這一小節,我們将更加深入的學習代價函數的作用,和之前一樣,下圖所示的是幾個重要的公式,包含了假設h、參數θ、代價函數、以及優化目标goal。與上一節不同的是我們将假設函數寫為關于θ0和θ1的函數。

3.1 代價函數

首先我們同樣來了解假設函數和代價函數,存在兩個參數的時候,可能會得到如下所示的一個三維曲面圖,下面的兩個軸分别表示θ0和θ1,縱軸表示J(θ0,θ1),你改變θ0和θ1,會得到不同的代價函數J(θ0,θ1),J(θ0,θ1)對于某個特定的(θ0,θ1),這個曲面的高度,也就是豎直方向的高度,就表示代價函數J(θ0,θ1)的值。

3.1 代價函數

後面不再使用三維曲面圖來解釋代價函數,将使用輪廓圖(contour plot/figure)來進行解釋。如下圖右邊所示就是一個輪廓圖。

3.1 代價函數

    橫軸表示的是θ0,縱軸表示的是θ1,而這些一圈一圈的橢圓形,每一個圈表示J(θ0, θ1)相同的所有點的集合。一系列同心橢圓的中心點就是最小值。其實輪廓圖就是等高線圖,相當于三維曲面圖在一個平面上的投影。

    接下來讓我們看幾個簡單的例子,在這裡有一個點(藍色标記的),θ0是800,θ1是大概是-0.15,這個(θ0,θ1)組,對應于左邊這樣一條假設函數直線,與縱軸相交的地方是800,斜率大概是-0.15,但是這條直線不能很好的拟合所有資料,你也發現了,這個代價值所在的位置離中心點(最小值)也比較遠,也就是說這個代價值是比較遠的。如下圖所示。

3.1 代價函數

    後續我們将遇到更高次元、更多參數、更加複雜的情況。我們需要做的是編寫程式自動找出θ0和θ1這樣的值。下一節将介紹一種能夠自動找出θ0和θ1的算法。

繼續閱讀