目錄
前言
一、曲線擬合策略
二、最小二乘法理論基礎(chǔ)
1.殘差
原理
特征
選取策略
2.最小二乘原則
定義
解法總覽
三、最小二乘解法
1.確定函數(shù)類
2.求解方程
極小值原理:
求解方程組
定理
特例
四、代碼實(shí)現(xiàn)
點(diǎn)關(guān)注,防走丟,如有紕漏之處,請(qǐng)留言指教,非常感謝
前言
我們知道一般都是從多個(gè)點(diǎn)來(lái)畫出直線,那么如果點(diǎn)的排列并非能夠用一條直線來(lái)擬合,但是又需要找到這樣一條線來(lái)擬合多個(gè)坐標(biāo)軸上面的點(diǎn),那么一般都是采用曲線進(jìn)行擬合。但是如何在眾多密集且離散的分布點(diǎn)中找到一條曲線來(lái)盡可能多的去擬合多個(gè)點(diǎn)呢?這就需要我們采取相應(yīng)的算法或者策略。
我們需要使這條直線到各個(gè)數(shù)據(jù)點(diǎn)之間的誤差最小且更可能的逼近,那么宏觀來(lái)看該算法應(yīng)該是全局最優(yōu)算法,所以根據(jù)此我們使用最小二乘法來(lái)擬合離散的點(diǎn)盡可能使這些數(shù)據(jù)點(diǎn)均在離此曲線的上方或下方不遠(yuǎn)處。它既能反映數(shù)據(jù)的總體分布,又不至于出現(xiàn)局部較大的波動(dòng)。我們現(xiàn)在我們來(lái)從零開始探索該算法。
本篇博客的愿景是希望我或者讀者通過(guò)閱讀這篇博客能夠?qū)W會(huì)方法并能實(shí)際運(yùn)用,而且能夠記錄到你的思想之中。希望讀者看完能夠提出錯(cuò)誤或者看法,博主會(huì)長(zhǎng)期維護(hù)博客做及時(shí)更新。
一、曲線擬合策略
在工程實(shí)際應(yīng)用和科學(xué)實(shí)驗(yàn)中通過(guò)測(cè)量得到的一組離散的數(shù)據(jù)點(diǎn),為了從中找到兩個(gè)變量中間的內(nèi)在規(guī)律性,也就是求自變量和因變量之間的近似程度比較好的函數(shù)關(guān)系式,這類問(wèn)題有插值法和曲線擬合法。這類問(wèn)題的插值法和曲線擬合法,當(dāng)個(gè)別數(shù)據(jù)的誤差較大時(shí),插值效果顯然是不理想的,而且實(shí)驗(yàn)或觀測(cè)提供的數(shù)據(jù)個(gè)數(shù)往往較多,用插值法勢(shì)必得到次數(shù)較高的插值多項(xiàng)式,會(huì)出現(xiàn)龍格現(xiàn)象。這時(shí)候最優(yōu)策略就是選擇曲線擬合策略了。
?我們從數(shù)據(jù)出發(fā)構(gòu)造一個(gè)近似函數(shù),只要求所得的近似曲線能反映數(shù)據(jù)的基本趨勢(shì),使求得的逼近函數(shù)與已知函數(shù)從總體上來(lái)說(shuō)偏差的平方和最小,這就是最小二乘法。
二、最小二乘法理論基礎(chǔ)
1.殘差
原理
要從零基礎(chǔ)了解最小二乘法,那么我們需要把支撐最小二乘法的原理和算法搞懂,首先我們要了解什么是殘差。我們知道曲線擬合不要求近似曲線嚴(yán)格過(guò)所有的數(shù)據(jù)點(diǎn),但使求得的逼近函數(shù)與已知函數(shù)從總體上來(lái)說(shuō)其偏差按某種方法度量達(dá)到總體上盡可能最小。那么我們估計(jì)的曲線與真實(shí)點(diǎn)的差距就是殘差。
我們?cè)O(shè)線性回歸模型為,其中:
- Y是有相應(yīng)變量構(gòu)成的n維向量
- X是
階設(shè)計(jì)矩陣
-
是
維向量
- 是n維隨機(jī)變量
回歸系數(shù)的估計(jì)值,擬合值為,其中:
- ,H為帽子矩陣
則殘差為。
特征
在回歸分析中,測(cè)定值與按回歸方程預(yù)測(cè)的值之差,以表示。殘差遵從正態(tài)分布。
的標(biāo)準(zhǔn)差,稱為標(biāo)準(zhǔn)化殘差,以表示。遵從標(biāo)準(zhǔn)正態(tài)分布。驗(yàn)點(diǎn)的標(biāo)準(zhǔn)化殘差落在(-2,2)區(qū)間以外的概率≤0.05。若某一實(shí)驗(yàn)點(diǎn)的標(biāo)準(zhǔn)化殘差落在(-2,2)區(qū)間以外,可在95%置信度將其判為異常實(shí)驗(yàn)點(diǎn),不參與回歸直線擬合。
顯然,有多少對(duì)數(shù)據(jù),就有多少個(gè)殘差。殘差分析就是通過(guò)殘差所提供的信息,分析出數(shù)據(jù)的可靠性、周期性或其它干擾。
選取策略
通常我們構(gòu)造擬合曲線,要使得殘差 盡可能的小,有3中準(zhǔn)則可供選擇,具體內(nèi)容如下:
- 殘差的最大絕對(duì)值最?。?
- 殘差的絕對(duì)值之和最小:
- 殘差的平方和最?。?
根據(jù)三種準(zhǔn)則的具體形式,可以分析出前兩種比較簡(jiǎn)單,而二者都含有絕對(duì)值運(yùn)算,實(shí)際應(yīng)用中不便于操作;基于第三種準(zhǔn)則構(gòu)造的擬合曲線方法便是曲線擬合的最小二乘法。
2.最小二乘原則
定義
我們將殘差的平方和最小的原則稱為最小二乘原則。
按照最小二乘原則選取擬合曲線的方法,稱為最小二乘法。
解法總覽
對(duì)于如何利用最小二乘法原則來(lái)解決問(wèn)題,我們可以根據(jù)我們想要的結(jié)果來(lái)看:
在某個(gè)函數(shù)類來(lái)尋求一個(gè)函數(shù).
.使其滿足:
,其中是函數(shù)類中任意函數(shù)。是待定常數(shù)。
滿足上述關(guān)系式的函數(shù)稱為上述最小二乘問(wèn)題的最小二乘解。
三、最小二乘解法
1.確定函數(shù)類
原則:根據(jù)實(shí)際問(wèn)題域所給數(shù)據(jù)點(diǎn)的變化規(guī)律確定。
??????? 在實(shí)際問(wèn)題中如何選擇基函數(shù)是一個(gè)復(fù)雜的問(wèn)題,一般要根據(jù)問(wèn)題本身的性質(zhì)來(lái)決定。通常可取的基函數(shù)有多項(xiàng)式、三角函數(shù)、指數(shù)函數(shù)。或者數(shù)據(jù)集可能本身就是一個(gè)軌跡點(diǎn)數(shù)據(jù)集,沒有強(qiáng)關(guān)聯(lián)的自變量因變量關(guān)系。這是要根據(jù)實(shí)際問(wèn)題求解的目標(biāo)調(diào)整算法。
2.求解方程
問(wèn)題轉(zhuǎn)化為求待定系數(shù)使得:
極小值原理:
記,那么我們知道存在極小值的情況,原函數(shù)需要存在收斂。
證明函數(shù)收斂,則有多元函數(shù)極值必要條件有:
,其中
求解方程組
對(duì)任意函數(shù)h(x)和g(x)引入記號(hào):
用向量?jī)?nèi)積形式表示,可得
即:
上式為求的法方程組,其矩陣的形式為:
由于向量組是線性無(wú)關(guān),故上式系數(shù)行列式
存在唯一解:于是得到函數(shù)的最小二乘解
故得到下列:
定理
對(duì)于給定的一組實(shí)驗(yàn)數(shù)據(jù),互異。在函數(shù)類,且線性無(wú)關(guān),存在唯一的函數(shù)使得關(guān)系式成立,并且其系數(shù)可以通過(guò)解法方程組得到。
特例
如取就得到代數(shù)多項(xiàng)式
最小二乘的法方程為:
四、代碼實(shí)現(xiàn)
首先進(jìn)行曲線擬合的話肯定需要數(shù)據(jù)分析三巨頭pandas、numpy和繪圖用的matplotlib
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
這里我們使用案例來(lái)實(shí)現(xiàn)最小二乘法擬合:
在某化學(xué)反應(yīng)里,測(cè)得生成物濃度y(%)與時(shí)間t(min)的數(shù)據(jù):
?一般我們拿到數(shù)據(jù)都是在excel和csv,直接讀取就好了:
df_metric=pd.read_excel('try_test.xlsx')
df_metric
?
通過(guò)繪制散點(diǎn)圖我們很容易看出數(shù)據(jù)趨勢(shì):
x=df_metric['t']
y=df_metric['y']
plot1 = plt.plot(x, y, '*', label='origin data')
plt.title('polyfit')
plt.show()
?
在matplotlib庫(kù)中polyfit函數(shù)可以實(shí)現(xiàn)多項(xiàng)式擬合,也就是最小二乘擬合:
# 使用polyfit方法來(lái)擬合,并選擇多項(xiàng)式
z1 = np.polyfit(x, y, 2)
# 使用poly1d方法獲得多項(xiàng)式系數(shù),按照階數(shù)由高到低排列
p1 = np.poly1d(z1)
#打印擬合多項(xiàng)式
print(p1)
?
當(dāng)然如果需要精度更高可以增加系數(shù):
# 使用polyfit方法來(lái)擬合,并選擇多項(xiàng)式
z1 = np.polyfit(x, y, 3)
# 使用poly1d方法獲得多項(xiàng)式系數(shù),按照階數(shù)由高到低排列
p1 = np.poly1d(z1)
#打印擬合多項(xiàng)式
print(p1)
?
擬合之后對(duì)比:
# 求對(duì)應(yīng)x的各項(xiàng)擬合函數(shù)值
fx = p1(x)
plot1 = plt.plot(x, y, '*', label='origin data')
plot2 = plt.plot(x, fx, 'r', label='polyfit data')
plt.legend(loc=4)
plt.show()
?
當(dāng)系數(shù)更多越精確:
實(shí)際問(wèn)題的解決中測(cè)得的數(shù)據(jù)都不是等精度的。顯然,對(duì)于精度高、權(quán)重大的數(shù)據(jù)應(yīng)該給予足夠的重視,在計(jì)算時(shí),給以足夠的權(quán)重,在這種情況下就要使用加權(quán)最小二乘法。
利用最小二乘法原則上解決了最小二乘法意義下的曲線擬合問(wèn)題,但在實(shí)際問(wèn)題的解決時(shí),n往往很大,法方程組往往是病態(tài)的,因而給求解帶來(lái)了一定的困難。其中也有相當(dāng)多的策略去優(yōu)化該算法。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-460922.html
點(diǎn)關(guān)注,防走丟,如有紕漏之處,請(qǐng)留言指教,非常感謝
以上就是本期全部?jī)?nèi)容。我是fanstuck ,有問(wèn)題大家隨時(shí)留言討論 ,我們下期見。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-460922.html
到了這里,關(guān)于一文速學(xué)-最小二乘法曲線擬合算法詳解+項(xiàng)目代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!