gplearn 手搓改造笔记
  Cai 22天前 150 0

为什么改造gplearn

  1. 框架简洁代码精炼。之前被Qlib深度折磨过(以前文章写过https://www.pandaai.online/community/article/130)。Qlib投研全流程环节多模块多,而后期可能提交维护投入变少越来越臃肿。gplearn就是[‘genetic’,‘functions’, ‘program’ ,‘fitness’],然后再加上一基础设施’utility’五个部分。核心因子公式program的遗传变异进化操作就是围绕着一个list列表对象实现的(再次叹为观止)。

  2. 显式表达,多维空间探索能力足够强大。与最新的神经网络比较可能落伍了,但对于从蒙特卡洛随机森林方法过来的已经足够先进。至于为何基于杂交/变异/进化的多维搜索优势会高效,可以进一步了解遗传编程。探索出来best_program模型大概率我是理解不了的,但是中间过程则有可能。这为人工探究和干预探索过程提供了可能(当然也可能是干预还不如不干预)。

  3. 应用场景多成熟可靠。除了因子挖掘的符号回归器SymbolicRegressor,还有符号分类器SymbolicClassifier 、特征优化器SymbolicTransformer。这三个模块应用场景成熟,在除金融量化投研领域以外已有大量被验证应用。后面有很多演化的新GP系统还是都基于这个经典框架。

  4. 能提高框架和代码能力
    万一没有实现,也获得了知识技能。

把gplearn改造成什么样

  1. 能赚钱能稳定赚钱 代码能跑通……
    能挖出因子

  2. 能快速挖因子
    用上GPU pytorch,保持CPU多核并行能力(fitness适应度计算会快几个数量级,fitness占整个计算至少60%以上)

  3. 能挖出好因子
    尝试一些改造优化。原有gplearn 没有对流行的金融数据也就是 [“时间”,”品种”,“特征“]格式做适配。添加丰富算子库丰富适应度计算。

gplearn架构

逻辑框架
807f6381e67544a89df468aa6a5b5229.png
dddec13174cd46cbe92f45516029b9e3.png
image.png
image.png


训练数据流
image.png


Excute数据流
image.png


Function ↔ Program ↔ Execute 三角关系
image.png

"Excute"和"Function/Program/Execute"三角关系在理解基础的实现层面很关键,最上面的逻辑框架对全貌和后续调优应用有用。其他的可以抓住deepseek使劲问。这里讲一个我的实践,先把全部代码扔进去,然后阐述自己开展此段对话人的背景和目的以及硬性要求(了解一段的代码功能还是要修改错误,如何修改哪里改哪里一定不能改),一个对话中的问题尽量上下连贯避免占用过多上下文内存而要求你另外新建一个对话。所以可以先拟一下大概的提纲然后依据回答来调整,但最近的deepseek版本准许的问答回合越来越长,可能用上了那个OCR技术,想到哪问到哪也不是问题了,只要我们大脑能记住。 此外现在deepseek大多数情况会主动写出测试模块代码,下面会提到。

使用和优化

我的运行环境
22f0a47f4df4a94e35af2e4583cf47a1.png
主要依赖库在代码开头都有,需要有cuda,jupyternotebook调试是够用的,除了之前碰到Qlib。。。

主要优化点
数据类型:整型数据,有时并不需要转化成pytorch_tensor,主要是时序相关的windows参数,而这个用法在源代码中被用作feature定位。我另外设计了一个list(int)类型专门用作feature定位,如果给出了特征列表还可以直接打印出来。而这个需求直接导致又增加了一个param_types的参数。。。

模型约束:这里具体针对的是算子参数约束。模型由实际环境约束,具体参数也需要实际意义,这样builded的program才有意义。这个灵感来自于石川《金融洞见:量化投资中被低估的“定价因子“》关于约束模型描述。总之节省算力时间能源提高探索效率。

大家后续主要做的不是优化:,,,算子和适应度部分我删减大部分,仅保留了基础的以及创建和管理工具,所以要严肃使用的话自己还是要撸起袖子动手添加。(授人以鱼不如授人以渔,总之在此分享主要是受pandaai各位老师同学感召,以及兑现吹过的牛)

关于后续deepseek的使用,直接把代码投喂进去然后问某段代码什么意思,再不行让他给写个测试模块,拷贝下来本地跑出错再回去问。在给出以上代码后,有什么算子的思路让他直接写代码并给出个测试,然后加回去继续跑,循环迭代,,,happy vibe coding~

几个真的优化点可以是性能上的,CPU_GPU协同,利用scikit-learn工具超参数优化(作者Trevor Stephens强调兼容scikit-learn主要原因之一),前沿的算子自动化定义,分类器,特征转化器的使用。

关于gplern一些有用的资源:
https://github.com/trevorstephens/gplearn
https://gplearn.readthedocs.io/en/stable/
https://docs.dolphindb.cn/zh/tutorials/gplearn.html

除gplearn,pandaai,dolphindb外,deepseek对本文亦有重大贡献。

哔哔结束,代码链接:
https://pan.baidu.com/s/1jjum8MnvLj_b9Iu9KVHweA?pwd=zjcm 提取码: zjcm

最后一次编辑于 22天前 0

暂无评论

推荐阅读
  18302000965   2025年10月12日   136   0   1 Python