Lasso回归系列一:用LASSO回归做特征筛选踩坑记

用LASSO回归做特征筛选使用踩坑记

什么时候应该用LASSO回归进行特征筛选?使用时容易踩的坑你都避开了吗?Lasso回归的原理(请看我的另一篇博客: Lasso回归系列二:Lasso回归/岭回归的原理

顺便结合最近实验犯的错误,给大家谝一谝(陕西的都懂哈)

我采用如下pipeline来进行医学图像分类(数据集包含903张医学影像)

1、使用三个不同的神经网络模型对每张图片提取1024维特征

2、将三组特征以concate方式拼接后送入XGBoost做分类

这个最初的pipeline存在两个BUG

BUG1: 拼接后的特征是3072维,远大于样本数,这样的必然会出现过拟合

BUG2: 为了解决BUG1,我使用了Lasso进行特征筛选,但此时我犯下了第二个错误:送入Lasso的特征我没有进行归一化,这真是为难了Lasso这个线性回归器,所以你需要设置normalize=True,将输入Lasso的数据转化成正态分布,消除特征量纲,有助于线性回归模型更好地学习。

from sklearn.linear_model import Lasso, LassoCV

lasso = Lasso(alpha=lasso_alpha, random_state=1, normalize=True)  
lasso.fit(train_data, train_labels)
# 相关系数
mask = lasso.coef_ != 0.0
data = train_data.loc[:, mask] #然后将筛选后的data再送入XGBoost进行分类

如果想获取最佳的lasso系数,可以交叉验证进行选出最佳的lasso系数,然后再进行上面的Lasso拟合

# 使用Lasso进行特征提取
lambdas = np.logspace(-5,1,100)
lasso_cv = LassoCV(alphas=lambdas, normalize = True, cv=5)
lasso_cv.fit(train_data, train_labels)
print(lasso_cv.alpha_)

Lasso回归本质上是加入了L1-norm作为正则项的回归方法,所以还可以直接用Lasso回归去拟合一些线性问题。

关于Lasso回归的具体应用可以参考Kaggle房价预测代码:https://www.kaggle.com/code/miguelfzzz/house-price-prediction-lasso-ridge-and-more#5.-Modelling-

猜你喜欢

转载自blog.csdn.net/qq_40924873/article/details/127924151