高考考试网
当前位置: 首页 高考资讯

最小二乘算法与二次拟合区别(最小二乘法ordinaryleast)

时间:2023-08-23 作者: 小编 阅读量: 3 栏目名: 高考资讯

最小二乘法理论最小二乘法是一种数学优化技术。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。是解决曲线拟合最常用的方法,其思路如下:其中,是预选定的一组线性相关的函数,是待定系数,拟合准则是使与的距离的平方和最小,称为最小二乘法准则。三维空间中,定义4x4的网格,首先定义z值,而网格点上的z值不一样,我们所要做的就是根据这个z值去拟#合这个面上所有点的值。

  • 最小二乘法理论

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。是解决曲线拟合最常用的方法,其思路如下:

其中,是预选定的一组线性相关的函数,是待定系数,拟合准则是使与的距离的平方和最小,称为最小二乘法准则

最小二乘准则进行最小二乘平差计算的一个基本原则

  • 代码示例

import pandas as pdimport numpy as npfrom sklearn.linear_model import LinearRegressionimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D#----------------------------------------------------------------------------------------------------------------------# Step1:创建需要被拟合的目标。三维空间中,定义4x4的网格,首先定义z值,而网格点上的z值不一样,我们所要做的就是根据这个z值去拟#合这个面上所有点的值。#----------------------------------------------------------------------------------------------------------------------np.random.seed(0)dim = 4Z = (np.ones((dim, dim)) * np.arange(1, dim 1, 1))**3np.random.rand(dim, dim) * 200x = np.arange(1, dim 1).reshape(-1, 1)y = np.arange(1, dim 1).reshape(1, -1)X, Y = np.meshgrid(x, y)#----------------------------------------------------------------------------------------------------------------------# Step2:自定义一组线性相关的函数, 3阶。#----------------------------------------------------------------------------------------------------------------------features = {}features['x^0*y^0'] = np.matmul(x**0, y**0).flatten()features['x*y'] = np.matmul(x, y).flatten()features['x*y^2'] = np.matmul(x, y**2).flatten()features['x^2*y^0'] = np.matmul(x**2, y**0).flatten()features['x^2*y'] = np.matmul(x**2, y).flatten()features['x^3*y^2'] = np.matmul(x**3, y**2).flatten()features['x^3*y'] = np.matmul(x**3, y).flatten()features['x^0*y^3'] = np.matmul(x**0, y**3).flatten()dataset = pd.DataFrame(features)#----------------------------------------------------------------------------------------------------------------------# Step3:将选定函数与目标值带入SkLearn包中的线性回归拟合模块,它可以使平方和最小,结果返回截距和斜率。#----------------------------------------------------------------------------------------------------------------------reg = LinearRegression().fit(dataset.values, Z.flatten())# reg.intercept_为截距, reg.coef_为斜率z_pred = reg.intercept_np.matmul(dataset.values, reg.coef_.reshape(-1, 1)).reshape(dim, dim)#----------------------------------------------------------------------------------------------------------------------# Step4:可视化。#----------------------------------------------------------------------------------------------------------------------fig = plt.figure(figsize=(5, 5))ax = Axes3D(fig)ax.plot_surface(X, Y, z_pred, label='prediction', cmap=plt.get_cmap('rainbow'))ax.scatter(X, Y, Z, c='r', label='datapoints')plt.show()

结果如下:

图1

上例定义的多项式阶数为3,对于大多数问题已经足够了,如果想定义更高阶数,则可参考如下代码:

import itertoolsimport numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D#-----------------------------------------------------------------------------------------------------------------------# Step1: 创建线性相关的函数,阶数自己定义,结果为拟合系数;#-----------------------------------------------------------------------------------------------------------------------def polyfit2d(x, y, z, order):ncols = (order1)**2G = np.zeros((x.size, ncols))ij = itertools.product(range(order 1), range(order 1))for k, (i, j) in enumerate(ij):G[:, k] = x**i * y**jm, _, _, _ = np.linalg.lstsq(G, z, rcond=-1) # lstsq的输出包括四部分:回归系数、残差平方和、自变量X的秩、X的奇异值return m#-----------------------------------------------------------------------------------------------------------------------# Step2: 创建拟合函数,将欲拟合值和拟合系数待入,返回预测值;#-----------------------------------------------------------------------------------------------------------------------def polyval2d(x, y, m):order = int(np.sqrt(len(m))) - 1 # 根据多项式的列数反算阶数ij = itertools.product(range(order 1), range(order 1))z = np.zeros_like(x)for a, (i, j) in zip(m, ij):z= a * x**i * y**jreturn z#-----------------------------------------------------------------------------------------------------------------------# Step3: 示例;#-----------------------------------------------------------------------------------------------------------------------x = np.array([4, 5, 5, 4])y = np.array([2, 3, 4, 5])z = np.array([2, 3, 4, 7])N_ORDER = 4m = polyfit2d(x, y, z, N_ORDER)N_MESH = 10xx, yy = np.meshgrid( np.linspace(x.min(), x.max(), N_MESH),np.linspace(y.min(), y.max(), N_MESH))zz = polyval2d(xx, yy, m)#-----------------------------------------------------------------------------------------------------------------------# Step4: 可视化;#-----------------------------------------------------------------------------------------------------------------------fig = plt.figure(figsize=(5, 5))ax = Axes3D(fig)ax.plot_surface(xx, yy, zz, label='prediction', cmap=plt.get_cmap('rainbow'))ax.scatter(x, y, z, c='r', label='datapoints')plt.show()

结果如下:

最小二乘法很基本也很常用,其本质是插值,但是我发现在当数值非常大时它的效果却不是很好,这时候就需要用到一些其他的方法,比如克里金法等。

声明:仅供参考

    推荐阅读
  • 如何在ps中用钢笔抠图(用PS抠图钢笔抠图法)

    用PS抠图钢笔抠图法CTRLO打开素材选择钢笔工具选择出物体的轮廓用PS抠图钢笔抠图法CTRLENTER回车键建立选区选择-修改-羽化用PS抠图钢笔抠图法值为2像素用PS抠图钢笔抠图法选择背景图CTRLJ拷贝图层用PS抠图钢笔抠图法CTRLSHIFTN新建空白图层ALTDEL填充前景色用PS抠图钢笔抠图法

  • 巴西龟眼睛闭眼怎么治(治疗巴西龟的眼睛)

    冬季是一些小动物冬眠的季节,所以它不吃另一只也不吃,两只小家伙就在龟盒子里迷茫。小孩也着急,一直要求我和她爸爸帮帮这只小乌龟,让它的眼睛快点好起来。从去年11月份滴到今年的三月底,4月1号那天,春天的眼睛突然睁开了,女儿一放学看到可开心了!直接打电话告诉爸爸,小乌龟好起来了。几个月没吃东西,真的快饿惨了。孩子爸爸说,别在推测了,好了就好了,好好养它们就行了。因为健康比什么都重要,哪怕它是一只小乌龟。

  • 部落冲突部落战怎么才能打(部落战中不同阵容打法详解)

    对于上面这个阵容,为了更容易取得满星,我们毫无疑问选择飞龙,首先自己训练10条3级飞龙和三个地震法术,城堡可以请求支援一条高等级龙和一个黑气球外加一个地震法术。之后用4个地震法术摧毁上方的两个火箭,不需要引援兵直接在挨着大本营的那一个角放出全部兵力,8本可以带蛮王挨着龙放就可以了,接下来就坐享胜利之声,满星十拿九稳。取得胜利是必然的但是能否取得满星还得看实际情况。

  • 小米饭的做法(小米饭的做法介绍)

    小米饭的做法将新鲜的小米放入一个大点的不锈钢盆里面,或者瓷碗里面,用清水清洗两遍,之后加入两碗清水,加水量的的大小,应该以清水没过小米一倍的深度为最佳,把准备好的少许豌豆和枸杞洗净放入盆中,用筷子轻轻搅拌均匀即可下锅了。将一个蒸锅或者焖罐加入二斤清水,烧开,然后放上帘子,将刚才准备好的整盆小米放进蒸笼,盖上盖子,蒸大概四十分钟左右,即可出锅食用,蒸出来的小米饭色泽金黄,香气扑鼻,营养丰富。

  • 景如洋书名打分105分

    文章目录:一、景如洋相关名字打分117二、景如洋相关名字评分101三、景如洋相关名字推荐四、景如洋相关名字大全五、其他人还看了一、景如洋相关名字打分117景正景誉景澜景田景南苑景淼景海俊景翔景禹景烁景日昣景驹景喜猷景苏景御景君景王坟景虹景中景甜床景迈茶景欣园景建华景瑛景迈山景翔苑景灵堂景研竣景春华景晨景梅山景州市景氏景佑景志刚景凤启景鑫景画景宝景汉朝景墨景翠苑景刚景都景超景耀景翠景学江景和页景州镇

  • oppo手机开发者选项在哪(OPPO手机上的这个功能不要打开)

    最近,笔者在网上看到了很多关于介绍OPPO手机开发者选项的技巧文章。包括更改动画效果、限制后台进程、CPU渲染等操作,作用则是更改后会使手机运行速度加快。但是有一点我想要吐槽的是,OPPO手机的开发者选项打开后再退出,就会恢复成默认设置。很多没有开启过开发者选项的朋友可能不知道,OPPO手机一旦打开之后,屏幕上方就会一直闪动一行小黄条。直至你点击黄条将其关闭为止。

  • mac版微信消息怎么弹出(微信mac版收到消息无提示音如何解决)

    微信现在是人们普遍使用的通讯方式,但有些Mac用户的微信收到消息后没有提示声,是微信的原因还是Mac的原因呢?下面我们分享如何解决Mac微信收到消息无提示的问题。

  • fuchs机床冷却液(德国ALLWEILER品牌EMTEC-A高压机床冷却泵产品介绍)

    驱动螺杆通过外部永久润滑的凹槽滚珠轴承固定到位。整体长度与他的许多室导致表面压力小,低压差,从而减小磨损。转子外壳经过优化,以确保最大的耐磨性,所用材料为特殊硬化灰铸铁。用来提高加工速度效率和工件的表面光洁度和零件加工精度。典型应用在钻铣加工时对带内部冷却润滑剂输送的刀具井下冷却和润滑并冲洗和输送碎屑。

  • 一名合格韭菜需要经历的几个阶段(韭菜管理你不知道的几个秘诀)

    韭菜管理你不知道的几个秘诀,跟着这几个俗语走,一定不会差。但等到第二刀以后,温度就逐渐回升了,这时割韭菜就要稍微浅一点,不要贴着地面割,要离开地面割,以免伤及根茎,如果割得太深,不利于根系发育。以上是流行多年的农村俗语,都有一定的科学道理,所以,在平时管理韭菜的时候,还是要多加注意。

  • 有关于长征的资料(长征资料简介)

    有关于长征的资料长征土地革命战争时期,中国工农红军主力撤离长江南北各苏区,转战两年,到达陕甘苏区的战略转移行动。1934年10月,第五次反“围剿”失败后,中央主力红军为摆脱国民党军队的包围追击,被迫实行战略性转移,退出中央根据地,进行长征。1936年10月,红二、四方面军到达甘肃会宁地区,同红一方面军会师。红军三大主力会师,标志着万里长征的胜利结束。