前期知识回顾
演示实例 – 二元线性回归
实例:房价由面积和房间数两个因素共同来决定。
多元线性回归函数的实现分为四步。
第一步:加载样本数据。
第二步:数据处理,将加载的样本构造为计算解析解所需要的形式。
第三步:求解模型参数。使用解析解公式,计算参数向量 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 万元
"""