补充:为什么转换时是XW
1 课程概览
本课补充讲解多元线性回归正规方程法中,为什么公式从 $W^TX$ 转换为 $XW$。核心原因在于pandas/Python中没有行的概念,一行数据以列的形式展示,因此需要通过转置使矩阵满足相乘条件。
2 核心概念与定义
- pandas无行概念:在pandas中,数据以列的形式展示,没有行的概念。
- 矩阵相乘条件:A的列数 = B的行数。
- W^TX:一行样本的预测公式。
- XW:多行样本的矩阵形式。
3 算法与模型详解
3.1 一行数据的展示形式
问题:一行数据在pandas中如何展示?
答案:以列的形式展示
说明:
- 虽然是一行数据,但展示时是列的形式
- 一行数据:[面积, 楼层, 位置, ...]
- 展示形式: $$\begin{bmatrix} X_1 \ X_2 \ X_3 \ \vdots \ X_n \end{bmatrix}$$
3.2 权重W的形式
权重W: $$W = \begin{bmatrix} W_1 \ W_2 \ W_3 \ \vdots \ W_n \end{bmatrix}$$
说明:W也是一列数据(系数)
3.3 矩阵相乘条件
问题:$W^TX$ 还是 $XW$?
分析:
- 一行数据X是列向量(n×1)
- 权重W也是列向量(n×1)
- 直接相乘不满足条件(列数≠行数)
解决:W需要转置 $$W^T = [W_1, W_2, ..., W_n] \quad (1 \times n)$$
$$W^TX = [W_1, W_2, ..., W_n] \begin{bmatrix} X_1 \ X_2 \ \vdots \ X_n \end{bmatrix} = W_1X_1 + W_2X_2 + ... + W_nX_n$$
3.4 多行样本的矩阵形式
单行:$h(X_i) = W^TX_i + B$
多行(矩阵形式): $$h(X) = XW + B$$
说明:
- X:所有样本的特征矩阵(m×n)
- W:权重向量(n×1)
- 结果:预测值向量(m×1)
3.5 X0列的作用
问题:为什么补一列X0(全为1)?
答案:为了计算偏置B
说明:
- 原始公式:$Y = W^TX + B$
- 补X0后:$Y = W_0X_0 + W_1X_1 + ... + W_nX_n$
- 其中 $X_0 = 1$,所以 $W_0X_0 = W_0 = B$
- 这样B就被合并到W中,简化计算
3.6 公式转换总结
| 形式 | 公式 | 说明 |
|---|---|---|
| 一行样本 | $W^TX + B$ | 单个样本预测 |
| 多行样本 | $XW + B$ | 矩阵形式 |
| 补X0后 | $XW$ | B合并到W中 |
4 数学原理与推导
4.1 一行样本
$$h(X_i) = W^TX_i + B = [W_1, W_2, ..., W_n] \begin{bmatrix} X_{i1} \ X_{i2} \ \vdots \ X_{in} \end{bmatrix} + B$$
4.2 多行样本(矩阵形式)
$$h(X) = XW + B = \begin{bmatrix} X_{11} & X_{12} & ... & X_{1n} \ X_{21} & X_{22} & ... & X_{2n} \ \vdots & \vdots & \ddots & \vdots \ X_{m1} & X_{m2} & ... & X_{mn} \end{bmatrix} \begin{bmatrix} W_1 \ W_2 \ \vdots \ W_n \end{bmatrix} + B$$
4.3 补X0后
$$h(X) = XW = \begin{bmatrix} 1 & X_{11} & ... & X_{1n} \ 1 & X_{21} & ... & X_{2n} \ \vdots & \vdots & \ddots & \vdots \ 1 & X_{m1} & ... & X_{mn} \end{bmatrix} \begin{bmatrix} W_0 \ W_1 \ \vdots \ W_n \end{bmatrix}$$
其中 $W_0 = B$
5 代码示例
import numpy as np
# 单个样本(一行数据,以列形式展示)
X_single = np.array([[2104], [5], [1], [45]]) # 4×1
W = np.array([[0.1], [10], [-1], [-0.5]]) # 4×1
# W^T * X(单行预测)
y_single = W.T.dot(X_single) + 100 # +B
print("单行预测:", y_single)
# 多个样本(矩阵形式)
X_multi = np.array([
[2104, 5, 1, 45],
[1416, 3, 2, 40],
[1534, 3, 2, 30]
]) # 3×4
# X * W(多行预测)
y_multi = X_multi.dot(W) + 100 # +B
print("多行预测:\n", y_multi)
# 补X0列(全为1)
X_b = np.c_[np.ones((3, 1)), X_multi] # 3×5
W_b = np.vstack([[100], W]) # 5×1(B合并到W中)
# X * W(补X0后)
y_final = X_b.dot(W_b)
print("补X0后预测:\n", y_final)
6 重难点与易错提醒
- ❗重点:pandas中没有行的概念,一行数据以列形式展示。
- ❗重点:矩阵相乘条件:A的列数 = B的行数。
- ❗重点:一行样本用 $W^TX$,多行样本用 $XW$。
- ❗重点:补X0列(全为1)是为了将B合并到W中。
- ⚠️易错:混淆 $W^TX$ 和 $XW$ 的使用场景。
- ⚠️易错:忘记补X0列导致B无法计算。
- 💡深入理解:矩阵形式的转换是为了满足相乘条件。
7 课堂问答精选
Q: 为什么一行数据用 $W^TX$,多行数据用 $XW$?
A:
- 一行数据:以列形式展示(n×1),W也是列向量(n×1),需要W转置才能相乘,所以用 $W^TX$。
- 多行数据:X是矩阵(m×n),W是列向量(n×1),直接相乘 $XW$ 即可。 矩阵相乘条件:A的列数 = B的行数。
Q: 为什么要补X0列?
A: 补X0列(全为1)是为了将偏置B合并到权重W中。原始公式 $Y = W^TX + B$,补X0后变为 $Y = W_0X_0 + W_1X_1 + ... + W_nX_n$,其中 $X_0 = 1$,所以 $W_0 = B$,简化了计算。
8 本课小结
- pandas无行概念:一行数据以列形式展示。
- 矩阵相乘条件:A的列数 = B的行数。
- 一行样本:$W^TX + B$
- 多行样本:$XW + B$
- 补X0列:将B合并到W中,简化计算。
9 延伸思考与实践
- 理解:矩阵形式的转换原理。
- 实践:用NumPy验证 $W^TX$ 和 $XW$ 的结果。
- 思考:为什么pandas中没有行的概念?