代码之家  ›  专栏  ›  技术社区  ›  user2100039

线性回归计算R平方的NP数组

  •  0
  • user2100039  · 技术社区  · 5 年前

    我看不清楚。假设我有以下函数,其中X和Y的数组(函数中需要)的形状分别为(366,1)。

     def rsquared(X, Y): #arrays
         """ Return R^2 where x and y are array-like."""
    
         slope, intercept, r_value, p_value, std_err = sp.stats.linregress(X, Y)
         return r_value**2
    
     print(rsquared(X,Y))
    

    我试着打印r平方值,我不断得到这个错误:

    Traceback (most recent call last):
    
    File "<ipython-input-912-af88c88367fe>", line 6, in <module>
    print(rsquared(X,Y))
    
    File "<ipython-input-912-af88c88367fe>", line 4, in rsquared
    slope, intercept, r_value, p_value, std_err = sp.stats.linregress(X, Y)
    
    File "C:\Users\U321103\AppData\Local\Continuum\anaconda3\envs\Stats\lib\site- 
    packages\scipy\stats\_stats_mstats_common.py", line 116, in linregress
    ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat
    
    ValueError: too many values to unpack (expected 4)
    

    看起来代码希望X和Y的形状是(366,)vs(366,1)。如果是,那么如何删除不需要的列?

    这里是X数组变量的前4行,Y变量看起来很相似。谢谢你的帮助。

    X
    array([[ 3.06833333],
           [ 7.93583333],
           [ 8.00458333],
           [11.06458333],
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Ehsan    5 年前

    使用此项传递单个维度 X Y 为避免错误:

    print(rsquared(X[:,0],Y[:,0]))
    
        2
  •  0
  •   StupidWolf    5 年前

    它与sklearn有点不同,所以一个解决方案是在函数中转置它:

    import scipy as sp
    import numpy as np 
    def rsquared(X, Y): #arrays
         slope, intercept, r_value, p_value, std_err = sp.stats.linregress(X.T,Y.T)
         return r_value**2
    
    np.random.seed(111)
    X = np.random.uniform(0,1,(50,1))
    Y = np.random.uniform(0,1,(50,1))
    print(rsquared(X,Y))
    
    0.07042849841609072
    
    推荐文章