怎么用python自制計算公式_如何使用Python和Numpy計算r平方?

我最初發布下面的基準是為了推薦numpy.corrcoef,愚蠢地沒有意識到原來的問題已經使用了corrcoef,實際上是在詢問高階多項式擬合。我已經使用statsmodels為多項式r-squared問題添加了一個實際的解決方案,并且我已經離開了原始的基準測試,雖然偏離主題,但對某些人來說可能是有用的。

statsmodels能夠直接計算多項式擬合的r^2,這里有2種方法......

import statsmodels.api as sm

import stasmodels.formula.api as smf

# Construct the columns for the different powers of x

def get_r2_statsmodels(x, y, k=1):

xpoly = np.column_stack([x**i for i in range(k+1)])

return sm.OLS(y, xpoly).fit().rsquared

# Use the formula API and construct a formula describing the polynomial

def get_r2_statsmodels_formula(x, y, k=1):

formula = 'y ~ 1 + ' + ' + '.join('I(x**{})'.format(i) for i in range(1, k+1))

data = {'x': x, 'y': y}

return smf.ols(formula, data).fit().rsquared

為了進一步利用statsmodels,還應該查看擬合的模型摘要,可以在Jupyter / IPython筆記本中打印或顯示為豐富的HTML表。除了rsquared之外,結果對象還提供對許多有用的統計指標的訪問。

model = sm.OLS(y, xpoly)

results = model.fit()

results.summary()

以下是我原來的答案,我對各種線性回歸r ^ 2方法進行了基準測試...

問題中使用的corrcoef函數僅計算單個線性回歸的相關系數r,因此它不能解決高階多項式擬合的問題r^2。然而,對于它的價值,我發現對于線性回歸,它確實是計算r的最快和最直接的方法。

def get_r2_numpy_corrcoef(x, y):

return np.corrcoef(x, y)[0, 1]**2

這些是我通過比較1000個隨機(x,y)點的方法得到的時間結果:

純Python(直接r計算)

1000循環,最佳3:每循環1.59毫秒

Numpy polyfit(適用于n次多項式擬合)

1000個循環,每循環最佳3:326μs

Numpy手冊(直接r計算)

10000循環,最佳3:每循環62.1μs

Numpy corrcoef(直接r計算)

10000循環,最佳3:每循環56.6μs

Scipy(線性回歸以r為輸出)

1000個循環,最佳3:676μs/循環

Statsmodels(可以做n次多項式和許多其他擬合)

1000個循環,最佳3:每循環422μs

corrcoef方法使用numpy方法以“手動”方式勉強計算r ^ 2。它比polyfit方法快5倍,比scipy.linregress快12倍。只是為了加強numpy為你做的事情,它比純蟒蛇快28倍。我并不精通像numba和pypy這樣的東西,所以其他人不得不填補這些空白,但我認為這很有說服力,corrcoef是計算簡單線性回歸的最佳工具。

這是我的基準測試代碼。我從Jupyter筆記本上復制粘貼(很難不稱它為IPython筆記本......),所以如果有什么事情發生,我道歉。 %timeit magic命令需要IPython。

import numpy as np

from scipy import stats

import statsmodels.api as sm

import math

n=1000

x = np.random.rand(1000)*10

x.sort()

y = 10 * x + (5+np.random.randn(1000)*10-5)

x_list = list(x)

y_list = list(y)

def get_r2_numpy(x, y):

slope, intercept = np.polyfit(x, y, 1)

r_squared = 1 - (sum((y - (slope * x + intercept))**2) / ((len(y) - 1) * np.var(y, ddof=1)))

return r_squared

def get_r2_scipy(x, y):

_, _, r_value, _, _ = stats.linregress(x, y)

return r_value**2

def get_r2_statsmodels(x, y):

return sm.OLS(y, sm.add_constant(x)).fit().rsquared

def get_r2_python(x_list, y_list):

n = len(x)

x_bar = sum(x_list)/n

y_bar = sum(y_list)/n

x_std = math.sqrt(sum([(xi-x_bar)**2 for xi in x_list])/(n-1))

y_std = math.sqrt(sum([(yi-y_bar)**2 for yi in y_list])/(n-1))

zx = [(xi-x_bar)/x_std for xi in x_list]

zy = [(yi-y_bar)/y_std for yi in y_list]

r = sum(zxi*zyi for zxi, zyi in zip(zx, zy))/(n-1)

return r**2

def get_r2_numpy_manual(x, y):

zx = (x-np.mean(x))/np.std(x, ddof=1)

zy = (y-np.mean(y))/np.std(y, ddof=1)

r = np.sum(zx*zy)/(len(x)-1)

return r**2

def get_r2_numpy_corrcoef(x, y):

return np.corrcoef(x, y)[0, 1]**2

print('Python')

%timeit get_r2_python(x_list, y_list)

print('Numpy polyfit')

%timeit get_r2_numpy(x, y)

print('Numpy Manual')

%timeit get_r2_numpy_manual(x, y)

print('Numpy corrcoef')

%timeit get_r2_numpy_corrcoef(x, y)

print('Scipy')

%timeit get_r2_scipy(x, y)

print('Statsmodels')

%timeit get_r2_statsmodels(x, y)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370726.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ASP .NET SVN emmet 插件

學習 ASP .NET 時間的第三周: 來講講如何在 visual studio 2013...上搭載 SVN吧: 廢話不多說: One Step: 電腦上已安裝 visual studio 2013 等版本(未安裝時 紅色區域是不存在的) Two Step: 從官網上下載對…

Python之路3【知識點】白話Python編碼和文件操作(截載)

無意發現這篇文章講的比較好,存下來供參考: http://www.cnblogs.com/luotianshuai/p/5735051.html轉載于:https://www.cnblogs.com/shikaihong/p/7778880.html

Http協議入門

[在此處輸入文章標題] 1 web web入門 1)web服務軟件作用: 把本地資源共享給外部訪問 2)tomcat服務器基本操作 : 啟動: %tomcat%/bin/startup.bat 關閉: %tomcat%/bin/shutdown.bat 訪問tomcat主頁: http://loca…

計算機硬件系統都是看得見的,計算機組成硬件系統).doc

計算機組成硬件系統)各位計算機協會的成員大家好,很高興大家能陪我們走過這段難忘的時光。為了讓大家更好的學到東西,我們特地將計算機方面的東西整理成技術文檔,共大家使用,祝大家學得愉快!湘信院計算機協會一&#x…

Google Guava –期貨

這篇文章是我在Google Guava上的系列文章的延續,這次涵蓋了Future。 Futures類是用于使用Future / ListenableFuture接口的靜態實用程序方法的集合。 Future是提交給ExecutorService的異步任務(可運行或可調用)的句柄。 Future界面提供以下方…

iptables 配置后連接不上數據庫_Linux服務器配置-VSFTP服務配置(三)

上文:Linux服務器配置-VSFTP服務配置(二)一、vsftpd服務防火墻配置1、主動(POST)模式 FTP 防火墻配置CentOS6 系統 iptables 的配置iptables -t filter --line-number -nL INPUT#顯示現有防火墻規則,查看是否開啟20、21號端口。iptables -t filter -I IN…

下標索引必須為正整數類型或邏輯類型_Python3 基本數據類型

Python中的變量不需要聲明。每個變量在使用前都必須賦值,變量賦值以后該變量才會被創建。在Python中,變量就是變量,它沒有類型,我們所說的"類型"是變量所指的內存中對象的類型。Python 3中有六個標準的數據類型&#xf…

noip模擬賽 寫代碼

分析:這其實就是括號匹配題,一眼貪心題,不過一開始貪錯了,以為([)]是合法的......其實括號之間不能嵌套. 一開始的想法是盡量往左邊填左括號,因為每種括號的數量都確定了,那么左括號和右括號的數量也就確定…

[CF797C] Minimal string(貪心,棧)

題目鏈接:http://codeforces.com/contest/797/problem/C 題意:給個字符串,求字典序最小的出棧順序。 一開始想用優先隊列記錄全局最小的字符,然后每次入棧的時候檢查當前字符是不是最小的,如果是那么同時pop。這樣做的…

讓我們緊縮大數據

作為開發人員,我們的重點是簡單,有效的解決方案,因此,最有價值的原則之一就是“保持簡單和愚蠢”。 但是使用Hadoop map-reduce很難堅持這一點。 如果我們要評估多個Map Reduce作業中的數據,那么最終將得到與業務無關但…

行內元素和塊元素以及行內塊元素的特點

一、背景 初學html&#xff0c;接觸很多標簽 <h1>、<p>、<span>、<ul>、<em>等&#xff0c;當寫出簡單的小頁面的時候&#xff0c;例如僅僅是一篇帶有標題的文章&#xff0c;標題 <h1>標簽單獨一行&#xff0c;不管后面有多大的空間&…

軟件測試的功能測試和性能測試,大型軟件的功能測試流程及性能測試流程

大型軟件具有涉及子模塊繁多、建設過程復雜、功能全面、性能具有較高要求的特點。依據ISO/IEC 9126軟件產品評估標準&#xff0c;需要對軟件的功能性、可靠性、可用性、效率、可維護性、可移植性等方面進行評估。因此&#xff0c;需要有一種方法能夠對大型軟件進行測試&#xf…

vue 分模塊打包 腳手架_Vue面試官最愛的底層源碼問題,你可以這樣回答!

最近看到身邊很多人都在投簡歷&#xff0c;有因為企業裁員的&#xff0c;有因為自己想跳槽的&#xff0c;原因不一&#xff0c;但是最終大家都會需要接觸到面試這個事情。但是很多人對待面試不夠認真&#xff0c;只會等待結果&#xff0c;不去努力。所以這邊想整理一些懶人面試…

re.containerbase.startinternal 子容器啟動失敗_Python項目容器化實踐(二) Docker Machine和Docker Swarm...

前言這篇文章介紹Docker生態中的常被提到的Engine、Machine和Swarm&#xff0c;大家以了解為主&#xff0c;工作需要再深入。EngineDocker Engine其實就是我們常說的「Docker」&#xff0c;它是一個C/S模型(Client/Server)的應用&#xff0c;包含如下組件:Daemon。守護進程&…

基于設備樹的TQ2440的中斷(2)

下面以按鍵中斷為例看看基于設備數的中斷的用法&#xff1a; 設備樹&#xff1a; tq2440_key {compatible "tq2440,key";interrupt-parent <&gpf>;interrupts <0 IRQ_TYPE_EDGE_FALLING>, <1 IRQ_TYPE_EDGE_FALLING>;key_3 <&gpf 2…

計算機里有個不能進入的磁盤分區,新電腦只有一個分區怎么辦? 教你們如何不進pe給硬盤創建新分區!...

很多朋友新電腦剛買回來打開發現明明自己機械硬盤1T或者1T機械加128G固態&#xff0c;但是卻只有一個或者兩個分區&#xff0c;但是又不會分區現在教大家如何不用老毛桃大白菜之類的進pe系統里面就能直接創建新分區1 WinR輸入diskmgmt.msc2進入磁盤管理可以查看本機的C盤與E盤的…

OSGi中的權限

在上一篇文章中 &#xff0c;我們介紹了為Java應用程序實現沙箱的方法&#xff0c;在其中我們可以安全地運行移動代碼 。 這篇文章探討了如何在OSGi環境中執行相同的操作。 OSGi OSGi規范 為Java定義了一個動態模塊系統 。 因此&#xff0c;它是實施那種可以使您的應用程序動…

HTTP簡單教程

目錄 HTTP簡介 HTTP工作原理 HTTP消息結構 客戶端請求消息服務器響應消息實例 HTTP請求方法HTTP響應頭信息HTTP狀態碼 HTTP狀態碼分類HTTP狀態碼列表 HTTP content-type對照表 HTTP簡介 HTTP協議是Hyper Text Transfer Protocol&#xff08;超文本傳輸協議&#xff09;的縮寫&…

Reversed-Z詳解

在3D渲染管線中&#xff0c;Z這個家伙幾乎無處不在&#xff0c;如Z-Buffer&#xff0c;Early-Z&#xff0c;Z-Cull&#xff0c;Z-Test&#xff0c;Z-Write等等&#xff0c;稍有接觸圖形學的人都會對這些術語有所耳聞。 那么Z到底是什么呢&#xff1f;首先Z當然可以是任意坐標系…

pyqt開發的程序模板_小程序定制開發和模板開發要多少錢?有什么區別?

到現在&#xff0c;小程序開發已經有了1年多的歷史&#xff0c;已經達到百萬數量級。無論是小程序商城還是小程序游戲&#xff0c;其開發方式不外乎兩種&#xff0c;一種是定制開發&#xff0c;另一種是模板開發。對于很多初次接觸小程序的客戶來說&#xff0c;還不知道小程序的…