僅供參考
配置環境
# -*- 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就像是乙個模...