附录:skscope的架构#

在本页面中,我们简要介绍了skscope的核心代码,这些内容在下图中进行了总结。

../_images/architecture-scope.png

abess的核心代码是用C++编写的,上图展示了abess的软件架构,每个构建块将在下面进行描述。

  • Data 类接受来自 R 和 Python 接口的(稀疏)表格数据,并返回一个包含预测变量的对象,这些预测变量(可选地)经过筛选或标准化。

  • Algorithm 类作为 abess 中的核心类,实现了通用的拼接程序,用于最佳子集选择,支持参数的 \(L_2\) 正则化、组结构预测变量和干扰选择。具体的算法通过在 Algorithm 的子类中重写 Algorithm 类的虚函数接口来编程。上述图中展示了七个已实现的最佳子集选择任务,适用于监督学习和无监督学习。除此之外,模块化设计便于用户通过编写 Algorithm 类的子类来扩展库以应对各种机器学习任务。

  • 指标 作为评估器。它通过交叉验证或信息准则(如赤池信息准则和高维贝叶斯信息准则)来评估算法返回的估计。

  • 最后,R 或 Python 接口MetricAlgorithm中收集结果。在 R 包中,S3 方法被编程,使得通用函数(如printcoefplot)可以直接用于获取最佳子集选择结果,并可视化解决方案路径和调参曲线。在 Python 包中,abess 中的每个模型都是scikit-learn的 BaseEstimator 类的子类,这样用户不仅可以使用熟悉的 API 来训练模型,还可以无缝地将abess中的模型与scikit-learn中的预处理、特征转换和模型选择模块结合起来。