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 相关文章推荐
解析Python中的变量、引用、拷贝和作用域的问题
Apr 07 Python
Python中的rjust()方法使用详解
May 19 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
python实现二叉查找树实例代码
Feb 08 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
Python 监测文件是否更新的方法
Jun 10 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 Python
pycharm无法安装cv2模块问题
May 20 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之XML转数组函数的详解
2013/06/07 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
微信小程序生成二维码的示例代码
2019/03/29 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
python中append实例用法总结
2019/07/30 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
jupyter实现重新加载模块
2020/04/16 Python
python中if嵌套命令实例讲解
2021/02/25 Python
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
泰国网上购物:Shopee泰国
2018/09/14 全球购物
社区包粽子活动方案
2014/01/21 职场文书
班级心理活动总结
2014/07/04 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
Mysql数据库group by原理详解
2022/07/07 MySQL