分析一元线性回归方程的的待定系数a和判定系数R2的分解步骤目录
- 一、运行jupyter notebook,搭建python环境
- 二、本次内容所需要的表格数据
- 三、实验原理
- 四、编辑python代码,分步骤解析线性回归方程
- 1、导入我们所需要的python库
- 2、为自变量和因变量赋值
- 3、求自变量温度的和及平均值
- 4、求因变量销售量的和及平均值
- 5、求(温度-温度平均值)的和
- 6、求(销售量-销售量平均值)的和
- 7、求(x的离差平方和)
- 8、求y的离差平方和
- 9、求x和y的离差积和
- 11、求y=ax+b的系数a和截距b,以及回归方程
- 12、求自变量温度对应的所有预测值sales1
- 13、求预测值sales1的平均值y2
- 14、求预测销售值-预测销售平均值的和
- 15、求预测销售值sales1的离差平方和
- 16、求销售值y和预测销售值y11的离差积和
- 17、求实际值-预测值的平方和Se
- 18、计算判定系数R2
- 19、求判定系数R2的另一种方法
- 20、进行线性回归曲线图的模拟,并利用seaborn库标记出置信带
- 五、python的完整实验代码
对于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()
以上就是本实验的全部代码,不过,学长建议大家分步运行,直接运行代码,不会懂得计算的由来,分步运行可以更好的了解代码的书写,并且可以更容易理解线性回归的原理!
以上就是我们本次博客的全部内容,希望通过本次博客,大家可以更好的理解线性回归方程的求解原理,如果一步一步求解过来,这也可以让我们知道,那些求解线性方程的包是如何编写的,原理就是和这个一样的哦!
遇到问题的小伙伴记得在评论区留言,学长给你们耐心解答!
陈一月的又一天编程岁月^ _ ^