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

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

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

如何训练自己的单词向量嵌入

许多任务需要嵌入或特定领域的词汇,而基于通用语料库的预训练模型可能无法很好地或根本无法表示。标准 Word2vec 模型无法为词汇表中不存在的单词分配向量,而是使用降低其预测价值的默认向量。

例如,在处理行业特定文件时,词汇表或其使用可能随着时间推移而变化,因为新技术或产品出现。因此,嵌入也需要相应地发展。此外,企业盈利发布使用的语言不完全反映在基于维基百科文章预训练的 GloVe 向量中。

我们将使用 Keras 库来说明 Word2vec 架构,我们将在下一章中更详细地介绍,并使用 Word2vec 作者提供的代码的 gensim 适配更高效的代码。Word2vec 笔记本包含额外的实现细节,包括 TensorFlow 实现的参考。

Keras 中的 Skip-Gram 架构

为了说明 Word2vec 网络架构,我们使用 TED Talk 数据集,该数据集具有对齐的英文和西班牙文字幕,我们首次在第十三章中介绍了处理文本数据

笔记本包含将文档标记化并为词汇表中的每个项目分配唯一 ID 的代码。我们要求语料库中至少出现五次,并保留 31300 个标记的词汇表。

噪声对比估计

Keras 包括一个make_sampling_table方法,允许我们创建一个训练集,其中上下文和噪声词与相应的标签配对,根据它们的语料库频率进行采样。

结果是 2700 万个正面和负面的上下文和目标对的例子。

模型组件

Skip-Gram模型为词汇表中的每个项目包含一个 200 维嵌入向量,导致 31300 x 200 可训练参数,加上两个用于 sigmoid 输出。

在每次迭代中,模型计算上下文和目标嵌入向量的点积,通过 sigmoid 产生概率,并根据损失的梯度调整嵌入。

使用 TensorBoard 可视化嵌入

TensorBoard 是一种可视化工具,允许将嵌入向量投影到三维空间中,以探索单词和短语的位置。

使用 gensim 从 SEC 备案中学习的单词向量

在本节中,我们将使用 gensim 从美国年度证券交易委员会(SEC)备案中学习单词和短语向量,以说明单词嵌入对算法交易的潜在价值。在接下来的几节中,我们将将这些向量与价格回报结合使用作为特征,训练神经网络来根据安全备案的内容预测股票价格。

特别是,我们使用一个数据集,其中包含 2013-2016 年间上市公司提交的超过 22,000 份 10-K 年度报告,其中包含财务信息和管理评论(参见第三章,金融替代数据)。对于大约一半的公司的 11-K 备案,我们有股价以标记预测建模的数据(有关数据来源和sec-filings文件夹中笔记本的引用,请参阅详细信息)。

预处理

每个备案都是一个单独的文本文件,一个主索引包含备案元数据。我们提取最具信息量的部分,即以下部分:

  • 项目 1 和 1A:业务和风险因素
  • 项目 7 和 7A:管理对市场风险的讨论和披露

笔记本预处理显示如何使用 spaCy 解析和标记文本,类似于第十四章中采用的方法,主题建模。我们不对单词进行词形还原处理,以保留单词用法的细微差别。

自动短语检测

我们使用gensim来检测短语,就像之前介绍的那样。Phrases模块对标记进行评分,而Phraser类相应地转换文本数据。笔记本展示了如何重复此过程以创建更长的短语:

sentences = LineSentence(f'ngrams_1.txt')
phrases = Phrases(sentences=sentences,
                  min_count=25,  # ignore terms with a lower count
                  threshold=0.5,  # only phrases with higher score
                  delimiter=b'_',  # how to join ngram tokens
                  scoring='npmi')  # alternative: default
grams = Phraser(phrases)
sentences = grams[sentences]

最频繁的二元组包括common_stockunited_statescash_flowsreal_estateinterest_rates

模型训练

gensim.models.Word2vec类实现了之前介绍的 SG 和 CBOW 架构。Word2vec 笔记本包含额外的实现细节。

为了方便内存高效的文本摄取,LineSentence类从提供的文本文件中创建一个生成器,其中包含单独的句子:

sentence_path = Path('data', 'ngrams', f'ngrams_2.txt')
sentences = LineSentence(sentence_path)

Word2vec类提供了先前介绍的配置选项:

model = Word2vec(sentences,
                 sg=1,    # 1=skip-gram; otherwise CBOW
                 hs=0,    # hier. softmax if 1, neg. sampling if 0
                 size=300,      # Vector dimensionality
                 window=3,      # Max dist. btw target and context word
                 min_count=50,  # Ignore words with lower frequency
                 negative=10,  # noise word count for negative sampling
                 workers=8,     # no threads 
                 iter=1,        # no epochs = iterations over corpus
                 alpha=0.025,   # initial learning rate
                 min_alpha=0.0001 # final learning rate
                )

笔记本展示了如何持久化和重新加载模型以继续训练,或者如何将嵌入向量单独存储,例如供 ML 模型使用。

模型评估

基本功能包括识别相似的单词:

model.wv.most_similar(positive=['iphone'], 
                      restrict_vocab=15000)
                 term  similarity
0              android    0.600454
1           smartphone    0.581685
2                  app    0.559129

我们也可以使用正负贡献来验证单个类比:

model.wv.most_similar(positive=['france', 'london'], 
                      negative=['paris'], 
                      restrict_vocab=15000)
             term  similarity
0  united_kingdom    0.606630
1         germany    0.585644
2     netherlands    0.578868

参数设置的性能影响

我们可以使用类比来评估不同参数设置的影响。以下结果表现突出(详细结果请参见models文件夹):

  • 负采样优于分层 softmax,同时训练速度更快。
  • Skip-Gram 架构优于 CBOW 给定的目标函数
  • 不同的min_count设置影响较小,50 为最佳表现的中间值。

使用最佳表现的 SG 模型进行进一步实验,使用负采样和min_count为 50,得到以下结果:

  • 比五更小的上下文窗口会降低性能。
  • 更高的负采样率提高了性能,但训练速度慢了。
  • 更大的向量提高了性能,大小为 600 时的准确率最高,为 38.5%。

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

相关文章
|
24天前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
1月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
106 5
|
1月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
2月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
169 26
|
2月前
|
并行计算 算法 安全
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
139 0
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
152 0
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
193 0
|
2月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
273 4
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
395 4
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
217 3

热门文章

最新文章

推荐镜像

更多