python實現(xiàn)最小二乘法的方法詳解
本節(jié)用python實現(xiàn)最小二乘法。
1.最小二乘法
1.1 線性回歸
- 主要是解決線性問題,無法解決非線性問題。線性回歸過程主要解決的是如何通過樣本獲取最佳的擬合線,最常用的方法是 最小二乘法。
1.2 最小二乘法
ps:在古代,“平方”的稱謂為“二乘”,故得最小二乘法。
2.2.1 數(shù)據(jù)擬合法和插值法
- 數(shù)據(jù)擬合法不必過所有的數(shù)據(jù)點,關注數(shù)據(jù)的變化趨勢。
- 插值法必須經(jīng)過所有的數(shù)據(jù)點。
1.2.1 原理
一種數(shù)學優(yōu)化技術,通過最小化殘差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。在數(shù)理統(tǒng)計中,殘差是指實際觀察值與估計值之間的差。力求總的擬合誤差(即總殘差)達到最小。
1.2.2 最小二乘法的求解過程
1.2.3 python實現(xiàn)最小二乘法(預測學生身高體重為例)
擬合曲線
# 擬合曲線 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]) # 體重數(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ù)組中對應Xi,Yi的值 def error(p, x, y): return func(p, x) - y # 設置k,b的初始值,可以任意設定,經(jīng)過實驗,發(fā)現(xiàn)p0的值會影響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) # 畫樣本點 plt.figure(figsize=(8, 6)) plt.scatter(Xi, Yi, color='red', label='Sample data', linewidth=2) # 畫擬合直線 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()
計算殘差
# 計算殘差 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]) # 體重數(shù)據(jù) Yi = np.array([48, 64, 53, 66, 52, 68, 50, 52, 64, 49]) # 定義變量 xy_res=[] # 定義計算殘差函數(shù) def residual(x,y): res = y - (0.4211697*x-8.2883026) # 計算殘差 return res # 返回殘差 # 循環(huán)讀取殘差 for d in range(0,len(Xi)): res = residual(Xi[d], Yi[d]) xy_res.append(res) print(xy_res) # 計算殘差平方和,和越小表明擬合的情況越好 xy_res_pingfangsum = np.dot(xy_res,xy_res) print(xy_res_pingfangsum) # 如果數(shù)據(jù)擬合模型效果好,殘差應該遵從正態(tài)分布(0,d*d),d表示殘差 # 畫樣本點 fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111) # 添加一個子圖 fig = qqplot(np.array(xy_res),line='q',ax=ax) # 設置參數(shù) plt.show()
PS:其中的fig.add_subplot(111),
111代表的是畫布11的第一個區(qū)域。
222則代表22的第二個區(qū)域。
以上就是python實現(xiàn)最小二乘法的方法詳解的詳細內(nèi)容,更多關于python最小二乘法的資料請關注腳本之家其它相關文章!
相關文章
Pandas數(shù)據(jù)合并的兩種實現(xiàn)方法
本文主要介紹了Pandas數(shù)據(jù)合并的兩種實現(xiàn)方法,DataFrame數(shù)據(jù)合并主要使用merge()方法和concat()方法,具有一定的參考價值,感興趣的可以了解一下2023-11-11Python成功解決TypeError: ‘method’ object is
在Python編程中,有時候我們可能會遇到一個讓人摸不著頭腦的錯誤信息:TypeError: 'method' object is not subscriptable,本文給大家介紹了Python如何成功解決TypeError: ‘method’ object is not subscriptable,需要的朋友可以參考下2024-06-06python反射機制內(nèi)置函數(shù)及場景構造詳解
這篇文章主要為大家介紹了python反射機制內(nèi)置函數(shù)及場景構造示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11python實現(xiàn)視頻讀取和轉(zhuǎn)化圖片
今天小編就為大家分享一篇python實現(xiàn)視頻讀取和轉(zhuǎn)化圖片,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12將python打包的exe做成windows服務運行的流程步驟
將 Python 腳本打包的 exe 文件作為 Windows 服務運行,可以通過以下步驟實現(xiàn),Windows 服務是一種在后臺運行的程序,通常不需要用戶交互,本文給大家介紹了一個完整的指南,需要的朋友可以參考下2025-02-02