Skip to content

案例改进 - 岭回归

知道岭回归 API 的具体使用

API

python
sklearn.linear_model.Ridge(
    alpha=1.0, fit_intercept=True, solver="auto", normalize=False
)
  • 具有 l2 正则化的线性回归
  • alpha:正则化力度,也叫 λ
    • λ取值:0~1 1~10
  • solver:会根据数据自动选择优化方法
    • sag:如果数据集、特征都比较大,选择该随机梯度下降优化
  • normalize:数据是否进行标准化
    • normalize=False:可以在 fit 之前调用 preprocessing.StandardScaler 标准化数据
  • Ridge.coef_:回归权重
  • Ridge.intercept_:回归偏置

Ridge 方法相当于 SGDRegressor(penalty='l2', loss="squared_loss"),只不过 SGDRegressor 实现了一个普通的随机梯度下降学习,推荐使用 Ridge(实现了 SAG)

  • sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
    • 具有 l2 正则化的线性回归,可以进行交叉验证
    • coef_:回归系数
python
class _BaseRidgeCV(LinearModel):
    def __init__(self, alphas=(0.1, 1.0, 10.0),
                 fit_intercept=True, normalize=False, scoring=None,
                 cv=None, gcv_mode=None,
                 store_cv_values=False):

观察正则化程度的变化,对结果的影响?

  • 正则化力度越大,权重系数会越小
  • 正则化力度越小,权重系数会越大

波士顿房价预测

python
from sklearn.datasets import load_boston
from sklearn.linear_model import RidgeCV
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error

"""岭回归"""
# 1. 获取数据
boston = load_boston()

# 2. 数据基本处理
# 2.1 数据集划分
x_train, x_test, y_train, y_test = train_test_split(boston.data,
                                                    boston.target,
                                                    test_size=0.2,
                                                    random_state=2)

# 3. 特征工程 --标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)

# 4. 机器学习 (线性回归)
# estimator = Ridge()
# alphas
estimator = RidgeCV(alphas=(0.001, 0.1, 1, 10, 100))

estimator.fit(x_train, y_train)
print("这个模型的偏置是:\n", estimator.intercept_)

# 5. 模型评估
# 5.1 预测值和准确率
y_pre = estimator.predict(x_test)
print("预测值是:\n", y_pre)

score = estimator.score(x_test, y_test)
print("准确率是:\n", score)

# 5.2 均方误差
ret = mean_squared_error(y_test, y_pre)
print("均方误差是:\n", ret)

小结

  • sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)【知道】
    • 具有 l2 正则化的线性回归
    • alpha -- 正则化
      • 正则化力度越大,权重系数会越小
      • 正则化力度越小,权重系数会越大
    • normalize
      • 默认封装了,对数据进行标准化处理