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

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

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

最小二乘法理论最小二乘法是一种数学优化技术。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。是解决曲线拟合最常用的方法,其思路如下:其中,是预选定的一组线性相关的函数,是待定系数,拟合准则是使与的距离的平方和最小,称为最小二乘法准则。三维空间中,定义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()

结果如下:

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

声明:仅供参考

    推荐阅读
  • 吃鸡开麦克风观战的人可以听到吗(若看到队友的麦克风是红色)

    大家好,欢迎来到由小鱼干开讲的《吃鸡新鲜事速报》,在游戏这个虚拟的世界里进行社交,我们难以得知屏幕对面的TA究竟长什么样,因此,声音反而是排在第1位的。第3种就是只为了优化一下自己的声音,比如“老板”喜欢萝莉音,明明声音偏“御姐”的女生,就会用变声器调整一下自己的音色。

  • 哈弗h9如何(如何操控哈弗H9)

    最主要的是,在后期的养车上,哈弗H9的维修成本也相对较低,说明这个车的保修费用比较低。在中国汽车市场上,由于油价那种非常敏感的因素,消费者在选择汽车的时候往往还会考虑日系车,因为它们的燃油经济性更为符合国人的用车需求。变速箱方面,则依旧采用了由长城自主研发的8挡手自一体变速箱,这套动力总成在不同工况下的表现不过不失。此时哈弗H9搭载的双叉臂独立悬架多连杆非。

  • 清代海黄螺钿如意(清代后妃挂在胸前的吉祥物首饰)

    清代海黄螺钿如意在故宫博物院里,珍藏着一件青翠欲滴的首饰文物——翠佛手佩,这是清代后宫娘娘们拿在手中把玩,或者佩戴于胸前衣襟上的玉佩首饰。故宫博物院珍藏的这块翠佛手佩,玉佩长度约4.5厘米,宽度为3厘米,小巧玲珑,非常适合女性拿在手中欣赏把玩。

  • 鸡肉煮不烂怎么办(鸡肉煮不烂如何解决)

    鸡肉煮不烂怎么办?我们一起去了解并探讨一下这个问题吧!鸡肉煮不烂怎么办在炖鸡肉的时候,如果鸡肉炖不烂,有可能是鸡肉太老造成的,所以应该炖的时间长一些,这样就可以解决鸡肉炖不烂的问题。煮老鸡时,先用凉水加少量食醋泡2小时,再用文火煮,肉就会变嫩,或放上几片山楂就可以了,同时使用高压锅可以方便炖肉。炖鸡时加入开水或少许的白醋。

  • 铝合金门窗的表面处理技术(贝思乐铝型材表面处理盘点)

    粉末喷涂铝型材的颜色丰富多样,产生色差的几率低,具有良好的耐蚀性。氟碳喷涂表面处理氟碳喷涂与粉末喷涂同属于静电喷涂,其区别在于氟碳喷涂采用的液态喷涂。纹理清晰自然的木纹色满足了众多消费者向往自然平和的生活追求,目前已广泛运用到铝合金门窗市场。

  • 清炖鸡汤最简单的做法(清炖鸡汤最简单的做法简述)

    下面更多详细答案一起来看看吧!清炖鸡汤最简单的做法将一只鸡清洗干净,切成大块,将葱切成段,将姜切成片状。焯水,倒适量的油进锅中,煮沸,倒入鸡肉进行翻炒,主要是过一下鸡肉中的血水。几分钟后盛起来。煲汤,冷水放入鸡块,葱段、姜片、八角、料酒、少许胡椒粉,开大火将汤煮沸,用勺子捞起浮沫,改小火慢炖一个小时。

  • 世界上5大最亲近人的猫咪(前6位最聪明的猫咪)

    Top4:暹罗猫相信大家都很了解暹罗猫吧,其实暹罗猫是很受欢迎的,而且它的是一只特别活泼的猫咪,不过它的智商是很高的。巴厘猫像暹罗猫一样粘人,但是又比暹罗猫更温顺,训练起来也比较容易,只要配合猫零食一起,它就会很乖巧了!Top1:无毛猫无毛猫是猫界中智商最高的宠物猫,它特别的聪明,所以这种猫特别的懂事,不会给主人带来什么麻烦,而且无毛猫价格特别昂贵。

  • 甜瓜歪瓜原因是什么(甜瓜歪瓜原因简单介绍)

    甜瓜歪瓜原因是什么授粉不良:授粉量不足或喷药不均匀时,瓜内的种子容易集中分布瓜的一侧。

  • 水煮酸菜鱼的家常做法(做的时候需要加入什么辅料)

    下面希望有你要的答案,我们一起来看看吧!水煮酸菜鱼的家常做法切好鱼肉后,倒入料酒、生抽、盐,拌匀腌制15分钟。起锅热油,倒入鱼肉煎炸,然后再倒入酸菜翻炒一分钟左右。倒入清水,大火烧开,倒入酸黄瓜,加入姜、大蒜、泡椒、盐,煮5-6分钟即可捞出。最后在鱼肉上放辣椒面和花椒,倒上滚油,撒上葱花即可。

  • 自制透明香皂的方法和配方(怎样自制透明香皂的方法和配方)

    自制透明香皂的方法和配方透明液体肥皂配方:橄榄油或棉子油氢氧化钾酒精与水各适量。先将氢氧化钾溶于少量热水中备用,另将橄榄油或棉子油放入锅中隔水煮热,然后将备用之氢氧化钾溶液加入锅中,不停搅拌,至锅内之皂液完全碱化而止。液体肥皂之原料,切勿用牛油脂或猪油脂,或已酸败之油类。煮成后作胶状,放置一、二日,滤过,加入香料即可。