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

相关文章
|
1天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
|
3天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
18 2
|
3天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
16 1
|
3天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
15 1
|
9天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
19 3
|
12天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
33 5
|
14天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
24 1
|
19天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
3天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
5天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。

热门文章

最新文章

下一篇
无影云桌面