中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python實現最小二乘法的示例

發布時間:2021-03-24 09:43:59 來源:億速云 閱讀:398 作者:小新 欄目:開發技術

小編給大家分享一下python實現最小二乘法的示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

最小二乘法Least Square Method,做為分類回歸算法的基礎,有著悠久的歷史(由馬里·勒讓德于1806年提出)。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,并使得這些求得的數據與實際數據之間誤差的平方和為最小。最小二乘法還可用于曲線擬合。其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。

那什么是最小二乘法呢?別著急,我們先從幾個簡單的概念說起。

假設我們現在有一系列的數據點 python實現最小二乘法的示例 ,那么由我們給出的擬合函數h(x)得到的估計量就是 python實現最小二乘法的示例 ,那么怎么評估我們給出的擬合函數與實際待求解的函數的擬合程度比較高呢?這里我們先定義一個概念:殘差 python實現最小二乘法的示例 , 我們估計擬合程度都是在殘差的基礎上進行的。下面再介紹三種范數:

? ∞-范數:殘差絕對值的最大值 python實現最小二乘法的示例 ,即所有數據點中殘差距離的最大值

? 1-范數:絕對殘差和python實現最小二乘法的示例 ,即所有數據點殘差距離之和

? 2-范數:殘差平方和 python實現最小二乘法的示例

前兩種范數是最容易想到,最自然的,但是不利于進行微分運算,在數據量很大的情況下計算量太大,不具有可操作性。因此一般使用的是2-范數。

說了這么多,那范數和擬合有什么關系呢?擬合程度,用通俗的話來講,就是我們的擬合函數h(x)與待求解的函數y之間的相似性。那么2-范數越小,自然相似性就比較高了。

由此,我們可以寫出最小二乘法的定義了:

對于給定的數據 python實現最小二乘法的示例 ,在取定的假設空間H中,求解h(x)∈H,使得殘差 python實現最小二乘法的示例 的2-范數最小,即

python實現最小二乘法的示例

從幾何上講,就是尋找與給定點 python實現最小二乘法的示例 距離平方和最小的曲線y=h(x)。h(x)稱為擬合函數或者最小二乘解,求解擬合函數h(x)的方法稱為曲線擬合的最小二乘法。

那么這里的h(x)到底應該長什么樣呢?一般情況下,這是一條多項式曲線:

python實現最小二乘法的示例

這里h(x,w)是一個n次多項式,w是其參數。

也就是說,最小二乘法就是要找到這樣一組 python實現最小二乘法的示例 ,使得 python實現最小二乘法的示例 最小。

那么如何找到這樣的w,使得其擬合函數h(x)與目標函數y具有最高擬合程度呢?即最小二乘法如何求解呢,這才是關鍵啊。

假設我們的擬合函數是一個線性函數,即:

python實現最小二乘法的示例

(當然,也可以是二次函數,或者更高維的函數,這里僅僅是作為求解范例,所以采用了最簡單的線性函數)那么我們的目標就是找到這樣的w,

python實現最小二乘法的示例

這里令 python實現最小二乘法的示例 為樣本 python實現最小二乘法的示例 的平方損失函數

這里的Q(w)即為我們要進行最優化的風險函數。

學過微積分的同學應該比較清楚,這是一個典型的求解極值的問題,只需要分別對 18 求偏導數,然后令偏導數為0,即可求解出極值點,即:

python實現最小二乘法的示例

接下來只需要求解這個方程組即可解出w_i 的值

============ 分割分割 =============

上面我們講解了什么是最小二乘法,以及如何求解最小二乘解,下面我們將通過Python來實現最小二乘法。

這里我們把目標函數選為y=sin(2πx),疊加上一個正態分布作為噪音干擾,然后使用多項式分布去擬合它。

代碼:

# _*_ coding: utf-8 _*_
# 作者: yhao
# 博客: http://blog.csdn.net/yhao2014
# 郵箱: yanhao07@sina.com
 
import numpy as np # 引入numpy
import scipy as sp
import pylab as pl
from scipy.optimize import leastsq # 引入最小二乘函數
 
n = 9 # 多項式次數
 
 
# 目標函數
def real_func(x):
 return np.sin(2 * np.pi * x)
 
 
# 多項式函數
def fit_func(p, x):
 f = np.poly1d(p)
 return f(x)
 
 
# 殘差函數
def residuals_func(p, y, x):
 ret = fit_func(p, x) - y
 return ret
 
 
x = np.linspace(0, 1, 9) # 隨機選擇9個點作為x
x_points = np.linspace(0, 1, 1000) # 畫圖時需要的連續點
 
y0 = real_func(x) # 目標函數
y1 = [np.random.normal(0, 0.1) + y for y in y0] # 添加正太分布噪聲后的函數
 
p_init = np.random.randn(n) # 隨機初始化多項式參數
 
plsq = leastsq(residuals_func, p_init, args=(y1, x))
 
print 'Fitting Parameters: ', plsq[0] # 輸出擬合參數
 
pl.plot(x_points, real_func(x_points), label='real')
pl.plot(x_points, fit_func(plsq[0], x_points), label='fitted curve')
pl.plot(x, y1, 'bo', label='with noise')
pl.legend()
pl.show()

輸出擬合參數:

python實現最小二乘法的示例

圖像如下:

python實現最小二乘法的示例

從圖像上看,很明顯我們的擬合函數過擬合了,下面我們嘗試在風險函數的基礎上加上正則化項,來降低過擬合的現象:

python實現最小二乘法的示例

為此,我們只需要在殘差函數中將lambda^(1/2)p加在了返回的array的后面

regularization = 0.1 # 正則化系數lambda
 
 
# 殘差函數
def residuals_func(p, y, x):
 ret = fit_func(p, x) - y
 ret = np.append(ret, np.sqrt(regularization) * p) # 將lambda^(1/2)p加在了返回的array的后面
 return ret

輸出擬合參數:

python實現最小二乘法的示例

圖像如下:

python實現最小二乘法的示例

很明顯,在適當的正則化約束下,可以比較好的擬合目標函數。

注意,如果正則化項的系數太大,會導致欠擬合現象(此時的懲罰項權重特別高)

如,設置regularization=0.1時,圖像如下:

python實現最小二乘法的示例

此時明顯欠擬合。所以要慎重進行正則化參數的選擇。

以上是“python實現最小二乘法的示例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岗巴县| 商丘市| 五常市| 泰和县| 青神县| 南京市| 定日县| 镇赉县| 锡林浩特市| 开封市| 大渡口区| 通辽市| 荆门市| 临夏县| 深州市| 新乡市| 黄冈市| 定安县| 雅安市| 盐边县| 东平县| 商丘市| 肥东县| 庆安县| 奈曼旗| 涪陵区| 东辽县| 达州市| 磐石市| 永登县| 峡江县| 府谷县| 万宁市| 库车县| 原阳县| 楚雄市| 宁德市| 读书| 肇东市| 西昌市| 囊谦县|