数据分析——两种求解R平方的方法

数据分析——两种求解R平方的方法

1、皮尔逊相关系数 (Pearson Correlation Coefficient)是衡量两个值线性相关强度的量,取值范围:[-1, 1],正向相关:>0,负向相关:<0,无相关性:=0

上式又可以表示为:

R^2是皮尔逊相关系数的平方,依然是表示两个值线性相关强度的量,取值范围:[0, 1],值越大,相关性越强。

import numpy as np

def computeCorrelation(x, y):

xBar = np.mean(x)

yBar = np.mean(y)

covXY = 0

varX = 0

varY = 0

for i in range(0, len(x)):

diffxx = x[i] - xBar

diffyy = y[i] - yBar

covXY += (diffxx * diffyy)

varX += diffxx ** 2

varY += diffyy ** 2

return covXY / np.sqrt(varX * varY)

x=np.linspace(-0.5,0.5,10)

noise=np.random.normal(0,0.02,10)

y=2*x+1+noise

R = computeCorrelation(x, y)

R2 = np.square(R)

print(R2)

运行结果:

0.9994448592313179

2、R^2还可以由下式计算得到,yihat表示预测值,yi表示真实值,ybar表示真实值的均值

import numpy as np

def computeCorrelation(x, y, degree):

result = {}

coeffs = np.polyfit(x, y, degree) # degree表示N次拟合

result['coeffs'] = coeffs.tolist()

p = np.poly1d(coeffs) # 得到拟合方程

yhat = p(x) # 得到预测值

ybar = np.sum(y) / len (y)

SSR = np.sum((yhat -ybar)**2)

SST = np.sum((y - ybar)**2)

result['R2'] = SSR / SST

return result['R2']

x=np.linspace(-0.5,0.5,10)

noise=np.random.normal(0,0.02,10)

y=2*x+1+noise

R2 = computeCorrelation(x, y, 1)

print(R2)

运行结果:

0.999732826660141

相关推荐

中国有14个“铁杆”朋友,你知道都是哪些国家吗?
剑网三副本马单刷最全攻略-剑网三副本马单刷攻略大全
【龚玥菲主演】电影,电视剧全集
BSt365提现

【龚玥菲主演】电影,电视剧全集

⌛ 07-13 👁️ 3993
拳皇15各平台购买指南 买什么版本好[多图]
亚洲365世界杯

拳皇15各平台购买指南 买什么版本好[多图]

⌛ 07-10 👁️ 2327
七仙女是什么修炼成仙的?千年古书记载,解释其真实原形!
如何彻底删除vmware和虚拟机
BSt365提现

如何彻底删除vmware和虚拟机

⌛ 08-07 👁️ 2156