文章目录
- 1 多元引入
- 2 矢量化
- 2.1 示例
- 2.2 非矢量化实现
- 2.3 矢量化实现
- 2.4 应用
- 3 特征缩放
- 3.1 举例
- 3.2 必要性
- 3.3 方法
- 3.3.1 最大最小值缩放(Min-Max Scaling)
- 3.3.2 均值归一化(Mean Normalization)
- 3.3.3 Z 分数归一化(Z-Score Normalization)
- 3.4 小结
- 4 梯度下降与学习率
- 4.1 梯度下降
- 4.2 学习率
- 5 特征工程
- 5.1 示例
- 5.2 创建特征
- 6 多项式回归
1 多元引入
在原始的线性回归模型中,我们只有一个特征 x x x(例如房屋的大小),并预测目标变量 y y y(例如房屋的价格)。模型的形式为:
f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b
然而,在实际应用中,我们通常有多个特征来预测目标变量。例如,
- 房屋大小
- 卧室数量
- 楼层数量
- 房屋的使用年限
- 等
这些额外的特征可以提供更多的信息,帮助我们更准确地预测价格。
为了处理多个特征,引入以下符号:
- X 1 X_1 X1, X 2 X_2 X2, X 3 X_3 X3, X 4 X_4 X4 分别表示四个特征(例如房屋大小、卧室数量、楼层数量、房屋使用年限)。
- X j X_j Xj 表示第 j j j 个特征,其中 j j j 从 1 到 4。
- n n n 表示特征的总数,在这个例子中 n = 4 n=4 n=4。
- X ( i ) X^{(i)} X(i)表示第 i i i 个训练示例的特征向量,例如 X ( 2 ) = [ 1416 , 3 , 2 , 40 ] X^{(2)} = [1416, 3, 2, 40] X(2)=[1416,3,2,40]。
- X j ( i ) X_j^{(i)} Xj(i) 表示第 i i i 个训练示例的第 j j j 个特征的值,例如 X 3 ( 2 ) = 2 X_3^{(2)}=2 X3(2)=2(表示第二个训练示例的楼层数量)。

此时,线性回归模型的形式变为:
f w , b ( X ) = w 1 X 1 + w 2 X 2 + w 3 X 3 + w 4 X 4 + b f_{w,b}(X)=w_1X_1+w_2X_2+w_3X_3+w_4X_4+b fw,b(X)=w1X1+w2X2+w3X3+w4X4+b
例如,一个可能的房价预测模型可能是:
f w , b ( X ) = 0.1 X 1 + 4 X 2 + 10 X 3 − 2 X 4 + 80 f_{w,b}(X)=0.1X_1+4X_2+10X_3-2X_4+80 fw,b(X)=0.1X1+4X2+10X3−2X4+80
- b = 80 b=80 b=80 表示房屋的基本价格为 80,000 美元(假设没有大小、卧室、楼层和年龄)。
- w 1 = 0.1 w1=0.1 w1=0.1 表示每增加一平方英尺,价格增加 100 美元。
- w 2 = 4 w2=4 w2=4 表示每增加一个卧室,价格增加 4,000 美元。
- w 3 = 10 w3=10 w3=10 表示每增加一层,价格增加 10,000 美元。
- w 4 = − 2 w4=−2 w4=−2 表示每增加一年房屋使用年限,价格减少 2,000 美元。

为了简化表示,我们可以将参数 w w w 和特征 X X X 表示为向量:
w ⃗ = [ w 1 , w 2 , ⋯ , w n ] X ⃗ = [ X 1 , X 2 , ⋯ , X n ] \vec{w}=[w_1,w_2,\cdots,w_n]\\ \vec{X}=[X_1,X_2,\cdots,X_n] w=[w1,w2,⋯,wn]X=[X1,X2,⋯,Xn]
因此,模型可表示为:
f w , b ( X ) = w ⃗ ⋅ X ⃗ + b f_{w,b}(X)=\vec{w}\cdot\vec{X}+b fw,b(X)=w⋅X+b
这里的点积是两个向量的对应元素相乘后求和的结果:
w ⃗ ⋅ X ⃗ = w 1 X 1 + w 2 X 2 + ⋯ + w n X n \vec{w}\cdot\vec{X}=w_1X_1+w_2X_2+\cdots+w_nX_n w⋅X=w1X1+w2X2+⋯+wnXn
2 矢量化
矢量化是一种将操作应用于整个向量或矩阵的技术,而不是逐个元素进行处理。在机器学习中,矢量化可以极大地提高代码的效率,尤其是在处理大规模数据集时。
矢量化不仅可以缩短代码,还能显著提高算法的运行效率。通过编写矢量化代码,您可以利用现代数值线性代数库(如 NumPy)以及 GPU(图形处理单元)硬件,从而加速计算过程。
2.1 示例
假设我们有一个线性回归模型,参数为 w w w 和 b b b,其中 w w w 是一个包含三个数字的向量,特征向量 x x x 也包含三个数字。这里 n = 3 n=3 n=3。
import numpy as npw = np.array([1.0, 2.5, -3.3]) # 参数向量
x = np.array([10, 20, 30]) # 特征向量
b = 4 # 偏置项
在 Python 中,数组的索引从 0 开始,因此:
- w [ 0 ] w[0] w[0] 对应 w 1 w_1 w1
- w [ 1 ] w[1] w[1] 对应 w 2 w_2 w2
- w [ 2 ] w[2] w[2] 对应 w 3 w_3 w3

2.2 非矢量化实现
方法 1:逐个元素计算
f = w[0] * x[0] + w[1] * x[1] + w[2] * x[2] + b
这种方法在 n n n 较小时可行,但当 n n n 很大时(例如 100 或 100,000),代码会变得冗长且效率低下。
方法 2:使用 for 循环
f = 0
for j in range(3):f += w[j] * x[j]
f += b
虽然这种方法比逐个元素计算更简洁,但仍然没有利用矢量化,效率不高。
这种实现方式会顺序执行计算,即先计算索引 0 的值,然后是索引 1,索引 2。这种方式效率较低,尤其是在 n n n 很大时。
2.3 矢量化实现
使用 NumPy 的 dot
函数,可以将模型的计算简化为一行代码:
f = np.dot(w, x) + b
np.dot(w, x)
计算向量 w w w 和 x x x 的点积。- 点积的定义为: w ⃗ ⋅ x ⃗ = w 1 x 1 + w 2 x 2 + ⋯ + w n x n \vec{w}\cdot\vec{x}=w_1x_1+w_2x_2+\cdots+w_nx_n w⋅x=w1x1+w2x2+⋯+wnxn。
矢量化的优势
-
代码更简洁
矢量化将复杂的计算简化为一行代码,使代码更易读、更易维护。
-
运行效率更高
矢量化利用现代计算机的并行计算能力,尤其是在使用 GPU 时,可以显著加速计算过程。
底层原理
- NumPy 的
dot
函数能够在计算机中使用并行硬件(如 CPU 或 GPU),从而比 for 循环或逐个元素计算更高效。 - 当 n n n 很大时,矢量化实现的效率优势尤为明显。
2.4 应用
假设我们有一个多元线性回归模型,包含 16 个特征和 16 个参数 w 1 w_1 w1 到 w 16 w_{16} w16。我们需要更新这些参数,公式为:
w j = w j − α ⋅ d j w_j=w_j-\alpha\cdot d_j wj=wj−α⋅dj
其中 α α α 是学习率, d j d _ j dj 是导数项。
非矢量化实现
for j in range(16):w[j] = w[j] - 0.1 * d[j]
这种实现方式会逐个更新每个参数,效率较低。
矢量化实现
w = w - 0.1 * d
在矢量化实现中,计算机可以同时更新所有 16 个参数,利用并行硬件高效完成计算。

3 特征缩放
3.1 举例
假设我们有两个特征:
- x 1 x_ 1 x1:房屋的大小(范围:300 到 2000 平方英尺)
- $ x_2$:卧室的数量(范围:0 到 5)
我们使用这两个特征来预测房屋的价格。假设一个房屋的面积为 2000 平方英尺,有 5 间卧室,价格为 500,000 美元。
-
参数示例 1
-
w 1 = 50 , w 2 = 0.1 , b = 50 w_1=50, w_2=0.1, b =50 w1=50,w2=0.1,b=50
-
预测价格:50×2000+0.1×5+50=100,000+0.5+50=100,050.5 千美元
-
这个预测与实际价格 500,000 美元相差甚远。
-
-
参数示例 2
-
w 1 = 0.1 , w 2 = 50 , b = 50 w _1=0.1, w_2=50, b =50 w1=0.1,w2=50,b=50
-
预测价格:0.1×2000+50×5+50=200+250+50=500 千美元
-
这个预测与实际价格 500,000 美元一致。
-

结论
- 当特征的值范围较大时(如房屋大小),对应的参数 w 1 w_1 w1 应该较小。
- 当特征的值范围较小时(如卧室数量),对应的参数 w 2 w_2 w2 应该较大。
3.2 必要性
如果特征的值范围差异很大,梯度下降可能会在等高线图中来回弹跳,导致收敛速度变慢。例如:
- x 1 x_1 x1 的范围较大,导致 w 1 w_1 w1 的微小变化对成本函数 J J J 的影响较大。
- x 2 x_2 x2 的范围较小,导致 w 2 w_2 w2 的较大变化对成本函数 J J J 的影响较小。
这种情况下,等高线图会呈现高瘦的椭圆形,梯度下降需要更长时间才能找到全局最小值。

特征缩放通过将不同特征的值范围调整到相似的水平,使等高线图更接近圆形,从而优化梯度下降的路径。具体来说:
- 将 x 1 x_1 x1 和 x 2 x_2 x2 的值范围都调整到 0 到 1 之间。
- 这样,梯度下降可以更直接地找到全局最小值。

3.3 方法
3.3.1 最大最小值缩放(Min-Max Scaling)
将特征值缩放到 [ 0 , 1 ] [0,1] [0,1] 区间,公式为:
x s c a l e d = x − x min x max − x min x_{\mathrm{scaled}}=\frac{x-x_{\min}}{x_{\max}-x_{\min}} xscaled=xmax−xminx−xmin
-
特征 x 1 x_1 x1 的范围为 300 到 2000。
x 1 , s c a l e d = x 1 − 300 2000 − 300 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-300}{2000-300} x1,scaled=2000−300x1−300。
-
特征 x 2 x_2 x2 的范围为 0 到 5:
x 2 , s c a l e d = x 2 5 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2}{5} x2,scaled=5x2。
3.3.2 均值归一化(Mean Normalization)
将特征值调整到以 0 为中心,公式为:
x s c a l e d = x − μ x max − x min x_{\mathrm{scaled}}=\frac{x-\mu}{x_{\max}-x_{\min}} xscaled=xmax−xminx−μ
- 特征 x 1 x_1 x1 的均值为 600: x 1 , s c a l e d = x 1 − 600 2000 − 300 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-600}{2000-300} x1,scaled=2000−300x1−600。
缩放后的范围为 -0.18 到 0.82。 - 特征 x 2 x_2 x2 的均值为 2.3: x 2 , s c a l e d = x 2 − 2.3 5 − 0 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2-2.3}{5-0} x2,scaled=5−0x2−2.3。
缩放后的范围为 -0.46 到 0.54。

3.3.3 Z 分数归一化(Z-Score Normalization)
将特征值调整到均值为 0,标准差为 1,公式为:
x s c a l e d = x − μ σ x_{\mathrm{scaled}}=\frac{x-\mu}{\sigma} xscaled=σx−μ
- 特征 x 1 x_1 x1 的均值为 600,标准差为 450: x 1 , s c a l e d = x 1 − 600 450 x_{1,\mathrm{scaled}}=\displaystyle\frac{x_1-600}{450} x1,scaled=450x1−600。
缩放后的范围为 -0.67 到 3.1。 - 特征 x 2 x_2 x2 的均值为 2.3,标准差为 1.4: x 2 , s c a l e d = x 2 − 2.3 1.4 x_{2,\mathrm{scaled}}=\displaystyle\frac{x_2-2.3}{1.4} x2,scaled=1.4x2−2.3。
缩放后的范围为 -1.6 到 1.9。

3.4 小结
目标范围
通常将特征值调整到 -1 到 1 之间,但 -3 到 3 或 -0.3 到 0.3 也是可接受的。
特殊情况
- 如果特征值范围非常大(如 -100 到 100),建议进行缩放。
- 如果特征值范围非常小(如 -0.001 到 0.001),也可以考虑缩放。
- 如果特征值范围适中(如 0 到 3 或 -2 到 0.5),不缩放通常也没有问题。

4 梯度下降与学习率
4.1 梯度下降
梯度下降的目标是通过迭代更新参数 w w w 和 b b b,以最小化成本函数 J J J。其更新规则为:
{ w = w − α ∂ J ∂ w b = b − α ∂ J ∂ b \left\{ \begin{aligned} & w=w-\alpha\frac{\partial J}{\partial w} \\ & b=b-\alpha\frac{\partial J}{\partial b} \end{aligned} \right. ⎩ ⎨ ⎧w=w−α∂w∂Jb=b−α∂b∂J
其中, α α α 是学习率。
判断梯度下降是否收敛的方法
-
绘制学习曲线
-
学习曲线:在每次梯度下降迭代后,计算并绘制成本函数 J J J 的值。横轴是迭代次数,纵轴是成本 J J J。
-
正常情况:如果梯度下降正常运行,成本 J J J 应该在每次迭代后逐渐减小。
-
异常情况:如果 J J J 在某次迭代后增加,可能意味着学习率 α α α 过大,或者代码中存在错误。
-
收敛判断:当学习曲线趋于平稳(即 J J J 不再显著下降)时,可以认为梯度下降已经收敛。
示例:
-
在 100 次迭代后, J J J 的值为某个点。
-
在 200 次迭代后, J J J 的值进一步减小。
-
在 300 次迭代后, J J J 的值趋于平稳,表明梯度下降已收敛。
-
-
自动收敛测试
-
定义:设置一个阈值 ϵ ϵ ϵ(例如 0.001),如果成本 J J J 在一次迭代中减少的幅度小于 ϵ ϵ ϵ,则认为梯度下降已收敛。
-
优点:自动化判断,无需手动绘制学习曲线。
-
缺点:选择合适的阈值 ϵ ϵ ϵ 可能比较困难。
-

不同应用程序中,梯度下降收敛所需的迭代次数可能差异很大。某些模型可能在 30 次迭代后收敛,而其他模型可能需要 1,000 或 100,000 次迭代。
很难提前预测梯度下降需要多少次迭代才能收敛,因此绘制学习曲线是一种有效的方法。
4.2 学习率
选择合适的学习率 α α α 是优化梯度下降算法的关键。如果学习率太小,梯度下降会收敛得很慢;如果学习率太大,梯度下降可能无法收敛,甚至发散。在本视频中,我们将探讨如何为模型选择一个合适的学习率。
- 学习率太小:梯度下降收敛速度很慢,需要大量迭代才能达到最小值。
- 学习率太大:梯度下降可能无法收敛,甚至导致成本函数 J J J 在每次迭代后增加。
示例
- 如果学习率太大,更新步骤可能会“跳过”最小值,导致成本函数 J J J 在每次迭代后波动或增加。
- 如果学习率太小,更新步骤会非常小,导致收敛速度缓慢。

选择学习率的策略
-
尝试一系列值
从较小的学习率开始,逐步增加,观察成本 J J J 的变化。
- 例如,尝试 α = 0.001 , 0.003 , 0.01 , 0.03 , 0.1 α =0.001,0.003,0.01,0.03,0.1 α=0.001,0.003,0.01,0.03,0.1 等。
- 对于每个 α α α,运行少量迭代,绘制成本 J J J 随迭代次数的变化。
-
选择合适的学习率
- 选择使成本 J J J 快速且持续下降的最大可能学习率。
- 避免选择过大的学习率,以免导致发散。
实践建议
- 初始尝试:从 α = 0.001 α =0.001 α=0.001 开始,逐步增加(例如每次增加 3 倍)。
- 观察曲线:绘制成本 J J J 随迭代次数的变化,选择使 J J J 快速下降的 α α α。
- 避免过大:确保学习率不会导致成本 J J J 增加或波动。

5 特征工程
5.1 示例
假设我们有以下两个特征来预测房屋价格:
- x 1 x_1 x1:地块的宽度(临街面)
- x 2 x_2 x2:地块的深度
初始模型如下:
f w , b ( X ) = w 1 x 1 + w 2 x 2 + b f_{w,b}(X)=w_1x_1+w_2x_2+b fw,b(X)=w1x1+w2x2+b
虽然这个模型可以正常工作,但可能不是最有效的。我们可以通过特征工程来改进模型。
5.2 创建特征
地块的面积(宽度 × 深度)可能比单独的宽度和深度更能预测房屋价格。因此,可以定义一个新特征:
x 3 = x 1 × x 2 x_3=x_1\times x_2 x3=x1×x2
改进后的模型如下:
f w , b ( X ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + b f_{w,b}(X)=w_1x_1+w_2x_2+w_3x_3+b fw,b(X)=w1x1+w2x2+w3x3+b
- 通过转换或组合原始特征,可以创建新的、更有意义的特征。
- 特征工程不仅可以帮助拟合直线,还可以拟合曲线和非线性函数,从而更好地拟合数据。
6 多项式回归
结合多元线性回归和特征工程的思想,提出一种称为多项式回归的新算法,可以将曲线和非线性函数拟合到数据中。
假设我们有一个房屋数据集,其中特征 x x x 是房屋的大小(以平方英尺为单位)。数据分布可能不适合用直线拟合,而是更适合用曲线拟合。

多项式回归通过将原始特征 x x x 提升为不同的幂次(如 x 2 , x 3 x_2,x_3 x2,x3)来创建新的特征。例如:
- 第一个特征: x x x(房屋大小)
- 第二个特征: x 2 x_2 x2(房屋大小的平方)
- 第三个特征: x 3 x_3 x3(房屋大小的立方)

二次函数
- 模型: f w , b ( X ) = w 1 x 1 + w 2 x 2 2 + b f_{w,b}(X)=w_1x_1+w_2x_2^2+b fw,b(X)=w1x1+w2x22+b。
- 优点:可以拟合数据的二次曲线。
- 问题:二次函数最终会下降,这与房价随面积增加而上升的预期不符。
三次函数
- 模型: f w , b ( X ) = w 1 x 1 + w 2 x 2 2 + w 3 x 3 3 + b f_{w,b}(X)=w_1x_1+w_2x_2^2+w_3x_3^3+b fw,b(X)=w1x1+w2x22+w3x33+b。
- 优点:可以拟合更复杂的曲线,更好地适应数据。
- 特点:随着面积的增加,曲线最终会恢复上升,符合房价的预期。
特征缩放的必要性
如果房屋大小的范围是 1 到 1,000 平方英尺,那么 x 2 x_2 x2 的范围是 1 到 1,000,000, x 3 x_3 x3 的范围是 1 到 1,000,000,000。这些特征的值范围差异很大,因此在应用梯度下降时,特征缩放变得尤为重要。