Python實現最小二乘法

2021-01-07 高效工作的方法

上一篇文章講了最小二乘算法的原理。這篇文章通過一個簡單的例子來看如何通過Python實現最小乘法的線性回歸模型的參數估計。

王松桂老師《線性統計模型——線性回歸與方差分析》一書中例3.1.3。

說的是一個實驗容器靠蒸汽供應熱量,使其保持恆溫,通過一段時間觀測,得到下圖表中的這樣一組數據:

蒸汽-環境溫度數據其中,自變量X表示容器周圍空氣單位時間的平均溫度(℃),Y表示單位時間內消耗的蒸汽量(L),共觀測了25個單位時間(表中序號一列)。

那麼,我們要怎樣對這組數據進行線性回歸分析呢?一般分三步:(1)畫散點圖,找模型;(2)進行回歸模型的參數估計;(3)檢驗前面分析得到的經驗模型是否合適。

畫散點圖

創建一個DataTemp的文件夾,在其中分別創建"data"、"demo"文件夾用於存放數據文件、Python程序文件。

把前面圖中的數據導入Excel中,命名為:「蒸汽供應.xlsx」,用來作為數據源。

數據導入Excel後創建Python文件:」leastsquare.py「。在文件頭加入utf-8編碼的說明以支持中文字符,然後添加必要的注釋。

# -*- coding: utf-8 -*-"""Created on Fri Mar 20 14:07:41 2020@author: gao"""import必要的第三方庫。

"""第三方庫"""importpandasaspdimportmatplotlib.pyplotaspltfromscipy.optimizeimportleastsqimportnumpyasnp使用下面的代碼將Excel數據讀入Python Pandas DataFrame中。

"""把excel中的數據讀入datafram"""filePath=u'../data/蒸汽供應.xlsx'#含中文字符,前面加u表示用Unicode 格式進行編碼data=pd.read_excel(filePath,index_col=u'序號')提取其中的Y、X列並繪製散點圖

Xi=data[u'X']Yi=data[u'Y']"""畫散點圖"""plt.figure()plt.scatter(Xi,Yi,color='red',label='sample data',linewidth=2)plt.legend(loc='lower right')plt.show()散點圖結果如下:

散點圖從圖中看出大致服從一個線性分布,所以我們採用一元線性回歸模型來進行分析。

回歸模型的參數估計

一元線性模型的一般公式為

一元線性回歸模型我們使用最小二乘法估算出α、β即可求出經驗回歸方程。

經驗模型Python中對一元線性模型的參數進行參數估計是很簡單的,如下代碼所示:

deffun(p,x):#回歸模型函數k,b=preturnk*x+bdeferror(p,x,y):#誤差returnfun(p,x)-yp0=np.array([1,3])para=leastsq(error,p0,args=(Xi,Yi))k,b=para[0]上面代碼的關鍵之處有三點:

(1)定義模型函數、誤差函數。其中誤差函數error,實際上就是我們模型的估計值與實際的觀察值之差,我們就是通過這個差值的最小二乘來對模型中的參數進行估計的。也就是說,前面的經驗模型的參數取不同的值,那對於xi可以求出不同的yi,這個yi是我們估計值和實際的觀測值進行求差就是估計誤差,參數取值不同估計誤差不同,我們要找到一組參數使得對於所有的觀測值的誤差的平方和最小。

(2)調用scipy的leastsq函數時,需要有誤差函數、初始參數作為輸入,還需要把我們讀到的觀測數據作為參數傳入leastsq函數,這是此函數的三個關鍵的輸入參數。

(3)leastsq的返回參數是多個,所以放到一個元組(tuple)中,返回tuple類型para的第一個元素para[0]是一個nupy.ndarray類型,存放的即是滿足最小二乘規則的估計參數。

經驗模型的效果

可以使用下面的代碼列印經過最小二乘運算後的經驗模型。

"""列印結果"""print('y='+str(round(k,2))+'x+'+str(round(b,2)))最後一步工作就是把我們的經驗模型的線畫到前面的散點圖上,看一下模型的效果。

"""繪製結果曲線"""x=np.linspace(20,80,2)y=k*x+b"""畫散點圖"""plt.figure()plt.scatter(Xi,Yi,color='red',label='sample data',linewidth=2)plt.plot(x,y,color='blue',label='result line')plt.legend(loc='lower right')plt.show()繪出的結果圖像如下:

模型結果曲線當然,我們還可以通過判定係數來看一下我們的回歸方程與數據擬合的效果好壞,這個在後續的文章中再說。

相關焦點

  • 最小二乘法
    微積分應用課題一 最小二乘法  從前面的學習中, 我們知道最小二乘法可以用來處理一組數據, 可以從一組測定的數據中尋求變量之間的依賴關係, 這種函數關係稱為經驗公式. 本課題將介紹最小二乘法的精確定義及如何尋求 與 之間近似成線性關係時的經驗公式.
  • 最小二乘法的本質是什麼?
    .最小二乘法的一種常見的描述是殘差滿足正態分布的最大似然估計模型具有如下形式:(用愛因斯坦的話來說就是空間曲率為0)為什麼最小二乘法好使?因為我們處於空間曲率近似為0的空間,多數的物理量和物理定理都滿足歐氏空間的特性。實際上,高斯對於最小二乘法的認識,很有欽定的意味:假定最小二乘法最優,那麼如何如何。至於為什麼它最優,抱歉,高斯本人也不知道。第一個真正證明最小二乘法最優的是Maxwell。他的證明主要基於空間對稱性,而這正是歐氏空間的特點。
  • 如何理解最小二乘法?
    文章同步在個人博客網站:https://changshuitaotao.github.io/歡迎訪問無論是傳統的統計學,還是時下火熱的機器學習,線性回歸都是最基礎但又十分重要的模型之一。線性回歸使用了最小二乘法來估計模型參數,如何理解最小二乘法將成為掌握線性回歸的關鍵。
  • 利用最小二乘法實現曲線擬合
    簡介在工程問題的計算中,我們經常需要處理一些離散數據的擬合問題,而最小二乘法是處理曲線擬合問題的常用方法。目前,許多軟體都提供有基於最小二乘法進行曲線擬合的功能,例如在Origin和Excel中均可直接利用離散數據進行曲線擬合。然而,這些軟體只能處理一些簡單函數的擬合問題,當需要擬合的函數較為複雜時,或者無法用簡單的表達式來表述時,則往往無法直接進行擬合。
  • 偏最小二乘法到底是什麼?
    今天就給大家推薦一種量化研究神兵利器——偏最小二乘法(PLS)偏最小二乘法發展較SEM稍晚,最早是由 Wold (1975) 基於經濟計量分析需求所提出,但卻在化學計量領域獲得重視與普及,目前在經管、營銷、商學領域普遍通行。
  • 最小二乘法(附MATLAB代碼)
    前幾天有一些小夥伴需要小編講一下最小二乘法,小編依稀記得當年數值計算這門課學習過這個知識點,但無奈小編忘得一乾二淨,於是在知乎上看到這位大神對最小二乘法的講解,各位小夥伴如果想直接看這位大神講解的話,可以點擊下方閱讀原文直接進行學習。
  • 最小二乘法的數學公式
    之前在德輝學堂介紹過最小二乘法,但是有很多好學的小夥伴總是追問,最小二乘法的數學公式究竟是怎麼樣的?      本期的這一篇文章,我們將介紹一個簡潔的最小二乘法數學公式,慢慢剖析它,爭取讓好學的小夥伴們能認識它,然後再結合Excel利用它來做一些計算。
  • 手把手教你最小二乘法
    今天這期推送的主題是介紹最小二乘法以及如何利用最小二乘法對已有數據進行擬合。之所以會想到這個主題,是因為前段時間在準備美賽時看到很多最小二乘法的應用,但多數關於其原理的帖子要麼晦澀難懂要麼不夠清楚,就像下面這樣,於是乎萌生出這個想法。        (全文共2479字,我也不知道什麼時候能看完。
  • 最小二乘法的前世今生,及其與平均值的關係
    總結一下,為了找出最能代表5次月考成績的真值y,我們使用了到y值的「距離平方的和」最小的原理。用今天我們熟悉的稱呼叫做「最小二乘法(least square method)」,這裡的二乘就是平方的意思。
  • Python機器學習算法入門之梯度下降法實現線性回歸
    3 最小二乘法求誤差函數最優解        最小二乘法(normal equation)相信大家都很熟悉,這裡簡單進行解釋並提供python實現。首先,我們進一步把J(θ)寫成矩陣的形式。X為m行n列的矩陣(代表m個樣本,每個樣本有n個feature),θ和Y為m行1列的矩陣。
  • GD&T乾貨|最小二乘法的數學公式詳解
    (GZHl:智慧汽車供應鏈)之前在德輝學堂介紹過最小二乘法,但是有很多好學的小夥伴總是追問,最小二乘法的數學公式究竟是怎麼樣的?本期的這一篇文章,我們將介紹一個簡潔的最小二乘法數學公式,慢慢剖析它,爭取讓好學的小夥伴們能認識它,然後再結合Excel利用它來做一些計算。
  • 偏最小二乘法是什麼?全新SmartPLS 3.3X統計方法來了!
    你也許了解最小二乘法,但是你聽過偏最小二乘法嗎?它到底是個什麼東西?又是幹嘛用的呢?它和最小二乘法僅一字之差,卻大不相同!隨著社會科學的發展,在經濟管理、教育學、社會科學、醫學中,多元線性回歸分析已經成為一種普遍應用的統計分析和預測方法。
  • 矩陣乘法的純Python實現 | 離開Python庫!!
    在《這篇文章》中,我們有簡單提到「矩陣乘法」的相關知識,如果你不記得了,可以複習一下這張圖片。想起來了沒?本篇文章將深入探討在沒有機器學習庫的情況下如何從零實現矩陣乘法!你有沒有想過在沒有任何複雜的機器學習庫的情況下處理機器學習問題?
  • 基於Python實現XGBoost
    XGBoost是一個優化的分布式梯度增強庫,旨在實現高效,靈活和便攜。它在Gradient Boosting框架下實現機器學習算法。XGBoost提供並行樹提升(也稱為GBDT,GBM),可以快速準確地解決許多數據科學問題。
  • 斐波那契數列與矩陣乘法的聯繫以及其python實現
    避免重複 的關鍵在於 要實現檢查即將進行的計算是否已經經歷過。有同學會想到使用列表,每計算一個feb(n),就將結果存儲到列表的下標n 處。(況且在python中實際列表所佔地址空間會大於其可見長度。)所以這種方式顯然不是可取的方式。但是在斐波那契數列數列需要經常進行運算且n較小的時候,直接採取已經定義好的列表看起來的確是個一勞永逸的方法。但是如果面試官要求你不使用列表,即儘可能減少內存佔用呢?這裡問題就可以簡化為只使用兩個變量。
  • 最小二乘法原理(中):似然函數求權重參數
    似然估計本質本質便是根據已有的大量樣本(實際上就是利用已知的條件)來推斷事件本身的一些屬性參數的方法,最大估計更是最能反映這些出現的樣本的,所以這個參數值也是最可靠和讓人信任的,得到這個參數值後,等來了一個新樣本 X(i+1) 後,我們可以預測它的標籤值。
  • 學習回歸——最小二乘法
    我們將訓練數據中的廣告費代入函數,把得到的點擊量與訓練數據中的點擊量相比較,找出使二者得差最小的θ。這麼做就是為了找到使E(θ)的值最小的θ/這樣的問題稱之為最優化問題;為什麼要計算誤差的平方?最小二乘法:https://zh.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95
  • python:做9*9乘法表
    #python#這次教大家利用python幾行代碼完成簡單的9*9乘法口訣表。9*9乘法口訣表下面利用python的for循環完成 9*9乘法口訣表思路:編制by偉森leung 喜歡本文章的可以請關注偉森leung,後續有更多python方面的知識分享。
  • 量化分析的神兵利器:偏最小二乘法(SmartPLS)實戰研討會
    但是,當自變量之間存在多重相關性的時候,我們常用的最小二乘法就會失效,即使採用主成分分析,也無法很好的彌補。那就沒有別的辦法了嗎?當然不是。偏最小二乘法(Partial Least Square, PLS)為結構方法模型(Structural Equational Modeling, SEM)就是應這種實際需求的另一個分支的多變量統計分析技巧,它是一種多因變量對多自變量的回歸建模方法。可以較好的解決許多以往用普通多元回歸無法解決的問題。主要的應用都是潛變量分析。
  • 常用算法知識:最小二乘的幾何意義及投影矩陣
    拿來拼湊肯定是不行的,最小二乘法告訴我們,這個多項式的係數應該讓每個點的誤差的平方之和最小。(百度百科)最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。