8種用Python實現線性回歸的方法對比詳解

2022-10-04 16:57:16 字數 3367 閱讀 1518

前言

說到如何用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),接受資料集和任何維度的多項式函式(由使用者指定),並返回一組使平方誤差最小的係數。ucyxqvy這裡給出函式的詳細描述。對於簡單的線性回歸來說,可以選擇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回歸所取代,而不被過多使用,但是這些高階函式的核心正是這個模型本身。

八種方法效率比拼

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

乙個可以用來確定可擴充套件性的好辦法是不斷增加資料集的大小,執行模型並取所有的執行時間繪製成趨勢圖。

下面是源**及其執行結果

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

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

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

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

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

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

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

我們還收集了專案**,大家可以到這裡****並直接執行文中提到的8種方法喔:

英文原文位址:程式設計客棧g/data-science-with-python-8-ways-to-do-linear-regression-and-measure-their-speed-b5577d75f8b

本文標題: 8種用python實現線性回歸的方法對比詳解

本文位址: /jiaoben/python/265186.html

python實現線性回歸

定義 線性回歸在假設特徵滿足線性關係,根據給定的訓練資料訓練乙個模型,並用此模型進行 文中只介紹了簡單的概念,不涉及公式的證明等。從最簡單的一元線性關係介紹,假設有一組資料型態為 y theta x,其中 x y 我們根據 x,y 模擬出近似的 theta 引數值,進而得到 y theta x 模型...

python實現線性回歸

線性回歸模型是最簡單的機器學習模型,基礎可以從線性回歸模型開始入手,慢慢地過渡到非線性回歸以及神經網路模型。1.概念 2.線性回歸 簡單回歸 乙個自變數輸入,y x是一對一的關係,對映到幾何上來說就是二維座標系的直線方程,可表示為y 多元回歸 多個自變數,改變維度的大小。即 3.最小二乘法 通過向量...

python實現線性回歸

線性回歸模型是機器學習中最基礎的演算法,同時也在工業上得到很大應用。編碼實現該方法,可以對其有個透徹理解。回歸模型 目標函式 對目標函式求偏導 更新引數 樣本矩陣表示 python 實現 import numpy as np class linear object def init self sel...