群弹性网的pytorch实现

torchgel的Python项目详细描述


火炬凝胶

TravisAppveyorPyPIPyPi - Python VersionGitHub licenseCode style: black

这个包提供了pytorch实现来解决组弹性网 问题。设ajj=1…p)为大小为m×的特征矩阵 njm是样本数,nj是样本数 使jth群中的特征的y成为m×1向量 回应。群弹性网发现系数{em1}$βj,且存在偏差 β0解决优化问题

min β0, …, βp½ ║y - β0 - ∑ Aj βj2 + m ∑ √nj1║βj+ λ2║βj2).

这里λ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.gelfistagel.gelcd提供基于 近端梯度下降和坐标下降。两者都有相似之处 接口,并公开两个主要的公共函数:make_Agel_solve。这个 特征矩阵应该作为pytorch张量存储在列表中(比如As) 矩阵,响应应该存储在pytorch向量中(比如y)。 此外,组的大小(nj)应存储在 向量(比如ns)。首先使用make_A函数转换特性 矩阵转换成合适的格式:

A=make_A(As,ns)

然后将Ay和其他必需的参数传递给gel_solve。将军 接口为:

b_0,B=gel_solve(A,y,l_1,l_2,ns,**kwargs)

l_1l_2是表示λ1λ2的浮点数。 分别是。该方法返回一个floatb_0,表示偏差和 pytorch矩阵B包含其他系数。B有大小 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}},
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JNLP无法在浏览器中正确启动(与dtjava.js一起部署)   在执行下一个方法之前,java将等待线程执行结束   java如何将另一个LayoutManager应用于JComboBox?(多栏JComboBox尝试)   使用jPBC在java中实现双线性配对   java在使用@RequestMapping注释时获取请求的值(URL)   java如何控制流量   java如何获取IFC对象的绝对坐标?   java目标服务器无法使用htmlunit和tor响应异常   java需要帮助创建一个循环结构来运行我的程序   java有可能拥有一个Android APK并在应用程序中更改构建变体吗?   在Sphinx4中运行Ant的java   Java:从ArrayList获取子列表的有效方法   java如何使在循环内部创建的数组在循环外部工作?   apache poi通过java中的XSSF表从单元格读取日期值   安卓 java自己的SeqLock实现,避免spinlock会更好吗?   java的并发底层方法。util。同时发生的预定未来   java比较方法违反了它的一般约定,如何使它具有可传递性?   使用JAVA定向指定类的DB导出子类   一个方法中的java更改特定imageView