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中的可变对象和不可变对象
Jul 07 Python
利用python批量修改word文件名的方法示例
Oct 17 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
详解python3中tkinter知识点
Jun 21 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
Python3.5运算符操作实例详解
Apr 25 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
python Tkinter的图片刷新实例
Jun 14 Python
PyQt5固定窗口大小的方法
Jun 18 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
python3 配置logging日志类的操作
Apr 08 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 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版(4)
2006/10/09 PHP
ThinkPHP的URL重写问题
2014/06/22 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
js word表格动态添加代码
2010/06/07 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
初中三好学生事迹材料
2014/01/13 职场文书
物流专员岗位职责
2014/02/17 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
小学班级标语口号大全
2015/12/26 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL