ridge_regression#

sklearn.linear_model.ridge_regression(X, y, alpha, *, sample_weight=None, solver='auto', max_iter=None, tol=0.0001, verbose=0, positive=False, random_state=None, return_n_iter=False, return_intercept=False, check_input=True)[source]#

通过正规方程法求解岭回归方程。

更多信息请参阅用户指南

参数
X{array-like, sparse matrix, LinearOperator} of shape (n_samples, n_features)

训练数据。

yarray-like of shape (n_samples,) or (n_samples, n_targets)

目标值。

alphafloat or array-like of shape (n_targets,)

L2 项的乘数常数,控制正则化强度。alpha 必须是非负浮点数,即在 [0, inf) 范围内。

alpha = 0 时,目标函数等同于普通最小二乘法,由 LinearRegression 对象求解。出于数值原因,不建议在 Ridge 对象中使用 alpha = 0。相反,您应该使用 LinearRegression 对象。

如果传入一个数组,则假定惩罚项是针对特定目标值的。因此,它们的数量必须对应。

sample_weightfloat or array-like of shape (n_samples,), default=None

每个样本的独立权重。如果给定一个浮点数,则每个样本将具有相同的权重。如果 sample_weight 不为 None 且 solver='auto',则求解器将设置为 'cholesky'。

版本 0.17 新增。

solver{‘auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’, ‘lbfgs’}, default=’auto’

计算过程中使用的求解器

  • ‘auto’ 根据数据类型自动选择求解器。

  • ‘svd’ 使用 X 的奇异值分解来计算岭系数。它是最稳定的求解器,特别是对于奇异矩阵,比 ‘cholesky’ 更稳定,但代价是速度较慢。

  • ‘cholesky’ 使用标准的 scipy.linalg.solve 函数,通过对 dot(X.T, X) 进行乔利斯基分解来获得闭式解。

  • ‘sparse_cg’ 使用 scipy.sparse.linalg.cg 中的共轭梯度求解器。作为一种迭代算法,该求解器比 ‘cholesky’ 更适合处理大规模数据(可以设置 tolmax_iter)。

  • ‘lsqr’ 使用专门的正则化最小二乘例程 scipy.sparse.linalg.lsqr。它是最快的,并使用迭代过程。

  • ‘sag’ 使用随机平均梯度下降法(Stochastic Average Gradient descent),而 ‘saga’ 使用其改进的无偏版本 SAGA。这两种方法也使用迭代过程,并且当 n_samples 和 n_features 都很大时,通常比其他求解器更快。请注意,‘sag’ 和 ‘saga’ 的快速收敛仅在特征具有大致相同尺度时得到保证。您可以使用 sklearn.preprocessing 中的缩放器对数据进行预处理。

  • ‘lbfgs’ 使用在 scipy.optimize.minimize 中实现的 L-BFGS-B 算法。仅当 positive 为 True 时才能使用。

除 ‘svd’ 外的所有求解器都支持密集和稀疏数据。但是,只有 ‘lsqr’、‘sag’、‘sparse_cg’ 和 ‘lbfgs’ 在 fit_intercept 为 True 时支持稀疏输入。

版本 0.17 新增:随机平均梯度下降求解器。

版本 0.19 新增:SAGA 求解器。

max_iterint, default=None

共轭梯度求解器的最大迭代次数。对于 ‘sparse_cg’ 和 ‘lsqr’ 求解器,默认值由 scipy.sparse.linalg 确定。对于 ‘sag’ 和 saga 求解器,默认值为 1000。对于 ‘lbfgs’ 求解器,默认值为 15000。

tolfloat, default=1e-4

解的精度。请注意,对于 ‘svd’ 和 ‘cholesky’ 求解器,tol 无效。

版本 1.2 变更:默认值从 1e-3 更改为 1e-4,以与其他线性模型保持一致。

verboseint, default=0

详细程度。将 verbose 设置为 > 0 将根据使用的求解器显示额外信息。

positivebool, default=False

当设置为 True 时,强制系数为正。在这种情况下,仅支持 ‘lbfgs’ 求解器。

random_stateint, RandomState instance, default=None

solver == ‘sag’ 或 ‘saga’ 时用于打乱数据。详见术语表

return_n_iterbool, default=False

如果为 True,该方法还会返回 n_iter,即求解器执行的实际迭代次数。

版本 0.17 新增。

return_interceptbool, default=False

如果为 True 且 X 为稀疏矩阵,该方法还会返回截距,并且求解器将自动更改为 ‘sag’。这只是一个用于拟合稀疏数据截距的临时修复。对于密集数据,请在回归之前使用 sklearn.linear_model._preprocess_data。

版本 0.17 新增。

check_inputbool, default=True

如果为 False,则不检查输入数组 X 和 y。

版本 0.21 新增。

返回
coefndarray of shape (n_features,) or (n_targets, n_features)

权重向量。

n_iterint, optional

求解器执行的实际迭代次数。仅当 return_n_iter 为 True 时返回。

interceptfloat or ndarray of shape (n_targets,)

模型的截距。仅当 return_intercept 为 True 且 X 为 scipy 稀疏数组时返回。

备注

此函数不计算截距。

正则化改善了问题的条件数,并减少了估计的方差。值越大,正则化强度越强。在其他线性模型(如 LogisticRegressionLinearSVC)中,Alpha 对应于 1 / (2C)。如果传入一个数组,则假定惩罚项是针对特定目标值的。因此,它们的数量必须对应。

示例

>>> import numpy as np
>>> from sklearn.datasets import make_regression
>>> from sklearn.linear_model import ridge_regression
>>> rng = np.random.RandomState(0)
>>> X = rng.randn(100, 4)
>>> y = 2.0 * X[:, 0] - 1.0 * X[:, 1] + 0.1 * rng.standard_normal(100)
>>> coef, intercept = ridge_regression(X, y, alpha=1.0, return_intercept=True,
...                                    random_state=0)
>>> coef
array([ 1.97, -1., -2.69e-3, -9.27e-4 ])
>>> intercept
np.float64(-.0012)