R2系数浅析

在统计学中,R2系数又称决定系数,反映因变量的全部变异能通过回归关系被自变量解释的比例。比如:R2_score=0.8,则表示回归关系可以解释因变量80%的变异,即如果控制自变量不变,则因变量的变异程度会减少80%。对变量进行线性回归分析时,采用最小二乘法进行参数估计时,R2_score越接近于1,回归拟合效果越好,一般认为超过80%的模型拟合度比较高。

R2系数计算

y i y_i yi表示真实的观测值, y ˉ \bar y yˉ表示真实观测值的平均值, y ^ i \hat y_i y^i表示预测值

  • 回归平方和
    S S R = ∑ i = 1 n ( y ^ i − y ˉ i ) 2 SSR = \sum_{i=1}^{n}(\hat y_i - \bar y_i)^2 SSR=i=1n(y^iyˉi)2
    估计值与平均值的误差,反映自变量与因变量之间的相关程度的偏差平方和
  • 残差平方和
    S S E = ∑ i = 1 n ( y i − y ^ i ) 2 SSE = \sum_{i=1}^{n}(y_i - \hat y_i)^2 SSE=i=1n(yiy^i)2
    估计值与真实值的误差,反映模型拟合的程度
  • 总离差平方和
    S S T = S S R + S S E = ∑ i = 1 n ( y i − y ˉ ) 2 SST = SSR + SSE = \sum_{i=1}^{n}(y_i - \bar y)^2 SST=SSR+SSE=i=1n(yiyˉ)2
    平均值与真实值的误差,反映真实值与数学期望的偏离程度
  • R2_score计算公式
    R 2 = 1 − S S E S S T R^2 = 1 - \frac {SSE}{SST} R2=1SSTSSE
    即:
    R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1 - \frac{\sum_{i=1}^{n}(y_i-\hat y_i)^2}{\sum_{i=1}^{n}(y_i-\bar y)^2} R2=1i=1n(yiyˉ)2i=1n(yiy^i)2
    进一步化简:
    R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 / n ∑ i = 1 n ( y i − y ˉ ) 2 / n = 1 − M S E V a r R^2 = 1 - \frac{\sum_{i=1}^{n}(y_i-\hat y_i)^2/n}{\sum_{i=1}^{n}(y_i-\bar y)^2/n} = 1 - \frac {MSE}{Var} R2=1i=1n(yiyˉ)2/ni=1n(yiy^i)2/n=1VarMSE
    MSE表示均方误差,Var表示方差。 R 2 R^2 R2可以通俗地理解为使用均值作为误差基准,观察预测误差是否大于或者小于均值基准误差。
  • R2_score = 1, 样本中预测值和真实值完全相等。没有任何误差,表示回归分析中自变量对因变量的解释性好;
  • R2_score = 0, 此时样本每一项预测值均等于均值。

利用sklearn.metrics求解r2_score

import numpy as np
import sklearn.linear_model as lm
import sklearn.metrics as sm # 模型性能评价模块

train_x = np.array([[0.5], [0.6], [0.8], [1.1], [1.4]])
train_y = np.array([5.0, 5.5, 6.0, 6.8, 7.0])

# 创建线性回归器
model = lm.LinearRegression()
# 训练线性回归器
model.fit(train_x, train_y)
# 根据模型预测输出
pred_y = model.predict(train_x)

print('coef_:', model.coef_) # 系数
print('intercept_:', model.intercept_) # 截距
print('R2_score:', sm.r2_score(train_y, pred_y)) # r2_score

"""
coef_: [2.2189781]
intercept_: 4.107299270072993
R2_score: 0.93951161986865
"""

你可能感兴趣的:(ML,机器学习)