小編給大家分享一下python實(shí)現(xiàn)最小二乘法的示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
無錫網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),無錫網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為無錫千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個(gè)售后服務(wù)好的無錫做網(wǎng)站的公司定做!最小二乘法Least Square Method,做為分類回歸算法的基礎(chǔ),有著悠久的歷史(由馬里·勒讓德于1806年提出)。它通過最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。利用最小二乘法可以簡便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和為最小。最小二乘法還可用于曲線擬合。其他一些優(yōu)化問題也可通過最小化能量或大化熵用最小二乘法來表達(dá)。
那什么是最小二乘法呢?別著急,我們先從幾個(gè)簡單的概念說起。
假設(shè)我們現(xiàn)在有一系列的數(shù)據(jù)點(diǎn) ,那么由我們給出的擬合函數(shù)h(x)得到的估計(jì)量就是 ,那么怎么評(píng)估我們給出的擬合函數(shù)與實(shí)際待求解的函數(shù)的擬合程度比較高呢?這里我們先定義一個(gè)概念:殘差 , 我們估計(jì)擬合程度都是在殘差的基礎(chǔ)上進(jìn)行的。下面再介紹三種范數(shù):
? ∞-范數(shù):殘差絕對值的大值 ,即所有數(shù)據(jù)點(diǎn)中殘差距離的大值
? 1-范數(shù):絕對殘差和 ,即所有數(shù)據(jù)點(diǎn)殘差距離之和
? 2-范數(shù):殘差平方和
前兩種范數(shù)是最容易想到,最自然的,但是不利于進(jìn)行微分運(yùn)算,在數(shù)據(jù)量很大的情況下計(jì)算量太大,不具有可操作性。因此一般使用的是2-范數(shù)。
說了這么多,那范數(shù)和擬合有什么關(guān)系呢?擬合程度,用通俗的話來講,就是我們的擬合函數(shù)h(x)與待求解的函數(shù)y之間的相似性。那么2-范數(shù)越小,自然相似性就比較高了。
由此,我們可以寫出最小二乘法的定義了:
對于給定的數(shù)據(jù) ,在取定的假設(shè)空間H中,求解h(x)∈H,使得殘差 的2-范數(shù)最小,即
從幾何上講,就是尋找與給定點(diǎn) 距離平方和最小的曲線y=h(x)。h(x)稱為擬合函數(shù)或者最小二乘解,求解擬合函數(shù)h(x)的方法稱為曲線擬合的最小二乘法。
那么這里的h(x)到底應(yīng)該長什么樣呢?一般情況下,這是一條多項(xiàng)式曲線:
這里h(x,w)是一個(gè)n次多項(xiàng)式,w是其參數(shù)。
也就是說,最小二乘法就是要找到這樣一組 ,使得 最小。
那么如何找到這樣的w,使得其擬合函數(shù)h(x)與目標(biāo)函數(shù)y具有最高擬合程度呢?即最小二乘法如何求解呢,這才是關(guān)鍵啊。
假設(shè)我們的擬合函數(shù)是一個(gè)線性函數(shù),即:
(當(dāng)然,也可以是二次函數(shù),或者更高維的函數(shù),這里僅僅是作為求解范例,所以采用了最簡單的線性函數(shù))那么我們的目標(biāo)就是找到這樣的w,
這里令 為樣本 的平方損失函數(shù)
這里的Q(w)即為我們要進(jìn)行最優(yōu)化的風(fēng)險(xiǎn)函數(shù)。
學(xué)過微積分的同學(xué)應(yīng)該比較清楚,這是一個(gè)典型的求解極值的問題,只需要分別對 18 求偏導(dǎo)數(shù),然后令偏導(dǎo)數(shù)為0,即可求解出極值點(diǎn),即:
接下來只需要求解這個(gè)方程組即可解出w_i 的值
============ 分割分割 =============
上面我們講解了什么是最小二乘法,以及如何求解最小二乘解,下面我們將通過Python來實(shí)現(xiàn)最小二乘法。
這里我們把目標(biāo)函數(shù)選為y=sin(2πx),疊加上一個(gè)正態(tài)分布作為噪音干擾,然后使用多項(xiàng)式分布去擬合它。
代碼:
# _*_ 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 # 引入最小二乘函數(shù) n = 9 # 多項(xiàng)式次數(shù) # 目標(biāo)函數(shù) def real_func(x): return np.sin(2 * np.pi * x) # 多項(xiàng)式函數(shù) def fit_func(p, x): f = np.poly1d(p) return f(x) # 殘差函數(shù) def residuals_func(p, y, x): ret = fit_func(p, x) - y return ret x = np.linspace(0, 1, 9) # 隨機(jī)選擇9個(gè)點(diǎn)作為x x_points = np.linspace(0, 1, 1000) # 畫圖時(shí)需要的連續(xù)點(diǎn) y0 = real_func(x) # 目標(biāo)函數(shù) y1 = [np.random.normal(0, 0.1) + y for y in y0] # 添加正太分布噪聲后的函數(shù) p_init = np.random.randn(n) # 隨機(jī)初始化多項(xiàng)式參數(shù) plsq = leastsq(residuals_func, p_init, args=(y1, x)) print 'Fitting Parameters: ', plsq[0] # 輸出擬合參數(shù) 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()
輸出擬合參數(shù):
圖像如下:
從圖像上看,很明顯我們的擬合函數(shù)過擬合了,下面我們嘗試在風(fēng)險(xiǎn)函數(shù)的基礎(chǔ)上加上正則化項(xiàng),來降低過擬合的現(xiàn)象:
為此,我們只需要在殘差函數(shù)中將lambda^(1/2)p加在了返回的array的后面
regularization = 0.1 # 正則化系數(shù)lambda # 殘差函數(shù) 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
輸出擬合參數(shù):
圖像如下:
很明顯,在適當(dāng)?shù)恼齽t化約束下,可以比較好的擬合目標(biāo)函數(shù)。
注意,如果正則化項(xiàng)的系數(shù)太大,會(huì)導(dǎo)致欠擬合現(xiàn)象(此時(shí)的懲罰項(xiàng)權(quán)重特別高)
如,設(shè)置regularization=0.1時(shí),圖像如下:
此時(shí)明顯欠擬合。所以要慎重進(jìn)行正則化參數(shù)的選擇。
以上是“python實(shí)現(xiàn)最小二乘法的示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站名稱:python實(shí)現(xiàn)最小二乘法的示例-創(chuàng)新互聯(lián)
文章出自:http://jinyejixie.com/article42/dsieec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、靜態(tài)網(wǎng)站、用戶體驗(yàn)、網(wǎng)站導(dǎo)航、手機(jī)網(wǎng)站建設(shè)、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容