【skLearn 回归模型】Lasso —- 选择最佳正则化参数 <带交叉验证的Lasso LassoCV()>

文章目录

一、linear_model.LassoCV()

使用交叉验证的 Lasso类的参数看起来与岭回归略有不同,这是由于 Lasso对于alpha的取值更加敏感的性质决定的。之前提到过,由于 Lasso对正则化系数的变动过于敏感,因此我们往往让α在很小的空间中变动。这个小空间小到超乎人们的想象(不是0.01到0.02之间这样的空间,这个空间对 lasso而言还是太大了),因此我们设定了一个重要概念”正则化路径”,用来设定正则化系数的变动.

♦ 正则化路径 regularization path

假设我们的特征矩阵中有 n个特征,则我们就有 特征向量x1,x2…xn 。对于 每一个α 的取值,我们都 可以得出一组对应这个特征向量的参数向量w,其中 包含了n+1个参数,分别是 w0,w1,w2,...wn. 这些参数可以被看作是一个n维空间中的一个点 。对于 不同的α取值,我们 就将得到许多个在n维空间中的点,所有的这些 点形成的序列,就 被我们称之为是正则化路径

我们把形成这个正则化路径的α的最小值除以α的最大值得到的量( α.min/α.max )称为 正则化路径的长度(length of the path) 。在 sklearn中,我们可以通过规定正则化路径的长度(即限制α的最小值和最大值之间的比例),以及路径中α的个数,来让 sklearn为我们自动生成α的取值,这就避免了我们需要自己生成非常非常小的α的取值列表来让交叉验证类使用,类Lassocv自己就可以计算了。

和岭回归的交叉验证类相似,除了进行交叉验证之外, LassoCV也会单独建立模型。它会先找出最佳的正则化参数,然后在这个参数下按照模型评估指标进行建模。需要注意的是, LassoCV的模型评估指标(交叉验证结果)选用的是均方误差,而岭回归的模型评估指标是可以自己设定的,并且默认是R2。

返回顶部

♦ linear_model.LassoCV类

class sklearn.linear_model.LassoCV(*, eps=0.001, n_alphas=100, alphas=None, fit_intercept=True,
                                   normalize=False, precompute='auto', max_iter=1000, tol=0.0001,
                                   copy_X=True, cv=None, verbose=False, n_jobs=None, positive=False,
                                   random_state=None, selection='cyclic')[source]

【skLearn 回归模型】Lasso ---- 选择最佳正则化参数 <带交叉验证的Lasso LassoCV()>

① 自定义alpha范围测试

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.datasets import fetch_california_housing as fch
from sklearn.linear_model import LassoCV
from sklearn.model_selection import train_test_split

house_value = fch()
x = pd.DataFrame(house_value.data)
y = house_value.target
x.columns = ["住户收入中位数","房屋使用年代中位数","平均房间数目","平均卧室数目","街区人口","平均入住率","街区的纬度","街区的经度"]

xtrain,xtest,ytrain,ytest = train_test_split(x,y,test_size=0.3,random_state=420)

for i in [xtrain,xtest]:
    i.index = range(i.shape[0])

alpha_range = np.logspace(-10,-2,200,base=10)
print(alpha_range)

lasso_ = LassoCV(alphas=alpha_range,cv=5).fit(xtrain,ytrain)

best_alpha = lasso_.alpha_

each_five_alpha = lasso_.mse_path_

mean = lasso_.mse_path_.mean(axis=1)
print(mean.shape)

w = lasso_.coef_

r2_score = lasso_.score(xtest,ytest)

② LassoCV默认参数配置测试


ls_ = LassoCV(eps=0.0001,n_alphas=300,cv=5).fit(xtrain,ytrain)

b_alpha = ls_.alpha_

new_alpha = ls_.alphas_
print(ls_.alphas_.shape)

r2 = ls_.score(xtest,ytest)

W = ls_.coef_

可以看出来通过自定义alpha或LassoCV自带的正则化路径进行测试,最终的结果都相差不大,所以按照本数据而言,最佳正则化系数约为0.002-0.003之间,此时的模型训练最佳。

返回顶部

Original: https://blog.csdn.net/qq_45797116/article/details/112676554
Author: 骑着蜗牛ひ追导弹’
Title: 【skLearn 回归模型】Lasso —- 选择最佳正则化参数 <带交叉验证的Lasso LassoCV()>

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/630211/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球