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常规方法实现数组的全排列
Mar 17 Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
python 调用有道api接口的方法
Jan 03 Python
对django后台admin下拉框进行过滤的实例
Jul 26 Python
python能做什么 python的含义
Oct 12 Python
Python绘制二维曲线的日常应用详解
Dec 04 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
python代码实现备忘录案例讲解
Jul 26 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
如何过滤高亮显示非法字符
2006/10/09 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
Python实现豆瓣图片下载的方法
2015/05/25 Python
Python如何获取系统iops示例代码
2016/09/06 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
Python操作csv文件实例详解
2017/07/31 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
python 不以科学计数法输出的方法
2018/07/16 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
YII2 全局异常处理深入讲解
2021/03/24 PHP
计算机本科生自荐信
2013/10/15 职场文书
高三自我鉴定范文
2013/10/19 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
转让协议书范本
2014/09/13 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
MYSQL如何查看操作日志详解
2022/05/30 MySQL
MySQL存储过程及语法详解
2022/08/05 MySQL