Python程式設計實現多項式擬合

2021-08-15 11:02:45 字數 1977 閱讀 6982

初學機器學習,看到書中講線性擬合,便試著用python程式設計實現。所要擬合的函式為: f(

x)=sin(x

)+ξ,

x∈(0

,20) f(x

)=sin⁡(x

)+ξ,

x∈(0

,20)其中,

ξ ξ

服從均差為0.3的高斯分布。

實現**如下:

import numpy as np

import matplotlib.pyplot as plt

import math

class

polynomialfitting

(object):

def__init__

(self,degree=5,scale=50):

self.degree=degree

self.scale=scale

# 生成特徵矩陣x

defgeneratingx

(self):

self.x=np.arange(0,20,20/self.scale)

self.x=np.ones((self.scale,self.degree+1))

for i in range(self.scale):

for j in range(self.degree+1):

self.x[i,j]=math.pow(self.x[i],j)

# 生成矩陣y

defgeneratingy

(self):

self.y=np.sin(self.x)+np.random.normal(scale=0.1,size=len(self.x))

self.y=self.y.reshape(self.scale,1)

# 求係數a

defgeneratinga

(self):

self.a=np.linalg.inv(np.dot(self.x.t,self.x)).dot(self.x.t).dot(self.y)

print("係數矩陣為:")

print(self.a)

# 測試

deftest

(self):

plt.plot(self.x,self.x.dot(self.a),'r')

plt.plot(self.x,self.y,'g.')

plt.title("degree="+str(self.degree))

plt.show()

defmain

(): p=polynomialfitting(degree=25,scale=1000)

p.generatingx()

p.generatingy()

p.generatinga()

p.test()

if __name__=="__main__":

main()

多次改變次數degree,所得結果如下(其中綠點為資料點,紅線為擬合曲線):

可以看出,次數為15次時效果最好。在多項式擬合中,並不是次數越高擬合效果越好

多項式擬合缺點 多項式擬合

在網上看別人的心得 一 最小二乘法的基本原理 從整體上考慮近似函式同所給資料點 i 0,1,m 誤差 i 0,1,m 的大小,常用的方法有以下三種 一是誤差 i 0,1,m 絕對值的最大值,即誤差 向量的 範數 二是誤差絕對值的和,即誤差向量r的1 範數 三是誤差平方和的算術平方根,即誤差向量r的2...

多項式擬合

class1.cs 擬合類 using system using system.collections.generic using system.text namespace 最小二乘法擬合多項式 guass i,j sumarr arrx,i,arry,1,length return comput...

多項式擬合

多項式擬合 多項式的一般形式 y p x n p x p x p x p 多項式擬合的目的是為了找到一組p0 pn,使得擬合方程盡可能的與實際樣本資料相符合。假設擬合得到的多項式如下 f x p x n p x p x p x p 則擬合函式與真實結果的差方如下 loss y 1 f x 1 2 y...