传感数据分析——最小二乘法线性拟合(Least Squares)
相关性分析是对传感数据分析的定性分析,即明确两两传感数据是否存在线性关系的定性。对于多传感数据分析而言,明确了两两传感数据之间的强相关性之后,需要定量化地表述两者之间的线性关系,即采用线性建模的方式。本文正文内容以上就是本节对传感数据线性回归分析的内容,本文简单介绍了传感数据一维线性回归分析中最小二乘法的Python实现(改为自己的数据集即可),对最小二乘法的具体使用,可见传感数据分析-最小二乘法
传感数据分析——最小二乘法线性拟合(Least Squares)
前言
相关性分析是对传感数据分析的定性分析,即明确两两传感数据是否存在线性关系的定性。
对于多传感数据分析而言,明确了两两传感数据之间的强相关性之后,需要定量化地表述两者之间的线性关系,即采用线性建模的方式。
本文正文内容
一、基础理论
基本概念
最小二乘法:一组数据x和y==>求出y与x之间的关系模型的参数;
最小二乘法的使用条件:误差服从标准正态分布;
假设线性最小二乘法的拟合直线公式为:
y
=
a
x
+
b
\begin{equation}y=ax+b\end{equation}
y=ax+b
式中,
a
a
a,
b
b
b为待估计的参数。
设观测数据(
x
1
x_{1}
x1,
y
1
y_{1}
y1),(
x
2
x_{2}
x2,
y
2
y_{2}
y2),…,(
x
N
x_{N}
xN,
y
N
y_{N}
yN)共有N对数据,则将这些数据点分别代入方程,可以得到一共
N
N
N个方程构成的方程组,通过极小化实际观测数据与模型观测数据的残差平方和:
ε
2
=
∑
i
=
1
N
[
y
i
−
(
a
x
i
+
b
)
]
2
\begin{equation} \varepsilon^{2}=\sum_{i=1}^{N}[y_{_i}-(ax_{_i}+b)]^{2} \end{equation}
ε2=i=1∑N[yi−(axi+b)]2
对a求偏导:
∂
ε
2
∂
a
=
2
∑
i
=
1
N
[
y
i
−
(
a
x
i
+
b
)
]
(
−
x
i
)
=
0
\begin{equation}\frac{\partial\varepsilon^2}{\partial a}=2\sum_{i=1}^N[y_i-(ax_i+b)](-x_i)=0\end{equation}
∂a∂ε2=2i=1∑N[yi−(axi+b)](−xi)=0
化简后得到:
∑
i
=
1
N
x
i
y
i
−
a
∑
i
=
1
N
x
i
2
−
b
∑
i
=
1
N
x
i
=
0
\begin{equation}\sum_{i=1}^{N}x_{i}y_{i}-a\sum_{i=1}^{N}x_{i}^{2}-b\sum_{i=1}^{N}x_{i}=0\end{equation}
i=1∑Nxiyi−ai=1∑Nxi2−bi=1∑Nxi=0
分别对b求偏导:
∂
ε
2
∂
b
=
2
∑
i
=
1
N
[
y
i
−
(
a
x
i
+
b
)
]
=
0
\begin{equation}\frac{\partial\varepsilon^{2}}{\partial b}=2\sum_{i=1}^{N}[y_{i}-(ax_{i}+b)]=0\end{equation}
∂b∂ε2=2i=1∑N[yi−(axi+b)]=0
化简后后得到
∑
i
=
1
N
y
i
=
a
∑
i
=
1
N
x
i
+
N
b
\begin{equation}\sum_{i=1}^{N}y_{i}=a\sum_{i=1}^{N}x_{i}+Nb\end{equation}
i=1∑Nyi=ai=1∑Nxi+Nb
由(4)和(6)得到二元一次方程组,联立求解,可得
{
a
=
∑
i
=
1
N
x
i
∑
i
=
1
N
y
i
−
N
∑
i
=
1
N
x
i
y
i
(
∑
i
=
1
N
x
i
)
2
−
N
∑
i
=
1
N
x
i
2
b
=
y
‾
−
a
x
‾
\begin{cases}a=&\displaystyle\frac{\sum_{i=1}^Nx_i\sum_{i=1}^Ny_i-N\sum_{i=1}^Nx_iy_i}{(\sum_{i=1}^Nx_i)^2-N\sum_{i=1}^Nx_i^2}\\b=&\displaystyle\overline{y}-a\overline{x}\end{cases}
⎩
⎨
⎧a=b=(∑i=1Nxi)2−N∑i=1Nxi2∑i=1Nxi∑i=1Nyi−N∑i=1Nxiyiy−ax
相关原理叙述和详解可以参考大佬的博客:
最小二乘法详解
二、运行环境
系统: Windows 10 / Ubuntu 20.04
编程语言: Python 3.8
文本编译器: Vscode
所需库:pandas >= 0.23.0, matplotlib >= 2.2.2,numpy >= 1.19.5
三、使用步骤
1.引入库
代码如下(示例):
import os
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
2.读入数据
代码如下(示例):
def file_xlsx(fileder_path):
"""
读取fileder_path文件夹下全部的.xlsx文件夹
"""
file_list = []
for filename in os.listdir(fileder_path):
if filename.endswith('.xlsx'):
file_list.append(filename)
return sorted(file_list)
if __name__ == '__main__':
# 文件路径
fileder_path = './dataset/'
# 调用file_xlsx函数读取当前文件夹下的.xlsx文件
file_list = file_xlsx(fileder_path)
该处读取dataset文件夹下的所有.xlsx文件。
3. 最小二乘法
代码如下(示例):
"""
用最小二乘法完成拟合曲线参数计算
data_y = return_k * data_x + return_b
:param data_x:
:param data_y:
:return: 一元线性拟合的参数 return_k、return_b
"""
# 初始化xy等
size = len(data_x)
i = 0
sum_xy = 0
sum_y = 0
sum_x = 0
sum_sqare_x = 0
while i < size:
sum_xy += data_x[i] * data_y[i]
sum_y += data_y[i]
sum_x += data_x[i]
sum_sqare_x += data_x[i] * data_x[i]
i += 1
# 观测点数据的average_x和average_y
average_x = sum_x / size
average_y = sum_y / size
# 根据一元线性回归的最小二乘法公式求解
return_k = (sum_x * sum_y - size * sum_xy) / (sum_x * sum_x - size * sum_sqare_x)
return_b = average_y - average_x * return_k
return [return_k, return_b]
4. 绘图
选择数据中的自变量x和因变量y,并绘制曲线,展示,原数据用散点图表示,线性拟合后用蓝色直线表示。详见资源传感数据分析-最小二乘法线性拟合(Least Squares)。
结果图:
总结
以上就是本节对传感数据线性回归分析的内容,本文简单介绍了传感数据一维线性回归分析中最小二乘法的Python实现(改为自己的数据集即可),对最小二乘法的具体使用,可见传感数据分析-最小二乘法线性拟合(Least Squares)。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)