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

2021-01-11 和訊網

大數據文摘作品

  作者: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 /span>

  方法二: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回歸所取代,而不被過多使用,但是這些高級函數的核心正是這個模型本身。

  八種方法效率比拼

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

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

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

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

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

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

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

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

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

    本文首發於微信公眾號:大數據文摘。文章內容屬作者個人觀點,不代表和訊網立場。投資者據此操作,風險請自擔。

(責任編輯:季麗亞 HN003)

相關焦點

  • Python環境下的8種簡單線性回歸算法
    選自Medium作者:Tirthajyoti Sarkar機器之心編譯參與:晏奇、劉曉坤本文中,作者討論了 8 種在 Python 環境下進行簡單線性回歸計算的算法,不過沒有討論其性能的好壞,而是對比了其相對計算複雜度的度量。
  • python多重線性回歸分析
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • 一文教你全面掌握用Python實現線性回歸
    全文共4968字,預計學習時長15分鐘或更長本文旨在為讀者理解和應用線性回歸時提供參考。雖然線性回歸算法很簡單,但是只有少數人能真正理解其基本原則。本文首先會深入挖掘線性回歸理論,理解其內在的工作機制,然後利用Python實現該算法,為商業問題建模。理論線性回歸或許是學習統計學最簡單的方法。
  • 【Python機器學習】系列之線性回歸篇【深度詳細】
    為什麼只用一個測試集評估一個模型的效果是不準確的,如何通過將測試集數據分塊的方法來測試,讓模型的測試效果更可靠。不過現在至少可以認為,匹薩價格預測問題,多元回歸確實比一元回歸效果更好。假如解釋變量和響應變量的關係不是線性的呢?下面來研究一個特別的多元線性回歸的情況,可以用來構建非線性關係模型。下面用多項式回歸,一種特殊的多元線性回歸方法,增加了指數項( 的次數大於1)。
  • 入門| 貝葉斯線性回歸方法的解釋和優點
    本文對比了頻率線性回歸和貝葉斯線性回歸兩種方法,並對後者進行了詳細的介紹,分析了貝葉斯線性回歸的優點和直觀特徵。我認為貝葉斯學派和頻率學派之間的紛爭是「可遠觀而不可褻玩」的學術爭論之一。與其熱衷於站隊,我認為同時學習這兩種統計推斷方法並且將它們應用到恰當的場景之下會更加富有成效。
  • 在 Python 中使用線性回歸預測數據
    閃電俠和綠箭俠是我最喜歡的電視節目。我想看看下周哪個節目會有更多的觀眾。3) 替換數據集中的缺失值我們經常要和帶有缺失值的數據集打交道。這部分沒有實戰例子,不過我會教你怎麼去用線性回歸替換這些值。所以,讓我們投入編程吧(馬上)在動手之前,去把我以前的文章(Python Packages for Data Mining)中的程序包安裝了是個好主意。
  • Python爬蟲數據抓取方法匯總!所有方法都在此!
    一、第一種方法通常用來獲取靜態頁面內容,比如豆瓣電影內容分類下動畫對應的連結:1http://www.douban.com/tag/%E5%8A%A8%E7%94%BB/?
  • Python數據分析|線性回歸
    ②將待處理的數據讀取:read_excel進行Excel文件讀取,用sheet_name指定導入的sheet。③數據初視:用head函數將讀取的數據表格展示前幾行用於初步觀察,可以看到初步的數據形式、欄位。
  • 原理+代碼|Python實戰多元線性回歸模型
    ## 必須得 agg,而且裡面的中括號 [] 也不能少print('='*35)虛擬變量的設置因為類別變量無法直接放入模型,這裡需要轉換一下,而多元線性回歸模型中類別變量的轉換最常用的方法之一便是將其轉化成虛擬變量。
  • Python 炫技操作:安裝包的八種方法
    使用 easy_installeasy_install 這應該是最古老的包安裝方式了,目前基本沒有人使用了。,可參考我之前寫的文章,介紹得非常清楚:最全的 pip 使用指南,50% 你可能沒用過。# 創建虛擬環境並安裝包 $ pipx install pkg 更多 pipx 的使用方法,可參考我之前寫的文章,介紹得非常清楚:解鎖裝包新姿勢,這個場景下 pip 真的難用~4.
  • Python和C/C++交互的幾種方法總結
    它常被暱稱為膠水語言,它能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕鬆地聯結在一起。這篇文章主要給大家總結介紹了Python和C/C++交互的幾種方法,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
  • 的方法 線性回歸方程檢驗專題及常見問題 - CSDN
    在總變差中,一部分變差可以用設定的回歸方程解釋,稱之為回歸變差;另一部分變差是回歸方程不能解釋的,稱為剩餘變差,它們之間有下面等式:如果在總變差Y中,回歸變差所佔的比例越大,則說明Y值隨X值的變化越顯著,或者說X解釋Y的能力越強。反之,回歸變差在總變差中所佔比例越小,則說明Y值隨X值的變化越不顯著,或者說X解釋Y的能力越差。
  • 7種執行簡單的線性回歸的分析與討論!
    所以,在多種可用選項的情況下,您如何選擇最有效的方法?由於scikit-learn是一種免費的機器學習庫,它具有回歸、分類、聚類、模型選擇和降維等功能,所以常用的方法是從該庫調用線性模型類並擬合數據。雖然這可以為應用機器學習的其他流水線特性(例如數據規範化,模型係數正則化,將線性模型提供給另一個下遊模型)提供額外的優勢,但這通常不是確定回歸係數(和一些基本的相關統計)最快或最乾淨、簡單的方法。下面是其他7種更快更清潔的方法,但它們並不都具備相同數量的信息或建模靈活性。下面將簡要討論每種方法。
  • 野蠻數學之蒙特卡洛方法以及python實現
    微信公眾號:數據皮皮俠如果你覺得該公眾號對你有幫助,歡迎關注、推廣和宣傳內容目錄:蒙特卡洛模擬方法及Python實現1.什麼是蒙特卡洛方法(Monte Carlo method)2.蒙特卡洛方法的基本思想3.蒙特卡洛求定積分4.蒙特卡洛方法python實例1.什麼是蒙特卡洛方法(Monte
  • Selenium2+python自動化45-18種定位方法(find_elements)
    除了這八種,其實還有十種定位方法,眼看就快失傳了,今天小編讓失傳已久的定位方法重出江湖!一、十八種定位方法前八種是大家都熟悉的,經常會用到的1.id定位:find_element_by_id(self, id_)2.name定位:find_element_by_name(self, name)3.class定位:find_element_by_class_name(self, name)4.tag定位:find_element_by_tag_name
  • 使用python+sklearn實現Theil-Sen回歸
    在合成數據集(synthetic dataset)上計算Theil-Sen回歸。
  • 多元線性回歸的模型解釋、假設檢驗、特徵選擇
    線性回歸是最流行和討論最多的模型之一,它無疑是深入機器學習(ML)的入門之路。這種簡單、直接的建模方法值得學習,這是進入ML的第一步。在繼續討論之前,讓我們回顧一下線性回歸可以大致分為兩類。簡單線性回歸:當只有一個輸入變量時,它是線性回歸最簡單的形式。
  • 如何用線性回歸模型做數據分析?
    編輯導語:在日常工作中,很多時候都會用到數據分析的方法,線性回歸模型看起來非常簡單,但實際上它的十分重要;本文作者分享了關於如何用線性回歸模型做數據分析的方法,我們一起來學習一下。
  • Python接口測試實戰丨如何實現特殊字符集的自動化測試?
    在當前網際網路產品更新迭代的快節奏下,回歸測試的時間被嚴重壓縮,在金融領域和其他網際網路應用場景下,支付、轉帳、清算往往是核心功能,為了確保資金安全和快速到帳,接口在對用戶名、帳戶名中的特殊字符的正確處理顯得尤為重要。
  • 簡單線性回歸模型
    通常在線性回歸中估計未知參數方法是最小二乘法(OLS),而為了保證估計值能夠很好的解釋模型,我們又有如下前提條件:這些條件又被稱為高斯—馬爾可夫條件,它們保證了在經典線性回歸中最小二乘估計的優越性。3 求解線性回歸模型函數3.1 極大似然法最小二乘法和極大似然法都可以用來求解線性回歸模型,我們在往期文章中討論過最小二乘法,這裡對似然法進行簡單介紹。