imd 统计教程 · 预测模型与机器学习
← 教程首页 返回本模块

LASSO遇到多分类X怎么办?grouplasso和哑变量、独热编码怎么选?

聂志强实战医学统计2024-01-09 17:07:14广东


本章思维导图:


前言

LASSO,全称Least absolute shrinkage and selection operator,LASSO回归大家都不陌生。LASSO添加惩罚函数,不断压缩系数,从而达到精简模型的目的,以避免共线性和过拟合,当系数为0时达到筛选变量的效果。

但是,目前LASSO在国内资料清一色的案例都是连续变量x,而实战中我们会遇到形形色色的分类x变/categorical predictor,R中为factor因子变量,可能01,也可能123多分类。这时候能否采用LASSO,毕竟LASSO默认是连续x?分类离散方法是哑变量dummy还是独热one-hot还是啥形式,不同编码coding有区别吗?LASSO编码不同筛选结果会不同吗?

小编以前的LASSO代码好像就是用的dummy,那是不是会存在问题,很忐忑?于是带着这几个问题,小编狂搜google、微信公众号。但是发现国内csdn、公众号没有人详细说清楚,把LASSO dummy和one-hot都搞混了,请仔细看他们代码清一色的dummy (详细见发散思维第3点二者编码的不同)。已知的代码大部分都借鉴的stack网站源代码进行修改,Stackoverflow网站对此进行了探索,https://stackoverflow.com/questions/46865838/using-LASSO-in-r-with-categorical-variables,https://stats.stackexchange.com/questions/168928/categorical-variables-in-LASSO-regression。 小编热衷于思考(杠精附体),不想稀里糊涂的这样人云亦云,于是这几天查阅文献后结合思考整理如下。

一、分类x编码是one-hot 还是dummy

1.1 lasso中one-hot 与dummy

单纯的LASSO回归用来做处理共线性变量x1-xn后的预测。分类x变量1234等,由于存在非等级效应,需要进行额外coding,按照one-hot原则生成4列,按照dummy则只有3列。应该根据场景使用具有 k 级独热编码或 k-1 级的哑变量。https://stats.stackexchange.com/questions/231285/dropping-one-of-the-columns-when-using-one-hot-encoding/329281#329281,https://stats.stackexchange.com/questions/133967/does-collinearity-of-one-hot-encoded-features-matter-for-svm-and-logreg,2篇文章中描述了过程,惩罚必须以某种方式涉及多级分类协变量的所有水平;去掉一列会改变优化问题,它改变了参数的含义,实际上会导致不同的最优解。举个具体的例子,假设你有一个有三个水平的分类变量,即1、2和3。对应的参数为β,β2,β3,省略第1列会导致β1=0,而其他两个参数的含义更改为β2?β1,β3?β1,因此这两个差异将被缩小。

注意,这里讨论的都是单纯的LASSO回归。结论1:one-hot可以删除“统计/信息冗余”而不是“相关”的那一列ref列,就变成了dummy!(onehot多一列,结果与dummy会不同);结论2:线性回归或由最大似然法(或最小二乘法)估计的广义线性模型glm中应该使用dummy,而正则化估计模型如Ridge、LASSO或弹性网络则不应该遗漏任何列(LASSO请使用one-hot)!换句话说,仅做LASSO回归的时候,LASSO分类自变量x正确的coding应该是:0/1独热变量(dummy + ref列)。陈常中教授在中也是应用了one-hot,https://mp.weixin.qq.com/s/JWqZKwtoC8t0RJyU52Y0hg。But!mlr3book书中,阐述了低分类变量用dummy,超多分类变量用one-hot。难道真的没有公认标准吗?

1.2 LASSO-logistic中 dummy与onehot

1.2.1 经典lasso + dummy/onehot区别

前面说到LASSO回归可单独构建预测模型,这时候应该用one-hot!但临床常见LASSO往往更多应用在筛选多因素变量,再过渡到logistic或cox预测模型,后者由于非等级问题与专业可解释性需要哑变量dummy同进同出,此时前置条件的lasso要强行选择one-hot还是dummy呢?二者如何选择,与后续变量入选glm预测模型是否直接相关? 小编测试 lasso + dummy,与lasso + onehot,两种方式得到的自变量可能会不一样,比如onehot少了er变量!

1.2.2 Group LASSO vs. LASSO

如上述结果,临床预测模型经常为了缩减predictors维度,后续会依据LASSO筛选后的x进入多因素logistic,但是测试后LASSO筛选的变量会随着采用one-hot和 dummy编码会呈现出不同。具有分类预测变量的LASSO模型(1996)是有问题的,Group LASSO (2006)应运而生,后者是具有分类预测变量的模型的LASSO的替代方法,下图可见grouplasso全部的level都在模型中。虽然经典LASSO进行变量筛选不能保证分类变量的哑变量在模型中同进同出,甚至grouplasso文献以此为论据,但是实际上group lasso不能用于cox,以至于依然要回归到经典lasso的dummy或onehot框架中来。

1.2 Group LASSO + dummy vs. Group LASSO + one-hot

小编测试group lasso下的dummy或onehot几乎无区别。这也进一步反衬出经典lasso中onehot与dummy结果的不同。

二、LASSO 的encoding编码形态

分类预测的编码策略影响LASSO的性能!从案例中可以看到4种code策略(并未考虑one-hot),最后LASSO筛选结果差别很大。也就是说单纯LASSO回归的coding策略很重要。推荐dummy或oneset。

发散思维

1.LASSO存在着一定的局限性,首先,LASSO不能提供标准误估计的有效值,从而会影响进一步的计算分析,贝叶斯LASSO很好地解决了这一问题;对于高维数据来说,往往会伴随有异常值的存在,贝叶斯LASSO的现有方法也可以使异常值得到有效处理。其次,LASSO在变量的系数压缩过程中可能会不可避免地产生一定的偏差,但自适应LASSO不仅能更有效地实现变量选择,也能减小系数估计所产生的偏差。另外,当有一组预测变量中出现高度相关特性时,LASSO只能选择其中的一个特征而导致最终结果不够准确,或者是当变量数远远大于样本数时,LASSO的拟合效果欠佳,而这两点均可通过弹性网络来实现优化。

2.预测精准性,其实lasso与group lasso几乎一致。但是在模型真实性上,grouplasso更值得,实际研究中不需要稀疏解(编码后的某12列),需要考虑变量专业可解释性整体dummy入选。可惜的是grouplasso均无法基于cox,绕来绕去还是绕了个寂寞!

3 网络教程中一些赋值错误,dummy的生成过程应该是model.matrix或者caret::dummyVars, makeX函数可以一键转换one-hot


小结

  1. one-hot=dummy + ref列,encoding不同预测性能不同,训练集dummy或onehot更优。
  2. 单纯LASSO回归推荐用one-hot编码!但是Mlr3book案例是超多类x用one-hot,一般多分类x用dummy,glmnet包案例是one-hot。

3.单纯LASSO回归与临床预测模型LASSO-glm逻辑不同,后者考虑哑变量同进同出专业解释性,分类自变量x可dummy或one-hot 后再经典LASSO还原原始变量进入glm。虽然Group LASSO模型性能效果更佳,但是生存数据只能经典LASSO。dummy或one-hot在经典lasso中筛选变量结果不同,LASSO-glm中没有公认标准不知道究竟哪个更对!

  1. 小编觉得选择是个问题!既然用glmnet包,还是更倾向统一都用one-hot!



本公众号建立的学术交流群3,5天时间已经满额。如想入群4,请关注公众号动态发布信息,预计在年前


参考文献

1LASSO and Group LASSO with Categorical Predictors: Impact of Coding Strategy on Variable Selection and Prediction

2https://mp.weixin.qq.com/s/Uc2WKms80KZD3cXud7ywOA

3 LASSO及其拓展方法在回归分析变量筛选中的应用,中华预防医学杂志, 2023,57(1) : 107-111.

4https://mp.weixin.qq.com/s/-M1sLtlCBfHt1xKk6cg4nw