机器学习:多元线性回归公式推导及代码实战

什么是多元线性回归

要了解这个问题,我们首先想到一元线性回归f(x)=wx+b,一元线性回归是一个主要影响因素作为自变量来解释因变量的变化,在现实问题研究中,因变量的变化往往受几个重要因素的影响,此时就需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,这就是多元回归亦称多重回归。当多个自变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归。
f ( x i ) f(x_i) f(xi)为因变量, x 1 , x 2 , . . . x k 为 自 变 量 , x_1,x_2,...x_k 为自变量, x1,x2,...xk,则多元线性回归可以表示为:
f ( x i ) = w 1 x 1 + w 2 x 2 + . . . w k x k + b f(x_i)=w_1x_1+w_2x_2+...w_kx_k+b f(xi)=w1x1+w2x2+...wkxk+b

多元线性回归公式推导

向量表达形式

用向量形式写成: f ( x i ) = w T x i + b , f(x_i)=w^Tx_i+b, f(xi)=wTxi+b,
其 中 w = [ w 1 , w 2 , . . . w k ] , x = [ x 1 , x 2 . . . x k ] 均 为 列 向 量 其中w=[w_1,w_2,...w_k],x=[x_1,x_2...x_k]均为列向量 w=[w1,w2,...wk],x=[x1,x2...xk]
w T 表 w 的 转 置 , 即 行 向 量 。 w^T表w的转置,即行向量。 wTw

推导过程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码实战

数据集

这里有一个循环发电场的数据集,格式为csv,共有1001条记录,每个数据有6列,分别是: PE(输出电力),AT(温度), V(压力), AP(湿度), RH(压强),FL(风力)。我们要得到一个线性的关系,对应PE是label,而AT/V/AP/RH/FL这5个是feature。
部分数据集截图如下:

在这里插入图片描述

1、解析解求解

#用解析解(正规方程)求解多元线性回归代码
import  numpy as np
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

#读数据 数据预处理
data=np.loadtxt("发电厂数据集.csv",delimiter=",",skiprows=1,dtype=np.float32)
#print(data)
#print(data.shape[1])  #shape[0]返回行  shape[1]返回列
index=np.ones((data.shape[0],1))
#print(index)
data=np.hstack((data,index))  #数据集合并全1的列
X=data[:,1:]  #切片
y=data[:,0]
#print(y)

#将数据集分成训练数据和测试数据  X的80%作为训练数据  20%作为测试数据
train_x,text_x,train_y,text_y=train_test_split(X,y,train_size=0.8)
# print(train_x.shape[0])
# print(text_x.shape[0])
#参数(权重)推导出来的解析解(正规方程)的代码
weight=np.dot(np.dot(np.linalg.inv(np.dot(train_x.T,train_x)),train_x.T),train_y)
#print(weight)

#用训练(学习)得到的模型预测
predict=np.dot(text_x,weight)  #得到预测值
# print(predict)

#绘制曲线可视化拟合情况
plt.plot(range(len(text_y)),text_y,c="red",alpha=0.5)  #绘制测试数据的真实值
plt.plot(range(len(text_y)),predict,c="blue",alpha=0.5)  #绘制测试数据的预测值
plt.show()

效果展示

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

sklearn求解

import numpy as np
from sklearn import linear_model
from sklearn.model_selection import  train_test_split
import matplotlib.pyplot as plt
import pickle
#读数据
data = np.loadtxt("发电厂数据集.csv",delimiter=",",skiprows=1,dtype=np.float32)
#分出特征数据X和Y
X=data[:,1:]
Y=data[:,0]
#分割训练数据与测试数据
X_train,X_test,y_train,y_test = train_test_split(X, Y, test_size=0.8)
#使用sklearn线性模型中的线性回归模型
model = linear_model.LinearRegression()
#训练模型
model.fit(X_train,y_train)

# 查看训练好的模型的参数
print(model.coef_)  #系数(权重)
print(model.intercept_)   #截距(偏重)
#模型预测
y_predict=model.predict(X_test)
#可视化看看模型效果
plt.rcParams['font.sans-serif']=["SimHei"]  #支持中文
plt.title("预测值与真实值的散点图")
plt.xlabel("样本ID")
plt.ylabel("Label值")
plt.scatter(np.arange(100),y_test[:100],c="red" )
plt.scatter(np.arange(100),y_predict[:100],c="green")
plt.show()

效果展示:

在这里插入图片描述
至此,我们多元线性回归就已经学完了,喜欢的小伙伴可以一键三连呦。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code-Dragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值