python實(shí)現(xiàn)最小二乘法的方法詳解
本節(jié)用python實(shí)現(xiàn)最小二乘法。
1.最小二乘法
1.1 線性回歸
- 主要是解決線性問(wèn)題,無(wú)法解決非線性問(wèn)題。線性回歸過(guò)程主要解決的是如何通過(guò)樣本獲取最佳的擬合線,最常用的方法是 最小二乘法。
1.2 最小二乘法
ps:在古代,“平方”的稱謂為“二乘”,故得最小二乘法。
2.2.1 數(shù)據(jù)擬合法和插值法
- 數(shù)據(jù)擬合法不必過(guò)所有的數(shù)據(jù)點(diǎn),關(guān)注數(shù)據(jù)的變化趨勢(shì)。
- 插值法必須經(jīng)過(guò)所有的數(shù)據(jù)點(diǎn)。
1.2.1 原理
一種數(shù)學(xué)優(yōu)化技術(shù),通過(guò)最小化殘差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。在數(shù)理統(tǒng)計(jì)中,殘差是指實(shí)際觀察值與估計(jì)值之間的差。力求總的擬合誤差(即總殘差)達(dá)到最小。
1.2.2 最小二乘法的求解過(guò)程

1.2.3 python實(shí)現(xiàn)最小二乘法(預(yù)測(cè)學(xué)生身高體重為例)
擬合曲線
# 擬合曲線
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy.optimize import leastsq
# 樣本數(shù)據(jù)
# 身高數(shù)據(jù)
Xi = np.array([162, 165, 159, 173, 157, 175, 161, 164, 172, 158])
# 體重?cái)?shù)據(jù)
Yi = np.array([48, 64, 53, 66, 52, 68, 50, 52, 64, 49])
# 需要擬合的函數(shù)func()指定函數(shù)的形狀
def func(p, x):
k, b = p
return k*x + b
# 定義偏差函數(shù),x,y為數(shù)組中對(duì)應(yīng)Xi,Yi的值
def error(p, x, y):
return func(p, x) - y
# 設(shè)置k,b的初始值,可以任意設(shè)定,經(jīng)過(guò)實(shí)驗(yàn),發(fā)現(xiàn)p0的值會(huì)影響cost的值:Para[1]
p0 = [1, 20]
# 把error函數(shù)中除了p0以外的參數(shù)打包到args中,leastsq()為最小二乘法函數(shù)
Para = leastsq(error, p0, args=(Xi, Yi))
# 讀取結(jié)果
k, b = Para[0]
print('k=', k, 'b=', b)
# 畫(huà)樣本點(diǎn)
plt.figure(figsize=(8, 6))
plt.scatter(Xi, Yi, color='red', label='Sample data', linewidth=2)
# 畫(huà)擬合直線
x = np.linspace(150, 180, 80)
y = k * x + b
# 繪制擬合曲線
plt.plot(x, y, color='blue', label='Fitting Curve', linewidth=2)
plt.legend() # 繪制圖例
plt.xlabel('Height:cm', fontproperties='simHei', fontsize=12)
plt.ylabel('Weight:Kg', fontproperties='simHei', fontsize=12)
plt.show()

計(jì)算殘差
# 計(jì)算殘差
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy.optimize import leastsq
from statsmodels.graphics.api import qqplot
# 樣本數(shù)據(jù)
# 身高數(shù)據(jù)
Xi = np.array([162, 165, 159, 173, 157, 175, 161, 164, 172, 158])
# 體重?cái)?shù)據(jù)
Yi = np.array([48, 64, 53, 66, 52, 68, 50, 52, 64, 49])
# 定義變量
xy_res=[]
# 定義計(jì)算殘差函數(shù)
def residual(x,y):
res = y - (0.4211697*x-8.2883026) # 計(jì)算殘差
return res # 返回殘差
# 循環(huán)讀取殘差
for d in range(0,len(Xi)):
res = residual(Xi[d], Yi[d])
xy_res.append(res)
print(xy_res)
# 計(jì)算殘差平方和,和越小表明擬合的情況越好
xy_res_pingfangsum = np.dot(xy_res,xy_res)
print(xy_res_pingfangsum)
# 如果數(shù)據(jù)擬合模型效果好,殘差應(yīng)該遵從正態(tài)分布(0,d*d),d表示殘差
# 畫(huà)樣本點(diǎn)
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111) # 添加一個(gè)子圖
fig = qqplot(np.array(xy_res),line='q',ax=ax) # 設(shè)置參數(shù)
plt.show()

PS:其中的fig.add_subplot(111),
111代表的是畫(huà)布11的第一個(gè)區(qū)域。
222則代表22的第二個(gè)區(qū)域。

以上就是python實(shí)現(xiàn)最小二乘法的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于python最小二乘法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Pandas數(shù)據(jù)合并的兩種實(shí)現(xiàn)方法
本文主要介紹了Pandas數(shù)據(jù)合并的兩種實(shí)現(xiàn)方法,DataFrame數(shù)據(jù)合并主要使用merge()方法和concat()方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
在PyTorch中實(shí)現(xiàn)高效的多進(jìn)程并行處理
PyTorch是一個(gè)流行的深度學(xué)習(xí)框架,一般情況下使用單個(gè)GPU進(jìn)行計(jì)算時(shí)是十分方便的,但是當(dāng)涉及到處理大規(guī)模數(shù)據(jù)和并行處理時(shí),需要利用多個(gè)GPU,所以這篇文章我們將介紹如何利用torch.multiprocessing模塊,在PyTorch中實(shí)現(xiàn)高效的多進(jìn)程處理,需要的朋友可以參考下2024-07-07
Python成功解決TypeError: ‘method’ object is
在Python編程中,有時(shí)候我們可能會(huì)遇到一個(gè)讓人摸不著頭腦的錯(cuò)誤信息:TypeError: 'method' object is not subscriptable,本文給大家介紹了Python如何成功解決TypeError: ‘method’ object is not subscriptable,需要的朋友可以參考下2024-06-06
python反射機(jī)制內(nèi)置函數(shù)及場(chǎng)景構(gòu)造詳解
這篇文章主要為大家介紹了python反射機(jī)制內(nèi)置函數(shù)及場(chǎng)景構(gòu)造示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
python實(shí)現(xiàn)視頻讀取和轉(zhuǎn)化圖片
今天小編就為大家分享一篇python實(shí)現(xiàn)視頻讀取和轉(zhuǎn)化圖片,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
將python打包的exe做成windows服務(wù)運(yùn)行的流程步驟
將 Python 腳本打包的 exe 文件作為 Windows 服務(wù)運(yùn)行,可以通過(guò)以下步驟實(shí)現(xiàn),Windows 服務(wù)是一種在后臺(tái)運(yùn)行的程序,通常不需要用戶交互,本文給大家介紹了一個(gè)完整的指南,需要的朋友可以參考下2025-02-02
python?pandas遍歷每行并累加進(jìn)行條件過(guò)濾方式
這篇文章主要介紹了python?pandas遍歷每行并累加進(jìn)行條件過(guò)濾方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Python 支持向量機(jī)分類器的實(shí)現(xiàn)
這篇文章主要介紹了Python 支持向量機(jī)分類器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

