多项式函数的拟合问题,说明过拟合与模型的选择问题
先看效果图,如果不是你想找的资料,请直接移步。
问题描述:假定一个训练数据集:T = {(x1,y1),(x2,y2),...,(xn,yn)},其中n=10。多项式拟合的任务是假设给定数据由M次多项式生成,选择最优可能生成这些数据的M次多项式函数,即在M次多项式函数中选择一个对已知数据及未知数据都有很好预测能力的函数。
解题思路:
(1)生成这10个数据点
(2)这10个数据点的可视化,判断大致的规律
(3)用sklearn拟合数据点
(4)评价
具体做法:
(1)生成这10个数据点:
我采用的是正弦型函数+高斯噪声来生成这10个数据点。
问题一:为什么要采用正弦型函数?
答:根据高数中的泰勒定理可知,任何n阶可导的函数,一定能写成多项式的和,正好正弦型函数n阶可导。
问题二:为什么要加高斯噪声?
答:如果不加高斯噪声,生成的数据就一定符合某个函数解析式,而且是完全相等(点就是由某个函数产生的),就没必要是拟合的问题了。
python代码:
#数据的产生 X = np.linspace(0,2*np.pi,10,endpoint=True) #0到2pi上均匀产生10个数 Y = np.sin(X) average = 0 sigma = 0.12 for i in range(X.size):X[i] += random.gauss(average,sigma)Y[i] += random.gauss(average,sigma)
产生的数据如下:
(-0.0086607015539967268, 0.046640267459409392)
(0.63988577452638629, 0.66763215333197345)
(1.5765394142915448, 1.0011937195346221)
(2.1469473903248719, 0.71407117620307103)
(2.7472844222665986, 0.25736883764300039)
(3.3797521471921779, -0.096798931131669264)
(4.1367221867677184, -0.75786232875251713)
(4.7842435861592172, -0.89872880432578006)
(5.5560623572294228, -0.54735342635385387)
(6.2845501538650312, -0.059034585898417841)
(2)这10个数据点的可视化,判断大致的规律
从一开始给出的那个图能轻易看出,数据点大致符合正弦型函数的规律,(这个是先有鸡还是先有蛋的问题),我们现在的角度是假设这个数据是别人直接给你的,你并不知道是用什么模型产生的。
(3)用sklearn拟合数据点
这里说一个比较“显而易见”的常识,1阶多项式可以完美拟合2个点,二阶多项式可以完美拟合3个点,以此类推,9阶多项式可以完美拟合10个点,所以我采用:M = [0,1,3,9],M为多项式的最高阶次数。
完整代码:
# -*- coding: utf-8 -*- __author__ = 'wys' import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model from sklearn.preprocessing import PolynomialFeatures import random """ 多项式函数的拟合问题,说明过拟合与模型的选择。 """ #数据的产生 X = np.linspace(0,2*np.pi,10,endpoint=True) #0到2pi上均匀产生10个数 Y = np.sin(X) average = 0 sigma = 0.12 for i in range(X.size):X[i] += random.gauss(average,sigma)Y[i] += random.gauss(average,sigma) fig = plt.figure(figsize=(10,6), facecolor = 'gray') lenth = len(X) x = np.array(X).reshape([lenth,1]) y = np.array(Y).reshape([lenth,1]) print("输入数据为10个2维坐标点(数据的产生是正弦函数 ""+高斯噪声):") for x1,y1 in zip(x,y):print((x1[0],y1[0])) M = [0,1,3,9] print("M为多项式的最高次数:"+"M=",M) intercept=[] coef=[] for i in range(1,5):ax1 = fig.add_subplot(2,2,i)plt.plot(X,Y,linestyle='',marker='.')for j in M:ploy_reg = PolynomialFeatures(degree=j)X_ploy = ploy_reg.fit_transform(x)lin_reg = linear_model.LinearRegression()lin_reg.fit(X_ploy,y)intercept.append(lin_reg.intercept_)coef.append(lin_reg.coef_)plt.plot(x,lin_reg.predict(ploy_reg.fit_transform(x)),color='blue',label='M='+str(j))plt.legend()M.pop(0)break print("学习到的拟合函数截距(偏置系数)",intercept) print("学习到的拟合函数参数(权重系数)",coef) plt.legend() print("绘图...") plt.show()
程序执行的结果:
(4)评价
选择三阶多项式来拟合该数据相对比较好。
纯手打,点个赞呗!
多项式函数的拟合问题,说明过拟合与模型的选择问题相关推荐
- Python对自定义离散点进行指定多项式函数拟合
自定义离散点进行指定多项式函数拟合 用户自己自己输入坐标点,拟合函数可根据用户输入的多项式的最高次方进行自动拟合函数,拟合方法采用最小二乘法进行函数拟合. (1,2),(2,5),(3,10),(4, ...
- 多项式在matlab中的应用,matlab的应用-多项式函数及多项式拟合
matlab的应用-多项式函数及多项式拟合 Matlab 的应用- 多项式函数及多项式拟合 本节将向大家简要介绍 matlab 在多项式处理方面的应用. 多项式函数主要有: roots 求多项式的根 ...
- MATLAB多项式函数拟合和曲线拟合
MATLAB软件提供了基本的曲线拟合函数的命令. 多项式函数拟合:a=polyfit(xdata,ydata,n) 其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式 ...
- 欠拟合和过拟合,多项式函数实验
多项式函数拟合实验 为了理解模型复杂度和训练数据集大小对欠拟合和过拟合的影响,下面我们以多项式函数拟合为例来实验.首先导入实验需要的包或模块. 我们将生成一个人工数据集.在训练数据集和测试数据集中,给 ...
- 从多项式函数拟合实验出发浅谈“模型选择、欠拟合和过拟合”问题
在本笔记中,我们将从简单易懂的多项式函数拟合实验出发,谈一谈如今做机器学习绕不开的三个重要概念:模型选择.欠拟合和过拟合,并且进一步挖掘如何选择模型.如何避免欠拟合和过拟合问题.本笔记主要从下面五个方 ...
- python多项式拟合_Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合。如 电...
Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合.如 电 多元函数拟合.如 电视机和收音机价格多销售额的影响,此时自变量有两个. python 解法:imp ...
- matlab 拟合函数打不开,Matlab-函数拟合
文章目录 0. 评价指标 1. 工具箱拟合--cftool 2. 万能拟合 --nlinfit 3. 多项式拟合 --polyfit 参考 0. 评价指标 一.SSE(和方差) 该统计参数计算的是拟合 ...
- false函数matlab,ISNUMBER函数使用表达式说明表 matlab拟合函数表达式
ISNUMBER函数使用表达式说明表 matlab拟合函数表达式,[excel助手]今天为大家分享一篇干货知识,如何设置matlab拟合函数表达式,今天的分享角度是从工作中常用的角度谈的,正如标题提到 ...
- 二次拟合r方_拟合R语言中的多项式回归
原标题:拟合R语言中的多项式回归 让我们看一个经济学的例子:假设你想购买一定数量q的特定产品.如果单价是p,那么你会支付总金额y.这是一个线性关系的典型例子.总价格和数量成正比. 如下所示: 但购买和 ...
最新文章
- mysql设置约束l命令_2、MYSQL 基本数据库命令及约束
- .net core 程序退出事件
- Thinking in java第一章对象导论
- sql查询字段的值不为空
- Python之字符串转换为日期、结合时区的日期操作
- 玩转Android之加速度传感器的使用,模仿微信摇一摇
- NameError: name ‘__file__‘ is not defined的问题原因及解决方法
- a + b + c 求和
- lstm网络一般训练多少轮_做网络推广一般多少钱:做网络推广 你一定会用到这个产品...
- 小毛thinking:why c# sucks and python rocks
- 一条命令关闭极域电子教室学生端
- 十二月英语——加入了新元素
- linux系统怎样设置分屏显示器,话说你们的双屏显示器是怎样设置的 尤其是外接显示器分辨率设置...
- 1958年第一台电子计算机,第一台电子计算机
- C#开发WinForm之DataGridView开发
- 【STM32】标准库-SDIO-SDHC
- ultral iso iy注册码9.3cn
- java中的notify和notifyAll有什么区别?
- 链表---给定一个排序链表,删除所有重复的元素每个元素只留下一个
- 云计算:云应用是什么?
热门文章
- 清理 linux 内核版本,清理Linux内核——基于Ubuntu发行版
- 精诚EAS-MES生产制造执行之机械加工业MES解决方案
- 虚拟机NAT连接断网解决办法
- 有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关, 这两个房间是分割开的,从一间里不能看到另一间的情况。 现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的。
- sql server2008r2数据库显示为可疑无法打开的解决办法(数据库损坏修复)
- 深入RocketMQ-消息原理篇
- tcl手机 手写java_TCL魔法手指V2.0 (使笔记本Synaptics触摸板变身为手写板)
- ThreadPoolTaskExecutor 使用和原理
- cmd中mysql的操作语句,mysql命令行操作大全 mysql命令行操作总结
- 忘记无线服务器密码怎么查,忘记自家的wifi密码 教你一招轻松查询