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 相关文章推荐
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
python+mysql实现教务管理系统
Feb 20 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
Python流程控制 while循环实现解析
Sep 02 Python
python使用多线程+socket实现端口扫描
May 28 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 21 Python
Python中22个万用公式的小结
Jul 21 Python
Python实现视频自动打码的示例代码
Apr 08 Python
python游戏开发之pygame实现接球小游戏
Apr 22 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环境中Memcache的安装和使用
2015/11/05 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
JavaScript 乱码问题
2009/08/06 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
python selenium firefox使用详解
2019/02/26 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
int在python中的含义以及用法
2019/06/27 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
Python如何实现线程间通信
2020/07/30 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
小学生清明节演讲稿
2014/09/05 职场文书
学校运动会通讯稿
2015/07/18 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python