欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-03 22:34:35
...

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


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

概念:衡量两个值线性相关强度的量
取值范围:
[-1, 1]: 正向相关: >0, 负向相关:<0, 无相关性:=0
计算公式:
机器学习-回归中的相关性(Correlation Coefficient)和R平方值算法

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

相关

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

举例

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

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


R平方值

定义:决定系数,反应因变量的全部变异能通过回归关系被自变量解释的比例。
描述:如R平方为0.8,则表示回归关系可以解释因变量80%的变异。换句话说,如果我们能控制自变量不变,则因变量的变异程度会减少80%
计算
简单线性回归:R^2 = r * r
多元线性回归:
机器学习-回归中的相关性(Correlation Coefficient)和R平方值算法
机器学习-回归中的相关性(Correlation Coefficient)和R平方值算法
机器学习-回归中的相关性(Correlation Coefficient)和R平方值算法

R平方也有其局限性

R平方随着自变量的增加会变大,R平方和样本量是有关系的。因此,我们要到R平方进行修正。修正的方法:
机器学习-回归中的相关性(Correlation Coefficient)和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)


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