【机器学习】5-6 多变量线性回归 & 线性回归的实践技巧
5 Linear Regression with Multiple Variables
5.1 Multiple Features
之前关注都是单变量的线性回归,现在来关注多变量线性回归
用xjx_{j}xj表示第j个特征,nnn为特征数量,mmm为样本数量,那么用x⃗(i)\vec x^{(i)}x(i)表示第i个样本的特征向量,用xj(i)x_j^{(i)}xj(i)表示第i个样本的第j个特征
模型的w参数也将会是和x一样维度的向量,用w⃗\vec ww表示,b仍然是单变量,模型变为:
fw⃗,b(x⃗)=w⃗⋅x⃗+b=∑j=1nwjxj+b\begin{aligned}
f_{\vec w, b}(\vec x) &= \vec w\cdot \vec x + b \\
&= \sum_{j=1}^n w_jx_j+b
\end{aligned}fw,b(x)=w⋅x+b=j=1∑nwjxj+b
这个模型成为多元线性回归
5.2 Vectorization 向量化
编写向量化的代码,运行更高效
常用numpy函数(默认import numpy as np):
- np.array(): 将Python列表或元组转换为NumPy数组(np.ndarray)
- np.zeros(shape): 创建一个指定形状的全零数组
- np.ones(shape): 创建一个指定形状的全一数组
- array.reshape(shape): 不改变原数组,返回一个具有新形状的数组
- array.flatten(): 将多维数组降为一维
- np.dot(a, b) / a @ b: 计算矩阵乘积或向量点积
- +, -, *, /:加减乘除,同理
- np.sqrt(a): 计算数组中每个元素的平方根
- np.exp(a): 计算数组中每个元素的指数值 exe^xex
- np.log(a): 计算数组中每个元素的自然对数
- np.sum(a, axis=None): 计算数组所有元素或指定轴上的和
- np.mean(a, axis=None): 计算数组所有元素或指定轴上的平均值
- np.min(a, axis=None): 计算数组所有元素或指定轴上的最小值
- np.max(a, axis=None): 计算数组所有元素或指定轴上的最大值
- np.std(a, axis=None): 计算数组所有元素或指定轴上的标准差
5.3 Gradient Descent for Multiple Regression
多元的梯度下降与单元的类似

这里可以用向量化,并行计算加速效率
除了梯度下降,还有其他方式求解w和b,例如正规方程。
正规方程(Normal Equation) 是求解线性回归模型参数的一种解析解法。它通过一步到位的矩阵运算,直接计算出能使成本函数(通常是最小二乘法)达到最小值的最优参数 θ\thetaθ,而不需要像梯度下降那样进行多次迭代
其核心思想是将最小化成本函数的偏导数设为零,然后解出参数
注:
- 通常直接调用高级线性代数库求解
- 优点: 不需要迭代,求解速度快
- 缺点: 涉及矩阵求逆,当特征数量 nnn 非常大时,矩阵运算会变得非常慢且占用大量内存。并且,基本上只适用于线性回归,不适用于后续学习的逻辑回归、神经网络等,推广性不强
6 Practical Tips for Linear Regression
6.1 特征缩放 Feature Scaling
特征值有的大有的小,且分布不均,梯度下降前需要做特征缩放
常用3种方式:
- Min-max Normalization
xi_scaled=xixmaxx_{i\_scaled} = \frac{x_i}{x_{max}} xi_scaled=xmaxxi - Mean Normalization
均值归一化,取平均值:
μi=mean(xi)μ_i = mean(x_i)μi=mean(xi)
则:
xi_scaled=xi−μixmax−xminx_{i\_scaled} = \frac{x_i-μ_i}{x_{max}-x_{min}}xi_scaled=xmax−xminxi−μi - Z-score Normalization
再取标准差:
σi=1N∑j=1N(xi(j)−μi)2\sigma_{i} = \sqrt{\frac{1}{N}\sum_{j=1}^{N} (x_i^{(j)}-μ_i)^2}σi=N1j=1∑N(xi(j)−μi)2
则:
xi_scaled=xi−μiσix_{i\_scaled} = \frac{x_i-μ_i}{\sigma_i}xi_scaled=σixi−μi
注:特征缩放的目标通常是让取值范围在-1到1之间,尽量接近这个范围,并且最好有正有负
6.2 检查梯度下降是否收敛
画曲线图,纵轴是成本函数,横轴是迭代次数
或者设置Epsilon ε为一个极小值,当一次迭代中成本函数的递减小于等于这个值时,认为收敛
6.3 选择正确的学习率
绘制曲线图,并尝试调整学习率,例如0.001,再试0.01, 0.1, …
然后缩小步长,尝试0.003, 0.03等等
观察曲线图的变化
6.4 特征工程 Feature Engineering
通过直觉添加新的特征,新的特征通常来自于原始特征的转化或组合
例如,原始特征为长和宽,直觉添加新特征为面积=长*宽
6.5 多项式回归 Polynomial Regression
可以拟合曲线,非线性函数
即添加新的特征,新的特征是原始特征的若干次方,例如平方、或者算术平方根
更多推荐
所有评论(0)