回归中的相关度和决定系数

栏目: Python · 发布时间: 8年前

内容简介:回归中的相关度和决定系数

起步

训练集中可能是有若干维度的特征。但有时并不是所有特征都是有用的,有的特征其实和结果并没有关系。因此需要一个能衡量自变量和因变量之间的相关度。

皮尔逊相关系数

皮尔逊相关系数( Pearson correlation coefficient ),是用于度量两个变量 X 和 Y 之间的相关(线性相关),其值介于 -1 与 1 之间。

在说皮尔逊相关系数之前,要先理解协方差( Covariance ) ,协方差是一个反映两个随机变量相关程度的指标,如果一个变量跟随着另一个变量同时变大或者变小,那么这两个变量的协方差就是正值,反之相反,公式如下:

Cov(X, Y) = \frac{\sum_{i=1}^n(X_i - \bar{X})(Y_i - \bar{Y})}{n - 1}

皮尔逊相关系数的公式如下:

r_{xy} = \frac{Cov(X, Y)}{\sqrt{Var(X)Var(Y)}}

Var表示方差,相关度越高,皮尔逊相关系数其值趋于 1 或 -1 (趋于1表示它们呈正相关, 趋于 -1 表示它们呈负相关);如果相关系数等于0,表明它们之间不存在线性相关关系。

回归中的相关度和决定系数

对应的 python 代码:

import math
import numpy as np

def computeCorrelation(x: list, y: list) -> float:
    x_mean = np.mean(x)
    y_mean = np.mean(y)
    SSR = 0
    var_x = 0  # x的方差
    var_y = 0  # y的方差
    for xi, yi in zip(x, y):
        diff_x = xi - x_mean
        diff_y = yi - y_mean
        SSR += diff_x * diff_y
        var_x += diff_x ** 2
        var_y += diff_y ** 2
    SST = math.sqrt(var_x * var_y)
    return  SSR / SST

决定系数

决定系数即 R 平方值,反应因变量的全部变异能通过回归关系被自变量解释的比例。如R平方为0.8,则表示回归关系可以解释因变量80%的变异。换句话说,如果我们能控制自变量不变,则因变量的变异程度会减少 80%。 在简单线性回归中,绝对系数可以是 R^2 = r * r 。而更通用的是:

R^2 = \frac{SSR}{SST} = \frac{\sum(\hat{y_i} - \bar{y})^2}{\sum(y_i - \bar{y})^2}

SST 其实是两部分组成的,一部分是模型可预测的,一部分是变异的SSError无法用模型解释的。它们之间的计算公式是:

\begin{align*}
SS_T &= \sum_i(y_i - \bar{y})^2 \\
SS_R &= \sum_i(\hat{y_i} - \bar{y})^2 \\
SS_E &= \sum_i(y_i - \hat{y_i})^2 \\
\end{align*}

对应的 python 代码,因为需要创建模型来进行预测,这边使用 sklearn 中的线性回归模型:

from sklearn import linear_model

def polyfit(x, y):
    linear = linear_model.LinearRegression()
    linear.fit(x, y)
    y_hat = linear.predict(x)
    y_mean = np.mean(y)
    SSR = 0
    SST = 0
    for i in range(len(y)):
        SSR += (y_hat[i] - y_mean) ** 2
        SST += (y[i] - y_mean) ** 2
    return SSR / SST

测试:

train_x = [1, 3, 8, 7, 9]
train_y = [10, 12, 24, 21, 34]

print(computeCorrelation(train_x, train_y)) # output: 0.940310076545

train_x_2d = [[x] for x in train_x] # 通用的方式,训练集至少是二维的
print(polyfit(train_x_2d, train_y))  # output: 0.884183040052

修正决定系数

R 平方也有其局限性,随着自变量数目的增加,R 方是会增加的,这部分的定理是:

回归中的相关度和决定系数

证明过程:

回归中的相关度和决定系数

回归中的相关度和决定系数

调整后的R 方表示为:

\bar{R^2} = 1 - (1 - R^2)\frac{n-1}{n-p-1}

其中,n 表示样本大小,p 表示模型中解释变量的总数(不包括常数)。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Rails 5敏捷开发

Rails 5敏捷开发

[美] Sam Ruby、[美] Dave Thomas、[美] David Heinemeier Hansson / 安道、叶炜、大疆Ruby技术团队 / 华中科技大学出版社 / 2017-12-30 / 115.00

本书以讲解“购书网站”案例为主线,逐步介绍Rails的内置功能。全书分为3部分,第一部分介绍Rails的安装、应用程序验证、Rails框架的体系结构,以及Ruby语言知识;第二部分用迭代方式构建应用程序,然后依据敏捷开发模式开展测试,最后用Capistrano完成部署;第三部分补充日常实用的开发知识。本书既有直观的示例,又有深入的分析,同时涵盖了Web开发各方面的知识,堪称一部内容全面而又深入浅出......一起来看看 《Rails 5敏捷开发》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码