【机器学习3】通过excel,python-矩阵求解法,python-sklearn 三种方法做重回归分析

1.Excel做重回归分析

1.直接把数据粘贴进去
(其中一列全为1,是为了方便用矩阵求偏回归系数)
在这里插入图片描述
2.利用插入散点图工具画出散点图
(可以发现,两个变量都会影响到营业额)
在这里插入图片描述
3.借助矩阵求偏回归系数
在这里插入图片描述
当然,这样复杂的计算我们交给excel去做,上图的矩阵乘法我们转化成excel里面的计算函数就是:
在这里插入图片描述
求出矩阵的偏回归系数,然后就可以书写出冲回归方程:
在这里插入图片描述
4.确认重回归方程的精度
在这里插入图片描述
当然,这里我们也可以用excel来算,把上面公式转换成excel计算函数就是:
在这里插入图片描述
直接得到R和R²:
在这里插入图片描述

2.python-矩阵求解法做重回归分析

直接上代码:

#利用线性代数的矩阵求解法求解多元线性回归方程的系数
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
data = np.genfromtxt("/myjupyter\漫画数据1.csv",delimiter=",")
X1=data[1:11,1]#自变量温度
X2=data[1:11,2]#因变量销售量
Y=data[1:11,4]#自变量温度
#将因变量赋值给矩阵Y1
Y1=np.array([Y]).T
#为自变量系数矩阵X赋值
X11=np.array([X1]).T
X22=np.array([X2]).T
A=np.array([[1],[1],[1],[1],[1],[1],[1],[1],[1],[1]])#创建系数矩阵
B=np.hstack((A,X11))#将矩阵a与矩阵X11合并为矩阵b
X=np.hstack((B,X22))#将矩阵b与矩阵X22合并为矩阵X
#求矩阵X的转置矩阵
X_=X.T
#求矩阵X与他的转置矩阵的X_的乘积
X_X=np.dot(X_,X)
#求矩阵X与他的转置矩阵的X_的乘积的逆矩阵
X_X_=np.linalg.inv(X_X)
#求解系数矩阵W,分别对应截距b、a1、和a2
W=np.dot(np.dot((X_X_),(X_)),Y1)
b=W[0][0]
a1=W[1][0]
a2=W[2][0]
print("系数a1=",a1)
print("系数a2=",a2)
print("截距为=",b)
print("多元线性回归方程为:y=",a1,"X1+",a2,"X2+",b)
#画出线性回归分析图
data1=pd.read_excel('/myjupyter\漫画数据1.xls')
sns.pairplot(data1, x_vars=['areax1','disx2'], y_vars='gety', height=3, aspect=0.8, kind='reg')  
plt.show() 
#求月销售量Y的和以及平均值y1
sumy=0#因变量的和
y1=0#因变量的平均值
for i in range(0,len(Y)):
    sumy=sumy+Y[i]
y1=sumy/len(Y)
#求月销售额y-他的平均值的和
y_y1=0#y-y1的值的和
for i in range(0,len(Y)):
    y_y1=y_y1+(Y[i]-y1)
print("销售量-销售量平均值的和为:",y_y1)
#求预测值sales1
sales1=[]
for i in range(0,len(Y)):
    sales1.append(a1*X1[i]+a2*X2[i]+b)
#求预测值的平均值y2
y2=0
sumy2=0
for i in range(len(sales1)):
    sumy2=sumy2+sales1[i]
y2=sumy2/len(sales1)
#求预测值-平均值的和y11_y2
y11_y2=0
for i in range(0,len(sales1)):
   y11_y2=y11_y2+(sales1[i]-y2)
print("预测销售值-预测销售平均值的和为:",y11_y2)
#求月销售额y-他的平均值的平方和
Syy=0#y-y1的值的平方和
for i in range(0,len(Y)):
    Syy=Syy+((Y[i]-y1)*(Y[i]-y1))
print("Syy=",Syy)
#求y1-y1平均的平方和
Sy1y1=0
for i in range(0,len(sales1)):
    Sy1y1=Sy1y1+((sales1[i]-y2)*(sales1[i]-y2))
print("Sy1y1=",Sy1y1)
#(y1-y1平均)*(y-y平均)
Syy1=0
for i in range(0,len(sales1)):
    Syy1=Syy1+((Y[i]-y1)*(sales1[i]-y2))
print("Syy1=",Syy1)
#求R
R=Syy1/((Syy*Sy1y1)**0.5)
R2=R*R
print("判定系数R2=",R2)

结果如图:
在这里插入图片描述

3.python借助sklearn做重回归分析

直接上代码:

import pandas as pd
import seaborn as sns  
import matplotlib.pyplot as plt
from sklearn import linear_model
%matplotlib inline
data=pd.read_excel('/myjupyter\漫画数据1.xls')
#print(data.head())
#print(data.tail())   
X=data[['areax1','disx2']]   
y=data['gety']    
y=data.gety   
model = linear_model.LinearRegression()
model.fit(X,y)
print("X1=",model.coef_[0])
print("X2=",model.coef_[1])
print("截距为=",model.intercept_)
print("多元线性回归方程为:y=",model.coef_[0],"X1+",model.coef_[1],"X2+",model.intercept_)
sns.pairplot(data, x_vars=['areax1','disx2'], y_vars='gety', height=3, aspect=0.8, kind='reg')  
plt.show()  

结果如图:
在这里插入图片描述

4.三种结果对比

①Excel

y=41.53x1-0.34x2+65.32
R²=0.945235213

②自行推断

y=41.51X1-0.34X2+ 65.32
R2= 0.94523585

③借助sklearn

y= 41.51X1-0.34X2+ 65.32

参考链接:https://blog.csdn.net/qq_42451251/article/details/105019128
参考链接:https://blog.csdn.net/qq_42451251/article/details/104974718

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值