我最初发布下面的基准是为了推荐numpy.corrcoef,愚蠢地没有意识到原始问题已经使用corrcoef并且实际上是在询问更高阶多项式拟合。我已经使用statsmodels为多项式r-squared问题添加了一个实际的解决方案,并且我已经离开了原始的基准测试,这些基准测试虽然偏离主题,但对某些人来说可能是有用的。

statsmodels能够直接计算多项式拟合的r^2,这里有两种方法......

import statsmodels.api as sm

import statsmodels.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 # or rsquared_adj

为了进一步利用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 ms

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是计算r的最佳工具用于简单的线性回归。

这是我的基准测试代码。我从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)

python计算偶数平方和_如何使用Python和Numpy计算r平方?相关推荐

  1. python的numpy函数求平方和_如何使用Python和Numpy计算r平方?

    从 numpy.polyfit文档,它是适合的线性回归.具体来说,具有度'd'的numpy.polyfit拟合具有平均函数的线性回归 E(y | x)= p_d * x ** d p_ {d-1} * ...

  2. python 矩阵运算 for循环_如何用Python科学计算中的矩阵替代循环?

    比如求一个平面稳态导热问题,控制方程就是拉普拉斯方程: (我才发现原来有[插入公式]这个功能) 按照最简单的毅种循环来写就是: def laplace(u): nx, ny = u.shape for ...

  3. python循环10次_开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择...

    开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择 "+.-.*"运算符,构成一个表达式, 让用户计算式子结果并输入结果,如果计算 ...

  4. python中的tail()_让VASP实现固定应力张量计算的python脚本

    最近在研究指定的应力张量下晶体缺陷的行为.本来想用VASP来进行相应的DFT模拟.但查了半天,发现VASP并不支持指定应力的计算(除非是isotropic的应力). 具体来说,你可以输入一个应变,VA ...

  5. python计算连续复利_复利的Python程序

    python计算连续复利 Given principle amount, rate and time and we have to find the compound interest in Pyth ...

  6. python人工智能课程设计_中小学课程设计:以计算思维培养为核心的人工智能课程设计与实践...

    面对国际日趋紧张的科技竞争,发展新一代人工智能已成为各国的重要国家战略.人工智能人才的梯队建设是我国发展人工智能技术和推动产业应用的重要基础. 01存在问题 近年来教育部和各省市教育主管部门发布了一系 ...

  7. python科学计算够用吗_为何选用python进行科学计算

    说明:本篇为翻译文章,原文的题目为:Scientific Computing with Python .从文中可以看出,作者对在科研活动中使用Python有着深刻的见解.而这一点在国内就差许多了,所以 ...

  8. python计算身体质量指数_如何用Python计算身体质量指数BMI,并给出胖瘦程度评价?...

    问: 身体质量指数 (Body Mass Index, 简称 BMI),是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准.BMI 值超标,意味着你必须减肥了. BMI 的计算公式是:BMI=体 ...

  9. python变量定义大全_详解python变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...

  10. python积木式编程_实例讲解python函数式编程

    函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是"怎么干",而函数函数式编程的思考方式是我要"干什么". 至于函数式编程的特点 ...

最新文章

  1. Python 获取字符串的第一位和最后一位的字符
  2. ble串口程序设计流程图_流程图程序设计的步骤
  3. IT工程师必备的认证
  4. DB2 Vs MySQL系列 | 体系架构对比
  5. Mysql学习总结(27)——Mysql数据库字符串函数
  6. office2010安装报错
  7. ubuntu22.04编译PBRT-v4
  8. STM32CubeMX——固件库下载以及安装
  9. 栅栏密码(Fence)——python解密
  10. github上传代码全部流程
  11. 高校学子如何免费上网?
  12. 如何在计算机修改wifi密码,wifi修改密码,教您电脑怎么修改wifi密码
  13. Spring data jpa + sqlserver + druid, druid连接sqlserver 报错:查询超时值 -1 无效。
  14. 【龙讯module小课堂】浅谈对gap的认识:PWmat中修正gap的module
  15. 弹出菜单 PopupMenu 的使用
  16. 美颜sdk中,实现人脸识别的主要方法有哪些?
  17. Python计算等额本息贷款和等额本金贷款
  18. 为什么量化交易中盈利的稳定性比利润率重要
  19. 《转怒为喜---顾客抱怨投诉处理技巧》
  20. 【Python爬虫实战】爬取2021中国大学排名(简单)

热门文章

  1. 三维重建笔记_基于图像的大规模场景三维建模overview
  2. 基于Java的微小企业人事管理系统的设计与实现 毕业设计-附源码231012
  3. 无刷电机噪音产生原因及解决方法
  4. 【老九学堂】【Java】集合框架
  5. openwrt修改默认网关地址_非常详细的锐捷网关路由配置教程,适合新手小白
  6. html5淘宝注册界面设计,电商登陆注册页设计分析
  7. wds和extap作为cpe区别
  8. Rust中的所有权和借用的关系图
  9. maven-replacer-plugin 静态资源打包方案js css
  10. “天才少年” 27岁华为副总裁 百度CTO 成为阶下囚的传奇经历