Python 确定多项式拟合/回归的阶数实例


Posted in Python onDecember 29, 2018

通过 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 确定多项式拟合/回归的阶数实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
python使用pycharm环境调用opencv库
Feb 11 Python
pandas 将索引值相加的方法
Nov 15 Python
python爬虫超时的处理的实例
Dec 19 Python
python可视化实现代码
Jan 15 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
django框架实现模板中获取request 的各种信息示例
Jul 01 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
用Python写一个自动木马程序
Sep 17 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 #Python
Python实现高斯函数的三维显示方法
Dec 29 #Python
Python3 SSH远程连接服务器的方法示例
Dec 29 #Python
使用python绘制3维正态分布图的方法
Dec 29 #Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 #Python
对python指数、幂数拟合curve_fit详解
Dec 29 #Python
对python实现二维函数高次拟合的示例详解
Dec 29 #Python
You might like
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
PHP调用其他文件中的类
2018/04/02 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&Firefox] 有文档和例子
2007/05/30 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
使用Python对SQLite数据库操作
2017/04/06 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
教师师德演讲稿
2014/05/06 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
法人身份证明书
2014/10/08 职场文书
公司搬迁通知
2015/04/20 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫