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使用urllib2模块获取gravatar头像实例
Dec 18 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
python实现接口并发测试脚本
Jun 25 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 Python
Python退出时强制运行一段代码的实现方法
Apr 29 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
Python编解码问题及文本文件处理方法详解
Jun 20 Python
python实现学员管理系统(面向对象版)
Jun 05 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模板原理讲解
2013/11/13 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
javascript,jquery闭包概念分析
2010/06/19 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
python追加元素到列表的方法
2015/07/28 Python
python获取代码运行时间的实例代码
2018/06/11 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
常见的软件开发流程有哪些
2015/11/14 面试题
电话销售经理岗位职责
2013/12/07 职场文书
自我评价的范文
2014/02/02 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers