關(guān)于numpy.polyfit()與Stats.linregress()方法最小二乘近似擬合斜率對(duì)比
numpy.polyfit()與Stats.linregress()方法最小二乘近似擬合斜率對(duì)比
對(duì)于大多數(shù)數(shù)據(jù)科學(xué)家而言,線性回歸方法是他們進(jìn)行統(tǒng)計(jì)學(xué)建模和預(yù)測(cè)分析任務(wù)的起點(diǎn)。
而快速且準(zhǔn)確地線性回歸模型對(duì)擬合大型數(shù)據(jù)集非常重要性。
由于在機(jī)器學(xué)習(xí)中,Scikit-learn 是一個(gè)十分流行的 Python 庫(kù),因此,人們經(jīng)常會(huì)從這個(gè)庫(kù)調(diào)用線性模型來擬合數(shù)據(jù)。
除此之外,我們還可以使用該庫(kù)的 pipeline 與 FeatureUnion 功能(如:數(shù)據(jù)歸一化、模型回歸系數(shù)正則化、將線性模型傳遞給下游模型),但是一般來看,如果一個(gè)數(shù)據(jù)分析師僅需要一個(gè)又快又簡(jiǎn)單的方法來確定回歸系數(shù)(或是一些相關(guān)的統(tǒng)計(jì)學(xué)基本結(jié)果),那么這并不是最快或最簡(jiǎn)潔的方法。
接下來,我們研究?jī)蓚€(gè)更快更簡(jiǎn)潔的方法。
1. numpy.polyfit()方法

這是一個(gè)非常一般的最小二乘多項(xiàng)式擬合函數(shù),它適用于任何 degree 的數(shù)據(jù)集與多項(xiàng)式函數(shù)(具體由用戶來指定),其返回值是一個(gè)(最小化方差)回歸系數(shù)的數(shù)組。
對(duì)于簡(jiǎn)單的線性回歸而言,你可以把 degree 設(shè)為 1。如果你想擬合一個(gè) degree 更高的模型,你也可以通過從線性特征數(shù)據(jù)中建立多項(xiàng)式特征來完成。
2. Stats.linregress( ) 方法

這是 Scipy 中的統(tǒng)計(jì)模塊中的一個(gè)高度專門化的線性回歸函數(shù)。
其靈活性相當(dāng)受限,因?yàn)樗粚?duì)計(jì)算兩組測(cè)量值的最小二乘回歸進(jìn)行優(yōu)化。
因此,你不能用它擬合一般的線性模型,或者是用它來進(jìn)行多變量回歸分析。
但是,由于該函數(shù)的目的是為了執(zhí)行專門的任務(wù),所以當(dāng)我們遇到簡(jiǎn)單的線性回歸分析時(shí),這是最快速的方法之一。
除了已擬合的系數(shù)和截距項(xiàng)(intercept term)外,它還會(huì)返回基本的統(tǒng)計(jì)學(xué)值如 R² 系數(shù)與標(biāo)準(zhǔn)差。
本質(zhì)上,std_err應(yīng)該為梯度中表示的每個(gè)系數(shù)給出一個(gè)值。
簡(jiǎn)單來說,std_err就是告訴您數(shù)據(jù)的梯度擬合度(數(shù)值越高表示精度越低),不是傳統(tǒng)統(tǒng)計(jì)中的標(biāo)準(zhǔn)差。
3. 兩個(gè)方法對(duì)比

分別隨機(jī)取10、100、1000、10000組數(shù)據(jù)對(duì)比計(jì)算速度。

附代碼:
import pandas as pd
import datetime
import numpy as np
import random
from scipy import stats
x =[i for i in range(10)]
y =[j*random.random() + random.randint(2,6) for j in range(10)]
print('start np.polyfit')
now_time = datetime.datetime.now()
time_str = datetime.datetime.strftime(now_time,'%Y-%m-%d %H:%M:%S.%f')
print(time_str)
p,V = np.polyfit(x, y, 1)
##std = np.var(y, ddof=1)
#std = np.std(y, ddof=1)
print(p,V)
now_time = datetime.datetime.now()
time_str = datetime.datetime.strftime(now_time,'%Y-%m-%d %H:%M:%S.%f')
print(time_str)
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
print(slope,intercept)
now_time = datetime.datetime.now()
time_str = datetime.datetime.strftime(now_time,'%Y-%m-%d %H:%M:%S.%f')
print(time_str)
總結(jié)
polyfit()方法要比linregress()快,特別是單組數(shù)據(jù)量少時(shí),差距比較大。在做大數(shù)據(jù)線性回歸時(shí),如果單組數(shù)據(jù)量少于1000,可以多考慮polyfit()方法。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題
這篇文章主要介紹了pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
在VS2017中用C#調(diào)用python腳本的實(shí)現(xiàn)
這篇文章主要介紹了在VS2017中用C#調(diào)用python腳本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
從入門到封裝通用詳解Python裝飾器實(shí)戰(zhàn)指南
這篇文章主要介紹了為大家詳細(xì)介紹了Python中裝飾器使用的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-01-01
Python自動(dòng)爬取圖片并保存實(shí)例代碼
大家好,本篇文章主要講的是Python自動(dòng)爬取圖片并保存實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
python繞過圖片滑動(dòng)驗(yàn)證碼實(shí)現(xiàn)爬取PTA所有題目功能 附源碼
這篇文章主要介紹了python繞過圖片滑動(dòng)驗(yàn)證碼實(shí)現(xiàn)爬取PTA所有題目 附源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Python 實(shí)現(xiàn)簡(jiǎn)單的客戶端認(rèn)證
這篇文章主要介紹了Python 如何實(shí)現(xiàn)簡(jiǎn)單的客戶端認(rèn)證,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
Python圖像處理之目標(biāo)物體輪廓提取的實(shí)現(xiàn)方法
目標(biāo)物體的輪廓實(shí)質(zhì)是指一系列像素點(diǎn)構(gòu)成,這些點(diǎn)構(gòu)成了一個(gè)有序的點(diǎn)集,這篇文章主要給大家介紹了關(guān)于Python圖像處理之目標(biāo)物體輪廓提取的實(shí)現(xiàn)方法,需要的朋友可以參考下2021-08-08

