群弹性网的pytorch实现
torchgel的Python项目详细描述
火炬凝胶
这个包提供了pytorch实现来解决组弹性网 问题。设aj(j=1…p)为大小为m×的特征矩阵 nj(m是样本数,nj是样本数 使jth群中的特征的y成为m×1向量 回应。群弹性网发现系数{em1}$βj,且存在偏差 β0解决优化问题
min β0, …, βp½ ║y - β0 - ∑ Aj βj║2 + m ∑ √nj (λ1║βj║+ λ2║βj║2).
这里λ1和λ2是控制 2-模和平方2-模正则化的量。这个2-标准 正则化在组级鼓励稀疏性;整个βj 可能变成0。平方2范数正则化的精神与 弹性网,并解决套索的一些问题。注意群体弹性 网包括特殊情况组套索(λ2=0),脊 回归(λ1=0),弹性网(每个nj=1),以及 套索(每个nj=1和λ2=0)。优化 问题是凸的,可以有效地求解。这个包提供两个 实现,一种基于近端梯度下降,一种基于 坐标下降。
安装
使用pip
pip install torchgel
tqdm
(对于进度条)作为依赖项拉入。pytorch(v1.0+
)是
也需要,并且需要手动安装。有关说明,请参阅PyTorch
website。
解决单个实例
模块gel.gelfista
和gel.gelcd
提供基于
近端梯度下降和坐标下降。两者都有相似之处
接口,并公开两个主要的公共函数:make_A
和gel_solve
。这个
特征矩阵应该作为pytorch张量存储在列表中(比如As
)
矩阵,响应应该存储在pytorch向量中(比如y
)。
此外,组的大小(nj)应存储在
向量(比如ns
)。首先使用make_A
函数转换特性
矩阵转换成合适的格式:
A=make_A(As,ns)
然后将A
、y
和其他必需的参数传递给gel_solve
。将军
接口为:
b_0,B=gel_solve(A,y,l_1,l_2,ns,**kwargs)
l_1
和l_2
是表示λ1和λ2的浮点数。
分别是。该方法返回一个floatb_0
,表示偏差和
pytorch矩阵B
包含其他系数。B
有大小p×
maxjnj具有合适的零填充。以下
各节介绍了特定实现的其他详细信息。
近端梯度下降(瘘)< EH3>
^ {gel.gelfista.gel_solve
的其他参数的详细信息。
坐标下降
gel.gelcd
模块包含一个坐标下降实现。它的用途
比fista实现更复杂一些。坐标下降
迭代求解单个块(每个块对应于单个
βj)。提供了多个解算器来解算个体
阻碍。这些是gel.gelcd.block_solve_*
函数。参考他们的
docstrings以获取有关其参数的详细信息。gel.gelcd.gel_solve
需要
传递块求解函数及其参数(作为字典)。参考
它的docstring以获取更多详细信息。
解决方案路径
gel.gelpaths
提供一个包装函数gel_paths
来求解组
正则化系数多值弹性网问题。它
实现两个阶段的过程。对于给定的λ1和λ2,
首先解决了群弹性网问题,并用
提取非零系数(支撑)。然后岭回归模型
为提供的几个正则化值中的每一个学习。最终模型
使用任意提供的摘要函数进行摘要,并且
正则化值的每个组合都作为字典返回。这个
docstring包含更多详细信息。gel.ridgepaths
包含另一个有用的函数,
ridge_paths
它能有效地解决多重岭回归问题
正则化值。
引文
如果您发现此代码对您的研究有用,请引用
@misc{koushik2017torchgel,
author = {Koushik, Jayanth},
title = {torch-gel},
year = {2017},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/jayanthkoushik/torch-gel}},
}