详解 Scikit-learn 的 linear_model.Ridge函数:岭回归模型

  • Post category:Python

sklearn.linear_model.Ridge是Scikit-learn中的一个线性回归模型,它是普通最小二乘法(OLS)的一种正则化扩展,用于在数据集中处理多重共线性问题。

该模型的目标是尝试最小化带有L2正则化项(岭回归)的残差平方和。正则化项有一个可调参数 alpha, alpha越大模型的预测能力就越弱,但可以减少模型的过拟合。

Ridge对象可以用.partial_fit()方法在线上进行拟合和预测,也可以用.fit()方法在批处理终端上进行拟合。

使用方法:

from sklearn.linear_model import Ridge

ridge = Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)

参数说明:

  • alpha:浮点数或二维数组
    • 正则化力度的倍增数。alpha越大,则正则化力度越大。二维数组为multioutput regression问题设置
  • fit_intercept:bool
    • 是否计算截距,默认为True。
  • normalize:bool
    • 当fit_intercept为True且normalize为True时,X会在回归之前进行归一化处理
  • copy_X:bool(仅与normalize=True一起使用)
    • 如果为True,则在X归一化之前复制X以避免更改原始数据。
  • max_iter:int或None
    • 迭代过程允许的最大次数,如果为None,则无限制
  • tol:浮点数
    • 迭代过程中的容差。如果更新的值之间的差异小于tol,则算法将收敛
  • solver:{‘auto’,’svd’,’cholesky’,’lsqr’,’sparse_cg’,’sag’}
    • solver用于计算模型,对于大型字典大小n_featuresn_features,’sag’比其他求解器要快

实例1:

from sklearn.linear_model import Ridge
import numpy as np

# 生成数据集
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4]])
y = np.array([1, 1.5, 2, 2.5, 3, 3.5])

# 初始化Ridge模型
ridge = Ridge(alpha=0.5)

# 在数据集上拟合模型
ridge.fit(X, y)

# 预测新数据
new_X = np.array([[4, 4], [5, 5]])
print(ridge.predict(new_X))

输出:

[4.05714286 4.76190476]

实例2:

from sklearn.linear_model import Ridge
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载糖尿病数据集
diabetes = load_diabetes()

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(diabetes.data, diabetes.target, random_state=0)

# 初始化Ridge模型
ridge = Ridge(alpha=0.1)

# 在训练集上拟合模型
ridge.fit(X_train, y_train)

# 使用拟合好的模型进行预测
y_pred = ridge.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(mse)

输出:

3312.71269226235

以上两个实例分别模拟了一个小型和一个较大的数据集,用Ridge模型在数据集上进行拟合和预测,并计算了模型的均方误差。这说明Ridge模型可以有效地解决数据集中的多重共线性问题,并提高预测精度。