带加权样本的弹性网络回归或套索回归(sklearn)
Posted
技术标签:
【中文标题】带加权样本的弹性网络回归或套索回归(sklearn)【英文标题】:Elastic net regression or lasso regression with weighted samples (sklearn) 【发布时间】:2018-03-14 04:56:08 【问题描述】:Scikit-learn 允许将样本权重提供给线性、逻辑和岭回归(以及其他),但不能提供给弹性网络或套索回归。通过样本权重,我的意思是要拟合的输入的每个元素(以及相应的输出)具有不同的重要性,并且应该对与其权重成正比的估计系数产生影响。
在将数据传递给 ElasticNet.fit() 以合并我的样本权重之前,我是否可以对其进行操作?
如果不是,是否有根本原因是不可能的?
谢谢!
【问题讨论】:
This 代码由斯坦福大学的某人提供,他与 Trevor Hastie(弹性网络的主要作者之一)一起工作。它确实支持权重,而且是 Python。如果您看一下vignette,在第一个等式中,我认为您可以看到如何操纵数据以在您的 scikit-learn 包中注入权重。只需确保每个权重的平均权重为 1,以便对 lambda 值网格的任何预设限制保持正常。 我应该说你可以通过检查小插图的前两个方程来了解如何自行应用权重。 【参考方案1】:您可以在 sklearn 的issue-tracker 中阅读有关此的一些讨论。
基本上是这样的:
并不难做到(理论上) 很难保留所有基本的 sklearn'API 并支持所有可能的情况(密集与稀疏)正如您在这个帖子和linked one about adaptive lasso 中看到的那样,那里没有太多活动(可能是因为关注的人不多,相关论文不够受欢迎;但这只是猜测)。
根据您的具体任务(大小?稀疏性?),您可以基于 scipy.optimize 轻松构建自己的优化器,支持这种样本权重(会慢一些,但稳健且精确)!
【讨论】:
嗨,假设我想使用带有密集矩阵的 lasso 或 elasticNet,将值输入矩阵按样本权重的平方缩放会有什么问题吗? (与将加权 OLS 问题映射到标准 OLS 时的方法相同)。 @HerrIvan 是的,如果你将 X = dot(sqrt(diag(weights)), X) 和 y = dot(sqrt(diag(weights)), y) 传递给套索或 elasticNet可以考虑权重。唯一的问题是,在交叉验证期间使用的拟合指标需要访问 X、y 和您的权重才能正确计算样本外加权 MSE,否则您的正则化参数将无法正确调整... 我觉得不可思议的是,像样本权重这样基本的东西目前没有在 sklearn 中实现...... @Tom Wenseleers:感谢您的回答,您是否有参考资料让我了解您所指的“交叉验证期间使用的拟合指标需要访问 X、y 和您的权重”正确计算样本外加权 MSE”? @HerrIvan 好吧,只是您必须将加权均方根误差计算为(在 R 代码中) weighted.rmse以上是关于带加权样本的弹性网络回归或套索回归(sklearn)的主要内容,如果未能解决你的问题,请参考以下文章
Python使用sklearn构建ElasticNet回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型
Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型