Test Data for Trading—Sentiment Analysis 代码复现(四)

Test Data for Trading—Sentiment Analysis系列文章是对《Machine Learning for Algorithmic Trading》第十四章内容的讲解以及相关代码复现。因为中英文的文本分析存在较大差异,顾此系列没有选取中国市场的材料做为代码复现的数据,而是选择书后源代码进行复现。

用朴素贝叶斯对新闻文章进行分类
一旦文本数据使用前几节提到的NLP技术被转换为数字特征,文本分类就变得和其他分类一样。
朴素贝叶斯算法在文档分类领域中非常流行,因为它的计算成本和内存要求低,方便在大型的高维数据集上进行训练。它的预测性能可以与更复杂的模型竞争,并且因为成功用于垃圾邮件检测而非常出名。该模型依赖于贝叶斯定理和假设,它假设各种特征是相互独立的。换句话说,对于一个给定的结果,知道一个特征(例如, 一个文档中存在某一个token)并不能提供关于另一一个特征的任何信息。

“ 朴素贝叶斯,它是一种简单但极为强大的预测建模算法。之所以称为朴素贝叶斯,是因为它假设每个输入变量是独立的。这个假设很硬,现实生活中根本不满足,但是这项技术对于绝大部分的复杂问题仍然非常有效。

朴素贝叶斯模型由两种类型的概率组成: 1、每个类别的概率P(Cj); 2、每个属性的条件概率P(Ai|Cj)。”

#配置环境
from pathlib import Path
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, confusion_matrix

我们先用之前导入的BBC文章来说明朴素贝叶斯模型对新闻文章的分类起到的作用。

1、创建分层的训练集和测试集
我们将数据分成默认的75:25的训练-测试集,确保测试集的类别与训练集密切相关。

y = pd.factorize(docs.topic)[0]
X = docs.body
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1, stratify=y)

2、将文本数据向量化
继续从训练集中学习词汇,并使用默认设置的CountVectorizer对两个数据集进行转换,以获得近26000个特征。

vectorizer = CountVectorizer()#使用CountVectorizer对数据集进行转换
X_train_dtm = vectorizer.fit_transform(X_train)
X_test_dtm = vectorizer.transform(X_test)
X_train_dtm.shape, X_test_dtm.shape#两个数据集中token的shape形式
((1668, 25951), (557, 25951))#最终输出获得了将近26000个特征,1668和557是样本数

3、训练多层级朴素贝叶斯模型
用准确性来评估多类预测的结果,发现默认的分类器的准确度几乎达到了98%。

accuracy_score(y_test, y_pred_class)#检测分类准确性
0.9712746858168761#输出的默认设置的分类器的准确度将近98%

4、混淆矩阵

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。[1]在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。

pd.DataFrame(confusion_matrix(y_true=y_test, y_pred=y_pred_class))#画混淆矩阵

在这里插入图片描述混淆矩阵对角线上的数字代表是分类正确的文档,因为行和列是相同的。比如说矩阵第一行第三列的数字6代表着有6个是0类的文档被分到了第二类,以此类推可以用混淆矩阵来描述分类器的准确度。

更多 机器学习、投资管理 相关的内容,均收录在微信公众号 HI投量化俱乐部
欢迎扫码关注
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值