欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于numpy.polyfit()與Stats.linregress()方法最小二乘近似擬合斜率對(duì)比

 更新時(shí)間:2024年04月07日 08:57:07   作者:肖永威  
這篇文章主要介紹了關(guān)于numpy.polyfit()與Stats.linregress()方法最小二乘近似擬合斜率對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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)用線性模型來(lái)擬合數(shù)據(jù)。

除此之外,我們還可以使用該庫(kù)的 pipeline 與 FeatureUnion 功能(如:數(shù)據(jù)歸一化、模型回歸系數(shù)正則化、將線性模型傳遞給下游模型),但是一般來(lái)看,如果一個(gè)數(shù)據(jù)分析師僅需要一個(gè)又快又簡(jiǎn)單的方法來(lái)確定回歸系數(shù)(或是一些相關(guān)的統(tǒng)計(jì)學(xué)基本結(jié)果),那么這并不是最快或最簡(jiǎn)潔的方法。

接下來(lái),我們研究?jī)蓚€(gè)更快更簡(jiǎn)潔的方法。

1. numpy.polyfit()方法

這是一個(gè)非常一般的最小二乘多項(xiàng)式擬合函數(shù),它適用于任何 degree 的數(shù)據(jù)集與多項(xiàng)式函數(shù)(具體由用戶來(lái)指定),其返回值是一個(gè)(最小化方差)回歸系數(shù)的數(shù)組。

對(duì)于簡(jiǎn)單的線性回歸而言,你可以把 degree 設(shè)為 1。如果你想擬合一個(gè) degree 更高的模型,你也可以通過(guò)從線性特征數(shù)據(jù)中建立多項(xiàng)式特征來(lái)完成。

2. Stats.linregress( ) 方法

這是 Scipy 中的統(tǒng)計(jì)模塊中的一個(gè)高度專門化的線性回歸函數(shù)。

其靈活性相當(dāng)受限,因?yàn)樗粚?duì)計(jì)算兩組測(cè)量值的最小二乘回歸進(jìn)行優(yōu)化。

因此,你不能用它擬合一般的線性模型,或者是用它來(lái)進(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)單來(lái)說(shuō),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)文章

最新評(píng)論