吴恩达机器学习课程实验:线性回归模型入门(课后实验)

一、实验目标

在本实验中,你将学习:

  • 实现基于单变量的线性回归模型
  • 理解模型参数 w(权重)和 b(偏置)的作用
  • 使用训练好的模型进行房价预测

二、问题陈述

我们将使用课程中的房价预测例子:

面积 (1000 sqft) 价格 (1000s of dollars)
1.0 300

| 2.0 | 500 |

通过这两个数据点,我们想要拟合一条直线(线性回归模型),然后用它来预测其他面积的房价,比如1200平方英尺的房子。

三、环境准备

3.1 安装依赖库

3.1.1、在PycharmProjects里面创建test.ipynb文件

bash 复制代码
pip install numpy matplotlib

3.2 导入库

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

四、实验步骤

4.1 创建训练数据集

python 复制代码
# x_train: 房屋面积(单位:1000平方英尺)
# y_train: 房屋价格(单位:1000美元)
x_train = np.array([1.0, 2.0])
y_train = np.array([300.0, 500.0])

print(f"x_train = {x_train}")
print(f"y_train = {y_train}")

运行结果:

复制代码
x_train = [1. 2.]
y_train = [300. 500.]

4.2 查看训练样本数量

python 复制代码
print(f"x_train.shape: {x_train.shape}")
m = x_train.shape[0]
print(f"训练样本数量是: {m}")

运行结果:

复制代码
x_train.shape: (2,)
训练样本数量是: 2

4.3 绘制数据点

python 复制代码
plt.scatter(x_train, y_train, marker='x', c='r')
plt.title("房价数据")
plt.ylabel('价格 (千美元)')
plt.xlabel('面积 (千平方英尺)')
plt.show()

输出图像:

图中显示了两个红色的叉号,分别代表(1.0, 300)和(2.0, 500)两个数据点。

4.4 定义线性回归模型函数

线性回归模型公式为:f_wb(x) = w * x + b

python 复制代码
def compute_model_output(x, w, b):
    """
    计算线性模型的预测值
    
    参数:
      x (ndarray (m,)): 包含m个样本的数据
      w, b (scalar)    : 模型参数
    
    返回:
      y (ndarray (m,)): 预测值
    """
    m = x.shape[0]
    f_wb = np.zeros(m)
    for i in range(m):
        f_wb[i] = w * x[i] + b
    return f_wb

4.5 尝试不同的参数

我们先尝试 w = 100, b = 100,看看这条直线是否适合我们的数据:

python 复制代码
w = 100
b = 100
tmp_f_wb = compute_model_output(x_train, w, b)

plt.plot(x_train, tmp_f_wb, c='b', label='我们的预测')
plt.scatter(x_train, y_train, marker='x', c='r', label='实际数据')
plt.title("房价预测 (w=100, b=100)")
plt.ylabel('价格 (千美元)')
plt.xlabel('面积 (千平方英尺)')
plt.legend()
plt.show()

输出图像:

可以看到,蓝色直线并没有穿过两个红色数据点,说明参数 w=100, b=100 不合适。

4.6 找到合适的参数

通过计算斜率:

  • 斜率 = (500 - 300) / (2 - 1) = 200
  • 代入第一个点:300 = 200 × 1 + b → b = 100

所以正确答案是 w = 200, b = 100。

python 复制代码
w = 200
b = 100
tmp_f_wb = compute_model_output(x_train, w, b)

plt.plot(x_train, tmp_f_wb, c='b', label='我们的预测')
plt.scatter(x_train, y_train, marker='x', c='r', label='实际数据')
plt.title("房价预测 (w=200, b=100)")
plt.ylabel('价格 (千美元)')
plt.xlabel('面积 (千平方英尺)')
plt.legend()
plt.show()

输出图像:

现在蓝色直线完美地穿过了两个红色数据点,说明我们找到了合适的参数。

4.7 使用模型进行预测

预测1200平方英尺(即1.2千平方英尺)的房价:

python 复制代码
w = 200
b = 100
x_i = 1.2
price = w * x_i + b

print(f"预测价格: ${price:.0f} 千美元")

运行结果:

复制代码
预测价格: $340 千美元

五、实验总结

通过本实验,你学到了:

知识点 说明
线性回归模型 建立特征(面积)与目标(价格)之间的线性关系
模型参数 w(权重)和 b(偏置),通过训练数据来拟合
模型预测 参数确定后,可以用模型对新数据进行预测

六、完整代码

以下是本实验的完整代码(可直接复制运行):

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 1. 创建训练数据
x_train = np.array([1.0, 2.0])
y_train = np.array([300.0, 500.0])

# 2. 定义模型函数
def compute_model_output(x, w, b):
    m = x.shape[0]
    f_wb = np.zeros(m)
    for i in range(m):
        f_wb[i] = w * x[i] + b
    return f_wb

# 3. 找到合适的参数 w=200, b=100
w = 200
b = 100

# 4. 计算预测值并绘图
tmp_f_wb = compute_model_output(x_train, w, b)

plt.plot(x_train, tmp_f_wb, c='b', label='预测')
plt.scatter(x_train, y_train, marker='x', c='r', label='实际数据')
plt.title("房价预测")
plt.ylabel('价格 (千美元)')
plt.xlabel('面积 (千平方英尺)')
plt.legend()
plt.show()

# 5. 预测1200平方英尺的房价
x_i = 1.2
price = w * x_i + b
print(f"预测价格: ${price:.0f} 千美元")

七、思考题

问题:三个数据点 (1,300)、(2,500)、(3,700) 时,w 和 b 应该是多少?

计算斜率(任选两点):

用 (1,300) 和 (2,500):

w = (500-300)/(2-1) = 200

代入求 b:

300 = 200×1 + b → b = 100

验证第三个点:

x=3:200×3+100 = 700 ✅

答案:w=200, b=100

结论:这三个点恰好在同一条直线上,所以存在一条直线同时穿过三个点。

如果三个点不在同一条直线上怎么办?

例如 (1,300)、(2,500)、(3,650):

用前两个点算出 w=200, b=100

但 x=3 时预测值为 700,实际为 650,误差为 50

这时没有任何一条直线能同时穿过三个点。机器学习要做的就是找到一条误差最小的直线,这正是梯度下降算法要解决的问题。

八、实验结论

知识点 说明

线性回归模型 建立特征与目标之间的线性关系:f(x) = w×x + b

w(权重) 控制直线的斜率,决定每单位特征变化对预测值的影响

b(偏置) 控制直线的截距,决定特征为0时的基准预测值

模型拟合 两个数据点可以唯一确定一条直线,需要找到正确的 w 和 b

模型预测 参数确定后,可以对新数据进行预测

相关推荐
乌恩大侠11 小时前
从 5G 通信到厘米级感知:基于 NVIDIA Aerial、SRS 与 UL-TDOA 构建 6G 无线定位实验平台
人工智能·5g·电信大模型
微尘hjx18 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
云和数据.ChenGuang18 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
西西木科技丨Shopify开发机构18 小时前
CalDigit TS4案例:AI产品图的Shopify整站接入与验收
人工智能·shopify·独立站
2601_9654488719 小时前
AI视频制作:做系列节气民俗视频音色不统一,AI 音色克隆省事的方法
人工智能·机器学习·音视频
美狐美颜SDK开放平台19 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
HRaitest19 小时前
秋招技术岗招聘提效:三类 AI 招聘方案的技术底层与选型逻辑
大数据·人工智能·求职招聘·ai-native
天远数科19 小时前
零信任架构实战:基于天远企业股权变更构建自动化商业银行对公授信存续期股权异动与资产抽逃预警网关
运维·人工智能·架构·自动化
车软学堂19 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
海盗123420 小时前
AI 新闻日报 10-28:Atria Dawn 完整版开源、Cursor Agent SDK 转正、Genie 4 实时世界模型
人工智能·机器人·开源·人工智能aigc