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

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

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

使用 Doc2vec 进行情感分析

文本分类需要组合多个词嵌入。一个常见的方法是对文档中每个词的嵌入向量进行平均。这使用所有嵌入的信息,并有效地使用向量加法来到达嵌入空间中的不同位置。但是,有关单词顺序的相关信息会丢失。

相比之下,用于生成文本片段(如段落或产品评论)的嵌入的最先进模型是使用文档嵌入模型Doc2vec。这个模型是 Word2vec 作者在发布其原创贡献后不久开发的。

与 Word2vec 类似,Doc2vec也有两种类型:

  • 分布式词袋DBOW)模型对应于 Word2vec 的 CBOW 模型。文档向量是通过训练网络在预测目标词的合成任务中产生的,该任务基于上下文词向量和文档的文档向量。
  • 分布式记忆DM)模型对应于 Word2vec Skip-Gram 架构。通过训练神经网络来预测目标单词,使用整个文档的文档向量。

Gensim 的 Doc2vec 类实现了这种算法。

在 Yelp 情感数据上训练 Doc2vec

我们使用 500,000 条 Yelp 评论(参见第十三章,处理文本数据)的随机样本,以及它们的相关星级评分(参见 notebook yelp_sentiment):

df = (pd.read_parquet('yelp_reviews.parquet', engine='fastparquet')
          .loc[:, ['stars', 'text']])
stars = range(1, 6)
sample = pd.concat([df[df.stars==s].sample(n=100000) for s in stars])

我们使用简单的预处理来删除停用词和标点符号,使用 NLTK 的分词器并删除少于 10 个标记的评论:

import nltk
nltk.download('stopwords')
from nltk import RegexpTokenizer
from nltk.corpus import stopwords
tokenizer = RegexpTokenizer(r'\w+')
stopword_set = set(stopwords.words('english'))
def clean(review):
    tokens = tokenizer.tokenize(review)
    return ' '.join([t for t in tokens if t not in stopword_set])
sample.text = sample.text.str.lower().apply(clean)
sample = sample[sample.text.str.split().str.len()>10]

创建输入数据

gensim.models.doc2vec 类以 TaggedDocument 格式处理文档,其中包含标记化的文档以及允许在训练后访问文档向量的唯一标记:

sentences = []
for i, (_, text) in enumerate(sample.values):
    sentences.append(TaggedDocument(words=text.split(), tags=[i]))

训练界面与 word2vec 类似,但有额外的参数来指定 Doc2vec 算法:

model = Doc2vec(documents=sentences,
                dm=1,          # algorithm: use distributed memory
                dm_concat=0,   # 1: concat, not sum/avg context vectors
                dbow_words=0,  # 1: train word vectors, 0: only doc 
                                    vectors
                alpha=0.025,   # initial learning rate
                size=300,
                window=5,
                min_count=10,
                epochs=5,
                negative=5)
model.save('test.model')

您还可以使用 train() 方法来继续学习过程,并且,例如,逐渐降低学习率:

for _ in range(10):
    alpha *= .9
    model.train(sentences,
                total_examples=model.corpus_count,
                epochs=model.epochs,
                alpha=alpha)

因此,我们可以将文档向量作为特征来访问,以训练情感分类器:

X = np.zeros(shape=(len(sample), size))
y = sample.stars.sub(1) # model needs [0, 5) labels
for i in range(len(sample)):
 X[i] = model[i]

我们将训练一个 lightgbm 梯度提升机,如下所示:

  1. 从训练集和测试集创建 lightgbm Dataset 对象:
train_data = lgb.Dataset(data=X_train, label=y_train)
test_data = train_data.create_valid(X_test, label=y_test)
  1. 定义具有五个类别的多类模型的训练参数(否则使用默认值):
params = {'objective'  : 'multiclass',
          'num_classes': 5}
  1. 对模型进行 250 次迭代的训练,并监视验证集错误:
lgb_model = lgb.train(params=params,
                      train_set=train_data,
                      num_boost_round=250,
                      valid_sets=[train_data, test_data],
                      verbose_eval=25)
  1. Lightgbm 对所有五个类别进行概率预测。我们使用 np.argmax() 来获取具有最高预测概率的列索引来获取类别预测:
y_pred = np.argmax(lgb_model.predict(X_test), axis=1)
  1. 我们计算准确率评分来评估结果,并看到相对于五个平衡类别的基线 20%,准确率提高了 100% 以上:
accuracy_score(y_true=y_test, y_pred=y_pred)
0.44955063467061984
  1. 最后,我们通过混淆矩阵来更仔细地查看每个类别的预测:
cm = confusion_matrix(y_true=y_test, y_pred=y_pred)
cm = pd.DataFrame(cm / np.sum(cm), index=stars, columns=stars)
  1. 并将结果可视化为 seaborn 热图:
sns.heatmap(cm, annot=True, cmap='Blues', fmt='.1%')


总之,doc2vec 方法使我们能够在不经过太多调整的情况下,比一个简单的基准模型取得了非常大的测试准确率改进。如果我们只选择顶部和底部的评论(分别为五星和一星),并训练一个二元分类器,则使用每个类别的 250,000 个样本时,AUC 分数可以达到 0.86 以上。

附加内容 - 用于翻译的 Word2vec

该 notebook 翻译演示了一个语言中编码的关系通常对应于另一种语言中的类似关系。

它说明了如何使用单词向量通过将单词向量从一个语言的嵌入空间投影到另一个语言的空间使用翻译矩阵来翻译单词和短语。

摘要

本章以词嵌入如何更有效地为个别标记编码语义开始,这比我们在第十三章中使用的词袋模型更为有效。我们还看到了如何通过线性向量算术验证嵌入,以评估是否正确表示了单词之间的语义关系。

学习词嵌入时,我们使用的浅层神经网络曾经在包含数十亿标记的 Web 数据规模上训练速度很慢。word2vec 模型结合了几种算法创新,显著加速了训练,并为文本特征生成确立了新标准。我们看到了如何使用spaCygensim来使用预训练的词向量,并学会了训练自己的词向量嵌入。然后,我们将word2vec模型应用于 SEC 提交文件。最后,我们介绍了doc2vec扩展,它以与单词向量类似的方式学习文档的向量表示,并将其应用于 Yelp 商家评论。

现在,我们将开始第四部分关于深度学习(如前言所述,在线可用),从介绍前馈网络、流行的深度学习框架和大规模高效训练技术开始。

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

相关文章
|
4月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
11月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
434 7
|
5月前
|
并行计算 算法 安全
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
288 0
|
9月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
1139 12
Scikit-learn:Python机器学习的瑞士军刀
|
9月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
553 8
|
10月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
386 6
|
11月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
11月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
12月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。

推荐镜像

更多