Scikit-learn - 岭回归



岭回归或 Tikhonov 正则化是一种执行 L2 正则化的正则化技术。它通过添加等效于系数大小平方的惩罚项(收缩量)来修改损失函数。

$$\displaystyle\sum\limits_{j=1}^m\left(Y_{i}-W_{0}-\displaystyle\sum\limits_{i=1}^nW_{i}X_{ji} \right)^{2}+\alpha\displaystyle\sum\limits_{i=1}^nW_i^2=loss_{-}function+\alpha\displaystyle\sum\limits_{i=1}^nW_i^2$$
  • sklearn.linear_model.Ridge 是用于解决回归模型的模块,其中损失函数是线性最小二乘函数,正则化是 L2。

参数

下表包含 Ridge 模块使用的参数:

序号 参数及描述
1

alpha − {float, array-like}, shape(n_targets)

Alpha 是一个调整参数,决定我们希望对模型进行多少惩罚。

2

fit_intercept − 布尔值

此参数指定是否应将常数(偏差或截距)添加到决策函数中。如果设置为 False,则计算中不会使用截距。

3

tol − float,可选,默认为 1e-4

它表示解的精度。

4

normalize − 布尔值,可选,默认为 False

如果此参数设置为 True,则回归前将对回归量 X 进行标准化。标准化将通过减去均值并除以 L2 范数来完成。如果 fit_intercept = False,则忽略此参数。

5

copy_X − 布尔值,可选,默认为 True

默认情况下,它是 True,这意味着 X 将被复制。但如果将其设置为 False,则 X 可能会被覆盖。

6

max_iter − int,可选

顾名思义,它表示共轭梯度求解器所采用的最大迭代次数。

7

solver − str, {‘auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’}

此参数表示在计算例程中使用哪个求解器。以下是此参数下选项的属性:

  • auto − 它允许根据数据类型自动选择求解器。

  • svd − 为了计算岭系数,此参数使用 X 的奇异值分解。

  • cholesky − 此参数使用标准的 scipy.linalg.solve() 函数来获取闭式解。

  • lsqr − 它最快,并使用专用的正则化最小二乘例程 scipy.sparse.linalg.lsqr。

  • sag − 它使用迭代过程和随机平均梯度下降。

  • saga − 它也使用迭代过程和改进的随机平均梯度下降。

8

random_state − int,RandomState 实例或 None,可选,默认为 None

此参数表示用于在洗牌数据时生成的伪随机数的种子。以下是选项:

  • int − 在这种情况下,random_state 是随机数生成器使用的种子。

  • RandomState 实例 − 在这种情况下,random_state 是随机数生成器。

  • None − 在这种情况下,随机数生成器是 np.random 使用的 RandonState 实例。

属性

下表包含 Ridge 模块使用的属性:

序号 属性及描述
1

coef_ − array,shape(n_features,) 或 (n_target, n_features)

此属性提供权重向量。

2

Intercept_ − float | array,shape = (n_targets)

它表示决策函数中的独立项。

3

n_iter_ − array 或 None,shape (n_targets)

仅适用于 ‘sag’ 和 ‘lsqr’ 求解器,返回每个目标的实际迭代次数。

实现示例

以下 Python 脚本提供了一个实现岭回归的简单示例。我们使用 15 个样本和 10 个特征。在我们的案例中,alpha 的值为 0.5。有两个方法,即 fit()score(),分别用于拟合此模型并计算得分。

from sklearn.linear_model import Ridge
import numpy as np
n_samples, n_features = 15, 10
rng = np.random.RandomState(0)
y = rng.randn(n_samples)
X = rng.randn(n_samples, n_features)
rdg = Ridge(alpha = 0.5)
rdg.fit(X, y)
rdg.score(X,y)

输出

0.76294987

输出显示上述岭回归模型给出了大约 76% 的得分。为了提高准确性,我们可以增加样本和特征的数量。

示例

对于上述示例,我们可以借助以下 Python 脚本来获取权重向量:

rdg.coef_

输出

array([ 0.32720254, -0.34503436, -0.2913278 , 0.2693125 , -0.22832508,
   -0.8635094 , -0.17079403, -0.36288055, -0.17241081, -0.43136046])

示例

类似地,我们可以借助以下 Python 脚本来获取截距的值:

rdg.intercept_

输出

0.527486
广告