dataloader重构与keras入门体验

news2025/1/22 9:10:05

原创文章第117篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。

北京疫情昨天突破4000,社会面800+。看来三天的预期过于乐观了,不知道如何发展。如同资本市场的短期走势,没有人可以预测。但往前看三年,相信一切现在看来天大的事,都不再是问题。

继续优化我们的AI量化平台。

01 dataloader加缓存

dataloader做数据特征工程与数据自动标注。因子一多,计算量较大,每次启动都计算一次,影响效率,我们可以借助hdf5存储dataframe的能力,把计算好的因子与标注结果存储起来,下一次直接从缓存里加载。

数据加载器从数据库、csv文件或者hdf5存储格式中读取数据,通常是一个个symbol对应的时间序列数据,以pandas的dataframe的格式加载入内存。而后使用表达式管理器对特征进行计算,并保存到对应的dataframe里。

# encoding:utf8
import pandas as pd
from loguru import logger

from engine.datafeed.expr.expr_mgr import ExprMgr
from engine.datafeed.datafeed_hdf5 import Hdf5DataFeed
from engine.config import DATA_DIR_HDF5_CACHE


class Dataloader:
    def __init__(self, symbols, names, fields, load_from_cache=False):
        self.expr = ExprMgr()
        self.feed = Hdf5DataFeed()
        self.symbols = symbols
        self.names = names
        self.fields = fields

        with pd.HDFStore(DATA_DIR_HDF5_CACHE.resolve()) as store:
            key = 'features'
            if load_from_cache and '/' + key in store.keys():  # 注意判断keys需要前面加“/”

                logger.info('从缓存中加载...')
                self.data = store[key]
            else:
                self.data = self.load_one_df()
                store[key] = self.data

    def load_one_df(self):
        dfs = self.load_dfs()
        all = pd.concat(dfs)
        all.sort_index(ascending=True, inplace=True)
        all.dropna(inplace=True)
        self.data = all
        return all

    def load_dfs(self):
        dfs = []
        for code in self.symbols:
            # 直接在内存里加上字段,方便复用
            df = self.feed.get_df(code)
            for name, field in zip(self.names, self.fields):
                exp = self.expr.get_expression(field)
                # 这里可能返回多个序列
                se = exp.load(code)
                if type(se) is pd.Series:
                    df[name] = se
                if type(se) is tuple:
                    for i in range(len(se)):
                        df[name + '_' + se[i].name] = se[i]
            df['code'] = code
            dfs.append(df)

        return dfs

dataloader接受4个参数:symbols, names, fields和load_from_cache。

symbols:需要加载的证券列表。

names: 特征名称。

fields: 因子表达式列表。

load_from_cache:是否从缓存中加载。

Load_dfs,按symbol进行遍历。每一个symbol原始dataframe读入内存后,对names和fields需要计算的特征列,计算因子值,并保存到datafram里。

Load_one_df把load_dfs返回的多个dataframes合并成一个dataframe返回,并保存到缓存中备用。

02 随机森林升级为boosting GBDT

from sklearn.ensemble import RandomForestRegressor,AdaBoostRegressor,HistGradientBoostingRegressor

e.add_model(SklearnModel(AdaBoostRegressor()), split_date='2020-01-01', feature_names=feature_names)

GBDT的几大算法都有类似的sklearn的接口。

03 Keras深度学习框架

深度学习是当下最前沿的人工智能技术之一。但深度学习比起传统机器学习,比如sklearn框架,学习门槛要高得多。深度学习需要使用者自己搭建网络结构,设定学习率,选择优化目标函数等。功能灵活且强大,学习曲线也高。

最热门的两个深度学习框架当属factbook的pytorch和google的tensorflow。纯粹比较两个框架而言,pytorch的学习曲线要比tensorflow低得多,但仍然要求初学者有矩阵运算,微积分等的数学知识。

Keras的出现,大幅降低的tensorflow的使用门槛。

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的成本把你的想法转换为实验结果,是做好研究的关键。

官方给出的使用场景:

·允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性)。

·同时支持卷积神经网络和循环神经网络,以及两者的组合。

·在 CPU 和 GPU 上无缝运行。

Keras最大的优点就是简单而快速的原型设计,这一点对于初学者非常重要。我们的目标是量化投资,把深度学习应用于量化,而不是研究深度学习细节本身,所以,能够最小代价满足我们的诉求是关键。后续选择深度强化学习的框架也同样遵从这样的原则。

keras内置数据集:

数据转换:把N个28*28的数据,转为N*784的二维数据:

标签转为one hot的格式:

真正建模的代码很短:

10个epochs,准确率为92%。

近期文章:

ETF轮动+RSRS择时,加上卡曼滤波:年化48.41%,夏普比1.89

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python性能优化

正文 python为什么性能差: 当我们提到一门编程语言的效率时:通常有两层意思,第一是开发效率,这是对程序员而言,完成编码所需要的时间;另一个是运行效率,这是对计算机而言,完成计算任…

Elasticsearch 8.X DSL 如何优化更有助于提升检索性能?

1、企业级实战 DSL(数据已经脱敏) 2、大家可以看一下,能发现哪些问题? 根据我的实战和咨询经验,我发现如下几个问题。当然,这是在和球友交流确认问题之后总结出来的。2.1 问题1:bool 组合嵌套过…

动态加载布局的技巧

文章目录动态加载布局的技巧使用限定符使用最小宽度限定符动态加载布局的技巧 使用限定符 在平板上面大多数时候采用的双页的模式,程序会在左侧列表上显示一个包含子项列表,右侧的面版会显示详细的内容的因为平板具有足够大的屏幕.完全能够显示两页的内容.但是在手机上手机只能…

事业编招聘:雄安新区公开选聘专业骨干人才

河北雄安新区公开选聘专业骨干人才公告 根据河北雄安新区建设发展工作需要,决定面向全国机关、企事业单位选聘部分专业骨干人才,现将有关事项公告如下: 一、选聘计划 共选聘20名专业骨干人才。 二、选聘范围 全国机关和企事业单位工作人员。…

Java包装类

为什么有包装类? 在Java中,基本数据类型不是继承自Object,为了在泛型中可以支持基本数据类型,Java给每个基本数据类型都对应了一个包装类。【基本数据类型不符合面向对象思想,基本类型不是对象,从而基本数据…

机器学习中的数学原理——梯度下降法(最速下降法)

好久没更新了,确实是有点懒了,主要是这两天返乡在隔离(借口)。这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言&#xff0…

开放一批PCB资源(二)

这些板卡,都已经停产,现其PCB和原理图对外开放,都是cadence格式。 有需要的加我微信联系。(微信:18633364981) 这是开放的第二批,后续还有。这一批的价格象征性的收费每个 2000元。 这些板卡…

【操作系统基础】系统接口与系统调用

本文参考MOOC哈工大操作系统课程与课件 主要基于Linux 0.11系统展开 ”Author:Mayiming“ 文章目录一、操作系统接口1. 什么是操作系统接口?2. 操作系统接口体现在哪?3. 命令行是怎么执行代码的?4. 图形界面是怎么执行代码的&…

【Pytorch】Anaconda安装Pytorch详解教程(踩坑经验)

文章目录1、查看本机的CUDA版本2、更新NVIDIA驱动程序3、创建并激活Anaconda虚拟环境4、安装Pytorch5、安装过程中的错误6、检验安装结果未来可期1、查看本机的CUDA版本 cmd命令行输入nvidia-smi 2、更新NVIDIA驱动程序 NVIDIA官网:https://www.nvidia.cn/ 根据…

12、Mybatis搭建流程

Mybatis搭建流程 第一步&#xff1a;引入jar包依赖 第二步&#xff1a;搭建mybatis核心配置文件mybatis-config.xml 一般就四个配置 <properties<typeAliases<Environments<mappers里面内容&#xff1a; mybatis核心配置文件的标签顺序 "(properties?,s…

什么是网站权重?网站权重查询方法有哪些?

什么是网站权重&#xff1f;网站权重查询方法有哪些&#xff1f; 什么是网站权重&#xff1f; 网站权重是搜索引擎给网站赋予的权威值。 网站权重不等于网站排名&#xff0c;但是影响网站排名。 网站权重查询的方法&#xff1a; 方法一&#xff1a;用SEO查询工具。 具体操作如下…

进程通信(1) ----- 无名管道和有名管道

文章目录一、实验目的二、实验内容三、实验要求四、实验步骤及操作五、程序源码1. 普通管道 piperw.c2. 无名管道 wrfifo.c3. 有名管道 rdfifo.c一、实验目的 1.了解操作系统中的无名管道和有名管道 2.掌握进程通信中的管道编程模型 二、实验内容 管道是一种进程间通信的方式…

day13_面向对象的三大特征之一(封装)

封装概述 为什么需要封装&#xff1f; 现实生活中&#xff0c;每一个个体与个体之间是有边界的&#xff0c;每一个团体与团体之间是有边界的&#xff0c;而同一个个体、团体内部的信息是互通的&#xff0c;只是对外有所隐瞒。例如&#xff1a;我们使用的电脑&#xff0c;内部…

Java框架篇(来自硅谷的面试题)

目录 一 简单的谈一下SpringMVC的工作流程&#xff1f; 二 说出Spring或者SpringMVC中常用的5个注解&#xff0c;并解释含义 三 简述SpringMVC中如何返回JSON数据&#xff08;北京&#xff09; 四 谈谈你对Spring的理解 五 Spring中常用的设计模式 六 Spring循环…

IDA安装使用

最近学逆向&#xff0c;先备一套工具吧&#xff0c;IDA名声在外&#xff0c;首当其冲&#xff01;&#xff01; 内容主要整理自别的博客&#xff0c; Linux下安装IDA 链接: https://pan.baidu.com/s/1p9elz1a34872LsY1WLJmlA?pwdis2u 这个ida版本为32bit Linux系统准备的&…

Linux生产者消费者与信号量

目录 一.生产者消费者概念 二.模拟实现基于阻塞队列的生产消费模型 2.1概念 2.2构造阻塞队列 三.信号量 3.1原理 3.2信号量函数 3.3信号量模拟互斥功能 一.生产者消费者概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。 生产者和消费者彼此之间…

【C语言】十六进制转换为十进制

目录 题目描述 补充知识&#xff1a; 算法分析 优化算法 写在最后 题目描述 输入一个十六进制数字串&#xff0c;将其转换成为对应的整数并输出转换结果&#xff0c;遇到非十六进制数字或字符串结束符&#xff08;\0&#xff09;结束转换。 注意&#xff1a; 输入的字符…

【Java多线程】初识线程及三种创建方式

➤ Java多线程编程【一文全解】 文章目录线程简介进程的创建> 继承 Thread 类> 实现 Runnable 接口> 实现 Callable 接口线程简介 普通的程序中&#xff0c;方法的调用是执行到方法的时候&#xff0c;程序跳转到方法体中进行&#xff0c;是按照顺序进行的&#xff0c;…

说说未来趋势 「元宇宙」是什么?

最近「元宇宙」概念大火&#xff0c;连星爷等各行各业的各路大佬都可以传出消息布局进入这一个领域&#xff0c;那么这是不是意味这IT信息化时代的下一个风口&#xff0c;就是元宇宙呢&#xff1f;按小郭说呀&#xff0c;这目前来看&#xff0c;这个趋势是必然的&#xff0c;就…

Spirng 痛苦源码学习(一)——总起spring(一)

文章目录前言一、总览Spring的bean1&#xff09;bean的过程【先了解具体的生命周期后面弄】2&#xff09;hello spring 简单bean操作二、总览AOP- 1、test coding- 2、- debug- 3、- 总结debug三、总览事务- 1、- test coding- 2、 debugging- 3、 事务失效- 4、事务总结前言 …