1. 程式人生 > >Python 確定多項式擬合/迴歸的階數

Python 確定多項式擬合/迴歸的階數

通過 1至10 階來擬合對比 均方誤差及R評分,可以確定最優的“最大階數”。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression,Perceptron
from sklearn.metrics import mean_squared_error,r2_score
from sklearn.model_selection import train_test_split

X = np.array([-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10]).reshape(-1, 1)
y = np.array(2*(X**4) + X**2 + 9*X + 2)
#y = np.array([300,500,0,-10,0,20,200,300,1000,800,4000,5000,10000,9000,22000]).reshape(-1, 1)

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
rmses = []
degrees = np.arange(1, 10)
min_rmse, min_deg,score = 1e10, 0 ,0

for deg in degrees:
	# 生成多項式特徵集(如根據degree=3 ,生成 [[x,x**2,x**3]] )
	poly = PolynomialFeatures(degree=deg, include_bias=False)
	x_train_poly = poly.fit_transform(x_train)

	# 多項式擬合
	poly_reg = LinearRegression()
	poly_reg.fit(x_train_poly, y_train)
	#print(poly_reg.coef_,poly_reg.intercept_) #係數及常數
	
	# 測試集比較
	x_test_poly = poly.fit_transform(x_test)
	y_test_pred = poly_reg.predict(x_test_poly)
	
	#mean_squared_error(y_true, y_pred) #均方誤差迴歸損失,越小越好。
	poly_rmse = np.sqrt(mean_squared_error(y_test, y_test_pred))
	rmses.append(poly_rmse)
	# r2 範圍[0,1],R2越接近1擬合越好。
	r2score = r2_score(y_test, y_test_pred)
	
	# degree交叉驗證
	if min_rmse > poly_rmse:
		min_rmse = poly_rmse
		min_deg = deg
		score = r2score
	print('degree = %s, RMSE = %.2f ,r2_score = %.2f' % (deg, poly_rmse,r2score))
		
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(degrees, rmses)
ax.set_yscale('log')
ax.set_xlabel('Degree')
ax.set_ylabel('RMSE')
ax.set_title('Best degree = %s, RMSE = %.2f, r2_score = %.2f' %(min_deg, min_rmse,score))  
plt.show()


因為因變數 Y = 2*(X**4) + X**2 + 9*X + 2 ,自變數和因變數是完整的公式,看圖很明顯,degree >=4 的都符合,擬合函式都正確。(RMSE 最小,R平方非負且接近於1,則模型最好)

如果將 Y 值改為如下:

y = np.array([300,500,0,-10,0,20,200,300,1000,800,4000,5000,10000,9000,22000]).reshape(-1, 1)


degree=3 是最好的,且 r 平方也最接近於1(注意:如果 R 平方為負數,則不準確,需再次測試。因樣本資料較少,可能也會判斷錯誤)。

相關推薦

Python 確定多項式/迴歸

通過 1至10 階來擬合對比 均方誤差及R評分,可以確定最優的“最大階數”。 import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import PolynomialFe

python numpy 多項式

#ecoding=utf-8 import matplotlib.pyplot as plt #生成離散x x = np.arange(-10 , 10 , 2) #生成離散y y = -2*x**2 - 5*x + 3 #二項式擬合 pfit = np.polyfit(x

Matlab考察多項式不同次誤差,並輸出到Excel

部落格已轉移至個人網站(http://www.p-chao.com) 方程擬合時,常常使用Matlab的工具箱cftool,這裡我使用的是polyfit函式(cftool中多項式擬合也使用的是這個

Python 普通最小二乘法(OLS)進行多項式

zlabel predict ylabel model for font 結果 param col 多元函數擬合。如 電視機和收音機價格多銷售額的影響,此時自變量有兩個。 python 解法: import numpy as np import pandas as

python手寫多項式、曲線

上篇部落格寫完之後,終於發現自己線性迴歸入門!然後洗澡的時候就在想一個問題,線性迴歸會了,寫線性擬合是完全沒問題的,但是np庫的多項式擬合到底是怎麼做出來的呢?突然靈光一閃多項式擬合?多變數的線性迴歸?好像發現了什麼?重新理清一下思路。什麼是多項式擬合?對的,這個問題以前沒有

Matlab多項式測試

fit ont ext tla mar net code 生成 hold x=0:0.2:4; %生成等差數列 rnd=rand(1,size(x,2))*5; %生成一組隨機數 y=x.*x.*x+x.*x+6+rnd;

卡爾曼濾波實現多項式Matlab

nom and kalman ffi 樣本 矩陣 協方差 數組 fontsize %%%%%%%%%%%%%Q3:多項式系數估計%%%%%%%%%%%%%%%% %%%%%%%%%%2016/07/21%%%%%%%%%%%%%%%%%%% clc;clear;

神經網絡是如何任意函

區間 簡單 接下來 分段 技術 1-1 使用 條件 否則 一個最原始粗暴的擬合任意函數的思路,是將函數切成很多段線性函數,之後用邏輯門控制當x在哪一個區間時,某些邏輯門被激活,對應的線性函數的權重w與偏移量b在邏輯門的包裹下變成非0,計算出y在這一段的輸出值。 需要推導

多項式的cpp實現

efficient 使用 value none mina real build get column 當我們擁有一組散點圖數據時,通常更願意看到其走勢。 對現有數據進行擬合,並輸出擬合優度是常用的方法之一。 擬合結果正確性的驗證,可以使用excel自帶的功能。 下面是c

關於神經網絡任意函的討論

www. 工作 clas pos tps nbsp gpo https .cn 參考這篇文章: https://www.cnblogs.com/yeluzi/p/7491619.html 從這篇文章看, 1. 文章裏面討論的是兩層隱藏層的,但是實際上一層網絡就能擬合任意

matlab練習程序(最小二乘多項式

相關 sum 因此 使用 val fit width clas height 最近在分析一些數據,就是數據擬合的一些事情,用到了matlab的polyfit函數,效果不錯。 因此想了解一下這個多項式具體是如何擬合出來的,所以就搜了相關資料。 這個文檔介紹的還不錯,我估計

sklearn 通過檢查是否具有屬性確定是否過了

As model_selection.GridSearchCV uses set_params to apply parameter setting to estimators, it is essential that calling set_params has the same effect as se

資料多項式polynomial curve fitting

常見的曲線擬合方法 1.使偏差絕對值之和最小 2.使偏差絕對值最大的最小 3.使偏差平方和最小 按偏差平方和最小的原則選取擬合曲線,並且採取二項式方程為擬合曲線的方法,稱為最小二乘法。 皮皮blog 多項式擬合 多項式擬合公式 多項式階數對資料擬合的影響

迴歸方法小結

訊號的擬合方法有多種,對訊號進行擬合也就是迴歸分析的方法有多種。通常用於預測分析,時間序列模型以及發現變數之間的因果關係。 迴歸分析是建模和分析資料的重要工具,進行曲線擬合使得曲線或線到資料點的差異達到最小。 各種各樣的迴歸技術用於預測,這些技術主要有三個度量(自變數的個

Pytroch學習筆記(1)--關係迴歸)|莫凡python

Pytroch學習筆記(1)–關係擬合(迴歸)|莫凡python 本文使用Pytorch構建一個簡單的神經網路,可以在資料當中找到他們的關係, 然後用神經網路模型來建立一個可以代表他們關係的線條 import torch import torch.nn.functional as F

python指數、冪curve_fit

python指數、冪數擬合curve_fit 1、一次二次多項式擬合 一次二次比較簡單,直接使用numpy中的函式即可,polyfit(x, y, degree)。 2、指數冪數擬合curve_fit 使用sci

Python開始機器學習(3:資料與廣義線性迴歸

機器學習中的預測問題通常分為2類:迴歸與分類。簡單的說迴歸就是預測數值,而分類是給資料打上標籤歸類。本文講述如何用Python進行基本的資料擬合,以及如何對擬合結果的誤差進行分析。本例中使用一個2次函式加上隨機的擾動來生成500個點,然後嘗試用1、2、100次方的多項式對該資

一元非線性迴歸-多項式函式

# coding=utf-8 ''' 作者:Xiaole Wen 程式:多項式曲線擬合演算法 ''' import matplotlib.pyplot as plt import math import numpy import random fig = plt.figure() ax = fig.add

機器學習迴歸演算法多項式

code:import numpy as np from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV, ElasticNetCV from sklearn.preprocessing impor

決策演算法進:屬性測試條件、最佳劃分度量、過現象的處理

我們在先前博文中已經簡要介紹了決策樹的思想和幾個經典演算法來構造決策樹:《決策樹演算法簡介及其MATLAB實現程式碼》。今天我們要針對決策樹繼續深入探討一些的問題,目錄如下: 目錄 一、表示屬性測試條件的方法 二、選擇最佳劃分的度量 三、處理決策樹歸納中的過分擬合現象 一、表