Python 查找最高的R^2值
我是python新手,我的问题是我有一组给定的数据: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个图。但是我不知
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))