线性回归模型

一元线性回归模型

定义: 运用一条直线,近似地表示自变量x与因变量y之间的关系
公式: Y=aX+b
在这里插入图片描述
问题: 以下那条直线更能代表x和y的关系?
在这里插入图片描述
问题: 如何理解线与散点之间的关系?
在这里插入图片描述
目标:一条直线使得实际y与预测y之间的距离整体最短(一条直线使得全局误差最小)
在这里插入图片描述
线性回归模型损失函数:
在这里插入图片描述
线性回归模型参数优化目标:

在这里插入图片描述

最小二乘法

用最小二乘法求解上述损失函数的最小值(二次函数的最小值)

关于参数a与b的损失函数:
在这里插入图片描述

优化目标:
在这里插入图片描述

优化转化:求偏导并令一阶导数为0
在这里插入图片描述

代入自变量x和因变量y,即可求得a和b的值。

多元线性回归模型

公式:
在这里插入图片描述
损失函数:
在这里插入图片描述

矩阵求解:

假设 x0 = 1 ,a0=b, 则多元回归模型公式可变为:
在这里插入图片描述
公式的向量转化:

  • 将 x0,x1,…,xn 表示成为一个长度为n+1 的向量X (列向量)
  • 将参数 a0,a1,…,an表示成为一个长度为n+1的向量A(列向量)

则模型公式可以转化为:
在这里插入图片描述
假设建模数据集有m条样本:

  • 将自变量 [x00,x01,…,x0n] … [xm0,xm1,…,xmn] 表示成为一个长度为 m*(n+1) 的矩阵X
  • 将y1,y2,…,ym表示成为一个长度为m的列向量Y
  • 将参数a0,a1,…,an 表示成为一个长度为 n+1 的列向量A

则多元线性回归的损失函数可转化为:
在这里插入图片描述
对参数向量A求导:
在这里插入图片描述
解出A:
在这里插入图片描述

numpy实现多元线性回归模型

下面通过一个示例,来实现多元线性回归模型参数矩阵A的求解过程,代码示例用到的数据集:https://download.csdn.net/download/d1240673769/20910882

1.加载数据
import pandas as pd
import numpy as np

# 读取样例数据,房价数据
df = pd.read_csv('sample_data_sets.csv')
print(df.columns)
print(df.shape)
df.head()

在这里插入图片描述

2.提取自变量
# 提取自变量,以area和daypop为例,即房屋面积和房屋周边日均人口
x_df = df[['area','daypop']].reset_index(drop = True)
print(x_df.shape)
print(x_df.head())

在这里插入图片描述

3.提取因变量
# 提取因变量,房屋价格作为因变量
y_df = df['average_price'].reset_index(drop = True)
print(y_df.shape)
print(y_df.head())

在这里插入图片描述

4.添加x0列
# 令x0 = 1
# 方便之后将参数b转换成x0*a0
x_df['x0'] = 1  # 定义新的一列,x0 并赋值为1
print(x_df.shape)
print(x_df.head())

在这里插入图片描述

5.将自变量、因变量转换成矩阵形式
# 将自变量、因变量转换成矩阵形式
x_array = np.array(x_df)   # 将df转化为array
xmatrix = np.mat(x_array) # 将array转化为矩阵

#将y转换成列为1的矩阵:
y_array = np.array(y_df)   
ymatrix = np.mat(y_array).T   # np.mat(y_array) 为行向量,转置后为列向量
print(ymatrix.shape)
6.计算X与X的转置的乘积
# 计算X与X的转置的乘积
xTx = xmatrix.T * xmatrix
print(xTx.shape)
print(xTx)

在这里插入图片描述

7.计算xTx的逆矩阵
# 判断xTx是否是非奇异的
if np.linalg.det(xTx) == 0:
    print('对称矩阵非奇异')
else:
    print('矩阵可逆')

# 如果对称矩阵不是非奇异的
# 计算xTx的逆矩阵
xTxI = xTx.I
print(xTxI)

在这里插入图片描述

8.估计参数
A = xTxI * xmatrix.T * ymatrix
print(A)
print(A.shape)

在这里插入图片描述

8.使用参数A计算预测值y
# 使用参数A计算预测值y
y_predict = xmatrix*A
#print(y_predict)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jepson2017

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

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

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

打赏作者

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

抵扣说明:

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

余额充值