当前位置: 首页 > 面试题库 >

如何使用Python和Numpy计算r平方?

东方文林
2023-03-14
问题内容

我正在使用Python和Numpy计算任意次数的最佳拟合多项式。我传递了x值,y值以及要拟合的多项式的阶数(线性,二次等)的列表。

这很有效,但是我还想计算r(相关系数)和r-
平方(确定系数)。我正在将我的结果与Excel的最佳拟合趋势线功能及其计算的r平方值进行比较。使用这个,我知道我正在为线性最佳拟合(度等于1)正确计算r平方。但是,我的函数不适用于度数大于1的多项式。

Excel能够做到这一点。如何使用Numpy计算高阶多项式的r平方?

这是我的功能:

import numpy

# Polynomial Regression
def polyfit(x, y, degree):
    results = {}

    coeffs = numpy.polyfit(x, y, degree)
     # Polynomial Coefficients
    results['polynomial'] = coeffs.tolist()

    correlation = numpy.corrcoef(x, y)[0,1]

     # r
    results['correlation'] = correlation
     # r-squared
    results['determination'] = correlation**2

    return results

问题答案:

从numpy.polyfit文档中,它适合线性回归。具体来说,度为’d’的numpy.polyfit与均值函数拟合线性回归

E(y | x)= p_d * x d + p_ {d-1} * x (d-1)+ … + p_1 * x + p_0

因此,您只需要计算该拟合的R平方即可。线性回归的维基百科页面提供了完整的详细信息。您对R
^ 2感兴趣,可以用几种方法来计算,最容易的可能是

SST = Sum(i=1..n) (y_i - y_bar)^2
SSReg = Sum(i=1..n) (y_ihat - y_bar)^2
Rsquared = SSReg/SST

我将“ y_bar”用作y的均值,并将“ y_ihat”作为每个点的拟合值。

我对numpy并不十分熟悉(我通常在R中工作),因此可能有一种更简洁的方法来计算R平方,但是以下应该是正确的

import numpy

# Polynomial Regression
def polyfit(x, y, degree):
    results = {}

    coeffs = numpy.polyfit(x, y, degree)

     # Polynomial Coefficients
    results['polynomial'] = coeffs.tolist()

    # r-squared
    p = numpy.poly1d(coeffs)
    # fit values, and mean
    yhat = p(x)                         # or [p(z) for z in x]
    ybar = numpy.sum(y)/len(y)          # or sum(y)/len(y)
    ssreg = numpy.sum((yhat-ybar)**2)   # or sum([ (yihat - ybar)**2 for yihat in yhat])
    sstot = numpy.sum((y - ybar)**2)    # or sum([ (yi - ybar)**2 for yi in y])
    results['determination'] = ssreg / sstot

    return results


 类似资料:
  • 问题内容: 我试图弄清楚如何使用PythonNumpy函数cov计算协方差。当我将其传递给两个一维数组时,我得到了一个2x2的结果矩阵。我不知道该怎么办。我不太擅长统计,但我相信在这种情况下的协方差应该是一个整数。 这就是我想要的。我写了我自己的: 可以,但是我认为Numpy版本要有效得多,如果我能弄清楚如何使用它的话。 有人知道如何使Numpy cov函数像我写的那样执行吗? 谢谢, 问题答案:

  • 问题内容: 似乎没有函数可以简单地计算numpy / scipy的移动平均值,从而导致解决方案复杂。 我的问题有两个: (正确)用numpy实现移动平均的最简单方法是什么? 由于这似乎很简单且容易出错,是否有充分的理由不将电池包括在这种情况下? 问题答案: 一种简单的方法是使用。其背后的想法是利用离散卷积的计算方式,并使用它来返回 滚动平均值 。这可以通过对长度等于我们想要的滑动窗口长度的序列进行

  • 问题内容: 我在3D中有两点: 我想计算距离: 使用NumPy或一般使用Python的最佳方法是什么?我有: 问题答案: 用途 背后的理论:如数据挖掘导论所述 之所以有效,是因为欧几里得距离为l2范数,并且 中ord参数的默认值为2。

  • 我需要计算一个数字的平方根,例如或。我如何用Python实现它? 输入可能都是正整数,并且相对较小(比如说不到10亿),但万一不是,有什么东西可能会断裂吗? 注:这是在元讨论一个现有的标题相同的问题后,试图提出一个规范问题。 相关的 python中的整数平方根

  • 我有一个如下的数据集。在该数据集中,有不同颜色的温度计,给定“真实”或参考温度,根据一些测量方法“方法1”和“方法2”,它们测量的差异有多大。 我在计算我需要的两个重要参数时遇到困难,这两个参数是平均绝对误差(MAE)和平均符号误差(MSE)。我想为每个方法使用非NaN值并打印结果。 我能够得到的点,我可以返回一个两列系列的索引和和,但在这种情况下的问题是,我需要除以方法值的数量总和,这取决于有多