8種用Python實現線性回歸的方法,究竟哪個方法最高效?

2021-01-10 大數據文摘

大數據文摘作品

作者:TirthajyotiSarkar

編譯:丁慧、katherine Hou、錢天培

說到如何用Python執行線性回歸,大部分人會立刻想到用sklearn的linear_model,但事實是,Python至少有8種執行線性回歸的方法,sklearn並不是最高效的。

今天,讓我們來談談線性回歸。沒錯,作為數據科學界元老級的模型,線性回歸幾乎是所有數據科學家的入門必修課。拋開涉及大量數統的模型分析和檢驗不說,你真的就能熟練應用線性回歸了麼?未必!

在這篇文章中,文摘菌將介紹8種用Python實現線性回歸的方法。了解了這8種方法,就能夠根據不同需求,靈活選取最為高效的方法實現線性回歸。

「寶刀不老」的線性回歸

時至今日,深度學習早已成為數據科學的新寵。即便往前推10年,SVM、boosting等算法也能在準確率上完爆線性回歸。

為什麼我們還需要線性回歸呢?

一方面,線性回歸所能夠模擬的關係其實遠不止線性關係。線性回歸中的「線性」指的是係數的線性,而通過對特徵的非線性變換,以及廣義線性模型的推廣,輸出和特徵之間的函數關係可以是高度非線性的。另一方面,也是更為重要的一點,線性模型的易解釋性使得它在物理學、經濟學、商學等領域中佔據了難以取代的地位。

那麼,如何用Python來實現線性回歸呢?

由於機器學習庫scikit-learn的廣泛流行,常用的方法是從該庫中調用linear_model來擬合數據。雖然這可以提供機器學習的其他流水線特徵(例如:數據歸一化,模型係數正則化,將線性模型傳遞到另一個下遊模型)的其他優點,但是當一個數據分析師需要快速而簡便地確定回歸係數(和一些基本相關統計量)時,這通常不是最快速簡便的方法。

下面,我將介紹一些更快更簡潔的方法,但是它們所提供信息量和建模的靈活性不盡相同。

各種線性回歸方法的完整源碼都可以在文末的GitHub連結中找到。他們大多數都依賴於SciPy包。

SciPy是基於Python的Numpy擴展構建的數學算法和函數的集合。通過為用戶提供便於操作和可視化數據的高級命令和類,為交互式Python會話增加了強大的功能。

8種方法實現線性回歸

方法一:Scipy.polyfit( ) or numpy.polyfit( )

這是一個最基本的最小二乘多項式擬合函數(least squares polynomial fit function),接受數據集和任何維度的多項式函數(由用戶指定),並返回一組使平方誤差最小的係數。這裡給出函數的詳細描述。對於簡單的線性回歸來說,可以選擇1維函數。但是如果你想擬合更高維的模型,則可以從線性特徵數據中構建多項式特徵並擬合模型。

方法二:Stats.linregress( )

這是一個高度專業化的線性回歸函數,可以在SciPy的統計模塊中找到。然而因為它僅被用來優化計算兩組測量數據的最小二乘回歸,所以其靈活性相當受限。因此,不能使用它進行廣義線性模型和多元回歸擬合。但是,由於其特殊性,它是簡單線性回歸中最快速的方法之一。除了擬合的係數和截距項之外,它還返回基本統計量,如R2係數和標準差。

方法三:Optimize.curve_fit( )

這與Polyfit方法是一致的,但本質上更具一般性。這個強大的函數來自scipy.optimize模塊,可以通過最小二乘最小化將任意的用戶自定義函數擬合到數據集上。

對於簡單的線性回歸來說,可以只寫一個線性的mx + c函數並調用這個估計函數。不言而喻,它也適用於多元回歸,並返回最小二乘度量最小的函數參數數組以及協方差矩陣。

方法四:numpy.linalg.lstsq

這是通過矩陣分解計算線性方程組的最小二乘解的基本方法。來自numpy包的簡便線性代數模塊。在該方法中,通過計算歐幾裡德2-範數||b-ax||2最小化的向量x來求解等式ax = b。

該方程可能有無數解、唯一解或無解。如果a是方陣且滿秩,則x(四捨五入)是方程的「精確」解。

你可以使用這個方法做一元或多元線性回歸來得到計算的係數和殘差。一個小訣竅是,在調用函數之前必須在x數據後加一列1來計算截距項。這被證明是更快速地解決線性回歸問題的方法之一。

方法五:Statsmodels.OLS ( )

Statsmodels是一個小型的Python包,它為許多不同的統計模型估計提供了類和函數,還提供了用於統計測試和統計數據探索的類和函數。每個估計對應一個泛結果列表。可根據現有的統計包進行測試,從而確保統計結果的正確性。

對於線性回歸,可以使用該包中的OLS或一般最小二乘函數來獲得估計過程中的完整的統計信息。

一個需要牢記的小技巧是,必須手動給數據x添加一個常數來計算截距,否則默認情況下只會得到係數。以下是OLS模型的完整匯總結果的截圖。結果中與R或Julia等統計語言一樣具有豐富的內容。

方法六和七:使用矩陣的逆求解析解

對於條件良好的線性回歸問題(其中,至少滿足數據點個數>特徵數量),係數求解等價於存在一個簡單的閉式矩陣解,使得最小二乘最小化。由下式給出:

這裡有兩個選擇:

(a)使用簡單的乘法求矩陣的逆

(b)首先計算x的Moore-Penrose廣義偽逆矩陣,然後與y取點積。由於第二個過程涉及奇異值分解(SVD),所以它比較慢,但是它可以很好地適用於沒有良好條件的數據集。

方法八:sklearn.linear_model.LinearRegression( )

這是大多數機器學習工程師和數據科學家使用的典型方法。當然,對於現實世界中的問題,它可能被交叉驗證和正則化的算法如Lasso回歸和Ridge回歸所取代,而不被過多使用,但是這些高級函數的核心正是這個模型本身。

八種方法效率比拼

作為一名數據科學家,應該一直尋找準確且快速的方法或函數來完成數據建模工作。如果模型本來就很慢,那麼會對大數據集造成執行瓶頸。

一個可以用來確定可擴展性的好辦法是不斷增加數據集的大小,執行模型並取所有的運行時間繪製成趨勢圖。

下面是原始碼及其運行結果(https://github.com/tirthajyoti/PythonMachineLearning/blob/master/Linear_Regression_Methods.ipynb)。

由於其簡單,即使多達1000萬個數據點,stats.linregress和簡單的矩陣求逆還是最快速的方法。

簡單矩陣逆求解的方案更快

作為數據科學家,我們必須一直探索多種解決方案來對相同的任務進行分析和建模,並為特定問題選擇最佳方案。

在本文中,我們討論了8種簡單線性回歸的方法。大多數都可以擴展到更一般化的多元和多項式回歸建模中。

本文的目標主要是討論這些方法的相對運行速度和計算複雜度。我們在一個數據量持續增加的合成數據集(最多達1000萬個樣本)上進行測試,並給出每種方法的運算時間。

令人驚訝的是,與廣泛被使用的scikit-learnlinear_model相比,簡單矩陣的逆求解的方案反而更加快速。

我們還收集了項目代碼,大家可以到這裡下載代碼並直接運行文中提到的8種方法喔:

https://github.com/tirthajyoti/PythonMachineLearning/blob/master/Linear_Regression_Methods.ipynb

原文地址:

https://medium.freecodecamp.org/data-science-with-python-8-ways-to-do-linear-regression-and-measure-their-speed-b5577d75f8b

相關焦點

  • 8種用Python實現線性回歸的方法
    另一方面,也是更為重要的一點,線性模型的易解釋性使得它在物理學、經濟學、商學等領域中佔據了難以取代的地位。那麼,如何用Python來實現線性回歸呢?由於機器學習庫scikit-learn的廣泛流行,常用的方法是從該庫中調用linear_model來擬合數據。
  • 8 種進行簡單線性回歸的方法分析與討論
    8 種進行簡單線性回歸的方法分析與討論 Tirthajyoti Sarkar 發表於 2018-01-05 08:18:57 本文中,作者討論了 8 種在 Python 環境下進行簡單線性回歸計算的算法,不過沒有討論其性能的好壞
  • Python環境下的8種簡單線性回歸算法
    選自Medium作者:Tirthajyoti Sarkar機器之心編譯參與:晏奇、劉曉坤本文中,作者討論了 8 種在 Python 環境下進行簡單線性回歸計算的算法,不過沒有討論其性能的好壞,而是對比了其相對計算複雜度的度量。
  • 一元線性回歸分析python - CSDN
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • 一文教你全面掌握用Python實現線性回歸
    本文首先會深入挖掘線性回歸理論,理解其內在的工作機制,然後利用Python實現該算法,為商業問題建模。理論線性回歸或許是學習統計學最簡單的方法。在學習更高級的方法之前,這是一個很好的入門方法。為此,需要最小化最小二乘法或者誤差平方和。當然,線性模型也不是完美的,也不能準確預測出所有數據,這就意味著實際值和預測值間存在差異。該誤差能用以下方程簡單算出:實際值減去預測值但為什麼要平方誤差呢?
  • python一元線性回歸分析專題及常見問題 - CSDN
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • python多重線性回歸分析
    一個簡單的線性回歸模型測試。定義:線性回歸是利用數理統計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法,運用十分廣泛。表達形式為y =aX+b,b為誤差服從均值為0的正態分布,a為截距。
  • ...詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的實現應用...
    用R語言和Python實現機器學習算法的要點我特地跳過了這些技術背後的統計數據,因為一開始你還不需要了解這些東西。因此,如果你想要從統計數據層面理解這些算法的話,那你可以去別的地方找找。但是,如果你想要為構建機器學習項目做好準備的話,那你應該會收穫頗豐。廣義上來說,有3種機器學習算法1.
  • 入門| 貝葉斯線性回歸方法的解釋和優點
    本文對比了頻率線性回歸和貝葉斯線性回歸兩種方法,並對後者進行了詳細的介紹,分析了貝葉斯線性回歸的優點和直觀特徵。我認為貝葉斯學派和頻率學派之間的紛爭是「可遠觀而不可褻玩」的學術爭論之一。與其熱衷於站隊,我認為同時學習這兩種統計推斷方法並且將它們應用到恰當的場景之下會更加富有成效。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    (6套課程) 注:零基礎全能篇中,針對windows和liunx系統均有兩套課程可供選擇學習,單純學python,哪個系統都一樣,初學者只需選擇自己熟悉的系統學習相應課程即可。 4-06主動分析 4-07編碼實現 4-08交叉分析方法與實現 4-09交叉分析方法與實現 4-10相關分析與實現 4-11因子分析與實現 4-12本章小結 5-01特徵工程概述 5-02數據樣本採集 5-03異常值處理 5-04標註
  • 小白學數據:教你用Python實現簡單監督學習算法
    有很多方法可以實現有監督學習,我們將探討幾種最常用的方法。根據給定的數據集,機器學習可以分為兩大類:分類(Classification)和回歸(Regression)。如果給定的數據集的輸出值是類別,那麼待解決是分類問題。
  • Python數據分析|線性回歸
    Python數據分析學習筆記,今天分享下利用Python對業務進行數據預處理,並利用線性回歸進行數據預測。壹 數據導入Python下載及環境配置這裡就不贅述了哈,網上教程非常多,我們直接一開始就進入乾貨,打它一個開門見山。
  • 原理+代碼|Python實戰多元線性回歸模型
    ## 必須得 agg,而且裡面的中括號 [] 也不能少print('='*35)虛擬變量的設置因為類別變量無法直接放入模型,這裡需要轉換一下,而多元線性回歸模型中類別變量的轉換最常用的方法之一便是將其轉化成虛擬變量。
  • 運用sklearn進行線性判別分析(LDA)代碼實現
    基於sklearn的線性判別分析(LDA)代碼實現一、前言及回顧本文記錄使用sklearn庫實現有監督的數據降維技術——線性判別分析(LDA)。在上一篇LDA線性判別分析原理及python應用(葡萄酒案例分析),我們通過詳細的步驟理解LDA內部邏輯實現原理,能夠更好地掌握線性判別分析的內部機制。
  • Python數據科學:線性回歸
    本次介紹:線性回歸:多個連續變量與一個連續變量間的關係。其中線性回歸分為簡單線性回歸和多元線性回歸。/ 01 / 數據分析與數據挖掘資料庫:一個存儲數據的工具。/ 02 / 回歸方程01 簡單線性回歸簡單線性回歸只有一個自變量與一個因變量。含有的參數有「回歸係數」「截距」「擾動項」。其中「擾動項」又稱「隨機誤差」,服從均值為0的正態分布。線性回歸的因變量實際值與預測值之差稱為「殘差」。
  • 使用Python中的線性回歸通過語音診斷帕金森氏病
    本文,我們將創建一個簡單的python機器學習算法,以便能夠通過聲音來診斷該人是否為患者。我們將使用一組(健康者和帕金森病患者)音頻文件庫,通過對音頻進行一些測量來構建我們的機器學習數據集。建立機器學習數據集後,我們將使用SciKit Learn庫訓練線性回歸模型。最後,我們將構建一個python庫,這個庫可以輕鬆集成到其他應用程式中。數據集首先,我們需要將音頻文件轉換成包含音頻測量值以及患者是否健康標誌的表格。
  • 7種執行簡單的線性回歸的分析與討論!
    由於scikit-learn是一種免費的機器學習庫,它具有回歸、分類、聚類、模型選擇和降維等功能,所以常用的方法是從該庫調用線性模型類並擬合數據。雖然這可以為應用機器學習的其他流水線特性(例如數據規範化,模型係數正則化,將線性模型提供給另一個下遊模型)提供額外的優勢,但這通常不是確定回歸係數(和一些基本的相關統計)最快或最乾淨、簡單的方法。
  • 線性回歸:簡單線性回歸詳解
    【導讀】本文是一篇專門介紹線性回歸的技術文章,討論了機器學習中線性回歸的技術細節。線性回歸核心思想是獲得最能夠擬合數據的直線。
  • 了解線性回歸的數學原理:線性回歸背後的微積分
    線性回歸通常是任何機器學習課程的起點。目的是預測輸入變量與目標變量之間的線性關係。天真的情況是穿過空間原點的直線。在這裡,我們僅限於二維空間,即笛卡爾平面。讓我們從y = mx格式開始逐步發展,然後從y = mx + c回歸開始。y = mx的簡化方案在這種情況下,我們知道我們要對通過原點的數據擬合一條線。
  • SPSS多元線性回歸案例:回歸分析方法實戰
    1.線性回歸(Linear Regression)線性回歸通常是人們在學習預測模型時首選的技術之一。在這種技術中,因變量是連續的,自變量可以是連續的也可以是離散的,回歸線的性質是線性的。線性回歸使用最佳的擬合直線(也就是回歸線)在因變量(Y)和一個或多個自變量(X)之間建立一種關係。