机器学习-回归中的相关性(Correlation Coefficient)和R平方值算法
程序员文章站
2022-04-03 22:34:35
...
学习彭亮《深度学习基础介绍:机器学习》课程
皮尔逊相关系数 (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)
上一篇: 综合练习题