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()
Python 确定多项式拟合/回归的阶数
Python 确定多项式拟合/回归的阶数
인 변수 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)
Python 确定多项式拟合/回归的阶数
Python 确定多项式拟合/回归的阶数
degree=3 이 가장 좋 고 r 제곱 도 1 에 가장 가깝다(주의:R 제곱 이 마이너스 라면 정확 하지 않 으 므 로 다시 테스트 해 야 한다.견본 데이터 가 비교적 적기 때문에 잘못 판단 할 수도 있다.
이상 의 이 Python 은 여러 가지 의합/회귀 의 단계 인 스 턴 스 를 확정 하 였 습 니 다.바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기