优化岭回归参数(Optimizing the ridge regression parameter)

一、例子1

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210504173647148.png
首先用make_regression建一个有3个自变量的数据集,但是其秩为2,因此3个自变量中有两个自变量存在相关性。

from sklearn.datasets import make_regression 
import numpy as np
reg_data, reg_target = make_regression(n_samples=100, n_features=2, effective_rank=1, noise=10)
#n_features:特征数(自变量个数);n_samples=100样本数;effective_rank=秩为1
from sklearn.linear_model import RidgeCV  #岭回归交叉验证
rcv = RidgeCV(alphas=np.array([.1, .2, .3, .4]))#参考《优化岭回归参数(Optimizing the ridge regression parameter)》
rcv.fit(reg_data, reg_target)#训练
rcv.alpha_#训练完后,得到最好的alpha

下面得出最佳alpha
在这里插入图片描述
进一步我们想要0.1得到附近的alpha

rcv2 = RidgeCV(alphas=np.array([.08, .09, .1, .11, .12]))
rcv2.fit(reg_data, reg_target)
rcv2.alpha_

我们强行是RidgeCV对象来储存交叉验证值,也即store_cv_values=True,这对我们后面的可视化很有用。

alphas_to_test = np.linspace(0.01, 1)#现在我们有50个test用的点
rcv3 = RidgeCV(alphas=alphas_to_test, store_cv_values=True)
rcv3.fit(reg_data, reg_target)
rcv3.cv_values_.shape#查看形状

在这里插入图片描述
下面来找似的alpha最小的参数

smallest_idx = rcv3.cv_values_.mean(axis=0).argmin()
alphas_to_test[smallest_idx]
rcv3.alpha_

画出最小参数alphas_to_test[smallest_idx]

%matplotlib inline
import matplotlib.pyplot as plt
plt.plot(alphas_to_test, rcv3.cv_values_.mean(axis=0))

在这里插入图片描述

二、例子2

在这里插入图片描述

from sklearn.metrics import mean_absolute_error
from sklearn.metrics import make_scorer
MAD_scorer = make_scorer(mean_absolute_error, greater_is_better=False)

rcv4 = RidgeCV(alphas=alphas_to_test, store_cv_values=True, scoring=MAD_scorer)#将MAD_scorer作为参数传入
rcv4.fit(reg_data, reg_target)
smallest_idx = rcv4.cv_values_.mean(axis=0).argmin()
rcv4.cv_values_.mean(axis=0)[smallest_idx]
alphas_to_test[smallest_idx]

版权声明:本文为liaozhaocong原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。