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通过BF算法实现关键词匹配的方法
Mar 13 Python
Python去除列表中重复元素的方法
Mar 20 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
python实现n个数中选出m个数的方法
Nov 13 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
Python如何读取、写入JSON数据
Jul 28 Python
Python通过字典映射函数实现switch
Nov 06 Python
如何利用Python实现一个论文降重工具
Jul 09 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
Prototype Template对象 学习
2009/07/19 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
python实现上传下载文件功能
2020/11/19 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
django中的setting最佳配置小结
2017/11/21 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
Python单元和文档测试实例详解
2019/04/11 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
专科毕业生就业推荐信
2013/11/01 职场文书
公关活动策划方案
2014/05/25 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
自查自纠工作总结
2014/10/15 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
实习证明模板
2015/06/16 职场文书
培训后的感想
2015/08/07 职场文书
公司管理建议书
2015/09/14 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书