目录
01 学习目标
学习建立一元回归模型
02 实现工具
(1)代码运行环境
Python语言,Jupyter notebook平台
(2)所需模块
NumPy,Matplotlib
03 问题陈述
问题需求为:根据二手房交易平台已成交的既有数据,对刘先生的房价进行预测。
便于操作,示例的既有数据简化为两个数据点:
1套100的房子售价300万元,另一套200的房子售价500万元。
以上两个成交数据称为“数据集”或“训练数据库”。
我们的任务是预测刘先生的房子价格,其房子面积为120。
04 建立模型
(1)导入所需模块
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('./deeplearning.mplstyle')
(plt.style.use是Matplotlib库中的一个函数,用于设置当前图表的样式。plt.style.use函数接受一个样式文件的路径或样式名称作为参数,然后将当前图表的样式设置为指定的样式。deeplearning.mplstyle为课程中使用的样式文件)
(2)读取“数据集”,创建变量
(注:此处因数据较少未采用读取的形式,而是用numpy直接创建一维数组)
# x_train 是输入变量
# y_train 是目标变量
x_train = np.array([100, 200])
y_train = np.array([300.0, 500.0])
print(f"x_train = {x_train}")
# m 是训练样本的数量
m = len(x_train)
print(f"y_train = {y_train}")
print(f"Number of training examples is: {m}")
运行以上代码,结果为:
x_train = [100. 200.]
y_train = [300. 500.]
Number of training examples is: 2
(3)绘出数据图
# 采用散点图绘出数据
plt.scatter(x_train, y_train, marker='x', c='r')
# 设置标题
plt.title("Housing Prices")
# y-axis label
plt.ylabel('Price (w)')
# x-axis label
plt.xlabel('Size (m^2)')
plt.show()
(注:matplotlib默认不识别汉字,故图中未添加汉字。如需显示需导入字体并在属性中设置)
运行以上代码,结果为:
(4)构建线性回归模型
一元线性回归模型的函数形式如下:
模型参数赋(初始)值:
w = 1
b = 100
计算函数值
对于样本数量较大时,逐个计算函数值工作量大,因此采用定义函数的形式计算:
def compute_model_output(x, w, b):
"""
Computes the prediction of a linear model
Args:
x (ndarray (m,)): Data, m examples
w,b (scalar) : model parameters
Returns
y (ndarray (m,)): target values
"""
m = x.shape[0]
f_wb = np.zeros(m)
for i in range(m):
f_wb[i] = w * x[i] + b
return f_wb
调用以上函数得到的计算结果f_wb为一维数组
绘出“数据集”真实值和线性回归模型 :
tmp_f_wb = compute_model_output(x_train, w, b,)
# 以折线形式绘图
plt.plot(x_train, tmp_f_wb, c='b',label='Our Prediction')
# 以散点图形式绘图
plt.scatter(x_train, y_train, marker='x', c='r',label='Actual Values')
# Set the title
plt.title("Housing Prices")
# Set the y-axis label
plt.ylabel('Price (w)')
# Set the x-axis label
plt.xlabel('Size (m^2)')
plt.legend()
plt.show()
运行以上代码,结果为:
上图中红色点为“数据集”中的真实数据点,蓝色线为我们建立的线性回归模型。
(5)模型参数优化
根据上图可知,线性回归模型与真实值偏差较大,我们可以通过试算确定参数w=2,b=100。至此,我们完成了模型建立的任务。
(实际上参数值要经大量样本拟合、优化后确定,后续涉及)
05 开始预测
现在我们采用第4步建立的线性回归模型,对刘先生的房价进行预测:
w = 2
b = 100
x_i = 120
house_price = w * x_i + b
print(f"刘先生的房子面积是{x_i}平方米,预估售价是{house_price} 万元")
运行以上代码,结果为:
刘先生的房子面积是120平方米,预估售价是340 万元
06 总结
(1)模型的建立本质为参数的优化和确定过程
(2)在以上示例中,房子面积称为“特征”,房子售价称为“目标”