1)、主要实现代码的表格内容:
上面的表格去掉状态栏。左边为X温度,右边为Y,红茶的销售量
2)、画出置信带所用的数据表格如下:
相比于上面,只加了变量蓝,X代表温度,Y代表销售量!
1)、实验原理如下的解析步骤
2)、步骤2
3)、步骤3
4)、步骤4
5)、步骤5
6)、步骤6
7)、步骤7
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)、运行结果如下:
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)、运行结果如下:
1)、python代码如下:
x_x1=0#x-x1的值的和
for i in range(0,len(temperature)):
x_x1=x_x1+(temperature[i]-x1)
print("温度-温度平均值的和为:",x2)
2)、运行结果如下:
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)、运行结果如下:
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)、运行结果如下:
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)、运行结果如下:
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)、运行结果如下:
1)、python代码如下:
#求y=ax+b的系数a和截距b
a=Sxy/Sxx
b=y1-a*x1
print("销售的回归方程的系数为:",a)
print("销售的回归方程的截距为:",b)
print("回归方程为y=",a,"x+",b)
2)、运行结果如下:
上面结果计算的由来就是如下原理的应用
1)、python代码如下:
#求预测值sales1
sales1=[]
for i in range(0,len(temperature)):
sales1.append(a*temperature[i]+b)
print(sales1)
2)、运行结果如下:
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)、运行结果如下:
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)、运行结果如下:
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)、运行结果如下:
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)、运行结果如下:
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、计算判定系数R21)、python代码如下:
#计算判定系数R2
R=Syy2/((Syy1*Syy)**0.5)
R2=R*R
print("判定系数R2为:",R2)
2)、运行结果如下:
1)、python代码如下:
#求判定系数R2的另一种方法
R2=1-(Se/Syy)
print("判定系数R2为:",R2)
2)、运行结果如下:
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)、运行结果如下:
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()
以上就是本实验的全部代码,不过,学长建议大家分步运行,直接运行代码,不会懂得计算的由来,分步运行可以更好的了解代码的书写,并且可以更容易理解线性回归的原理!
以上就是我们本次博客的全部内容,希望通过本次博客,大家可以更好的理解线性回归方程的求解原理,如果一步一步求解过来,这也可以让我们知道,那些求解线性方程的包是如何编写的,原理就是和这个一样的哦!
遇到问题的小伙伴记得在评论区留言,学长给你们耐心解答!
陈一月的又一天编程岁月^ _ ^