一、线性拟合概念

线性拟合是曲线拟合的一种形式。设x和y都是被观测的量,且y是x的函数:y=f(x; b),曲线拟合就是通过x,y的观测值来寻求参数b的最佳估计值,及寻求最佳的理论曲线y=f(x; b)。当函数y=f(x; b)为关于b的i线性函数时,称这种曲线拟合为线性拟合。(石振东,刘国庆.实验数据处理与曲线拟合技术.哈尔滨:哈尔滨船舶工程学院出版社,1991)

线性拟合的原理:给定一组数据(xi,yi),i = 0,1,2,3,...,m-1,做拟合直线f(x) = a + bx,均方误差为:

 根据微积分原理,Q(a,b)的极小值要满足:

 

 整理变换一下:

 

 用消元法或克莱姆方法解方程得到:

 

当b>0时,y随着x的增大越来越大;当b<0时,y随着x的增大越来越小,当b = 0,说明y不随着x的变化而变化。

二、应用示例

描述:在某平台上线后,得出某指标(某疾病平均住院日)随着应用时间的推移发生的变化情况,在指标平台实施后选取8个季度进行统计分析,如下表:

季度

1

2

3

4

5

6

7

8

平均住院日(天)

20

20

19

18

18.5

17.5

18

17.2

#应用到numpy和pandas模块
import pandas as pd
import numpy as np

 导入查看数据:

data = pd.read_excel('线性拟合.xlsx')
data.head()

x_list = data.quarter.to_list()
y_list = data.average_hospital_stay.to_list()

#x_array,y_array是我们要拟合的数据
x_array = np.array(x_list)
y_array = np.array(y_list)
#方程个数
m = len(x_array) 
#计算过程
sum_x = np.sum(x_array)
sum_y = np.sum(y_array)
sum_xy = np.sum(x_array * y_array)
sum_xx = np.sum(x_array **2 )
a=(sum_y*sum_xx-sum_x*sum_xy)/(m*sum_xx-(sum_x)**2)
b=(m*sum_xy-sum_x*sum_y)/(m*sum_xx-(sum_x)**2)

 打印一下子:

print("p = {:.4f} + {:.4f}x".format(a,b))

 

绘制散点图,并进行线性拟合,如下如所示:

      结论:如图所示,在某平台使用后,平均住院日随着应用时间的增长越来越小,说明该平台的使用有利于缩小平均住院日。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐