外观
sklearn 的线性回归没有超参数
Sklearn Linear Regression Has No Hyperparameters
我们用到的几乎所有的机器学习模型都有一些超参数,比如:
- 学习率
- 正则化
- 层大小(针对神经网络)等等。
但如下图所示,为什么在 sklearn 的 Linear Regression 实现中,我们却看不到任何超参数呢?

它总该有学习率这个超参数吧?要理解它没有超参数的原因,我们首先得了解,线性回归可以用两种不同的方式来建模数据:
- 梯度下降(许多其他机器学习算法用它来做优化):
- 它是一种随机算法,即包含一定的随机性。
- 它通过优化找到一个近似解。
- 它有超参数。 2. 普通最小二乘法(OLS):
- 它是一种确定性算法。因此,多次运行都会收敛到相同的权重。
- 它总是能找到最优解。
- 它没有超参数。
于是,sklearn 的 Linear Regression 类实现的并不是常见的梯度下降方法,而是 OLS 方法。

这就是它没有超参数的原因。

在 OLS 中,思路是找到一组参数 Θ,使得:
- X:输入数据,维度为 (n,m)。
- Θ:参数,维度为 (m,1)。
- y:输出数据,维度为 (n,1)。
- n:样本数。
- m:特征数。

确定参数 Θ 矩阵的一种方法,是在等式两边同时乘以 X 的逆矩阵,如下所示:
但因为 X 可能不是方阵,它的逆矩阵未必有定义。

为了解决这个问题,我们先在等式两边同时乘以 X 的转置,如下所示:

这样就让 X 与其转置的乘积成为方阵。

得到的矩阵是方阵,因此可以求逆(前提是它非奇异)。接着,我们对这个乘积整体求逆,得到下式:

显然,上述定义具有以下特点:
- 没有超参数。
- 没有随机性。因此,它总会返回相同的解,而且这个解也是最优的。这正是 sklearn 的 Linear Regression 类所实现的。总结一下,它使用的是 OLS 方法,而不是梯度下降。正因如此,它没有超参数。当然要注意,使用 OLS 与梯度下降之间,在运行时间和便利性上存在显著的权衡。这一点从我们之前章节讨论过的时间复杂度表中也能看出来。
- 如上图所示,OLS 的运行时间与特征数 (m) 呈立方关系。因此,当特征很多时,使用 LinearRegression() 类可能不是个好主意。此时应改用 sklearn 中的 SGDRegressor() 类。

当然,LinearRegression() 类的好处在于它不涉及任何超参数调优。因此,当我们使用 OLS 时,是用运行时间换取了无需调参就能找到最优解的便利。