繁体   English   中英

找到最高的R ^ 2值

[英]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)

分解如下:

  1. pandas.Series对象是数据的索引列。 这就像一个numpy数组,但具有其他功能。 在这种情况下,我们只关心它,因为它可以传递给pandas.ols
  2. pandas.ols是最小二乘回归的基本实现。 您可以使用numpy.linalg.lstsq在numpy中直接执行此numpy.linalg.lstsq ,但不会直接为您报告R平方值。 要使用纯numpy进行此操作,您需要从numpy的lstsq获取残差平方的lstsq ,然后手动执行R平方的公式计算。 您可以自己编写此函数(可能是一个很好的练习)。
  3. {..}dict理解。 它将遍历所需的指数,为每个指数执行ols函数,并报告.r2属性(存储R平方统计量的位置),该指数被用来获取指数的任何指数编号。
  4. 最后一步是在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM