基于jupyter notebook的python编程-----通过原理,求解分析一元线性回归方程的的待定系数a和判定系数R2


对于python求解线性回归的待定系数和判定系数,如果只能通过第三方库进行求解,那我们始终不能理解回归方程的意义
本次博客,林君学长带大家了解,如何分解步骤,一步一步求出过程中的所需要的值,最终得到我们所需要的结果!

一、运行jupyter notebook,搭建python环境

1、打开Windows终端命令行,输入jupyter notebook,打开我们的jupyter工具,如下所示:

在这里插入图片描述

2、在jupyter的web网页中创建python文件,如下所示:

在这里插入图片描述

3、现在就可以在jupyter的代码行里面输入我们的代码啦!

二、本次内容所需要的表格数据

1、本次所需要的数据主要如下

1)、主要实现代码的表格内容:
在这里插入图片描述
在这里插入图片描述
上面的表格去掉状态栏。左边为X温度,右边为Y,红茶的销售量
2)、画出置信带所用的数据表格如下:
在这里插入图片描述
在这里插入图片描述
相比于上面,只加了变量蓝,X代表温度,Y代表销售量!

三、实验原理

1)、实验原理如下的解析步骤
在这里插入图片描述
2)、步骤2
在这里插入图片描述
3)、步骤3
在这里插入图片描述
4)、步骤4
在这里插入图片描述
5)、步骤5
在这里插入图片描述
在这里插入图片描述
6)、步骤6
在这里插入图片描述
7)、步骤7
在这里插入图片描述
在这里插入图片描述

四、编辑python代码,分步骤解析线性回归方程

1、导入我们所需要的python库

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

2、为自变量和因变量赋值

data = np.genfromtxt("D:/红茶数据.csv",delimiter=",")
temperature=data[0:14,0]#自变量温度
sales=data[0:14,1]#因变量销售量

3、求自变量温度的和及平均值

1)、python代码如下:

sumx=0#自变量的和
x1=0#自变量的平均值
for i in range(0,len(temperature)):
    sumx=sumx+temperature[i]
print("温度的和为:",sumx)
x1=sumx/len(temperature)
print("温度的平均值为:",x1)

2)、运行结果如下:
在这里插入图片描述

4、求因变量销售量的和及平均值

1)、python代码如下

sumy=0#因变量的和
y1=0#因变量的平均值
for i in range(0,len(sales)):
    sumy=sumy+sales[i]
print("销售量的和为:",sumy)
y1=sumy/len(sales)
print("销售量的平均值为:",y1)

2)、运行结果如下:
在这里插入图片描述

5、求(温度-温度平均值)的和

1)、python代码如下:

x_x1=0#x-x1的值的和
for i in range(0,len(temperature)):
    x_x1=x_x1+(temperature[i]-x1)
print("温度-温度平均值的和为:",x2)

2)、运行结果如下:
在这里插入图片描述

6、求(销售量-销售量平均值)的和

1)、python代码如下:

y_y1=0#y-y1的值的和
for i in range(0,len(sales)):
    y_y1=y_y1+(sales[i]-y1)
print("销售量-销售量平均值的和为:",y_y1)

2)、运行结果如下:
在这里插入图片描述

7、求(x的离差平方和)

1)、python代码如下:

Sxx=0#x-x1的值的平方和
for i in range(0,len(temperature)):
    Sxx=Sxx+((temperature[i]-x1)*(temperature[i]-x1))
print("x的离差平方和为:",Sxx)

2)、运行结果如下:
在这里插入图片描述

8、求y的离差平方和

1)、python代码如下:

Syy=0#y-y1的值的平方和
for i in range(0,len(sales)):
    Syy=Syy+((sales[i]-y1)*(sales[i]-y1))
print("y的离差平方和为:",Syy)

2)、运行结果如下:
在这里插入图片描述

9、求x和y的离差积和

1)、python代码如下:

Sxy=0#(x-x1)(y-y1)的和
for i in range(0,len(temperature)):
    Sxy=Sxy+((temperature[i]-x1)*(sales[i]-y1))
print("x和y的离差积和为:",Sxy)

2)、运行结果如下:
在这里插入图片描述

11、求y=ax+b的系数a和截距b,以及回归方程

1)、python代码如下:

#求y=ax+b的系数a和截距b
a=Sxy/Sxx
b=y1-a*x1
print("销售的回归方程的系数为:",a)
print("销售的回归方程的截距为:",b)
print("回归方程为y=",a,"x+",b)

2)、运行结果如下:
在这里插入图片描述
上面结果计算的由来就是如下原理的应用
在这里插入图片描述

12、求自变量温度对应的所有预测值sales1

1)、python代码如下:

#求预测值sales1
sales1=[]
for i in range(0,len(temperature)):
    sales1.append(a*temperature[i]+b)
print(sales1)

2)、运行结果如下:
在这里插入图片描述

13、求预测值sales1的平均值y2

1)、python代码如下:

#求预测值的平均值y2
y2=0
sumy2=0
for i in range(len(sales1)):
    sumy2=sumy2+sales1[i]
print(sumy2)
y2=sumy2/len(sales1)
print("预测销售值的平均值为:",y2)

2)、运行结果如下:
在这里插入图片描述

14、求预测销售值-预测销售平均值的和

1)、python代码如下:

#求预测值-平均值的和y11_y2
y11_y2=0
for i in range(0,len(sales1)):
   y11_y2=y11_y2+(sales1[i]-y2)
print("预测销售值-预测销售平均值的和为:",y11_y2)

2)、运行结果如下:
在这里插入图片描述

15、求预测销售值sales1的离差平方和

1)、python代码如下:

#求实际值-预测值的和y_y2的平方和
Syy1=0
for i in range(0,len(sales1)):
    Syy1=Syy1+((sales1[i]-y2)*(sales1[i]-y1))
print("预测销售值y11的离差平方和为:",Syy1)

2)、运行结果如下:
在这里插入图片描述

16、求销售值y和预测销售值y11的离差积和

1)、python代码如下:

#求(y-y1)(y11-y2)乘积的和
Syy2=0
for i in range(0,len(sales)):
    Syy2=Syy2+((sales[i]-y1)*(sales1[i]-y2))
print("销售值y和预测销售值y11的离差积和为:",Syy2)

2)、运行结果如下:
在这里插入图片描述

17、求实际值-预测值的平方和Se

1)、python代码如下:

#求(y-y11)的平方和Se
Se=0
for i in range(0,len(sales)):
    Se=Se+((sales[i]-sales1[i])*(sales[i]-sales1[i]))
print(Se)

2)、运行结果如下:

18、计算判定系数R2

1)、python代码如下:

#计算判定系数R2
R=Syy2/((Syy1*Syy)**0.5)
R2=R*R
print("判定系数R2为:",R2)

2)、运行结果如下:
在这里插入图片描述

19、求判定系数R2的另一种方法

1)、python代码如下:

#求判定系数R2的另一种方法
R2=1-(Se/Syy)
print("判定系数R2为:",R2)

2)、运行结果如下:
在这里插入图片描述

20、进行线性回归曲线图的模拟,并利用seaborn库标记出置信带

1)、python代码如下:

#利用seaborn分析置信带
data1=pd.read_excel('D:\红茶数据.xlsx')
sns.pairplot(data1,x_vars=['X'],y_vars=['Y'], height=3, aspect=0.8, kind='reg')
plt.show()

2)、运行结果如下:
在这里插入图片描述

五、python的完整实验代码

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
data = np.genfromtxt("D:/红茶数据.csv",delimiter=",")
temperature=data[0:14,0]#自变量温度
sales=data[0:14,1]#因变量销售量
sumx=0#自变量的和
x1=0#自变量的平均值
for i in range(0,len(temperature)):
    sumx=sumx+temperature[i]
print("温度的和为:",sumx)
x1=sumx/len(temperature)
print("温度的平均值为:",x1)
sumy=0#因变量的和
y1=0#因变量的平均值
for i in range(0,len(sales)):
    sumy=sumy+sales[i]
print("销售量的和为:",sumy)
y1=sumy/len(sales)
print("销售量的平均值为:",y1)
x_x1=0#x-x1的值的和
for i in range(0,len(temperature)):
    x_x1=x_x1+(temperature[i]-x1)
print("温度-温度平均值的和为:",x2)
y_y1=0#y-y1的值的和
for i in range(0,len(sales)):
    y_y1=y_y1+(sales[i]-y1)
print("销售量-销售量平均值的和为:",y_y1)
Sxx=0#x-x1的值的平方和
for i in range(0,len(temperature)):
    Sxx=Sxx+((temperature[i]-x1)*(temperature[i]-x1))
print("x的离差平方和为:",Sxx)
Syy=0#y-y1的值的平方和
for i in range(0,len(sales)):
    Syy=Syy+((sales[i]-y1)*(sales[i]-y1))
print("y的离差平方和为:",Syy)
Sxy=0#(x-x1)(y-y1)的和
for i in range(0,len(temperature)):
    Sxy=Sxy+((temperature[i]-x1)*(sales[i]-y1))
print("x和y的离差积和为:",Sxy)
#求y=ax+b的系数a和截距b
a=Sxy/Sxx
b=y1-a*x1
print("销售的回归方程的系数为:",a)
print("销售的回归方程的截距为:",b)
print("回归方程为y=",a,"x+",b)
#求预测值sales1
sales1=[]
for i in range(0,len(temperature)):
    sales1.append(a*temperature[i]+b)
print(sales1)
#求预测值的平均值y2
y2=0
sumy2=0
for i in range(len(sales1)):
    sumy2=sumy2+sales1[i]
print(sumy2)
y2=sumy2/len(sales1)
print("预测销售值的平均值为:",y2)
#求预测值-平均值的和y11_y2
y11_y2=0
for i in range(0,len(sales1)):
   y11_y2=y11_y2+(sales1[i]-y2)
print("预测销售值-预测销售平均值的和为:",y11_y2)
#求实际值-预测值的和y_y2的平方和
Syy1=0
for i in range(0,len(sales1)):
    Syy1=Syy1+((sales1[i]-y2)*(sales1[i]-y1))
print("预测销售值y11的离差平方和为:",Syy1)
#求(y-y1)(y11-y2)乘积的和
Syy2=0
for i in range(0,len(sales)):
    Syy2=Syy2+((sales[i]-y1)*(sales1[i]-y2))
print("销售值y和预测销售值y11的离差积和为:",Syy2)
#计算判定系数R2
R=Syy2/((Syy1*Syy)**0.5)
R2=R*R
print("判定系数R2为:",R2)
#求判定系数R2的另一种方法
#R2=1-(Se/Syy)
#print("判定系数R2为:",R2)
#利用seaborn分析置信带
data1=pd.read_excel('D:\红茶数据.xlsx')
sns.pairplot(data1,x_vars=['X'],y_vars=['Y'], height=3, aspect=0.8, kind='reg')
plt.show()

以上就是本实验的全部代码,不过,学长建议大家分步运行,直接运行代码,不会懂得计算的由来,分步运行可以更好的了解代码的书写,并且可以更容易理解线性回归的原理!
以上就是我们本次博客的全部内容,希望通过本次博客,大家可以更好的理解线性回归方程的求解原理,如果一步一步求解过来,这也可以让我们知道,那些求解线性方程的包是如何编写的,原理就是和这个一样的哦!
遇到问题的小伙伴记得在评论区留言,学长给你们耐心解答!
陈一月的又一天编程岁月^ _ ^

发布了59 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42451251/article/details/104996552