赞
踩
某公司近几年来开发的产品利润收益受产品研发成本、管理成本、市场营销成本的影响,公司已有的部分数据存储在分组任务附件“实训项目3 测试数据.xlsx”中。该公司计划在2021年为A产品投入研发经费10万元,管理成本10万元,市场营销成本15万元,请根据公司提供的已有数据,建立回归模型,预测2021年A产品的利润为多少。
实训要求:用代码实现该模型。
通过题目得知因变量为商品利润(设为Y),自变量为:研发成本、市场营销成本(分别设为x1,x2,x3)
先找出因变量和自变量之间存在的关系(即确定回归模型,该题目有多个自变量因此为多元线性回归),再输入2021年的自变量(即预计投入的成本:研发经费10万元,管理成本10万元,市场营销成本15万元),得出2021年产品利润。
①导入使用的库
②读取表格数据
③建立变量(1个因变量,3个自变量)
④建立线性回归模型
⑤求出模型的系数与截距,得到一元线性回归模型方程
⑥方程中输入预测自变量,得出因变量预测值(利润)
import pandas as pd #读取和处理Excel表格 import numpy as np #数组处理 from sklearn.linear_model import LinearRegression #建立线性回归模型 data = pd.read_excel("data3.xlsx") #读取表格 print(data) y = data['商品利润/元'] # 因变量 x1 = data['研发投入/元'] #自变量1 x2 = data['管理成本/元'] #自变量2 x3 = data['市场营销成本/元'] #自变量3 X = pd.DataFrame({'研发投入/元': x1, '管理成本/元': x2, '市场营销成本/元': x3}) Y = y model = LinearRegression().fit(X, Y) A = model.coef_ # 模型系数 B = model.intercept_ #模型截距 print("系数:",A) print("截距:",B) equation = "Y = {:.2f} + {:.2f}*X1 + {:.2f}*X2 + {:.2f}*X3".format(B, A[0], A[1], A[2]) print("多元线性回归方程为:", equation) x1_2021 = 100000 x2_2021 = 100000 x3_2021 = 150000 prediction = model.predict([[x1_2021,x2_2021, x3_2021]]) print("预测结果为:", prediction[0])
与Python中LinearRegression建立线性回归模型的类稍有不同,以下代码块通过求解矩阵系数的方式建立多元线性回归模型
class LinearRegression: #创建一个建立线性回归模型的类
def __init__(self,X,Y): #初始化函数,接收传递的参数值X(自变量矩阵),Y(因变量矩阵)
self.X = X
self.Y = Y
def fit(self): #求解回归系数函数,其求解A
Xt = self.X.T
XtX = np.dot(Xt.self.X)
XtXinv = np.linalg.inv(XtX) #求X^TX得逆
temp = np.dot(XtXinv,Xt)
self.A = np.dot(temp,self.Y)
def predict(self,X): #求预测值,得出A之后传入任意一个X矩阵,都能得到Y
Y = np.dot(X,self.A)
return Y
1.导入Python要使用的库
分别是读取和处理Excel表格的库、数组处理的库、建立线性回归模型的库
import pandas as pd #读取和处理Excel表格
import numpy as np #数组处理
from sklearn.linear_model import LinearRegression #建立线性回归模型
2.读取表格并打印,获取数据
data = pd.read_excel("data3.xlsx") #读取表格
print(data)
3.建立自变量与因变量
y = data['商品利润/元'] # 因变量
x1 = data['研发投入/元'] #自变量1
x2 = data['管理成本/元'] #自变量2
x3 = data['市场营销成本/元'] #自变量3
由于我们是采用求解矩阵系数的方式建立多元线性回归模型的,因此将多个自变量整合到一个字典中,当作矩阵传递给我们自己创建的多元线性回归模型方法
X = pd.DataFrame({'研发投入/元': x1, '管理成本/元': x2, '市场营销成本/元': x3})
Y = y
4.调用函数得到多元线性方程
model = LinearRegression().fit(X, Y) #创建多元线性回归模型
A = model.coef_ # 得到模型系数
B = model.intercept_ #得到模型截距
print("系数:",A)
print("截距:",B)
equation = "Y = {:.2f} + {:.2f}*X1 + {:.2f}*X2 + {:.2f}*X3".format(B, A[0], A[1], A[2])
print("多元线性回归方程为:", equation) #打印多元线性回归方程
5.输入预测自变量,得出因变量预测值(利润)
x1_2021 = 100000
x2_2021 = 100000
x3_2021 = 150000
prediction = model.predict([[x1_2021,x2_2021, x3_2021]])
print("预测结果为:", prediction[0])
我们知道多元线性回归方程的形式如下(a为常数项,b为偏回归系数)
若我们带入多组样本,可以得到方程组的形式:
由线性代数的知识可知,我们可以采用矩阵将方程组转化为以下形式:
因此我们的求解思路:带入多组数据测量x的不同组合下的y值,求解A,即为建模过程。(计算过程通过代码交给计算机去进行计算)
通过线性代数数学知识进行推导,可以得到矩阵系数A的求解公式为:
在建立多元线性回归模型的类中,我们创建了三个函数。
__ init __(self,X,Y):这是初始化函数,负责接收传递的参数值X(自变量矩阵),Y(因变量矩阵)
fit() :这是根据系数A的求解公式创建的求解矩阵系数A函数
predict(self,X) : 当我们得到矩阵系数A之后,向矩阵A传入任意一个X矩阵,都能得到Y矩阵
class LinearRegression: #创建一个建立线性回归模型的类
def __init__(self,X,Y): #初始化函数,接收传递的参数值X(自变量矩阵),Y(因变量矩阵)
self.X = X
self.Y = Y
def fit(self): #求解回归系数函数,其求解A
Xt = self.X.T
XtX = np.dot(Xt.self.X)
XtXinv = np.linalg.inv(XtX) #求X^TX得逆
temp = np.dot(XtXinv,Xt)
self.A = np.dot(temp,self.Y)
def predict(self,X): #求预测值,得出A之后传入任意一个X矩阵,都能得到Y
Y = np.dot(X,self.A)
return Y
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。