numpy 最小二乘拟合 一元线性回归与多元线性回归 原理与代码

需要代码的可以直接跳到最后一章,我们这里会进行一些数学推导

一、相关系数

1.1、相关系数的计算

相关系数是对变量之间关系的密切程度的度量,对两个变量之间线性相关程度的度量称为简单相关系数,若相关系数是根据全部数据计算的,称为总体相关系数记为 ρ \rho ρ,若是根据样本数据计算的则称为样本先关系数记为 r r r

样本相关系数的计算公式
r = ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ⋅ ( y i − y ˉ ) 2 = l x y l x x ⋅ l y y r = \frac{{\sum {({x_i} - \bar x)({y_i} - \bar y)} }}{{\sqrt {{{\sum {{{({x_i} - \bar x)}^2} \cdot ({y_i} - \bar y)} }^2}} }} = \frac{{{l_{xy}}}}{{\sqrt {{l_{xx}} \cdot {l_{yy}}} }} r=(xixˉ)2(yiyˉ)2 (xixˉ)(yiyˉ)=lxxlyy lxy
r的取值范围是-1到1

r的绝对值为1,完全相关

r=0,不相关(线性),但是不能说明变量之间没有线性关系

r<0,负相关。r>0,正相关

r的数值与量纲无关,r也不表示因果关系

1.2、相关系数的显著性检验

检验两个总体变量之间是否存在线性相关性,采用t检验,提出假设 H 0 : ρ = 0 ; H 1 : ρ ≠ 0 ; H_0:\rho = 0;H_1: \rho \ne 0; H0:ρ=0;H1:ρ=0;计算检验的统计量:
T = r n − 2 1 − r 2 ∼ t ( n − 2 ) T=\frac {r \sqrt {n-2}}{\sqrt {1-r^2}} \sim t(n-2) T=1r2 rn2 t(n2)
确定显著性水平 α \alpha α,并作出决策,若 ∣ T ∣ > t α |T|>t_{\alpha} T>tα则拒绝原假设。若 ∣ T ∣ < t α |T|T<tα则不拒绝原假设

二、一元线性回归

在相关分析中,变量x和变量y处于同等地位,在回归分析中,变量y称为因变量,处在被解释的地位,x称为自变量,用于预测因变量的变化。回归模型分为一元回归和多元回归,一元回归分为线性回归和非线性回归,多元回归也分为线性回归和非线性回归。一元回归只有一个自变量,多元回归有多个自变量。

对于只涉及一个自变量的简单线性回归模型可以表示为
y = β 0 + β 1 x + ε y = {\beta _0} + {\beta _1}x + \varepsilon y=β0+β1x+ε
误差项 ε \varepsilon ε是随机变量,反映了除x和y之间的线性关系之外的随机因素对y的影响,是不能由x和y之间的线性关系所解释的变异性。

1.1、一元线性回归的基本假设

E ( ε ) = 0 ; E ( y ∣ x ) = β 0 + β 1 x ; E(\varepsilon)=0;E(y|x)=\beta _ 0 + \beta _ 1 x; E(ε)=0;E(yx)=β0+β1x;

对于所有的x值, ε \varepsilon ε的方差 σ 2 \sigma ^ 2 σ2都相同,误差项 ε \varepsilon ε是一个服从正态分布的随机变量,且相互独立,即 ε ∼ N ( σ 2 ) \varepsilon\sim N(\sigma^2) εN(σ2)

1.2、回归方程

描述y的平均值或者期望值如何依赖于x的方程称为回归方程,回归方程的形式如下
E ( y ) = β 0 + β 1 x E(y)=\beta_0+\beta_1x E(y)=β0+β1x
总体回归参数 β 0 , β 1 \beta_0 , \beta_1 β0,β1是未知的,需要利用样本数据去估计,用样本统计量 β ^ 0 {\hat\beta}_0 β^0 β ^ 1 {\hat\beta}_1 β^1去估计 β 0 , β 1 \beta_0 , \beta_1 β0,β1就得到了估计的回归方程。
E ( y ) = β ^ 0 + β ^ 1 x E(y)=\hat\beta_0+\hat\beta_1x E(y)=β^0+β^1x

1.3、参数的最小二乘估计

最小二乘法是使得因变量的观察值与估计值之间的离差平方和达到最小来求参数的方法
{ β 1 = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 = l x y l x x β 0 = y ˉ − β ^ 1 x ˉ \left\{ \begin{array}{l} {\beta _1} = \frac{{\sum\limits_{i = 1}^{n} {({x_i} - \bar x)({y_i} - \bar y)} }}{{\sum\limits_{i=1}^n}(x_i-\bar x) ^ 2} = \frac {l_{xy}} {l_{xx}}\\ {\beta _0} = {\bar y } - {\hat \beta} _ 1 {\bar x} \end{array} \right. β1=i=1n(xixˉ)2i=1n(xixˉ)(yiyˉ)=lxxlxyβ0=yˉβ^1xˉ

1.4、离差平方和的分解

因变量y的取值是不同的,y取值的变异性来源于两个方面,自变量x不同和其他因素的影响(测量误差等)。

通过一个具体的观测值,变异的大小可以通过该实际观测值与其均值之差 y − y ˉ y-\bar y yyˉ来表示
S S T = ∑ i = 1 n ( y i − y ˉ ) 2 S S R = ∑ i = 1 n ( y ^ i − y ˉ ) 2 S S E = ∑ i = 1 n ( y i − y ^ ) 2 S S T = S S R + S S E {SST = \sum\limits_{i=1}^n (y_i-\bar y) ^ 2 }\\ {SSR = \sum\limits_{i=1}^n (\hat y_i-\bar y) ^ 2 }\\ {SSE = \sum\limits_{i=1}^n (y_i-\hat y) ^ 2 }\\ {SST = SSR + SSE} SST=i=1n(yiyˉ)2SSR=i=1n(y^iyˉ)2SSE=i=1n(yiy^)2SST=SSR+SSE

SSR是总变异平方和,SSR是回归平方和,SSE是残差平方和

1.5、判定系数

判定系数是回归平方和占总离差平方和的比例
r 2 = S S R S S T = ∑ i = 1 n ( y ^ i − y ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 r^2 = \frac {SSR} {SST} = \frac {\sum\limits_{i=1}^{n} {(\hat y_i - \bar y)^2}} {\sum\limits_{i=1}^{n} {( y_i - \bar y)^2}} r2=SSTSSR=i=1n(yiyˉ)2i=1n(y^iyˉ)2
反映了回归直线的拟合程度,取值范围在-1到1之间, r 2 → 1 r_2 \to 1 r21回归方程的拟合效果更好,判定系数等于相关系数的平方(一元线性回归)

1.6、估计标准误差

估计标准误差是实际观察值与回归估计值离差平方和的均方根,反映实际观察值在回归直线附近的分散情况,从另一个角度说明了回归直线的拟合程度,计算公式为
S y = ∑ i = 1 n ( y i − y ^ i ) 2 n − 2 = S S E n − 2 S_y=\sqrt {\frac {\sum\limits_{i=1}^{n} (y_i - \hat y_i) ^ 2} {n-2}} = \sqrt {\frac {SSE} {n-2}} Sy=n2i=1n(yiy^i)2 =n2SSE

1.7、回归方程的显著性检验

检验自变量和因变量之间的线性关系是否显著,具体方法是将SSR同SSE比较,用F检验来分析两者之间的差别是否显著,如果显著,两变量之间不存在线性关系,如果不显著,两个变量之间存在线性关系。提出假设 H 0 : H_0: H0:线性关系不显著; H 1 : H_1: H1线性关系显著
F = M S R M S E = S S R / 1 S S E / ( n − 2 ) = ( ∑ i = 1 n ( y ^ i − y ˉ ) 2 ) / 1 ( ∑ i = 1 n ( y i − y ˉ ) 2 ) / ( n − 2 ) ∼ F ( 1 , n − 2 ) F = \frac {MSR} {MSE} = \frac {SSR/1} {SSE/(n-2)} = \frac {(\sum\limits_{i=1}^{n}{(\hat y_i - \bar y)^2})/1 } {(\sum\limits_{i=1}^{n}{( y_i - \bar y)^2})/(n-2) } \sim F(1,n-2) F=MSEMSR=SSE/(n2)SSR/1=(i=1n(yiyˉ)2)/(n2)(i=1n(y^iyˉ)2)/1F(1,n2)
确定显著性水平 α \alpha α,并根据自由度查出临界值 F α F_\alpha Fα,做出决策:若 F > F α F>F_\alpha F>Fα,拒绝 H 0 H_0 H0;若 F < F α FF<Fα,接受 H 0 H_0 H0;

1.8、回归系数的显著性检验

β ^ 1 \hat\beta_1 β^1是根据最小二乘法求出的样本统计量,他有自己的分布。具有如下性质:

分布:正态分布

数学期望: D ( β ^ 1 ) = β 1 D(\hat\beta_1)=\beta_1 D(β^1)=β1

标准差: σ β ^ 1 = σ ∑ ( s i − x ˉ ) 2 \sigma_{\hat\beta_{1}} = \frac {\sigma} {\sqrt {\sum {(s_i - \bar x) ^ 2}}} σβ^1=(sixˉ)2 σ

由于 σ \sigma σ未知,需要用估计量 S y S_y Sy来代替得到 β ^ 1 \hat \beta _ 1 β^1的估计的标准差 σ β ^ 1 = S y ∑ ( s i − x ˉ ) 2 \sigma_{\hat\beta_{1}} = \frac {S_y} {\sqrt {\sum {(s_i - \bar x) ^ 2}}} σβ^1=(sixˉ)2 Sy

提出假设 H 0 : β 1 = 0 ( 没 有 线 性 关 系 ) ; H 1 : β 1 ≠ 0 ( 有 线 性 关 系 ) H_0:\beta_1 = 0(没有线性关系);H_1:\beta_1 \ne 0 (有线性关系) H0:β1=0(线)H1:β1=0(线)

计算检验的统计量 T = β ^ 1 S β ^ 1 ∼ t ( n − 2 ) T=\frac {\hat \beta _ 1} {S _ {\hat \beta _ 1}} \sim t(n-2) T=Sβ^1β^1t(n2)

确定显著性水平 α \alpha α,并根据自由度查出临界值 t α / 2 t_{\alpha / 2} tα/2,做出决策:若 t > t α / 2 t>t_{\alpha / 2} t>tα/2,拒绝 H 0 H_0 H0;若 t < t α / 2 tt<tα/2,不拒绝 H 0 H_0 H0;

1.9、点估计

平均值的点估计 y ^ 0 = β ^ 0 + β ^ 1 ⋅ x ˉ \hat y_0 = \hat \beta _ 0 + \hat \beta_1 \cdot \bar x y^0=β^0+β^1xˉ

个别值的点估计 y ^ 0 = β ^ 0 + β ^ 1 ⋅ x 1 \hat y_0 = \hat \beta _ 0 + \hat \beta_1 \cdot x_1 y^0=β^0+β^1x1

1.10、区间估计

y的平均值的置信区间估计, E ( y 0 ) E(y_0) E(y0) 1 − α 1-\alpha 1α置信水平下的置信区间
y ^ 0 ± t α / 2 ( n − 2 ) S y 1 n + ( x 0 − x ˉ ) 2 ∑ i = 1 n ( x i − x ˉ ) 2 \hat y _ 0 \pm t_{\alpha / 2}(n-2) S_y \sqrt{\frac{1} {n} + \frac {(x_0 - \bar x)^2} {\sum\limits_{i=1}^{n}(x_i-\bar x)^2}} y^0±tα/2(n2)Syn1+i=1n(xixˉ)2(x0xˉ)2
y的个别值的预测区间估计,对于自变量 x x x的一个给定值 x 0 x_0 x0,求出因变量 y y y的一个个别值的估计区间,这一区间成为预测区间
y ^ 0 ± t α / 2 ( n − 2 ) S y 1 + 1 n + ( x 0 − x ˉ ) 2 ∑ i = 1 n ( x i − x ˉ ) 2 \hat y _ 0 \pm t_{\alpha / 2}(n-2) S_y \sqrt{1 + \frac{1} {n} + \frac {(x_0 - \bar x)^2} {\sum\limits_{i=1}^{n}(x_i-\bar x)^2}} y^0±tα/2(n2)Sy1+n1+i=1n(xixˉ)2(x0xˉ)2
影响区间宽度的水平

区间水平随着置信水平的增大而增大,区间宽度随离散程度的增大而增大,区间宽度随样本容量的增大而减小,区间宽度随着 x 0 x_0 x0 x ˉ \bar x xˉ的差异程度的增大而增大。

1.11、残差分析

残差 e i = y i − y ^ i = y i − β ^ 0 − β ^ 1 x i e_i = y_i - \hat y_i = y_i-\hat \beta_0 - \hat \beta_1 x_i ei=yiy^i=yiβ^0β^1xi

误差项 ε i = y i − β 0 − β 1 x i \varepsilon _ i = y_i- \beta_0 - \beta_1 x_i εi=yiβ0β1xi

残差是误差项的估计值

残差标准化(残差除以其标准差后得到的数值) z e i = e i S e = y i − y ^ i M S E z_{e_i} = \frac {e_i} {S_e} = \frac {y_i - \hat y_i} {\sqrt {MSE}} zei=Seei=MSE yiy^i

如果 ε \varepsilon ε服从正态分布,那么标准化残差也应该服从正态分布

三、多元线性回归

多元线性回归模型可以表示为
y = β 0 + β 1 x 1 + β 2 x 2 + . . . + β p x p + ε y=\beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_p x_p + \varepsilon y=β0+β1x1+β2x2+...+βpxp+ε
自变量可观测,随机误差项 ε i \varepsilon _ i εi的期望值为0,且方差 σ 2 \sigma ^ 2 σ2均相同,是一个服从正态分布的随机变量,且相互独立

3.1、最小二乘法

使因变量的观察值与估计值之间的离差平方和最小来求
Q ( β ^ 0 , β ^ 1 , β ^ 1 , . . . , β ^ 0 , ) = ∑ i = 1 n ( y i − y ^ i ) 2 = ∑ i = 1 n e i 2 Q({\hat \beta _ 0} , {\hat \beta _ 1} ,{\hat \beta _ 1} , ... ,{\hat \beta _ 0} ,) = \sum\limits_{i=1}^{n}(y_i - \hat y_i)^2 = \sum\limits_{i=1}^{n} e_{i}^{2} Q(β^0,β^1,β^1,...,β^0,)=i=1n(yiy^i)2=i=1nei2
根据最小二乘法可以求解各回归参数
KaTeX parse error: Unknown column alignment: 1 at position 24: … \begin{array}{1̲} {{\frac {\par…

3.2、回归方程的显著性检验

多重判定系数 R 2 R^2 R2
R 2 = S S R S S T = ∑ i = 1 n ( y ^ i − y ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = \frac {SSR} {SST} = \frac {\sum\limits_{i=1}^{n} {(\hat y_i - \bar y)^2}} {\sum\limits_{i=1}^{n} {( y_i - \bar y)^2}} R2=SSTSSR=i=1n(yiyˉ)2i=1n(y^iyˉ)2
取值在0-1之间, R 2 → 1 R^2 \to 1 R21说明回归方程拟合好

修正的多重判定系数 R 2 R^2 R2
R 修 2 = 1 − ( 1 − R 2 ) × n − 1 n − p − 1 R_{修}^{2} = 1 - (1 - R^2) \times \frac {n-1} {n-p-1} R2=1(1R2)×np1n1
提出假设 H 0 : H_0: H0:线性关系不显著; H 1 : H_1: H1线性关系显著
F = M S R M S E = S S R / p S S E / ( n − p − 1 ) = ( ∑ i = 1 n ( y ^ i − y ˉ ) 2 ) / p ( ∑ i = 1 n ( y i − y ˉ ) 2 ) / ( n − p − 1 ) ∼ F ( p , n − p − 1 ) F = \frac {MSR} {MSE} = \frac {SSR/p} {SSE/(n-p-1)} = \frac {(\sum\limits_{i=1}^{n}{(\hat y_i - \bar y)^2})/p } {(\sum\limits_{i=1}^{n}{( y_i - \bar y)^2})/(n-p-1) } \sim F(p,n-p-1) F=MSEMSR=SSE/(np1)SSR/p=(i=1n(yiyˉ)2)/(np1)(i=1n(y^iyˉ)2)/pF(p,np1)
确定显著性水平 α \alpha α,并根据自由度查出临界值 F α F_\alpha Fα,做出决策:若 F > F α F>F_\alpha F>Fα,拒绝 H 0 H_0 H0;若 F < F α FF<Fα,接受 H 0 H_0 H0;

3.3、回归系数的显著性检验

计算检验的统计量 T = β ^ 1 S β ^ 1 ∼ t ( n − p − 1 ) T=\frac {\hat \beta _ 1} {S _ {\hat \beta _ 1}} \sim t(n-p-1) T=Sβ^1β^1t(np1)

确定显著性水平 α \alpha α,并根据自由度查出临界值 t α / 2 t_{\alpha / 2} tα/2,做出决策:若 ∣ T ∣ > t α / 2 |T|>t_{\alpha / 2} T>tα/2,拒绝 H 0 H_0 H0;若 ∣ T ∣ < t α / 2 |T|T<tα/2,不拒绝 H 0 H_0 H0;

四、非线性回归

几种常见的非线性模型

指数函数 y = α e β x y=\alpha e ^ {\beta x} y=αeβx 两边取对数线性化

幂函数 y = a x β y=ax^{\beta} y=axβ 两边取对数线性化

双曲线函数 y = x α x + β y=\frac {x} {\alpha x + \beta} y=αx+βx

对数函数 y = α + β l n x y=\alpha + \beta ln {x} y=α+βlnx

S型曲线 y = 1 α + β e − x y = \frac {1} {\alpha + \beta e^{-x}} y=α+βex1

代码

代码需要安装的库

linux系统下

sudo pip install numpy
sudo pip install matplotlib

windows系统下

pip install numpy
pip install matplotlib

代码如下

# 最小二乘拟合
import numpy as np
import matplotlib.pyplot as plt

# 需要拟合的两个变量
x = np.array([1,2,3,4,5])
y = np.array([1,2,4,9,15])
# 需要多少阶拟合
m = 10

# 生成系数矩阵A
def gen_coefficient_matrix(X):
    A = []
    # 计算每一个方程的系数
    for i in range(m):
        a = []
        # 计算当前方程中的每一个系数
        for j in range(m):
            a.append(sum(X ** (i+j)))
        A.append(a)
    return A

# 计算方程组的右端向量b
def gen_right_vector(X, Y):
    b=[]
    for i in range(m):
        b.append(sum(X**i*y))
    return b

A = gen_coefficient_matrix(x)
b = gen_right_vector(x,y)

res = np.linalg.solve(A, b)
print(f"res is {res}")

x_ = [x0 / 10 for x0 in range(1 ,max(x)*10+1)]
z = []

for i in x_:
    temp = 0
    for j in range(len(res)):
        temp = temp + res[j] * (i) ** j
    z.append(temp) 


plt.figure(1)
plt.plot(x,y,'ro')
plt.plot(x_,z,'-')
plt.show()

你可能感兴趣的:(Python,numpy,线性回归,python)