[英]Finding the highest R^2 value
我是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 vs 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中直接执行此numpy.linalg.lstsq
,但不会直接为您报告R平方值。 要使用纯numpy进行此操作,您需要从numpy的lstsq
获取残差平方的lstsq
,然后手动执行R平方的公式计算。 您可以自己编写此函数(可能是一个很好的练习)。 {..}
是dict
理解。 它将遍历所需的指数,为每个指数执行ols
函数,并报告.r2
属性(存储R平方统计量的位置),该指数被用来获取指数的任何指数编号。 r2s
中的键值对序列上调用max
,并且key
告诉max它是比较元素的第二个元素(R平方)。 这里仅使用np.linalg.lstsq
的示例函数( 有关在numpy中计算R2的很好解释 ):
def r2(x, y):
x_with_intercept = np.vstack([x, np.ones(len(x))]).T
coeffs, resid = np.linalg.lstsq(x_with_intercept, y)[:2]
return 1 - resid / (y.size * y.var())[0]
然后以纯粹的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)
最后一点,有一种更奇特的方法可以指定从某物获取1位项目。 您可以使用内置的库operator
和可调用的itemgetter
:
max(..., key=operator.itemgetter(1))
表达式itemgetter(1)
可调用的对象-在参数r
上调用它时,它将调用__getitem__
协议以得出r[1]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.