最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

8種用Python實現(xiàn)線性回歸的方法對比詳解

 更新時間:2019年07月10日 10:40:23   作者:TirthajyotiSarkar  
這篇文章主要介紹了8種用Python實現(xiàn)線性回歸的方法對比詳解,說到如何用Python執(zhí)行線性回歸,大部分人會立刻想到用sklearn的linear_model,但事實是,Python至少有8種執(zhí)行線性回歸的方法,sklearn并不是最高效的,需要的朋友可以參考下

前言

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

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

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

“寶刀不老”的線性回歸

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

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

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

那么,如何用Python來實現(xiàn)線性回歸呢?

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

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

各種線性回歸方法的完整源碼都可以在文末的GitHub鏈接中找到。他們大多數(shù)都依賴于SciPy包。

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

8種方法實現(xiàn)線性回歸

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

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

方法二:Stats.linregress( )

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

方法三:Optimize.curve_fit( )

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

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

方法四:numpy.linalg.lstsq

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

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

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

方法五:Statsmodels.OLS ( )

Statsmodels是一個小型的Python包,它為許多不同的統(tǒng)計模型估計提供了類和函數(shù),還提供了用于統(tǒng)計測試和統(tǒng)計數(shù)據(jù)探索的類和函數(shù)。每個估計對應一個泛結果列表??筛鶕?jù)現(xiàn)有的統(tǒng)計包進行測試,從而確保統(tǒng)計結果的正確性。

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

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

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

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

這里有兩個選擇:

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

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

方法八:sklearn.linear_model.LinearRegression( )

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

八種方法效率比拼

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

一個可以用來確定可擴展性的好辦法是不斷增加數(shù)據(jù)集的大小,執(zhí)行模型并取所有的運行時間繪制成趨勢圖。

下面是源代碼及其運行結果

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

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

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

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

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

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

本文的目標主要是討論這些方法的相對運行速度和計算復雜度。我們在一個數(shù)據(jù)量持續(xù)增加的合成數(shù)據(jù)集(最多達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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python使用datetime模塊計算各種時間間隔的方法

    python使用datetime模塊計算各種時間間隔的方法

    這篇文章主要介紹了python使用datetime模塊計算各種時間間隔的方法,實例分析了Python使用datetime模塊進行各種常用的時間操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Python 檢查數(shù)組元素是否存在類似PHP isset()方法

    Python 檢查數(shù)組元素是否存在類似PHP isset()方法

    isset方法來檢查數(shù)組元素是否存在,在Python中無對應函數(shù),在Python中一般可以通過異常來處理數(shù)組元素不存在的情況,而無須事先檢查
    2014-10-10
  • 淺談Python peewee 使用經(jīng)驗

    淺談Python peewee 使用經(jīng)驗

    這篇文章主要介紹了淺談Python peewee 使用經(jīng)驗,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • pytest配置文件pytest.ini的配置、原理與實際應用詳解

    pytest配置文件pytest.ini的配置、原理與實際應用詳解

    在Python的測試生態(tài)中,pytest無疑是最受歡迎的測試框架之一,在pytest的眾多配置文件中,pytest.ini無疑是最為重要和常用的一個,本文將深入探討pytest.ini的配置、工作原理以及實際應用場景,幫助讀者更好地理解和使用這一強大的工具,需要的朋友可以參考下
    2025-03-03
  • PyCharm中Python解釋器如何選擇詳析

    PyCharm中Python解釋器如何選擇詳析

    這篇文章主要給大家介紹了關于PyCharm中Python解釋器如何選擇的相關資料,文中詳細分析了四種常見的Python環(huán)境管理工具,分別是venv、conda、pipenv和poetry,需要的朋友可以參考下
    2024-11-11
  • python之os路徑被轉(zhuǎn)義的問題

    python之os路徑被轉(zhuǎn)義的問題

    這篇文章主要介紹了python之os路徑被轉(zhuǎn)義的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Ubuntu下安裝PyV8

    Ubuntu下安裝PyV8

    本文給大家簡單介紹了下在ubuntu下安裝pyv8的方法和注意事項,非常的實用,有需要的小伙伴可以參考下
    2016-03-03
  • PyQt5基本控件使用之消息彈出、用戶輸入、文件對話框的使用方法

    PyQt5基本控件使用之消息彈出、用戶輸入、文件對話框的使用方法

    本文主要介紹PyQt界面實現(xiàn)中常用的消息彈出對話框、提供用戶輸入的輸入框、打開文件獲取文件/目錄路徑的文件對話框。 本文主要針對這三種控件的主要場景進行介紹。感興趣的朋友跟隨小編一起看看吧
    2019-08-08
  • Python的pandas類庫結構參數(shù)

    Python的pandas類庫結構參數(shù)

    pandas是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務而創(chuàng)建的,Pandas 納入了大量庫和一些標準的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具,需要的朋友可以參考下
    2023-07-07
  • python統(tǒng)計日志ip訪問數(shù)的方法

    python統(tǒng)計日志ip訪問數(shù)的方法

    這篇文章主要介紹了python統(tǒng)計日志ip訪問數(shù)的方法,涉及Python操作日志文件及正則匹配的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-07-07

最新評論

望奎县| 宝应县| 正定县| 岳西县| 衡东县| 西乡县| 林口县| 济源市| 韶山市| 镇远县| 偏关县| 岢岚县| 柏乡县| 和龙市| 阿城市| 卢湾区| 密山市| 栖霞市| 巩义市| 瓦房店市| 东阿县| 克什克腾旗| 嘉定区| 光泽县| 汉寿县| 鄂托克旗| 宜川县| 九龙坡区| 钟祥市| 桦南县| 资中县| 林甸县| 临潭县| 清新县| 宽城| 延安市| 石棉县| 泗洪县| 苏尼特左旗| 西安市| 康马县|