代價函數有助於我們弄清楚如何把最有可能的函數與我們的數據相擬合。比如在模型訓練中我們有訓練集(x,y),x表示房屋的面積,y表示房屋的價格,我們要通過線性回歸得到一個函數hθ(x)(被稱為假設函數),以x作為自變量,y作為因變量,用函數來預測在給定的房屋面積下的價格。
參數θ0和θ1的變化會引起假設函數的變化,參數的選擇決定了我們得到的直線相對於訓練集的准確度,用得到的模型預測的值與訓練集中值的差距稱為建模誤差(即下圖中的藍色線)
我們的目標是選擇出使建模誤差的平方和最小的參數,在回歸分析中我們取代價函數為,即使J(θ0,θ1)的值最小。
我們繪制一個等高線圖,三個坐標分別為θ0 和θ1和J(θ0,θ1 ):
則可以看出在三維空間中存在一個使代價函數J(θ0,θ1)最小的點(即圖中的最低點)
代價函數也被稱作平方誤差函數,有時也被稱為平方誤差代價函數。我們之所以要求出誤差的平方和,是因為誤差平方代價函數,對於大多數問題,特別是回歸問題,都是一個合理的選擇。還有其他的代價函數也能很好地發揮作用,但是平方誤差代價函數是解決回歸問題最常用的手段了。
機器學習中代價函數有很多,根據不同的問題,選用不同的代價函數,比如邏輯回歸使用對數代價函數,分類問題使用交叉熵作為代價函數。常用的損失函數如下:
那么是不是代價函數越小越好呢?答案是 No
上面三個圖的函數依次為f1(x),f2(x),f3(x) 。我們是想用這三個函數分別來擬合真實值Y,從上圖中我們可以看出圖三的函數f3(x) 擬合效果最好,因為其代價函數值最低。這時我們還要考慮經驗風險和結構風險。
那么什么是經驗風險和結構風險呢?
f(x)關於訓練集(X,Y)的平均損失稱作經驗風險(empirical risk),即 。“結構風險”度量的是模型的某些性質,例如模型的復雜度或懲罰項等,結構風險引入在機器學習中稱為“正則化”,常用的有
,
范數。
最后來看,為什么圖三中的函數f3(x)不是最好的,因為圖三的函數對訓練集數據過度擬合,造成過擬合現象,導致它真正的預測效果 並不是很好。換句話說,雖然它的擬合效果很好,經驗風險低,但是其函數復雜度好,結構風險很高,所以它不是最終獲取的函數。而圖二函數對經驗風險和結構風險進行了折中,所以該函數才是理想的函數。
怎么求解代價函數最小值呢?梯度下降法,這里不贅述 ,后面會詳細講解
最后附上簡單的matlab線性擬合程序
x=[1:0.3:4];y=x*0.1+0.5+unifrnd(-0.5,0.5,1,11); p=polyfit(x,y,1); x1=linspace(min(x),max(x)); y1=polyval(p,x1); plot(x,y,'*',x1,y1);