Python 机器学习算法交易实用指南(五)(5)

简介: Python 机器学习算法交易实用指南(五)

Python 机器学习算法交易实用指南(五)(4)https://developer.aliyun.com/article/1523713

不做免费午餐

没有系统——计算机程序或人类——有基础可靠地预测新样本的结果,超出了它在训练期间观察到的范围之外。唯一的出路是具有一些额外的先验知识或做出超出训练样本范围的假设。我们从本书的第七章,线性模型 和 第八章,时间序列模型,到非线性集成模型的广泛范围的算法进行了讨论,如第十章,决策树和随机森林 和 第十一章,梯度提升机,以及本书第四部分的各个章节中的神经网络。

我们看到,线性模型做出了一个强烈的假设,即输入和输出之间的关系具有非常简单的形式,而稍后讨论的模型旨在学习更复杂的函数。虽然显而易见简单模型在大多数情况下会失败,但复杂模型并不总是更好。如果真实关系是线性的,但数据是嘈杂的,复杂模型将会学习噪音作为其假定存在的复杂关系的一部分。这就是“没有免费午餐定理”的基本思想,该定理指出没有一种算法在所有任务中都是普遍优越的。在某些情况下的良好拟合会以在其他情况下的性能不佳为代价。

定制算法选择的关键工具是数据探索和基于对模型做出的假设的理解进行的实验。

管理偏差-方差权衡

适应算法到数据的挑战有一个不同的视角,即偏差和方差之间的权衡,这会导致除了数据的自然噪音之外的预测误差。一个简单的模型如果没有充分捕捉到数据中的关系,将会欠拟合并表现出偏差,即,会产生系统性的错误预测。一个过于复杂的模型会过拟合,并且除了任何信号外还会学习噪声,因此结果会对不同样本显示出很多方差。

在模型选择和优化过程的任何给定迭代中,诊断这种权衡的关键工具是学习曲线。它显示了训练和验证误差如何取决于样本大小。这使我们能够在不同的选项之间做出决定以改善性能:调整模型的复杂性或获取更多数据点。

训练误差越接近人类或其他基准,模型过拟合的可能性就越大。低验证误差告诉我们我们很幸运地找到了一个好模型。如果验证误差很高,我们就没有。然而,如果随着训练大小的增加而持续下降,更多数据可能有所帮助。如果训练误差很高,更多的数据不太可能有所帮助,我们应该增加特征或使用更灵活的算法。

定义目标模型目标

机器学习过程中的第一步之一是为算法定义一个优化的目标。有时,选择很简单,例如在回归问题中。分类任务可能更加困难,例如,当我们关心精确率和召回率时。将相互冲突的目标合并到一个单一指标中,如 F1 得分,有助于聚焦优化工作。我们还可以包括需要满足而不是优化的条件。我们还看到,强化学习完全取决于定义正确的奖励函数来指导代理的学习过程。

优化验证测试

Andrew Ng(请参见 GitHub 上的参考资料:github.com/PacktPublishing/Hands-On-Machine-Learning-for-Algorithmic-Trading)强调了由于学习算法或优化算法的问题而导致性能不佳之间的区别。像神经网络这样的复杂模型假设非线性关系,而优化算法的搜索过程可能会陷入局部而不是全局最优解。

例如,如果一个模型未能正确翻译一个短语,则测试会比较正确预测和搜索算法发现的解决方案的分数。如果学习算法为正确解决方案得分更高,则搜索算法需要改进。否则,学习算法正在优化错误的目标。

警惕反向测试过拟合

我们在整本书中反复讨论了由于过度拟合历史数据而产生的假发现的风险。第五章,策略评估,概述了主要驱动因素和潜在的补救措施。低噪声与信号比和相对较小的数据集(与网络规模图像或文本数据相比)使得这一挑战在交易领域尤为严重。意识至关重要,因为数据和应用 ML 工具的易获取性会将风险指数级增加。

没有逃脱,因为没有预防的方法。然而,我们提出了调整反向测试指标以考虑重复试验的方法,比如通货紧缩夏普比率。在制定实时交易策略时,阶段性纸上交易和在市场执行过程中密切监测绩效需要成为实施过程的一部分。

如何从黑匣子模型中获得见解

深度神经网络和复杂集成模型在被视为不可透明的黑匣子模型时可能会引起怀疑,特别是考虑到反向测试过拟合的风险。我们在第十一章中介绍了几种方法,以了解这些模型如何进行预测,梯度提升机

除了传统的特征重要性度量之外,最近博弈论创新的SHapley Additive exPlanationsSHAP)是理解复杂模型机制的重要一步。SHAP 值允许对特征及其值进行精确归因,从而更容易在特定投资目标的市场行为理论光下验证模型的逻辑。除了理论基础外,确切的特征重要性得分和预测的归因还允许更深入地洞察感兴趣的投资结果的驱动因素。

另一方面,围绕模型预测透明度是否应该成为目标本身存在一些争议。深度学习发明者之一 Geoffrey Hinton 认为,人类决策通常也是模糊的,机器也应该根据其结果进行评估,就像我们期望投资经理一样。

实践中的交易机器学习

当您继续将众多工具和技术整合到您的投资和交易流程中时,有许多事情可以成为您努力的焦点。如果您的目标是做出更好的决策,您应该选择与您当前技能集相符的现实而雄心勃勃的项目。这将帮助您开发一个高效的工作流程,支持您具有生产力的工具,并获得实际经验。

我们将简要列出一些有用的工具,以扩展本书涵盖的 Python 生态系统,并参考 GitHub 上列出的链接进行更深入的探讨。这些包括大数据技术,最终将有必要以规模实现用于交易策略的 ML。我们还将列出一些允许您使用 Python 实施交易策略的平台,通常具有数据源和 ML 算法和库的访问权限。

数据管理技术

数据在 ML 流程中的核心作用要求熟悉一系列技术,以便在规模上存储、转换和分析数据,包括使用云服务,如 Amazon Web Services、Azure 和 Google Cloud。

数据库系统

数据存储意味着使用数据库,历史上由使用 SQL 以商业提供者(如 Oracle 和 Microsoft)和开源实现(如 PostgreSQL 和 MySQL)的明确定义的表格格式存储和检索数据的关系数据库管理系统RDBMS)主导。最近,出现了一些替代方案,通常被集体标记为 NoSQL,但相当多样,即:

  • 键值存储:快速读/写对象。我们在第二章中介绍了 HDF5 格式,市场和基本数据,它有助于快速访问 pandas DataFrame。
  • 列存储:利用列中数据的同质性来实现压缩和更快的基于列的操作,如聚合。在流行的 Amazon Redshift 数据仓库解决方案、Apache Parquet、Cassandra 或 Google 的 Big Table 中使用。
  • 文档存储:设计用于存储不符合关系数据库所需的严格模式定义的数据。由使用 JSON 或 XML 格式的网络应用程序所普及,我们在第四章 Alpha Factor Research 中遇到过。例如,在 MongoDB 中使用。
  • 图数据库:设计用于存储具有节点和边的网络,并专注于网络指标和关系的查询。用于 Neo4J 和 Apache Giraph。

已经有一些转变朝向了关系数据库系统所建立的约定。Python 生态系统促进了与许多标准数据源的交互,并提供了快速的 HDF5 和 Parquet 格式,正如本书中所展示的。

大数据技术 - Hadoop 和 Spark

规模化的数据管理,即数百 GB 甚至更多,需要使用形成集群的多台机器来进行读取、写入和计算操作,并行进行,即分布在各种机器上。

Hadoop 生态系统已经成为一个分布式存储和处理大数据的开源软件框架,使用了 Google 开发的 MapReduce 编程模型。生态系统在 Apache 基金会的框架下变得多样化,并且今天包括了许多项目,涵盖了规模化数据管理的不同方面。Hadoop 中的关键工具包括:

  • Apache Pig:使用 MapReduce 实现大规模 提取-转换-加载 (ETL) 流水线的数据处理语言,由 Yahoo 开发
  • Apache Hive:在 Facebook 开发的交互式 SQL 查询的事实标准,可查询 PB 级数据
  • Apache HBASE:用于实时读/写访问的 NoSQL 数据库,线性扩展到数十亿行和数百万列,并可以使用各种不同的模式组合数据源。

Apache Spark 已成为集群上交互式分析最流行的平台。MapReduce 框架允许并行计算,但需要反复的磁盘读写操作以确保数据冗余。Spark 大大加速了规模化计算,原因是弹性分布式数据RDD)结构,可以进行高度优化的内存计算。这包括了像梯度下降这样的多个 ML 算法所需的迭代计算。

机器学习工具

我们在这本书中涵盖了 Python 生态系统的许多库。Python 已经发展成为数据科学和机器学习的首选语言,一系列开源库不断多样化和成熟,构建在强大的科学计算库 NumPy 和 SciPy 的稳固核心之上。显著促进了 Python 在数据科学领域的使用的流行 pandas 库正在计划其 1.0 版本的发布。scikit-learn 接口已经成为现代机器学习库(如 xgboostlightgbm)的标准,它经常与各种工作流自动化工具(如 GridSearchCVPipeline)交互,我们在整本书中都反复使用了这些工具。

有几个提供机器学习工作流的服务提供商:

  • H2O.ai (www.h2o.ai/) 提供了将云计算与机器学习自动化集成的 H2O 平台。它允许用户将数千个潜在模型与其数据拟合以探索数据中的模式。它在 Python、R 和 Java 中都有接口。
  • DataRobot 旨在通过提供一个快速构建和部署预测模型的平台,来自动化模型开发过程,可在云端或本地部署。
  • Dataiku 是一个协作数据科学平台,旨在帮助分析师和工程师探索、原型、构建和交付自己的数据产品。

还有一些由公司主导的开源倡议,它们在 Python 生态系统上构建和扩展:

  • 定量对冲基金 Two Sigma 在 beakerx 项目下向 Jupyter Notebook 环境贡献了量化分析工具。
  • 彭博社已将 Jupyter Notebook 集成到其终端,以便对其金融数据进行交互式分析。

在线交易平台

开发利用机器学习的交易策略的主要选项是在线平台,这些平台经常寻找并分配资金给成功的交易策略。流行的解决方案包括 Quantopian、Quantconnect、QuantRocket 以及最近关注高频交易的 Alpha Trading Labs。

此外,交互经纪商IB)提供了一个 Python API,您可以使用它来开发自己的交易解决方案。

Quantopian

我们介绍了 Quantopian 平台,并演示了如何使用其研究和交易环境来分析和测试交易策略与历史数据进行对比。Quantopian 使用 Python 并提供大量教育资料。

Quantopian 主办持续每日比赛,以招募算法为其众包对冲基金组合。Quantopian 为获胜算法提供资金支持。在线交易已于 2017 年 9 月停止,但该平台仍提供大量历史数据,并吸引着活跃的开发者和交易者社区,是讨论想法和向他人学习的良好起点。

QuantConnect

QuantConnect 是另一个开源、社区驱动的算法交易平台,与 Quantopian 竞争。它还提供一个 IDE,用于使用 Python 和其他语言进行算法策略的回测和实时交易。

QuantConnect 还拥有来自世界各地的动态全球社区,并提供许多资产类别的访问,包括股票、期货、外汇和加密货币。它提供与各种经纪人(如 IB、OANDA 和 GDAX)的实时交易集成。

QuantRocket

QuantRocket 是一个基于 Python 的平台,用于研究、回测和运行自动化的量化交易策略。它提供数据收集工具、多个数据供应商、研究环境、多个回测器,以及通过 IB 进行实时和模拟交易。它以支持国际股票交易而自豪,并凭借其灵活性脱颖而出。

QuantRocket 支持多个引擎 — 其自己的 Moonshot,以及用户选择的第三方引擎。虽然 QuantRocket 没有传统的集成开发环境(IDE),但与 Jupyter 集成良好,可以产生类似的功能。QuantRocket 在撰写本文时并不免费,定价从 19 美元/月开始。

结论

我们从强调数字数据的爆炸和 ML 作为投资和交易策略的战略能力的出现开始。这种动态反映了金融以外的全球商业和技术趋势,而且很可能会继续下去,而不是停滞或逆转。许多投资公司刚刚开始利用各种人工智能工具,就像个人正在获得相关的技能,业务流程正在适应这些价值创造的新机会一样,如导论章节所述。

未来还有许多令人兴奋的 ML 应用于交易的发展,可能会进一步推动当前的动能。它们可能在未来几年变得相关,并包括 ML 过程的自动化、合成训练数据的生成和量子计算的出现。这一领域的非凡活力意味着这本身就可以填满一本书,并且旅程将继续保持令人兴奋。

相关文章
|
15天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
44 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
11天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
23 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
8天前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
25 2
|
14天前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
68 8
|
11天前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
在 Python 算法设计中,理解并巧妙运用时间复杂度和空间复杂度的知识,是实现高效、优雅代码的必经之路。通过不断地实践和优化,我们能够在这两个因素之间找到最佳的平衡点,创造出性能卓越的程序。
27 4
|
12天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
30 4
|
10天前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
21 1
|
11天前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
26 2
|
11天前
|
算法 计算机视觉 Python
Python并查集大揭秘:让你在算法界呼风唤雨,秒杀一切复杂场景!
在编程与算法的广袤天地中,总有一些工具如同神兵利器,能够助你一臂之力,在复杂的问题前游刃有余。今天,我们就来深入探讨这样一件神器——Python并查集(Union-Find),看看它是如何让你在算法界呼风唤雨,轻松应对各种复杂场景的。
28 2
|
11天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
30 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
下一篇
无影云桌面