day-14 回归中的相关系数和决定系数概念及Python实现

  衡量一个回归模型常用的两个参数:皮尔逊相关系数和R平方

一、皮尔逊相关系数

  在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,简称 PPMCC或PCCs),是用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。

   

  实际可用如下公式进行计算:

  

  若大于0,表示正向相关,小于0,表示负向相关,等于0,表示不相关

二、决定系数:R平方值

         定义:反应因变量的全部变异能通过回归关系被自变量解释的比例。

        

         特别的对于简单线性回归模型时

  其中(Sum square regression)表示所有预测值与平方值的变异量,(Sum square total)表示所有真实值与平方值的变异量,(Sum square regression)表示真实值与预测值的变异量

            

         例如当为0.8时,表示80%可以用模型来解释

         实际应用中,为了抵消样本数量对评估参数的影响,我们需要对R平方表示式进行修正为:

        

         表示样本的R平方值,表示样本大小,表示预测值数量

三、python代码实现

  对于简单线性回归,分别计算相关系数和决定系数,并验证公式:

import numpy as np
import math

x = np.array([1,3,8,7,9])
y = np.array([10,12,24,21,34])

# 计算相关度
def computeCorrelation(x,y):
    xBar = np.mean(x)
    yBar = np.mean(y)
    SSR = 0.0
    varX = 0.0
    varY = 0.0
    for i in range(0,len(x)):
        diffXXbar = x[i] - xBar
        difYYbar = y[i] - yBar
        SSR += (diffXXbar * difYYbar)
        varX += diffXXbar**2
        varY += difYYbar**2
    SST = math.sqrt(varX * varY)
    return SSR/SST

# 计算R平方
def polyfit(x,y,degree):
    results = {}
    coeffs = np.polyfit(x,y,degree)
    results['polynomial'] = coeffs.tolist()
    p = np.poly1d(coeffs)
    yhat = p(x)
    ybar = np.sum(y)/len(y)
    ssreg = np.sum((yhat - ybar)**2)
    sstot = np.sum((y - ybar)**2)
    results['determination'] = ssreg/sstot
    return results

result = computeCorrelation(x,y)
r = result
r_2 = result**2
print("r:",r)
print("r^2:",r*r)
print(polyfit(x,y,1)['determination'])

  通过结果验证,简单线性回归模型中,成立

  

 

posted @ 2018-05-03 22:56  派森蛙  阅读(12340)  评论(1编辑  收藏  举报