【IT168 資訊】對於無數的數據科學家來說,線性回歸是許多統計建模和預測分析項目的起點。擬合的重要性,無論是準確的還是快速的,對於大數據集的線性模型都不能被誇大。
隨著Python迅速成為實際的程式語言的一大選擇,關鍵是數據科學家必須意識到他或她可以使用的各種方法來快速將線性模型擬合到一個相當大的數據集,並評估每個特徵在過程、結果中的重要性。
所以,在多種可用選項的情況下,您如何選擇最有效的方法?
由於scikit-learn是一種免費的機器學習庫,它具有回歸、分類、聚類、模型選擇和降維等功能,所以常用的方法是從該庫調用線性模型類並擬合數據。雖然這可以為應用機器學習的其他流水線特性(例如數據規範化,模型係數正則化,將線性模型提供給另一個下遊模型)提供額外的優勢,但這通常不是確定回歸係數(和一些基本的相關統計)最快或最乾淨、簡單的方法。
下面是其他7種更快更清潔的方法,但它們並不都具備相同數量的信息或建模靈活性。下面將簡要討論每種方法。
1.方法:Scipy.polyfit()或numpy.polyfit()
這是一個相當普遍的最小二乘多項式擬合函數,它接受數據集和任何度數的多項式函數(由用戶指定),並返回一組使係數誤差平方最小化的係數。這裡給出了該功能的詳細描述。對於簡單線性回歸,可以選擇1級。如果要擬合更高級別的模型,則可以從線性特徵數據中構建多項式特徵並擬合模型。
2.方法:Stats.linregress()
這是一個高度專業化的線性回歸函數,可以在Scipy的統計模塊中找到。它的靈活性受到相當的限制,因為它被優化為僅計算兩組測量的線性最小二乘回歸。因此,你不能用廣義線性模型或多變量回歸來擬合。但是,由於其特殊性,它是簡單線性回歸中速度最快的方法之一。除了擬合係數和截距項之外,它還返回基本統計數據,如R2係數和標準誤差。
3.方法:Optimize.curve_fit()
這與Polyfit方法相同,但本質上更一般。 scipy.optimize模塊這個強大的功能可以通過最小二乘法最小化來將任何用戶定義的函數適用於數據集。
對於簡單線性回歸,可以只寫一個線性mx + c函數並調用這個估計器。毫無疑問,這也適用於多元回歸。該方法返回一個函數參數數組,最小二乘法和相關的協方差矩陣被最小化。
4.方法:numpy.linalg.lstsq
這是通過矩陣分解計算線性方程組的最小二乘解的基本方法。它來自numpy包的線性代數模塊。在引擎蓋下,它通過計算一個向量x來解決方程ax = b,這個向量x最小化了歐幾裡得2-norm || ba ??一個x | |2。
該方程可以是低於好的或高於確定的(即a的線性獨立行的數目可以小於,等於或大於其線性獨立列的數目)。如果a是正方形且滿秩,那麼x(但是對於捨入誤差)是方程的「精確」解。
您可以對此進行簡單或多元回歸,並找回計算出的係數和殘差。一個小竅門是,在調用這個函數之前,你必須在x數據後加上一列1來計算截距項。事實證明,這是嘗試線性回歸問題的更快方法之一。
5.方法:Statsmodels.OLS()
Statsmodels是一個很棒的小型Python軟體包,它提供了用於評估不同統計模型的類和函數,還提供了統計測試和統計數據探索。每個估算器都有一個結果統計的廣泛列表。對照現有統計軟體包對結果進行測試以確保正確性。
對於線性回歸,可以使用該包中的OLS或普通最小二乘函數,並獲得有關估計過程的完整統計信息。
要記住的一個小技巧是,您必須手動添加一個常數到x數據來計算截距,否則默認情況下它只會報告係數。以下是OLS模型的完整結果摘要的快照。正如你所看到的,它和R或Julia等功能統計語言一樣豐富。
6.方法:使用逆矩陣方法的解析解
對於條件良好的線性回歸問題(至少在#個數據點>#個特徵中),存在一個簡單的閉式矩陣解法來計算保證最小二乘最小化的係數。
這裡討論關於這個解決方案的詳細推導和討論。
這裡有兩個選擇:
(a)使用簡單的乘法矩陣求逆
(b)計算x數據的Moore-Penrose廣義偽矩陣,然後用y數據取一個點積。因為第二個過程涉及奇異值分解(SVD),所以它速度較慢,但對於沒有良好條件的數據集運行良好。
7.方法:sklearn.linear_model.LinearRegression()
這是大多數機器學習工程師和數據科學家使用的典型方法。當然,對於現實世界的問題,它通常被交叉驗證和正則化算法取代,如Lasso回歸或Ridge回歸。然而,這些高級功能的基本核心在於這種模式。
測量這些方法的速度和時間複雜性
作為一名數據科學家,應該始終尋找準確而快速的方法或功能來完成數據建模工作。如果方法本身很慢,那麼它會為大數據集創建一個執行瓶頸。
確定可伸縮性的一個好方法是運行模型以增加數據集大小,提取所有運行的執行時間並繪製趨勢圖。
這就是結果。由於它們的簡單性,stats.linregress和簡單的逆矩陣方法執行速度最快,甚至高達1000萬個數據點。
總結
在本文中,我們討論了執行簡單線性回歸的7種有效方法。它們中的大多數都可以擴展到更一般化的多變量和多項式回歸建模。我們沒有列出適合這些方法的R2,因為它們都非常接近1。
對於具有數百萬個人工生成的數據點的單變量回歸,回歸係數估計得非常好。
本文的目標主要是討論這些方法的相對速度/計算複雜性。我們通過在一個合成的數據集上進行測試(高達1000萬個樣本)來顯示每個計算複雜性度量。令人驚訝的是,與scikit-learn廣泛使用的線性模型相比,簡單逆矩陣解析解決方案的工作速度非常快。