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