李航《統計學習方法》 多項式函式擬合問題第一章

2021-08-20 20:25:43 字數 3495 閱讀 6656

=t=

i∈rxi∈r

是輸入x

x的觀測值,yi∈

ryi∈r

是相應的輸出y的觀測值,i=1

,2,⋯

,ni=1,2,⋯,n

,多項式函式擬合的任務是假設給定資料由m

m次多項式函式生成,選擇最有可能產生這些資料的m

m次多項式函式,即在m

m次多項式函式中選擇乙個對已知資料以及未知資料都有很好**能力的函式。

m次多項式為m(

x,w)

=w0+

w1x+

w2x2

+⋯+w

mxm=

∑j=0

mwjx

jfm(x,w)=w0+w1x+w2x2+⋯+wmxm=∑j=0mwjxj

x式單變數輸入,w0,

w1,⋯

,wmw0,w1,⋯,wm是m+

1m+1

個引數。212

是為了方便計算,將模型與訓練資料代入,有 (w

)=12

∑i=1

n(∑j

=0mw

jxji

−yi)

2l(w)=12∑i=1n(∑j=0mwjxij−yi)2jwj

求偏導並令其為00e

t∂l(

w)∂w

k=0⇒

12∑i

=1n2

(∑j=

0mwj

xji−

yi)×

xki=

0⇒∑i

=1n∑

j=0m

wjxj

i=∑i

=1nx

kiyi

(k=0

,1,2

,⋯,m

)set∂ l(w)∂wk=0⇒12∑i=1n2(∑j=0mwjxij−yi)×xik=0⇒∑i=1n∑j=0mwjxij=∑i=1nxikyi(k=0,1,2,⋯,m)∗0

,w∗1

,⋯,w

∗mw0∗,w1∗,⋯,wm∗

需要解下面這個線性方程組,下面的求和符號上下限都是i=1

i=1到n

n,為了方便略去不寫。⎣⎢

⎢⎢⎢⎢

⎢⎢⎢⎢

n∑xi

∑x2i

⋮∑xm

i∑xi

∑x2i

∑x3i

⋮∑xm

+1i∑

x2i∑

x3i∑

x4i⋮

∑xm+

2i⋯⋯

⋯⋱⋯∑

xmi∑

xm+1

i∑xm

+2i⋯

∑x2m

i⎤⎦⎥

⎥⎥⎥⎥

⎥⎥⎥⎥

⎛⎝⎜⎜

⎜⎜⎜⎜

⎜w0w

1w2⋮

wm⎞⎠

⎟⎟⎟⎟

⎟⎟⎟=

⎡⎣⎢⎢

⎢⎢⎢⎢

⎢⎢∑y

i∑xi

yi∑x

2iyi

⋮∑xm

iyi⎤

⎦⎥⎥⎥

⎥⎥⎥⎥

⎥[n∑xi∑xi2⋯∑xim∑xi∑xi2∑xi3⋯∑xim+1∑xi2∑xi3∑xi4⋯∑xim+2⋮⋮⋮⋱⋯∑xim∑xim+1∑xim+2⋯∑xi2m](w0w1w2⋮wm)=[∑yi∑xiyi∑xi2yi⋮∑ximyi]i=

1nxj

i(j=

0,1,

2,⋯,

2m)∑i=1nxij(j=0,1,2,⋯,2m)和∑i

=1nx

jiyi

(j=0

,1,2

,⋯,m

)∑i=1nxijyi(j=0,1,2,⋯,m)

然後將這些值帶入上述線性方程組求解即可。

# coding=utf-8

'''程式:多項式曲線擬合演算法

'''import matplotlib.pyplot as plt

import math

import numpy

import random

fig = plt.figure()

ax = fig.add_subplot(111)

#在這裡給出擬合多項式的階數

order=9

#生成曲線上的各個點

x = numpy.arange(-1,1,0.02)

y = [((a*a-1)*(a*a-1)*(a*a-1)+0.5)*numpy.sin(a*2) for a in x]

#ax.plot(x,y,color='r',linestyle='-',marker='')

#,label="(a*a-1)*(a*a-1)*(a*a-1)+0.5"

plt.plot(x,y)

#生成的曲線上的各個點偏移一下,並放入到xa,ya中去

i=0xa=

ya=for xx in x:

yy=y[i]

d=float(random.randint(60,140))/100

#ax.plot([xx*d],[yy*d],color='m',linestyle='',marker='.')

i+=1

ax.plot(xa,ya,color='m',linestyle='',marker='.')

#儲存從0次到m次的所有冥方和

bigmat=

for j in range(0,2*order+1):

sum=0

for i in range(0,len(xa)):

sum+=(xa[i]**j)

#計算線性方程組係數矩陣

mata=

for rownum in range(0,order+1):

row=bigmat[rownum:rownum+order+1]

mata=numpy.array(mata)

matb=

for i in range(0,order+1):

ty=0.0

for k in range(0,len(xa)):

ty+=ya[k]*(xa[k]**i)

matb=numpy.array(matb)

mataa=numpy.linalg.solve(mata,matb)

#畫出擬合後的曲線

#print(mataa)

xxa= numpy.arange(-1,1.06,0.01)

yya=

for i in range(0,len(xxa)):

yy=0.0

for j in range(0,order+1):

dy=(xxa[i]**j)

dy*=mataa[j]

yy+=dy

ax.plot(xxa,yya,color='g',linestyle='-',marker='')

ax.legend()

plt.show()

統計學習方法概論 《統計學習方法》李航著

統計學習由 監督學習,非監督學習,半監督學習和強化學習組成。監督學習方法主要包括 分類 標註 與 回歸問題 回歸問題 輸入變數 和 輸出變數 均為連續變數的 問題 分類問題 輸出變數為有限個離散變數的 問題 標註問題 輸入與輸出變數均為變數序列的 問題 統計學習三要素 模型,策略,演算法 損失函式度...

(李航統計學習方法)提公升方法

本文主要包括adaboost和提公升樹,後期會擴充套件到xgboost和lightgbm。boosting通過改變樣本訓練權重,學習多個弱分類器,最後進行線性組合,提高分類效能。兩個著重點 如何改變資料的樣本權重或概率分布 如何將弱分類器整合成強分類器 初始化樣本資料權重,假設樣本權重均勻分布,得到...

《統計學習方法》 李航 學習大綱

最近在學習李航寫的統計學習方法概論,每一章都用xmind理清了思路,括號裡是書裡的公式,第一次寫博文,敬請指教 第一章 統計學習方 第二章 感知機 每個方法其實只需要著重掌握三要素和輸入輸出就可以了,主要看模型 策略和演算法。感知機主要是二類分類的線性分類模型。看到後面會注意感知機和支援向量機的區別...