數值分析 多項式最小二乘回歸 Python實現

2021-09-14 04:03:18 字數 2690 閱讀 1041

僅供參考

配置環境

# -*- coding: utf-8 -*-

"""created on thu nov 29 21:09:27 2018

多項式回歸

@author: hhuaf

"""import matplotlib.pyplot as plt

from sklearn.preprocessing import polynomialfeatures

import numpy as np

'''每次執行不一樣

i為樣本號

[xi,yi]

yi=eaixi

資料集有0-n n+1個

高次項有x^0-n 的

先構造0-2n

'''#可以顯示中文

plt.rcparams["font.sans-serif"] = ["simhei"]

plt.rcparams['axes.unicode_minus'] = false

# 設定風格

plt.style.use('ggplot')

class polynomialregression():

def __init__(self):

self.w = none

self.pol=none

self.degree=none

def fit(self, x, y, n):

if type(x)!=np.ndarray:

x=np.array(x)

if len(x.shape) <= 2:

x=x.reshape([-1,1])

if type(y)!=np.ndarray:

y=np.array(y)

if len(y.shape)<=2:

y=y.reshape([-1,1])

# 樣本數

assert x.shape[0] == y.shape[0]

self.degree=n

self.w=self.mat_transform(x,y)

return self

def mat_transform(self,x,y):

self.pol=polynomialfeatures(degree=self.degree)

x_t=np.mat(self.pol.fit_transform(x))

xx=x_t.t*x_t

xy=x_t.t*np.mat(y)

return xx.i*xy

def predict(self, x):

if type(x)!=np.ndarray:

x=np.array(x)

if len(x.shape)==1:

x=x.reshape([-1,1])

x = self.pol.fit_transform(x)

x=np.mat(x)

return np.array(x*self.w)

def generate_data(a,start,end,sample_num):

pol=polynomialfeatures(len(a)-1)

xx=np.arange(start,end,0.01).reshape([-1,1])

x_t=pol.fit_transform(xx)

yy=(x_t*np.array(a)).sum(axis=1)

yy=yy+np.random.randn(len(yy))

# print(xx.shape,":",yy.shape)

# print(xx)

plt.scatter(xx.reshape(-1),yy)

select_num=np.random.choice(np.arange(len(xx)),[sample_num])

return xx.reshape(-1),yy,[xx[i] for i in select_num],[yy[i] for i in select_num]

n=int(input("請輸入最高次項數:\n"))

m=int(input("請輸入樣本量:(越多越好)\n"))

a=2*np.random.randn(n+1)

fig = plt.figure(figsize = (8, 10))

plt.subplot(2,1,1)

plt.xlabel('x')

plt.ylabel('y')

plt.title('原函式抖動散點圖像')

sca_x,sca_y,fit_x,fit_y=generate_data(a,-2,2,m)

model=polynomialregression()

model.fit(fit_x,fit_y,n)

a_fit=model.w

print('原係數',a)

print('擬合係數',np.array(a_fit).reshape(-1))

y_pre=model.predict(sca_x)

plt.subplot(2,1,2)

plt.xlabel('x')

plt.ylabel('y')

plt.title('多項式擬合影象')

plt.scatter(fit_x,fit_y)

plt.plot(sca_x,y_pre)

plt.show()

最小二乘法 多項式

多項式最小二乘法 基於一元二次方程進行推理 方程式是 f x ax 2 bx c 其中點 n x i,y i 表示多個點資訊,擬合乙個二次方程 其中原理為 i 1 n a x i 2 bx i c y i 2 min 對各個係數求導 i 1 n a x i 2 bx i c y i 2 min 對a...

最小二乘法擬合多項式

最小二乘法擬合多項式 求解 給定資料點 xi yi 用最小二乘法擬合資料的多項式,並求平方誤差。include include include include using namespace std const int maxn 1000 int n,m double b maxn xy doubl...

sklearn 最小二乘線性回歸

sklearn是機器學習中的乙個常用的python第三方模組,裡面對機器學習的許多方法進行了封裝,在進行機器學習的任務時,許多常用的演算法可在這個模組中直接呼叫。並且sklearn中還提供了許多可用於分類 回歸的優質資料集。使用好sklearn最直接的方法就是仔細閱讀官方 sklearn就像是乙個模...