机器学习-回归中的相关性(Correlation Coefficient)和R平方值算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YEN_CSDN/article/details/79105846

学习彭亮《深度学习基础介绍:机器学习》课程


皮尔逊相关系数 (Pearson Correlation Coefficient):

概念:衡量两个值线性相关强度的量
取值范围:
[-1, 1]: 正向相关: >0, 负向相关:<0, 无相关性:=0
计算公式:
这里写图片描述

这里写图片描述

相关

这里写图片描述

举例

计算:
这里写图片描述


R平方值

定义:决定系数,反应因变量的全部变异能通过回归关系被自变量解释的比例。
描述:如R平方为0.8,则表示回归关系可以解释因变量80%的变异。换句话说,如果我们能控制自变量不变,则因变量的变异程度会减少80%
计算
简单线性回归:R^2 = r * r
多元线性回归:
这里写图片描述
这里写图片描述
这里写图片描述

R平方也有其局限性

R平方随着自变量的增加会变大,R平方和样本量是有关系的。因此,我们要到R平方进行修正。修正的方法:
这里写图片描述


代码

#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-19 14:49
# @Abstract:

import numpy as np
from astropy.units import Ybarn
import math

# 计算相关系数
def computeCorrelation(X,Y):
    xBar = np.mean(X)
    yBar = np.mean(Y)
    SSR = 0
    varX = 0   # 公式中分子部分
    varY = 0   # 公式中分母部分
    for i in range(0, len(X)):
        diffXXBar = X[i]-xBar
        diffYYBar = Y[i]-yBar
        SSR += (diffXXBar * diffYYBar)
        varX += diffXXBar**2
        varY += diffYYBar**2

    SST = math.sqrt(varX*varY)
    return SSR/SST

# 假设有多个自变量的相关系数
def polyfit(x, y, degree):
    # 定义字典
    result={}
    # polyfit 自动计算回归方程:b0、b1...等系数  degree为x的几次方的线性回归方程
    coeffs=np.polyfit(x,y,degree)
    # 转为list存入字典
    result['polynomial']=coeffs.tolist()
    # poly1d 返回预测值
    p=np.poly1d(coeffs)
    # 给定一个x的预测值为多少
    y_hat = p(x)
    # 均值
    ybar = np.sum(y)/len(y)
    ssreg = np.sum((y_hat-ybar)**2)
    sstot = np.sum((y-ybar)**2)
    result['determination'] = ssreg/sstot
    return result

testX = [1, 3, 8, 7, 9]
testY = [10, 12, 24, 21, 34]

print "相关系数r:",computeCorrelation(testX,testY)
print "简单线性回归r^2:",str(computeCorrelation(testX,testY)**2)

# 此处x为一维的,所以多元退化为一元,结果应该与一元一样
print "多元回归r^2:",polyfit(testX,testY,1)


这里写图片描述

阅读更多
换一批

没有更多推荐了,返回首页