传感数据分析——最小二乘法线性拟合(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)。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)