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

最小二乘算法与二次拟合区别(最小二乘法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()

结果如下:

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

声明:仅供参考

    推荐阅读
  • 男主找到女主深情拥抱高甜韩剧(一见女主误终身)

    女主还有男主用爱情治愈她,可怜的亨俊最后孤身一人。在他面前,女主恩菲可以成为自己,而不用伪装成任何人。还在年末演技大赏里和女主获得最佳cp奖。获得了官方和观众的认可,but就是无法获得女主的心。七封没有选择单相思,而是把这份心意告诉女主。最后为了成全男女主而假意卧底终究死去。最后甚至冒着失去工作的危险出庭为女主作证。这种无奈的宿命感也会让观众更心疼男二。

  • 民族八省区指的是哪些(民族八省区指什么)

    民族八省区指的是哪些民族八省区指的是内蒙古自治区、宁夏回族自治区、新疆维吾尔自治区、西藏自治区和广西壮族自治区五大少数民族自治区和少数民族分布集中的贵州、云南和青海三省。民族自治地方自治机关行使自治权以保障少数民族权益的基本规范,推动民族地区各方面事业发展的制度保障,多元一体的新型国家结构形式的制度标杆。

  • 跟媳妇闹矛盾回娘家怎么办(婆妻闹矛盾怎么处理)

    跟媳妇闹矛盾回娘家怎么办失联四个月已经可以报警了!

  • 新买的富贵竹怎么养(新买的富贵竹养殖方法)

    生根这期间平均三四天换次水,可加入小木炭防腐,十天之内不要变动它的位置,约半月后会长出须根。长出根后停止换水,因其喜欢腐水,常换水会导致叶子泛黄甚至整株枯萎,如果水量减少记得及时补充。为防止徒长,最好每隔三周向瓶内滴入几滴白兰地酒,再加少量营养液,促进叶片翠绿。一般它在二十至二十八摄氏度之间能够较好生长,温度过低的话,会造成冻伤。它喜阴,所以要避免放在窗口、阳台处,夏天时注意避免光照过强和降温。

  • 浙江省中小学生旅行实施意见(小舍得说出家长心声)

    要说这段时间最火的国产剧,那非《小舍得》莫属。2021年拍摄于浙江宁波象山。象山影视城位于浙江省宁波市象山县新桥镇,是国内著名的影视拍摄地和特色旅游景区,已有近一千五百多部影视作品在此取景拍摄。今天他们要做的是中国古代的书写材料——竹简。很快一部分孩子就完成了自己的作品,既背诵了古诗,又练习了书法,还学习了中国文化。在襄阳城内,他们看了中国传统的杂技绝活,一个个都看得目瞪口呆。

  • 鹅蛋脸要不要刘海(鹅蛋脸要不要刘海都可以)

    下面更多详细答案一起来看看吧!鹅蛋脸要不要刘海留不留都是可以的,看个人喜好。留刘海,会让你整个人显得很萌、很可爱。看你自己怎么选择。鹅蛋脸,是一种比较标准的脸形,好多的发型均可以适合,并能达到很和谐的效果,这种脸型最让MM嫉妒了,像明星中的刘亦菲、李嘉欣等。

  • lol日常任务在哪(lol怎么查看任务)

    英雄联盟游戏中,日常任务位于游戏主界面中,在视频中心边上就是任务中心。任务中心现在处于测试阶段,只有新区的男爵领域部分玩家才有,没有这个任务中心的玩家只能说运气不好。

  • 小米手机将推出新品civi(小米Civi2)

    今天上午,小米官方正式宣布,将会在9月27日举行新品发布会,发布小米Civi系列续作——小米Civi2。小米Civi2在总体市场定位上,延续了小米Civi主打颜值轻薄、自拍体验、女性用户群体等。外观部分目前小米Civi2的背面造型已经公布,「小白裙」配色机身配备潮流「涟漪」设计呈现出波光粼粼的质感。小米Civi2的更多配置细节将会在接下来的宣发预热过程中陆续公布。

  • 吉林松原发生4.9级地震(吉林松原发生4.9级地震)

    中国地震台网正式测定:今日7时13分在吉林松原市宁江区发生4.9级地震,震源深度12千米,哈尔滨、长春等地有震感。地震区域地震周边震中距松原市宁江区14公里、距前郭尔罗斯蒙古族自治县20公里、距肇源县32公里、距大安市47公里、距肇州县57公里,距松原市区18公里,距哈尔滨市153公里。地震发生后,哈尔滨铁路局立即组织人员沿地震影响的线路区段排查安全隐患,防范地震对铁路设备和正常行车的危害和影响。

  • 梦到欠别人钱是什么意思(梦到欠别人钱是好不好)

    但是不要做什么都容易做到一半就放弃。老人梦见欠别人的钱,要注意情绪,凡事看淡,切勿动怒,以免血压升高。未婚的人梦到欠人钱,感情方面不太顺利,争吵多,难以有结果。待考者梦见欠别人的钱近期考试成绩普通。生意人梦见欠别人的钱说明您的财运佳,但防小人倒账。上班族的可望凭借自己的特长获得外快机会,收入看涨,支出节制。投机运气散去,投资注重保值或长远项目更为合适。