本章涉及到的知識(shí)點(diǎn)清單:
1、函數(shù)的近似表示—高次多項(xiàng)式
2、誤差函數(shù)—最小二乘法
3、引出案例函數(shù)曲線
4、目標(biāo)函數(shù)
5、優(yōu)化目標(biāo)函數(shù)
6、優(yōu)化目標(biāo)函數(shù)—梯度下降法
7、優(yōu)化目標(biāo)函數(shù)—求解線性方程組
8、python編程實(shí)現(xiàn)擬合曲線函數(shù)
9、結(jié)果分析
一、函數(shù)的近似表示—高次多項(xiàng)式
為了研究一些復(fù)雜的函數(shù),我們希望對函數(shù)自變量進(jìn)行有限的加、減、乘法三種算數(shù)運(yùn)算,便可以求出原函數(shù)值,因此我們通常使用高次多項(xiàng)式來近似表示函數(shù)

可以看到,我們可以用n階多項(xiàng)式的系數(shù)線性組合來近似表示f(x)
特別說明,由泰勒展開式可知,當(dāng)pn(x)的各階導(dǎo)數(shù)和f(x)的各階導(dǎo)數(shù)都相等,則f(x)和pn(x)的誤差只是(x-x0)^n的高階無窮小
即

二、誤差函數(shù)—最小二乘法
我們用f(x)的真實(shí)函數(shù)值減去多項(xiàng)式函數(shù)的結(jié)果的平方,來表示f(x)和多項(xiàng)式函數(shù)的誤差關(guān)系,即

我們令x0=0,則最小二乘法表示的誤差為

三、引出案例函數(shù)曲線
有了上述數(shù)學(xué)知識(shí),下面我們用一個(gè)案例來介紹最小二乘法擬合非線性函數(shù)的算法步驟
案例:求一個(gè)多項(xiàng)式來擬合下列函數(shù)的函數(shù)值

其中我們加入了噪點(diǎn)數(shù)據(jù)noise,使得函數(shù)在定義域內(nèi)隨機(jī)的震蕩
我們畫出f(x)在[-1, 1]之間的圖像,即

案例問題即為:已知上述N個(gè)數(shù)據(jù)點(diǎn),求其函數(shù)f(x)的表達(dá)式?
顯然,f(x)也就是機(jī)器學(xué)習(xí)要學(xué)習(xí)的目標(biāo)
四、目標(biāo)函數(shù)
下面我們開始推導(dǎo)機(jī)器學(xué)習(xí)的過程
機(jī)器學(xué)習(xí)的目標(biāo)為:
(1)?學(xué)習(xí)一個(gè)f(x)多項(xiàng)式,可以擬合真實(shí)數(shù)據(jù)的變化趨勢
(2)f(x)的目標(biāo):使每一個(gè)真實(shí)數(shù)值到f(x)的擬合數(shù)值的距離之和最小
翻譯為數(shù)學(xué)語言,即


五、優(yōu)化目標(biāo)函數(shù)
為了使目標(biāo)函數(shù)最優(yōu),我們對每個(gè)系數(shù)求其偏導(dǎo)數(shù)為0,即

至此,我們需要根據(jù)上述k的等式,求出所有的系數(shù)ak,有兩種方法可以求解
(1)梯度下降法
(2)求解線性方程
六、優(yōu)化目標(biāo)函數(shù)—梯度下降法
采用梯度下降法,可以避免我們用數(shù)學(xué)方法直接一步來求解上述k個(gè)方程的最優(yōu)解,而是采用迭代逼近最優(yōu)解的思路,其具體步驟為:
(1)初始化k個(gè)系數(shù)值,開始迭代
(2)每次迭代,分別求出各個(gè)系數(shù)ak對應(yīng)的梯度值
(3)用梯度值和學(xué)習(xí)率來更新每一個(gè)系數(shù)ak
(4)保證每次更新完所有系數(shù),對應(yīng)的損失函數(shù)值都在減少(說明梯度一直在下降)
翻譯為數(shù)學(xué)語言為:
計(jì)算ak對應(yīng)的梯度值

更新ak

七、優(yōu)化目標(biāo)函數(shù)—求解線性方程組
求解線性方程組讓我們直接一步求出偏導(dǎo)數(shù)最優(yōu)解,其具體步驟為:
(1)將最優(yōu)化偏導(dǎo)數(shù)的方程組寫為矩陣乘法形式:XA=Y
(2)利用數(shù)學(xué)消元算法來求解XA=Y
我們對k個(gè)偏導(dǎo)數(shù)=0的等式進(jìn)行化簡處理,即

下面我們將其寫為矩陣相乘的形式,將所有只含有x的系數(shù)寫為第一個(gè)矩陣X,即

將只含有待求解的多項(xiàng)式系數(shù)ak寫為第二個(gè)矩陣A,即

最后將含有y的系數(shù)寫為第三個(gè)矩陣Y,即

此時(shí),我們就可以用矩陣的乘法來表示最初的k個(gè)偏導(dǎo)數(shù)為0的等式,即

注意:其中X是k*k的矩陣,A是k*1的矩陣,Y是k*1的矩陣,符合矩陣的乘法規(guī)則
從矩陣表達(dá)式可以看出,X和Y矩陣是已知的,A矩陣只包含待求解的f(x)的所有多項(xiàng)式系數(shù),則問題即轉(zhuǎn)化為線性方程組:XA=Y
求解線性方程組,大概有如下算法
(1)高斯消元法(全主元、列主消元)
(2)LU三角分解法
(3)雅克比迭代法
(4)逐次超松弛(SOR)迭代法
(5)高斯-賽德爾迭代法
這里我們采用高斯消元法來求解A,具體算法步驟較為復(fù)雜,我們在單獨(dú)的章節(jié)介紹高斯消元算法
八、python編程實(shí)現(xiàn)擬合曲線函數(shù)
生成帶有噪點(diǎn)的待擬合的數(shù)據(jù)集合

計(jì)算最小二乘法當(dāng)前的誤差

迭代解法:最小二乘法+梯度下降法

數(shù)學(xué)解法:最小二乘法+求解線性方程組

九、結(jié)果分析
我們來擬合N=10次冪的多項(xiàng)式,分別用梯度下降法和求解線性方程組的算法來比較擬合結(jié)果
(1)使用梯度下降法來優(yōu)化目標(biāo)函數(shù),其擬合結(jié)果為:

其誤差變化為

(2)使用求解線性方程組來優(yōu)化目標(biāo)函數(shù),其擬合結(jié)果為:

其誤差變化為

比較上述兩種解法,以及多項(xiàng)式擬合的思想,我們可以總結(jié)出
(1)利用函數(shù)的近似多項(xiàng)式表示,和最小二乘法來表示目標(biāo)函數(shù),我們可以高效的擬合非線性函數(shù)
(2)梯度下降法可以一步步迭代逼近目標(biāo)函數(shù)的極值,而不用直接求出偏導(dǎo)數(shù)最優(yōu)解
(3)求解方程組,使用數(shù)學(xué)消元的算法,直接一步優(yōu)化完成了目標(biāo)函數(shù)的偏導(dǎo)數(shù)最優(yōu)解
(4)從結(jié)果上比較,求解方程組的效率和擬合結(jié)果要比梯度下降法好