Python 查找最高的R^2值

Python 查找最高的R^2值,python,numpy,Python,Numpy,我是python新手,我的问题是我有一组给定的数据: import numpy as np x=np.arange(1,5) y=np.arange(5,9) 我的问题是找到一个数字n(不一定是整数),当我绘制y^n vs x时,它会给出R^2值的最大值。我考虑生成n,例如: n=np.linspace(1,9,100) 我不知道如何执行我的想法。我的另一种方法是使用蛮力生成n,并为n的每一个值增加y。在获得该值(比如y1)后,我将绘制y1与x的图(这意味着我必须生成100个图。但是我不知

我是python新手,我的问题是我有一组给定的数据:

import numpy as np

x=np.arange(1,5)
y=np.arange(5,9)
我的问题是找到一个数字n(不一定是整数),当我绘制y^n vs x时,它会给出R^2值的最大值。我考虑生成n,例如:

n=np.linspace(1,9,100)
我不知道如何执行我的想法。我的另一种方法是使用蛮力生成n,并为n的每一个值增加y。在获得该值(比如y1)后,我将绘制y1与x的图(这意味着我必须生成100个图。但是我不知道如何获得给定图的R^2值(对于线性拟合)

我想做的是有一个R^2值的列表(或数组):

R2= np.array() #a set containing the R^2 values calculated from the plots

找到该数组上的最大值,然后从那里找到给出R^2值的绘图,这样我就可以找到一个特定的n。我不知道如何做到这一点。

如果你能使用pandas库,这个问题很容易表达:

import pandas
import numpy as np

x = pandas.Series(np.arange(1,5))
y = pandas.Series(np.arange(5,9))
exponents = exponents = np.linspace(1, 9, 100)

r2s = {n:pandas.ols(x=x, y=y**n).r2 for n in exponents}
max(r2s.iteritems(), key=lambda x: x[1])
#>>> (1.0, 1.0)
分解如下:

  • pandas.Series
    对象是一个数据索引列。它类似于
    numpy
    数组,但具有额外的功能。在这种情况下,我们只关心它,因为它可以传递给
    pandas.ols
  • pandas.ols
    是最小二乘回归的一个基本实现。您可以使用
    numpy.linalg.lstsq
    直接在numpy中执行此操作,但它不会直接为您报告R平方值。要使用纯numpy执行此操作,您需要从numpy的
    lstsq
    中获取残差平方和,然后执行公式手动计算R平方。你可以把它写为一个函数(可能是一个很好的练习)
  • {..}
    中的内容是一个
    dict
    理解。它将迭代所需的指数,为每个指数执行
    ols
    函数,并报告
    .r2
    属性(存储R平方统计信息的地方),该属性按使用的指数编号进行索引
  • 最后一步是对
    r2s
    中的键值对序列调用
    max
    ,并且
    key
    告诉max它是比较元素的第二个元素(R平方)
  • 这里有一个仅使用
    np.linalg.lstsq
    的示例函数():

    然后在纯numpy中使用上述方法:

    import numpy as np
    
    x = np.arange(1,5)
    y = np.arange(5,9)
    exponents = np.linspace(1, 9, 100)
    
    r2s = {n:r2(x=x, y=y**n) for n in exponents}
    max(r2s.iteritems(), key=lambda x: x[1])
    #>>> (1.0, 1.0)
    
    最后,有一种更奇特的方法可以指定从某物中获取单位置项。您可以使用内置的库
    操作符
    和可调用的
    itemgetter

    max(..., key=operator.itemgetter(1))
    

    表达式
    itemgetter(1)
    产生了一个可调用的对象——当对参数
    r
    调用它时,它调用
    \uuuuuu getitem\uuuu
    协议以产生
    r[1]

    只是澄清一下,R^2代表什么?@FortMauris R^2给出了两个量之间的相关性。如果我绘制y与x,得到的R^2值为1(最大值),这意味着它们是相互关联的。R^2越接近值1,则更好的值也被称为Hi,对不起,我认为我的问题出错了。我想做的是猜测n,这样我将得到R^2值1(这是最高值).我尝试在excel中制作样本数据,得到了以下线性趋势的结果:x=(1,2,3,4)y=(1,2,3,4)R^2=1和x=(1,2,3,4)y=(1,4,9,16)R^2=0.969…这是您的代码给出的值。它给出n=1的R^2值。例如,对于第二组数据,如果n=2,它将有一个R^2=1值。很抱歉,我的问题的想法不对。
    max(..., key=operator.itemgetter(1))