日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...

發布時間:2024/7/23 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模型擬合一般來說有這么三種:

  • 切比雪夫近似準則
  • 極小化絕對偏差之和
  • 最小二乘準則
  • 這幾個原則各有各的適用范圍。其中最小二乘準則是比較容易計算的。接下來我將簡要的介紹最小二乘準則以及舉例說明如何用python實現。

    最小二乘準則

    定義:給定某種函數類型

    和 個數據點 ,對整個數據點的極小化絕對偏差 ,極小化和數為 。

    擬合直線

    如果我們要擬合的是直線,即

    ,計算過程如下:

    擬合冪函數

    可化為線性擬合的非線性擬合

    用python求解

    我們發現如果要自己計算的話,要用到偏導數,無窮級數的知識。如果數據點很多的話,函數比較復雜的,計算是十分困難的,甚至是不可能的。于是想到可以使用計算機求解。

    通用代碼如下:

    # -*- coding: utf-8 -*-

    舉例

    接著我用我的一篇文章中車輛停止舉例為例進行擬合,相關數據在該文章里。

    相信未來:從簡單數學建模開始:05如何進行數學建模——以車輛停止距離模型為例?zhuanlan.zhihu.com

    子模型一:反應距離模型

    import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy.optimize import leastsq %pylab inline plt.rcParams['font.sans-serif']=['simhei'] plt.rcParams['axes.unicode_minus']=Falsedr = np.array([22,28,33,39,44,50,55,61,66,72,77,83,88]) v = np.array([20., 25., 30., 35., 40., 45., 50., 55., 60., 65., 70., 75., 80.]) db = np.array([20,28,40.5,52.5,72,92.5,118,148.5,182,220.5,266,318,376]) d = np.array([42,56,73.5,91.5,116,142.5,173,209.5,248,292.5,343,401,464])x = v y = drdef func(p):k = preturn y - k*xr = leastsq(func,[np.sum(dr)/np.sum(v)]) k = r[0] print('k=',k)plt.scatter(x,k*x,label = '擬合解') plt.plot(x,k*x) plt.scatter(x,y,label='觀測解') plt.plot(x,y) plt.xlabel('dr') plt.ylabel('v') plt.title('最小二乘法則應用') plt.legend() plt.show()

    這是擬合后的結果,k = 1.1040,之前的結果為k = 1.1016

    子模型二:剎車距離模型

    import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy.optimize import leastsq %pylab inline plt.rcParams['font.sans-serif']=['simhei'] plt.rcParams['axes.unicode_minus']=Falsedr = np.array([22,28,33,39,44,50,55,61,66,72,77,83,88]) v = np.array([20., 25., 30., 35., 40., 45., 50., 55., 60., 65., 70., 75., 80.]) db = np.array([20,28,40.5,52.5,72,92.5,118,148.5,182,220.5,266,318,376]) d = np.array([42,56,73.5,91.5,116,142.5,173,209.5,248,292.5,343,401,464])x = v**2 y = dbdef func(p):k = preturn y - k*xr = leastsq(func,[np.sum(db)/np.sum(v**2)]) k = r[0] print('k=',k)plt.scatter(x,k*x,label = '擬合解') plt.plot(x,k*x) plt.scatter(x,y,label='觀測解') plt.plot(x,y) plt.xlabel('dr') plt.ylabel('v') plt.title('最小二乘法則應用') plt.legend() plt.show()

    這張圖擬合前和擬合后的差距還是挺大的。

    總結

    以上是生活随笔為你收集整理的python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。