• 2021-07-12 16:31:33

# 多元线性方程公式

定义多元线性方程的损失函数如下：
J ( θ ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2              ( 1 ) J(\theta) = \frac{1}{2m}\sum_{i=1}^m (\hat{y}^{(i)} - y^{(i)})^2~~~~~~~~~~~~(1)

其中， y ^ ( i ) \hat{y}^{(i)} 为：
y ^ ( i ) = θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ⋯ + θ n X n ( i )            ( 2 ) \hat{y}^{(i)} = \theta_0 + \theta_1 X_1^{(i)} + \theta_2 X_2^{(i)} + \cdots + \theta_n X_n^{(i)}~~~~~~~~~~(2)

其中， m m 为样本个数， n n 为特征数量

定义向量：
θ = ( θ 0 , θ 1 , ⋯   , θ n ) T X ( i ) = ( X 0 ( i ) , X 1 ( i ) , X 2 ( i ) , ⋯   , X n ( i ) ) T     ， 其 中 i = ( 1 , 2 , ⋯   , m ) ， X 0 ( i ) ≡ 1 X j = ( X j ( 1 ) , X j ( 2 ) , ⋯   , X j ( m ) ) T     ， 其 中 j = ( 0 , 1 , 2 , ⋯   , n ) y = ( y ( 1 ) , y ( 2 ) , ⋯   , y ( m ) ) \begin{aligned} \theta &=(\theta_0,\theta_1, \cdots , \theta_n)^T \\\\ X^{(i)} &= (X_0^{(i)}, X_1^{(i)},X_2^{(i)}, \cdots, X_n^{(i)})^T~~~，其中i=(1,2,\cdots, m)，X_0^{(i)}\equiv1 \\\\ X_j &= (X_j^{(1)}, X_j^{(2)}, \cdots, X_j^{(m)})^T~~~，其中j = (0, 1,2,\cdots, n) \\\\ y &= (y^{(1)}, y^{(2)}, \cdots, y^{(m)}) \end{aligned}

定义矩阵：

X = ( X ( 1 ) , X ( 2 ) , ⋯   , X ( m ) ) T = ( X 0 , X 1 , X 2 , ⋯   , X n ) = ( X 0 ( 1 ) X 1 ( 1 ) X 2 ( 1 ) ⋯ X n ( 1 ) X 0 ( 2 ) X 1 ( 2 ) X 2 ( 2 ) ⋯ X n ( 2 ) ⋯ ⋯ X 0 ( n ) X 1 ( m ) X 2 ( m ) ⋯ X n ( m ) ) m × ( n + 1 ) \begin{aligned} X = (X^{(1)}, X^{(2)}, \cdots, X^{(m)})^T = (X_0, X_1, X_2, \cdots, X_n) = \begin{pmatrix} X_0^{(1)} & X_1^{(1)} & X_2^{(1)} & \cdots X_n^{(1)} \\\\ X_0^{(2)} & X_1^{(2)} & X_2^{(2)} & \cdots X_n^{(2)} \\\\ \cdots & & & \cdots \\\\ X_0^{(n)} & X_1^{(m)} & X_2^{(m)} & \cdots X_n^{(m)} \\ \end{pmatrix}_{m \times (n+1)} \end{aligned}

θ \theta 取下值时，损失函数最小
θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y

# 公式推导

温馨提示：公式推导过程不难，但很绕，请耐心…

将(2)式代入(1)式得：

J ( θ ) = 1 2 m ∑ i = 1 m ( θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ⋯ + θ n X n ( i ) − y ( i ) ) 2 = 1 2 m ∑ i = 1 m ( θ 0 X 0 ( i ) + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ⋯ + θ n X n ( i ) − y ( i ) ) 2     （ 补 个 X 0 ( i ) ） = 1 2 m [ ( θ 0 X 0 ( 1 ) + θ 1 X 1 ( 1 ) + θ 2 X 2 ( 1 ) + ⋯ + θ n X n ( 1 ) − y ( 1 ) ) 2          + ( θ 0 X 0 ( 2 ) + θ 1 X 1 ( 2 ) + θ 2 X 2 ( 2 ) + ⋯ + θ n X n ( 2 ) − y ( 2 ) ) 2          + ⋯          + ( θ 0 X 0 ( m ) + θ 1 X 1 ( 2 ) + θ 2 X 2 ( m ) + ⋯ + θ n X n ( m ) − y ( m ) ) 2 ] \begin{aligned} J(\theta) & = \frac{1}{2m}\sum_{i=1}^m (\theta_0 + \theta_1 X_1^{(i)} + \theta_2 X_2^{(i)} + \cdots + \theta_n X_n^{(i)} - y^{(i)})^2 \\\\ & = \frac{1}{2m}\sum_{i=1}^m (\theta_0X_0^{(i)} + \theta_1 X_1^{(i)} + \theta_2 X_2^{(i)} + \cdots + \theta_n X_n^{(i)} - y^{(i)})^2 ~~~（补个X_0^{(i)}）\\\\ &= \frac{1}{2m}[ (\theta_0X_0^{(1)} + \theta_1X_1^{(1)} + \theta_2X_2^{(1)} + \cdots + \theta_nX_n^{(1)} - y^{(1)})^2 \\\\ &~~~~~~~~+ (\theta_0X_0^{(2)} + \theta_1X_1^{(2)}+ \theta_2X_2^{(2)} + \cdots + \theta_nX_n^{(2)}- y^{(2)})^2 \\\\ &~~~~~~~~+ \cdots \\\\ &~~~~~~~~+ (\theta_0X_0^{(m)} + \theta_1X_1^{(2)}+ \theta_2X_2^{(m)} + \cdots + \theta_nX_n^{(m)}- y^{(m)})^2 ] \end{aligned}

现在对 θ \theta 求偏导，下面只对 θ 1 \theta_1 求偏导，其他的依次类推：

∂ ∂ θ 1 J ( θ ) = 1 m [ X 1 ( 1 ) ( θ 0 X 0 ( 1 ) + θ 1 X 1 ( 1 ) + θ 2 X 2 ( 1 ) + ⋯ + θ n X n ( 1 ) − y ( 1 ) )        + X 1 ( 2 ) ( θ 0 X 0 ( 2 ) + θ 1 X 1 ( 2 ) + θ 2 X 2 ( 2 ) + ⋯ + θ n X n ( 2 ) − y ( 2 ) )        + ⋯        + X 1 ( m ) ( θ 0 X 0 ( m ) + θ 1 X 1 ( 2 ) + θ 2 X 2 ( m ) + ⋯ + θ n X n ( m ) − y ( m ) ) ] = 1 m [ ( θ 0 X 0 ( 1 ) X 1 ( 1 ) + θ 1 X 1 ( 1 ) X 1 ( 1 ) + θ 2 X 2 ( 1 ) X 1 ( 1 ) + ⋯ + θ n X n ( 1 ) X 1 ( 1 ) − y ( 1 ) X 1 ( 1 ) )        + ( θ 0 X 0 ( 2 ) X 1 ( 2 ) + θ 1 X 1 ( 2 ) X 1 ( 2 ) + θ 2 X 2 ( 2 ) X 1 ( 2 ) + ⋯ + θ n X n ( 2 ) X 1 ( 2 ) − y ( 2 ) X 1 ( 2 ) )        + ⋯        + ( θ 0 X 0 ( m ) X 1 ( m ) + θ 1 X 1 ( 2 ) X 1 ( m ) + θ 2 X 2 ( m ) X 1 ( m ) + ⋯ + θ n X n ( m ) − y ( m ) X 1 ( m ) ) ]       （ 把 X 1 ( i ) 乘 进 去 ） = 1 m [ ( X 0 ( 1 ) X 1 ( 1 ) + X 0 ( 2 ) X 1 ( 2 ) + ⋯ + X 0 ( m ) X 1 ( m ) ) ⋅ θ 0        + ( X 1 ( 1 ) X 1 ( 1 ) + X 1 ( 2 ) X 1 ( 2 ) + ⋯ + X 1 ( m ) X 1 ( m ) ) ⋅ θ 1        + ( X 2 ( 1 ) X 1 ( 1 ) + X 2 ( 2 ) X 1 ( 2 ) + ⋯ + X 2 ( m ) X 1 ( m ) ) ⋅ θ 2        + ⋯        + ( X n ( 1 ) X 1 ( 1 ) + X n ( 2 ) X 1 ( 2 ) + ⋯ + X n ( m ) X 1 ( m ) ) ⋅ θ n        − ( y ( 1 ) X 1 ( 1 ) + y ( 2 ) X 1 ( 2 ) ) + ⋯ + y ( m ) X 1 ( m ) ]           （ 将 θ 提 出 来 ） = 1 m [ θ 0 ⋅ ∑ i = 1 m X 0 ( i ) X 1 ( i ) + θ 1 ⋅ ∑ i = 1 m X 1 ( i ) X 1 ( i ) + θ 2 ⋅ ∑ i = 1 m X 2 ( i ) X 1 ( i ) + ⋯ + θ n ⋅ ∑ i = 1 m X n ( i ) X 1 ( i ) − ∑ i = 1 m y ( i ) X 1 ( i ) ] \begin{aligned} \frac{\partial}{\partial\theta_1} J(\theta) & = \frac{1}{m}[ X_1^{(1)} (\theta_0X_0^{(1)} + \theta_1X_1^{(1)} + \theta_2X_2^{(1)} + \cdots + \theta_nX_n^{(1)} - y^{(1)}) \\\\ &~~~~~~ + X_1^{(2)}(\theta_0X_0^{(2)} + \theta_1X_1^{(2)}+ \theta_2X_2^{(2)} + \cdots + \theta_nX_n^{(2)}- y^{(2)}) \\\\ &~~~~~~+ \cdots \\\\ &~~~~~~+ X_1^{(m)}(\theta_0X_0^{(m)} + \theta_1X_1^{(2)}+ \theta_2X_2^{(m)} + \cdots + \theta_nX_n^{(m)}- y^{(m)}) ] \\\\\\ & = \frac{1}{m}[(\theta_0X_0^{(1)}X_1^{(1)} + \theta_1X_1^{(1)}X_1^{(1)} + \theta_2X_2^{(1)}X_1^{(1)} + \cdots + \theta_nX_n^{(1)}X_1^{(1)} - y^{(1)}X_1^{(1)}) \\\\ &~~~~~~ + (\theta_0X_0^{(2)}X_1^{(2)} + \theta_1X_1^{(2)}X_1^{(2)}+ \theta_2X_2^{(2)}X_1^{(2)} + \cdots + \theta_nX_n^{(2)}X_1^{(2)}- y^{(2)}X_1^{(2)}) \\\\ &~~~~~~+ \cdots \\\\ &~~~~~~+ (\theta_0X_0^{(m)}X_1^{(m)} + \theta_1X_1^{(2)}X_1^{(m)}+ \theta_2X_2^{(m)}X_1^{(m)} + \cdots + \theta_nX_n^{(m)}- y^{(m)}X_1^{(m)}) ] ~~~~~（把 X_1^{(i)} 乘进去） \\\\\\ & = \frac{1}{m} [ (X_0^{(1)}X_1^{(1)} + X_0^{(2)}X_1^{(2)} + \cdots + X_0^{(m)}X_1^{(m)}) \cdot \theta_0 \\\\ & ~~~~~~+(X_1^{(1)}X_1^{(1)} + X_1^{(2)}X_1^{(2)} + \cdots + X_1^{(m)}X_1^{(m)}) \cdot \theta_1 \\\\ & ~~~~~~+(X_2^{(1)}X_1^{(1)} + X_2^{(2)}X_1^{(2)} + \cdots + X_2^{(m)}X_1^{(m)}) \cdot \theta_2 \\\\ & ~~~~~~+ \cdots \\\\ & ~~~~~~+ (X_n^{(1)}X_1^{(1)} + X_n^{(2)}X_1^{(2)} + \cdots + X_n^{(m)}X_1^{(m)}) \cdot \theta_n\\\\ & ~~~~~~- (y^{(1)} X_1^{(1)} + y^{(2)} X_1^{(2)}) + \cdots + y^{(m)} X_1^{(m)}] ~~~~~~~~~（将\theta 提出来）\\\\\\ & = \frac{1}{m} [\theta_0 \cdot \sum_{i=1}^m X_0^{(i)}X_1^{(i)} + \theta_1 \cdot \sum_{i=1}^m X_1^{(i)}X_1^{(i)} + \theta_2 \cdot \sum_{i=1}^m X_2^{(i)}X_1^{(i)} + \cdots + \theta_n \cdot \sum_{i=1}^m X_n^{(i)}X_1^{(i)} - \sum_{i=1}^m y^{(i)}X_1^{(i)}] \end{aligned}

我们先对 ∑ i = 1 m X a ( i ) X b ( i ) \sum_{i=1}^m X_a^{(i)}X_b^{(i)} 做下研究：
∑ i = 1 m X a ( i ) X b ( i ) = ( X a ( 1 ) , X a ( 2 ) , ⋯   , X a ( n ) ) ⋅ ( X b ( 1 ) X b ( 2 ) ⋯ X b ( n ) ) = X a T ⋅ X b = X b T ⋅ X a             ( 3 ) \sum_{i=1}^m X_a^{(i)}X_b^{(i)} = (X_a^{(1)}, X_a^{(2)}, \cdots , X_a^{(n)}) \cdot \begin{pmatrix} X_b^{(1)} \\\\ X_b^{(2)}\\\\ \cdots\\\\ X_b^{(n)}\\ \end{pmatrix} = X_a^T \cdot X_b = X_b^T\cdot X_a ~~~~~~~~~~~(3)

将(3)式代入 ∂ ∂ θ 1 J ( θ ) \frac{\partial}{\partial\theta_1} J(\theta)

∂ ∂ θ 1 J ( θ ) = 1 m [ θ 0 ⋅ ∑ i = 1 m X 0 ( i ) X 1 ( i ) + θ 1 ⋅ ∑ i = 1 m X 1 ( i ) X 1 ( i ) + θ 2 ⋅ ∑ i = 1 m X 2 ( i ) X 1 ( i ) + ⋯ + θ n ⋅ ∑ i = 1 m X n ( i ) X 1 ( i ) − ∑ i = 1 m y ( i ) X 1 ( i ) ] = 1 m ( X 0 T ⋅ X 1 ⋅ θ 0 + X 1 T ⋅ X 1 ⋅ θ 1 + X 2 T ⋅ X 1 ⋅ θ 2 + ⋯ + X n T ⋅ X 1 ⋅ θ n − X 1 T ⋅ y ) \begin{aligned} \frac{\partial}{\partial\theta_1} J(\theta) & = \frac{1}{m} [\theta_0 \cdot \sum_{i=1}^m X_0^{(i)}X_1^{(i)} + \theta_1 \cdot \sum_{i=1}^m X_1^{(i)}X_1^{(i)} + \theta_2 \cdot \sum_{i=1}^m X_2^{(i)}X_1^{(i)} + \cdots + \theta_n \cdot \sum_{i=1}^m X_n^{(i)}X_1^{(i)} - \sum_{i=1}^m y^{(i)}X_1^{(i)}] \\\\ & = \frac{1}{m} (X_0^T \cdot X_1 \cdot \theta_0 + X_1^T \cdot X_1 \cdot \theta_1 + X_2^T \cdot X_1 \cdot \theta_2 +\cdots + X_n^T \cdot X_1 \cdot \theta_n - X_1^T\cdot y) \\\\ \end{aligned}

∂ ∂ θ 1 J ( θ ) = 0 \frac{\partial}{\partial\theta_1} J(\theta)=0 ，得到如下等式：

( X 0 T X 1 , X 1 T X 1 , X 2 T X 1 ⋯   , X n T X 1 ) ⋅ ( θ 0 θ 1 ⋯ θ n ) = X 1 T ⋅ y (X_0^T X_1, X_1^T X_1, X_2^T X_1 \cdots, X_n^T X_1) \cdot \begin{pmatrix} \theta_0 \\\\ \theta_1 \\\\ \cdots\\\\ \theta_n\\ \end{pmatrix} = X_1^T\cdot y

∂ ∂ θ 1 J ( θ ) = 0 \frac{\partial}{\partial\theta_1} J(\theta)=0 同理，对 θ 0 , θ 2 , θ 3 , ⋯   , θ n \theta_0, \theta_2, \theta_3, \cdots, \theta_n 做偏导等零，最终得：

( X 0 T X 0 , X 1 T X 0 , X 2 T X 0 ⋯   , X n T X 0 X 0 T X 1 , X 1 T X 1 , X 2 T X 1 ⋯   , X n T X 1 X 0 T X 2 , X 1 T X 2 , X 2 T X 2 ⋯   , X n T X 2 ⋯ X 0 T X n , X 1 T X n , X 2 T X n ⋯   , X n T X n ) ⋅ ( θ 0 θ 1 θ 2 ⋯ θ n ) = ( X 0 T ⋅ y X 1 T ⋅ y X 2 T ⋅ y ⋯ X n T ⋅ y ) \begin{pmatrix} X_0^T X_0, X_1^T X_0, X_2^T X_0 \cdots, X_n^T X_0 \\\\ X_0^T X_1, X_1^T X_1, X_2^T X_1 \cdots, X_n^T X_1 \\\\ X_0^T X_2, X_1^T X_2, X_2^T X_2 \cdots, X_n^T X_2 \\\\ \cdots\\\\ X_0^T X_n, X_1^T X_n, X_2^T X_n \cdots, X_n^T X_n\\ \end{pmatrix} \cdot \begin{pmatrix} \theta_0 \\\\ \theta_1 \\\\ \theta_2 \\\\ \cdots\\\\ \theta_n\\ \end{pmatrix} = \begin{pmatrix} X_0^T\cdot y \\\\ X_1^T\cdot y \\\\ X_2^T\cdot y \\\\ \cdots\\\\ X_n^T\cdot y\\ \end{pmatrix}

左右两边进行处理，得（由(3)式子知 X a T ⋅ X b = X b T ⋅ X a X_a^T \cdot X_b = X_b^T\cdot X_a ，这里交换了一下）：
( X 0 T X 1 T X 2 T ⋯ X n T ) ⋅ ( X 0 , X 1 , X 2 , ⋯   , X n ) ⋅ ( θ 0 θ 1 θ 2 ⋯ θ n ) = ( X 0 T ⋅ y X 1 T ⋅ y X 2 T ⋅ y ⋯ X n T ⋅ y ) \begin{pmatrix} X_0^T \\\\ X_1^T \\\\ X_2^T \\\\ \cdots\\\\ X_n^T\\ \end{pmatrix} \cdot (X_0, X_1, X_2, \cdots, X_n) \cdot \begin{pmatrix} \theta_0 \\\\ \theta_1 \\\\ \theta_2 \\\\ \cdots\\\\ \theta_n\\ \end{pmatrix} = \begin{pmatrix} X_0^T\cdot y \\\\ X_1^T\cdot y \\\\ X_2^T\cdot y \\\\ \cdots\\\\ X_n^T\cdot y\\ \end{pmatrix}

将上式继续变换，得：
X T ⋅ X ⋅ θ = X T ⋅ y X^T \cdot X \cdot \theta = X^T \cdot y

两边同时乘 ( X T ⋅ X ) − 1 (X^T \cdot X)^{-1} 得最终结果：
θ = ( X T ⋅ X ) − 1 ⋅ X T ⋅ y \theta = (X^T \cdot X)^{-1} \cdot X^T\cdot y

# 参考资料

考研必备数学公式大全: https://blog.csdn.net/zhaohongfei_358/article/details/106039576

机器学习纸上谈兵之线性回归: https://blog.csdn.net/zhaohongfei_358/article/details/117967229

更多相关内容
• 最小二乘法是先将方程自变量与因变量化为系数矩阵X，再求该矩阵的转置矩阵（X1），接着求矩阵X与他的转置矩阵的X1的乘积（X2），然后求X2的逆矩阵。最后整合为系数矩阵W，求解后分别对应截距b、a1、和a2。可见计算一...
• 用matlab对多元还原概率预测代码线性回归模型解释 这是一个包含使用Sklearn、pandas、Numpy 和 Seaborn进行线性回归的解释的存储库。 还执行探索性数据分析（EDA）和可视化。 本说明分为以下部分，我们将详细介绍每...
• 梯度下降法 梯度下降法的基本思想可以类比为一个下山的过程。 假设这样一个场景：一个人被困在山上，需要从山上下来(找到山的最低点，也就是山谷)。但此时山上的浓雾很大，导致可视度很低；因此，下山的路径就无法...
• 这个是用来计算多元线性回归方程的算法，可以代替matlab中的函数，结果绝对正确
• 选择多个特征变量来建立线性方程，这就是多变量线性回归（多元线性回归）问题。 房价和多个特征变量相关，本案例尝试使用多元线性回归建模 多元线性回归：在回归分析中，如果有两个或两个以上的自变量，就称为多元...

一：背景介绍：

波士顿房价数据集包括多个样本，每个样本包括多个特征变量和该地区的平均房价。房价（单价）显然和多个特征变量相关，不是单变量线性回归（一元线性回归）问题；选择多个特征变量来建立线性方程，这就是多变量线性回归（多元线性回归）问题。
房价和多个特征变量相关，本案例尝试使用多元线性回归建模

多元线性回归：在回归分析中，如果有两个或两个以上的自变量，就称为多元回归。事实上，一种现象常常是与多个因素相联系的，由多个自变量的最优组合共同来预测或估计因变量，比只用一个自变量进行预测或估计更有效，更符合实际。因此多元线性回归比一元线性回归的实用意义更大。

• 一元线性回归分析的数学模型为：y = a+bx+ε。
• 使用偏差平方和分别对参数a和参数b求偏导，可以得到线性模型的未知参数a、b的最小二乘估计值，其中，偏差平方和定义为∑(yi-a-bXi)2

二：数据数值的处理：

数据的几个问题：

1.数据缺失  （比如有的数据会自动变成0） 2.数据不一致 3.数据不规范等

修改错误的数据：选中数据，选中筛选，选中数字筛选，选中大于（0），完成数据的清洗操作

非数值型数据的转化：

三：EXCEL表格实行实现

1.删除非数据项，实现线性回归

2.选择数据-数据回归-勾选线性分析

更多-选项-加载项-转到-选中分析工具库

输出结果如图所示：

四：分析：

导入包：

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt


读取文件house_prices.csv’数据

df = pd.read_csv('C:/Users/86199/Jupyter/house_prices.csv')


输出结果：

数据的异常数值处理：

# 异常值处理
# ================ 异常值检验函数：iqr & z分数 两种方法 =========================
def outlier_test(data, column, method=None, z=2):
""" 以某列为依据，使用 上下截断点法 检测异常值(索引) """
"""
full_data: 完整数据
column: full_data 中的指定行，格式 'x' 带引号
return 可选; outlier: 异常值数据框
upper: 上截断点;  lower: 下截断点
method：检验异常值的方法（可选, 默认的 None 为上下截断点法），
选 Z 方法时，Z 默认为 2
"""
# ================== 上下截断点法检验异常值 ==============================
if method == None:
print(f'以 {column} 列为依据，使用 上下截断点法(iqr) 检测异常值...')
print('=' * 70)
# 四分位点；这里调用函数会存在异常
column_iqr = np.quantile(data[column], 0.75) - np.quantile(data[column], 0.25)
# 1，3 分位数
(q1, q3) = np.quantile(data[column], 0.25), np.quantile(data[column], 0.75)
# 计算上下截断点
upper, lower = (q3 + 1.5 * column_iqr), (q1 - 1.5 * column_iqr)
# 检测异常值
outlier = data[(data[column] <= lower) | (data[column] >= upper)]
print(f'第一分位数: {q1}, 第三分位数：{q3}, 四分位极差：{column_iqr}')
print(f"上截断点：{upper}, 下截断点：{lower}")
return outlier, upper, lower
# ===================== Z 分数检验异常值 ==========================
if method == 'z':
""" 以某列为依据，传入数据与希望分段的 z 分数点，返回异常值索引与所在数据框 """
"""
params
data: 完整数据
column: 指定的检测列
z: Z分位数, 默认为2，根据 z分数-正态曲线表，可知取左右两端的 2%，
根据您 z 分数的正负设置。也可以任意更改，知道任意顶端百分比的数据集合
"""
print(f'以 {column} 列为依据，使用 Z 分数法，z 分位数取 {z} 来检测异常值...')
print('=' * 70)
# 计算两个 Z 分数的数值点
mean, std = np.mean(data[column]), np.std(data[column])
upper, lower = (mean + z * std), (mean - z * std)
print(f"取 {z} 个 Z分数：大于 {upper} 或小于 {lower} 的即可被视为异常值。")
print('=' * 70)
# 检测异常值
outlier = data[(data[column] <= lower) | (data[column] >= upper)]
return outlier, upper, lower


调用函数：

outlier, upper, lower = outlier_test(data=df, column='price', method='z')
outlier.info(); outlier.sample(5)


删除错误数据：

# 这里简单的丢弃即可
df.drop(index=outlier.index, inplace=True)


定义变量：

# 类别变量，又称为名义变量，nominal variables
nominal_vars = ['neighborhood', 'style']

for each in nominal_vars:
print(each, ':')
print(df[each].agg(['value_counts']).T)
# 直接 .value_counts().T 无法实现下面的效果
## 必须得 agg，而且里面的中括号 [] 也不能少
print('='*35)
# 发现各类别的数量也都还可以，为下面的方差分析做准备


查看热力图变量的关联性：

方差分析：

# 利用回归模型中的方差分析
## 只有 statsmodels 有方差分析库
## 从线性回归结果中提取方差分析结果
import statsmodels.api as sm
from statsmodels.formula.api import ols # ols 为建立线性回归模型的统计学库
from statsmodels.stats.anova import anova_lm


a. 样本量和置信水平 α_level 的注意点（置信水平 α 的选择经验）
样本量         α-level
≤ 100         10%
100 ＜ n ≤ 500    5%
500 ＜ n ≤ 1000   1%
n ＞ 2000       千分之一
b.样本量过大，α-level 就没什么意义了。
c.数据量很大时，p 值就没用了，样本量通常不超过 5000，
d.为了证明两变量间的关系是稳定的，样本量要控制好。

采集数据样本;

# 从数据集样本中随机选择 600 条，如果希望分层抽样，可参考文章：
df = df.copy().sample(600)

# C 表示告诉 Python 这是分类变量，否则 Python 会当成连续变量使用
## 这里直接使用方差分析对所有分类变量进行检验
## 下面几行代码便是使用统计学库进行方差分析的标准姿势
lm = ols('price ~ C(neighborhood) + C(style)', data=df).fit()
anova_lm(lm)

# Residual 行表示模型不能解释的组内的，其他的是能解释的组间的
# df: 自由度（n-1）- 分类变量中的类别个数减1
# sum_sq: 总平方和（SSM），residual行的 sum_eq: SSE
# mean_sq: msm, residual行的 mean_sq: mse
# F：F 统计量，查看卡方分布表即可
# PR(>F): P 值


建立线性回归模型：

from statsmodels.formula.api import ols
#最小二乘法建立线性回归模型
lm = ols('price ~ area + bedrooms + bathrooms', data=df).fit()
lm.summary()


模型优化：
模型精度较低，这里通过添加虚拟变量使用方差膨胀因子检测多元共线性的方式来提升模型精度

# 设置虚拟变量
# 以名义变量 neighborhood 街区为例
nominal_data = df['neighborhood']

# 设置虚拟变量
dummies = pd.get_dummies(nominal_data)
dummies.sample()  # pandas 会自动帮你命名

# 每个名义变量生成的虚拟变量中，需要各丢弃一个，这里以丢弃C为例
dummies.drop(columns=['C'], inplace=True)
dummies.sample()


连接数据集：

# 将结果与原数据集拼接
results = pd.concat(objs=[df, dummies], axis='columns')  # 按照列来合并
results.sample(3)
# 对名义变量 style 的处理可自行尝试


lm = ols('price ~ area + bedrooms + bathrooms + A + B', data=results).fit()
lm.summary()



五：Sklearn库建立多元线性回归模型

#导入相关库
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split #这里是引用了交叉验证
from sklearn.linear_model import LinearRegression  #线性回归
from sklearn.linear_model import Lasso, Ridge, LinearRegression as LR
from sklearn.metrics import r2_score, explained_variance_score as EVS, mean_squared_error as MSE
from sklearn.model_selection import train_test_split, cross_val_score
from pandas.core.accessor import register_dataframe_accessor


读入数据：

data=pd.read_csv('E:\人工智能\house_prices.csv')
x = data[['neighborhood','area','bedrooms','bathrooms','style']]#自变量
y= data['price']# 因变量


划分训练集：

x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.3, random_state=1)


模型训练与求解：

判断参数：

展开全文
• MATLAB源码集锦-多元线性回归代码
• 多元线性回归代码以及多元非线性回归代码数学建模
• 线性回归模型建模步骤 （一元线性回归、多元线性回归
• 数据分析基础-广义多元线性回归方程的构建，数据分析基础-广义多元线性回归方程的构建，数据分析基础-广义多元线性回归方程的构建
• 控制台应用程序，C++实现多元线性回归，可指定任意几元，根据给定的数据矩阵，训练给出回归方程
• 自行推导公式多元线性回归的编程一、导入文本店铺面积和营业额的关系图车站距离和营业额的关系图二、计算下图三、计算R² 一、导入文本 import pandas as pd import numpy as np import matplotlib.pyplot as plt ...
• 通过对某矿11-2煤层瓦斯...结果显示11-2煤层的瓦斯含量主控因素为底板标高,其与主断层距离也是影响瓦斯含量的重要因素,多元线性回归方程预测值与实测值相近,准确性较高。该方法可为煤层瓦斯含量预测提供一种新途径。
• 原始数据在这里 1.观察数据 首先，用Pandas打开数据，并进行观察。 import numpy import pandas as pd import matplotlib.pyplot as plt ...我们的问题是得到一个线性的关系，对应PE是样本输出，而AT/V/
• C++实现多元线性回归 可任意指定几元 根据输入的数据矩阵，和给定的回归元数，训练给出回归方程
• 最小二乘法求线性回归方程.cpp
• 基于jupyter notebook的python编程—–利用梯度下降算法求解多元线性回归方程，并与最小二乘法求解进行精度对比目录一、梯度下降算法的基本原理1、梯度下降算法的基本原理二、题目、表格数据、以及python环境搭建1、...
• ## 多元线性回归方程原理及其推导

万次阅读 多人点赞 2018-10-21 14:19:22
1.在统计学中，线性回归方程是利用最小二乘函数对一个或多个自变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归，大于一个自变量的...

# 多元线性方程原理及推导

## 概念

1.在统计学中，线性回归方程是利用最小二乘函数对一个或多个自变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归，大于一个自变量的情况叫多元回归。
2.在线性回归中，数据使用线性预测函数来建模，并且未知的函数模型参数也是通过数据来估计。这种模型被叫做线性模型。最常用的线性回归建模是给定的X的条件下y的条件分布的分位数作为X的线性函数表示。像所有形式的回归分析一样，线性回归也是把焦点放在给定X的值的y的条件概率分布，而不是X和y的联合概率分布（多元分析领域）。

### 公式

一元线性回归方程：y=a+bx
a称为截距
b为回归直线的斜率

多元线性回归方程：y=b0+b1X1+b2X2+…+bnXn
b0为常数项
b1,b2,b3,…bn称为y对应于x1,x2,x3,…xn的偏回归系数

### 推导

使用极大函数解释最小二乘

似然函数

高斯的对数似然与最小二乘

参数的解析式

#### 总结

    自我认为多元线性方程的推导过程还是挺麻烦的，需要多看几遍。学习推导的过程中，我们要认识一些数学符号，一些方法，比如最小二乘，极大似然，梯度等等。
事实上，一种现象常常是与多个因素相联系的（比如：房子总价与房子面积，房间数，地段这些因素相关），由多个自变量的最优组合共同来预测或估计因变量，比只用一个自变量进行预测或估计更有效，更符合实际。因此多元线性回归比一元线性回归的实用意义更大。

展开全文
• 本文基于R做线性回归及各种检验

# 一、模型建立

数据放在最后，自取试建立y与x1,x2,x3,x4,x5的线性回归方程

代码如下：

a<-read.csv("eg2.1.csv",header=T);a
b<-lm(y~x1+x2+x3+x4+x5,data=a)


这里介绍一个包，可以把结果用表格显示：

install.packages("flextable")
library(flextable)#制作表格
as_flextable(b)


输出结果如下：

得到回归方程

y = − 32 + 0.163 x 1 + 0.228 x 2 + 0.881 x 3 − 0.05 x 4 + 0.169 x 5 y=-32+0.163x_1+0.228x_2+0.881x_3-0.05x_4+0.169x_5

# 二、多重共线性

## （1）产生的背景：

1.经济变量间具有共同变化的趋势。例如，对于时间序列数据收入、消费、就业率等等，在经济上升时期均呈现增长的趋势，而在经济收缩期，又都呈现下降趋势。当这些变量同时作为解释变量进入模型时就会带来多重共线性问题。
2.模型中引入了滞后变量，变量X常常与滞后变量高度相关
3.利用截面数据建立模型也可能会出现多重共线性。利用截面数据建模时，许多变量变化与发展规模有关，会出现同步增长的趋势，如资本、劳动力、科技、能源等投入与产出的规模相关，这时容易产生多重共线性。
4.样本数据自身的原因。例如，抽样仅仅限于总体中解释变量取值的一个有限范围，使得变量间变异不大；或由于总体受限，多个解释变量的样本数据相关，这时都可能出现多重共线性。

## （2）多重共线性的检验

### 1.简单相关系数法：

一般而言，如果每两个解释变量的简单的相关系数(0阶自相关系数)比较高，如大于0.8，则可认为存在严重的多重共线性。

ab<-a[,c(2:6)]#只保留解释变量
corr<-cor(ab);corr
corrplot(corr,method="number",type="full",mar=c(0,0,0,0) ,bg="black",tl.col = "blue")


其中corrplot函数详细见这篇文章：
相关系数热力图

由上图可知，x1和x3的相关系数为0.73，初步判断不存在多重共线性。

### 2.方差膨胀因子（vif）法

一般vif大于10即可认为存在严重的多重共线性：
通过建立x1~x2+x3+x4+x5的线性关系得到R方，那么x1的方差膨胀因子就是
V I F = 1 1 − R 2 VIF=\frac{1}{1-R^2}
其他的类似，r语言有vif这个函数可以直接求：

library(car)#检验多重共线性的包
vif(b)#b是线性回归的结果


可以看出：vif值都小于10，即可判断出没有多重共线性

### 3.矩阵 X T X X^TX 的条件数k

条件数的定义为：
k ( X T X ) = ∥ X T X ∥ ⋅ ∥ ( X T X ) − 1 ∥ = λ max ⁡ ( X T X ) λ min ⁡ ( X T X ) \,\,k\left( X^TX \right) =\left\| X^TX \right\| \cdot \left\| \left( X^TX \right) ^{-1} \right\| =\frac{\lambda _{\max \left( X^TX \right)}}{\lambda \min \left( X^TX \right)}
若k<100,则认为多重共线性的程度很小，在100到1000之间则认为存在中度或较强的多重共线性，若大于1000，则认为存在严重的多重共线性。
在R软件中，用kappa（）计算矩阵的条件数，其使用方法为：

**kappa(z,exact=F)***

其中z是矩阵，exact=F即不精确计算条件数，近似计算

XX<-cor(ab)#先做出相关系数矩阵
kappa(XX)#对相关系数矩阵做
eigen(XX)#求特征值和特征向量


可以看出条件数的值为7，即不存在多重共线性。

## （3）多重共线性的修正

本文虽然没有出现多重共线性的问题，但是如果出现了，该如何解决呢？
本文主要通过逐步回归来修正多重共线性

代码如下：


aaa<-step(b)
as_flextable(aaa)


得到最后的回归方程：

y = − 18.43 + 0.249 x 2 + 0.986 x 3 y=-18.43+0.249x_2+0.986x_3

# 二、异方差性的检验及修正

## 1.异方差性的实质

设模型为
Y i = β 0 + β 1 x 1 i + β 2 x 2 i + . . . + β k x k i + u i ( i = 1 , 2 , . . . n ) \\ Y_i=\beta _0+\beta _1x_{1i}+\beta _2x_{2i}+...+\beta _kx_{_{ki}}+u_i\left( i=1,2,...n \right)
如果其他假定均不变，但模型中随机误差项 u i u_i 的方差为
V a r ( u i ) = σ i 2 ( i = 1 , 2 , . . . n ) Var(u_i)=\sigma_i^2(i=1,2,...n)
则称 u i u_i 具有异方差性（heteroscedasiticity

## 2.异方差性的检验

### 1.图示检验法

一般把标准化残差的绝对值大于等于2的观测值认为是可疑点，而把标准化残差值绝对值大于等于3认为是异常值

rst <- rstandard(b)#标准化残差
fit<-predict(b)#预测值
library(ggplot2)#载入ggplot2包
mn<-data.frame(rst,fit)
ggplot(mn,aes(fit,rst))+geom_point()



通过绘制出散点图可以看出：

标准化残差值大致在区间（-2,3）内 ，存在可疑点。是否存在异方差性还需要进一步检测。

### 2.Goldfeld—Quandt检验

install.packages("lmtest")
library(lmtest)
as_flextable(gqtest(b))


可以看出p值为0.4，即接受原假设，即不存在异方差

### 3.White检验和H.glesjser检验

White检验的统计量：

w = n ∗ R 2   C h i S q u a r e ( k ) w=n*R^2~ChiSquare\left( k \right)
由于解释变量由5个，这个其实不太适合做white检验
可以参考这篇文章：
异方差与r语言实践

## 3.异方差的修正

加权最小二乘法：在r语言中代码非常简单
这里取权重为1/abs（e）

e<-resid(b)#e是标准化残差
b1<-lm(y~x1+x2+x3+x4+x5,weights=1/abs(e),data=a)
as_flextable(b1)


得到方程：
y e = − 36 e + 0.187 x 1 e + 0.205 x 2 e + 0.883 x 3 e + 0.004 x 4 e + 0.158 x 5 e \frac{y}{\sqrt{e}}=\frac{-36}{\sqrt{e}}+0.187\frac{x_1}{\sqrt{e}}+0.205\frac{x_2}{\sqrt{e}}+0.883\frac{x_3}{\sqrt{e}}+0.004\frac{x_4}{\sqrt{e}}+0.158\frac{x_5}{\sqrt{e}}
其中e是残差

数据链接
链接：https://pan.baidu.com/s/1My6WTMXEZyIVfIM7A5oIbA?pwd=tjby
提取码：tjby
–来自百度网盘超级会员V4的分享

展开全文
• Mathematica在多元线性回归分析中的应用，黄志鹏，李思泽，从多元线性回归分析的原理出发，利用最小二乘法准则，将回归分析归结为用Seidel迭代法求矩阵方程组解，确定待定系数，利用mathematica�
• 本文中，我们将进行大量的编程——但在这之前，我们先介绍一下我们今天要解决的实例问题。 1) 预测房子价格 ...这部分没有实战例子，不过我会教你怎么去用线性回归替换这些值。 所以，让我们投入编程吧（马
• 基于spss的一元线性回归与多元线性回归案例，个人整理出的，包含了部分案例、实验报告、题目，及部分题目答案，适合作为spss、MATLAB等软件数据分析题目联系
• 数据分析中选择回归，来完成我们的多元线性回归预测 输出： 截取的部分price预测值 总结 使用数学方法对影响因变量的各种因素进行分析，可以快速确定自变量与因变量之间是否存在线性关系，能够帮助我们建立...
• （一）多元线性回归模型 在回归分析中，如果有两个或两个以上的自变量，就称为多元回归。事实上，一种现象常常是与多个因素相联系的，由多个自变量的最优组合共同来预测或估计因变量，比只用一个自变量进行预测或...
• %%1、bint表示回归系数区间估计 %2、r表示残差 %3、rint代表置信区间 ...% r^2越接近于1，回归方程越显著 %alpha表示显著水平 %% x=[143 144 145 147 148 150 153 154 155 156 157 158 159 160 1...

...