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中使用pprint函数进行格式化输出的教程
Apr 07 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
Mar 14 Python
Python实现简单查找最长子串功能示例
Feb 26 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
Python安装OpenCV的示例代码
Mar 05 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
Python grpc超时机制代码示例
Sep 14 Python
UI自动化定位常用实现方法代码示例
Oct 27 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乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
理解python多线程(python多线程简明教程)
2014/06/09 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
在线课程:Skillshare
2019/04/02 全球购物
父亲生日宴会答谢词
2014/01/10 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
挂职学习心得体会
2014/09/09 职场文书
检讨书大全
2015/01/27 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
经销商会议开幕词
2016/03/04 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang