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 15 Python
Python程序设计入门(5)类的使用简介
Jun 16 Python
Python中的异常处理相关语句基础学习笔记
Jul 11 Python
python-str,list,set间的转换实例
Jun 27 Python
Python3简单实现串口通信的方法
Jun 12 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
在Mac中配置Python虚拟环境过程解析
Jun 22 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 Python
python tkinter Entry控件的焦点移动操作
May 22 Python
python垃圾回收机制原理分析
Apr 13 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连接MySQL代码的参数说明
2008/06/07 PHP
php全排列递归算法代码
2012/10/09 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
Destoon模板制作简明教程
2014/06/20 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
python 为什么说eval要慎用
2019/03/26 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
2015年乡镇平安建设工作总结
2015/05/13 职场文书
导游词之无锡唐城
2019/12/12 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
nginx配置指令之server_name的具体使用
2022/08/14 Servers