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模型可以有效地解决数据集中的多重共线性问题,并提高预测精度。