解析法实现多元线性回归的实例

前期知识回顾

在这里插入图片描述

演示实例 – 二元线性回归

实例:房价由面积和房间数两个因素共同来决定。

多元线性回归函数的实现分为四步。
在这里插入图片描述
第一步:加载样本数据。
在这里插入图片描述
第二步:数据处理,将加载的样本构造为计算解析解所需要的形式。
在这里插入图片描述
第三步:求解模型参数。使用解析解公式,计算参数向量 W 的值,得到多元回归模型。
在这里插入图片描述
第四步:预测房价,使用得到的模型来估计房价。

与一元线性回归的例子相比,这里增加了第二步。这也是大多数学习任务中都必须的一步,因为原始的数据集中的数据可能和模型需要的输入数据模型不太一致,因此需要进行数据处理。

使用NumPy实现

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 第一步:加载样本数据
# x1 是商品房面积
x1 = np.array([137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00, 114.00,
               106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21])
# x2 是商品房房间数
x2 = np.array([3, 2, 2, 3, 1, 2, 3, 2,
               2, 3, 1, 1, 1, 1, 2, 2])
# y 是房价
y = np.array([145.00, 110.00, 93.00, 116.00, 65.32, 104.00, 118.00, 91.00,
              62.00, 133.00, 51.00, 45.00, 78.50, 69.65, 75.69, 95.30])

print("x1:", x1.shape)  # (16, )
print("x2:", x2.shape)  # (16, )
print("y:", y.shape)  # (16, )

# 第二步:将输入的原始数据处理为模型所要求的形式
# 在这个例子中, n = 16, m =2, 因此,这个X矩阵应该是一个 16 * 3 的矩阵
x0 = np.ones(len(x1))
X = np.stack((x0, x1, x2), axis=1)  # (16, 3)
print(X)
"""
[[  1.   137.97   3.  ]
 [  1.   104.5    2.  ]
 [  1.   100.     2.  ]
 [  1.   124.32   3.  ]
 [  1.    79.2    1.  ]
 [  1.    99.     2.  ]
 [  1.   124.     3.  ]
 [  1.   114.     2.  ]
 [  1.   106.69   2.  ]
 [  1.   138.05   3.  ]
 [  1.    53.75   1.  ]
 [  1.    46.91   1.  ]
 [  1.    68.     1.  ]
 [  1.    63.02   1.  ]
 [  1.    81.26   2.  ]
 [  1.    86.21   2.  ]]
"""
# 将数组 Y 表示为列向量的形式
Y = np.array(y).reshape(-1, 1)
print(Y)  # (16, 1)
"""
[[145.  ]
 [110.  ]
 [ 93.  ]
 [116.  ]
 [ 65.32]
 [104.  ]
 [118.  ]
 [ 91.  ]
 [ 62.  ]
 [133.  ]
 [ 51.  ]
 [ 45.  ]
 [ 78.5 ]
 [ 69.65]
 [ 75.69]
 [ 95.3 ]]
"""
# 第三步:求解模型参数 W
# W = (Xt * X) ^ (-1) * Xt * Y

# np.transpose()是求矩阵的转置
Xt = np.transpose(X)  # 计算Xt
# np.matmul()是求矩阵的相乘
# np.linalg.inv()是矩阵的求逆
XtX_1 = np.linalg.inv(np.matmul(Xt, X))  # 计算(Xt * X) ^ (-1)
XtX_1_Xt = np.matmul(XtX_1, Xt)  # 计算(Xt * X) ^ (-1)* Xt
W = np.matmul(XtX_1_Xt, Y)  # 计算(Xt * X) ^ (-1) * Xt * Y

print(W)
"""
[[11.96729093]
 [ 0.53488599]
 [14.33150378]]
"""
W = W.reshape(-1)
print(W)
"""
[11.96729093  0.53488599 14.33150378]
"""
print("多元线性回归方程:")
print("Y=", W[1], "*x1+", W[2], "*x2+", W[0])
"""
Y= 0.5348859949724712 *x1+ 14.331503777673714 *x2+ 11.96729093053445
"""
#  第四步:预测房价,使用得到的模型来估计房价。
print("请输入房屋面积和房间数,预测房屋的销售价格:")
x1_test = int(input("商品房面积:"))
x2_test = int(input("房间数:"))

y_pred = W[1]*x1_test+W[2]*x2_test+W[0]
print("预测价格:", round(y_pred, 2), "万元")
"""
请输入房屋面积和房间数,预测房屋的销售价格:
商品房面积:140
房间数:3
预测价格: 129.85 万元
"""
"""
请输入房屋面积和房间数,预测房屋的销售价格:
商品房面积:140
房间数:4
预测价格: 144.18 万元
"""
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xuechanba

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

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

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

打赏作者

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

抵扣说明:

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

余额充值