第一阶段-第2天-数学基础:平均值、平方、直线方程

今日目标

  1. 理解平均值的计算
  2. 理解平方的含义
  3. 掌握直线方程 y = wx + b
  4. 能在纸上画出不同w和b对应的直线

学习内容

1. 平均值

平均值的公式:

平均值 = 所有数之和 ÷ 数的个数

Python实现:

数据 = [1, 3, 5, 7, 9]
总和 = 0
for x in 数据:
    总和 += x
平均值 = 总和 / len(数据)
print(平均值)  # 输出 5.0

更简洁的写法:

数据 = [1, 3, 5, 7, 9]
平均值 = sum(数据) / len(数据)
print(平均值)  # 输出 5.0

2. 平方

平方的含义:一个数乘以它自己。

x = 5
平方 = x * x
print(平方)  # 输出 25

为什么模型训练要用平方?

假设真实值是5,模型预测值是3,误差是2。

如果用绝对值:|3 - 5| = 2

如果用平方:(3 - 5)² = (-2)² = 4

平方的好处:

  • 负数变正数,不会抵消
  • 大误差惩罚更重(误差越大,平方后差距越大)
  • 求导方便

举例对比:

误差绝对值平方
111
224
339
1010100

可以看到,平方对大误差的惩罚明显更重。

3. 直线方程 y = wx + b

这是所有线性模型的根基。

  • w(权重/斜率):x每增加1,y增加多少
  • b(偏置/截距):当x=0时,y的值

示例:

def 直线方程(x, w, b):
    """计算直线上的点"""
    return w * x + b

# w=2, b=1 时
for x in range(5):
    y = 直线方程(x, 2, 1)
    print(f"x={x}, y={y}")

输出:

x=0, y=1
x=1, y=3
x=2, y=5
x=3, y=7
x=4, y=9

4. 可视化理解w和b的作用

import matplotlib.pyplot as plt

x_values = [0, 1, 2, 3, 4, 5]

# 不同的w
plt.figure(figsize=(12, 5))

plt.subplot(1, 2, 1)
for w in [0.5, 1, 2, 3]:
    y = [w * x for x in x_values]
    plt.plot(x_values, y, label=f"w={w}, b=0")
plt.xlabel("x")
plt.ylabel("y")
plt.title("不同w的效果(b=0)")
plt.legend()
plt.grid(True)

# 不同的b
plt.subplot(1, 2, 2)
for b in [-2, 0, 2, 4]:
    y = [1 * x + b for x in x_values]
    plt.plot(x_values, y, label=f"w=1, b={b}")
plt.xlabel("x")
plt.ylabel("y")
plt.title("不同b的效果(w=1)")
plt.legend()
plt.grid(True)

plt.tight_layout()
plt.savefig("/tmp/w_b_visualization.png")
print("图表已保存到 /tmp/w_b_visualization.png")

今日练习

练习1:计算平均值

scores = [85, 92, 78, 95, 88]

# 方法1:手动计算
total = 0
for s in scores:
    total += s
avg1 = total / len(scores)

# 方法2:用sum函数
avg2 = sum(scores) / len(scores)

print(f"平均分:{avg1}")
print(f"验证:{avg2}")

练习2:计算均方误差

真实值 = [1, 3, 5, 7, 9]
预测值 = [1.5, 2.8, 5.2, 6.9, 9.5]

# 计算每个预测的误差平方
误差平方列表 = []
for 真实, 预测 in zip(真实值, 预测值):
    误差 = 预测 - 真实
    误差平方 = 误差 ** 2
    误差平方列表.append(误差平方)
    print(f"真实={真实}, 预测={预测}, 误差={误差:.2f}, 误差平方={误差平方:.2f}")

# 计算均方误差
mse = sum(误差平方列表) / len(误差平方列表)
print(f"\n均方误差(MSE):{mse:.4f}")

练习3:画直线

# 在纸上或代码中,画出以下三条直线,观察它们的区别
# 1. y = 0*x + 1  (水平线)
# 2. y = 1*x + 0  (45度斜线)
# 3. y = 2*x + 1  (更陡的斜线)

for w, b in [(0, 1), (1, 0), (2, 1)]:
    print(f"\nw={w}, b={b} 时:")
    for x in range(5):
        y = w * x + b
        print(f"  x={x}, y={y}")

验收标准

  • 能手动计算一组数据的平均值
  • 能解释为什么用平方而不是绝对值
  • 能说出w和b分别控制直线的什么特性
  • 给定w和b,能计算出对应直线上任意点的坐标

下节课预告

下节课将学习数据准备:如何组织训练数据、特征与标签的概念。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值