分享

朴素贝叶斯模型:介绍、计算、策略、Python代码

 HZAAAAAAA 2022-11-16 发布于广东

本文摘要

你听说过奥卡姆剃须刀吗?

简而言之,奥卡姆剃须刀的提出者威廉说,“最简单的解决方案几乎总是最好的解决方案。”

但是在一篇关于朴素贝叶斯的文章中,我们为什么要谈论奥卡姆剃须刀呢?实际上,朴素贝叶斯隐含地融入了这一信念,因为它确实是一个简单的模型。让我们看看像朴素贝叶斯模型这样的简单模型如何在交易中使用。

文章目录

  • 朴素贝叶斯是什么?
  • 贝叶斯定理方程
  • 朴素贝叶斯模型的假设
  • 朴素贝叶斯模型的类型
  • 建立朴素贝叶斯模型的步骤
  • Python 中的朴素贝叶斯模型
  • 朴素贝叶斯模型的优点
  • 朴素贝叶斯模型的缺点

朴素贝叶斯是什么?

让我们绕个小圈子,看看朴素贝叶斯中的“贝叶斯”是什么意思。关于概率,基本上有两种学派。一个学派建议,通过计算所有可能事件的概率,然后计算你感兴趣的事件的概率,可以推断出事件发生的概率。

例如,在抛硬币的实验中,你知道正面的概率是1.2,因为这里只有两种可能性,正面或反面。

另一个学派认为,概率更依赖于先验信息以及其他因素。例如,如果一个人说红色是他们最喜欢的颜色的概率是30% ,但是如果他们是恋爱中的婚姻,那么你的结果会因为他们的婚姻状况而有所不同。

这就是所谓的贝叶斯推断,你试图根据一定的条件来计算概率。

如何计算这个条件概率呢? 让我们看看下一节。

贝叶斯定理方程

P(A|B)=P(B|A)∗P(A)/P(B)

假设 A 是一个人说红色是他最喜欢的颜色的事件。现在,让 B 成为这个人结婚的事件。

因此,P (A | B)是 A 说当一个人结婚时红色是他最喜欢的颜色的可能性。

这就是我们要找的条件概率。

在类似的意义上,P (B | A)是当一个人说他最喜欢的颜色是红色时结婚的可能性。

P (A)和 P (B)是各自的概率。

这对我们的交易有什么帮助?

假设我们知道股票的 RSI 值。

现在,如果你想知道 RSI 指数低于40后第二天价格上涨的可能性。好好想想。如果 RSI 在周二低于40,你会希望在周三买入,希望价格会上涨。

这可以用贝叶斯定理来解释。

设 P (A)是价格上涨的概率,P (B)是 RSI 前一天低于40的概率。

现在,我们将用同样的公式计算出如果 RSI 低于40,第二天价格上涨的可能性。

在这里,B 类似于我们在机器学习中定义的特征,IT 也可以作为证据。

等等!如果我们想检查一下相对强度指数低于40以及随机指标的“慢 k”大于“慢 d”,那该怎么办。

从技术上讲,我们可以在 Bayes 定理中加入多个条件来改进我们的概率模型。如果 P (C)是“慢 k”通过“慢 d”的概率,那么贝叶斯定理可以写成:

P(A|B,C)=P(B|A)∗P(C|A)∗P(A) / [P(B)∗P(C)]

虽然这看起来很容易计算,但是如果您向模型添加更多的特性,复杂性就会增加。这就是朴素贝叶斯模型的朴素部分出现的地方。

朴素贝叶斯模型的假设

朴素贝叶斯模型假设 B 和 C 都是独立事件,进一步分母也被删除。

这在很大程度上简化了模型,我们可以简单地把方程写成:

P (A | B,C) = P (B | A) * P (C | A) * P (A)

你必须记住,这个假设在现实生活中可能是不正确的。从逻辑上讲,RSI 和随机指标都是使用相同的变量,即价格数据来计算的。因此,它们并非完全独立。

然而,朴素贝叶斯模型的美丽之处在于,即使这个假设是不正确的,该模型仍然在各种情况下表现良好。

等等,朴素贝叶斯模型只有一种吗?其实有三个。让我们在下一节中找出答案。

朴素贝叶斯模型的类型

根据需求,您可以相应地选择模型。这些模型基于您正在处理的输入数据:

多项式: 这个模型是用来当我们有离散的数据和工作,其分类。一个简单的例子是,我们可以将天气(多云、晴朗、下雨)作为输入,并且我们希望看到在哪个天气中进行了网球比赛。

高斯: 顾名思义,在这个模型中,我们处理的是遵循正态分布的连续数据。一个例子就是举行比赛的体育场的温度。

二项式: 如果输入数据只有是或否(布尔值)会怎样。在这个例子中,我们将使用二项式模型。

Python 的伟大之处在于 sklearn 库集成了所有这些模型。我们可以试着用它来建立我们自己的朴素贝叶斯模型。

建立朴素贝叶斯模型的步骤

在开始编写代码之前,我们将首先尝试理解练习的逻辑。我们将使用从雅虎财经导入的苹果价格数据,我们的数据集是从2010年8月1日至2019年1月1日。

朴素贝叶斯模型:介绍、计算、策略、Python代码

此外,我们将使用两个特性。

  1. RSI 信号-当 RSI 小于40时,此变量设置为1
  2. 当慢 k 大于慢 d 时,这个变量设置为1

最后,我们的目标变量是第二天的返回值。如果第二天的收益是正的,这个值设置为1。

因为我们有二进制值,所以我们将在 python 中使用二项朴素贝叶斯模型。另外,请记住,这是一个只做多的策略,但是您也可以修改它来使用短信号。但是在这种情况下,您必须在策略中添加更多的规则。让我们看看现在的策略。

Python 中的朴素贝叶斯模型

我们将通过首先导入库和数据集来开始我们的策略。

# import Apple dataimport yfinance as yfimport numpy as npimport pandas as pdImport matplotlib.pyplot as pltdata = yf.download('AAPL','2010-01-1', '2019-01-01')data.index = pd.to_datetime(data.index)data.tail(3)
朴素贝叶斯模型:介绍、计算、策略、Python代码

我们将计算指标以及它们的信号值。

import talib as tadata['RSI'] = ta.RSI(data['Close'],14)data.loc[:, 'RSI_signal'] = np.where(data['RSI'] < 40, 1, 0)data['slowk'], data['slowd'] = ta.STOCH(data['High'], data['Low'], data['Adj Close'], fastk_period=14, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)data.loc[:, 'Stoch_signal'] = np.where(data['slowk'] > data['slowd'], 1, 0)

为了得到我们的目标变量,我们将计算我们的收益,并移动1得到第二天的收益。

data['ret1'] = data['Adj Close'].pct_change()data['retFut1'] = data.ret1.shift(-1)

现在我们将定义朴素贝叶斯模型的X和Y变量。

# Define predictor variables (X) and a target variable (y)data = data.dropna()predictor_list = ['RSI_signal','Stoch_signal']X = data[predictor_list]import numpy as npy = np.where(data.retFut1 > 0.0, 1.0, 0)

现在我们将把数据集分成几部分,训练和测试

# Split the data into train and test datasetfrom sklearn.model_selection import train_test_splittrain_length = int(len(data)*0.80)X_train = X[:train_length] X_test = X[train_length:]y_train = y[:train_length]y_test = y[train_length:]

现在我们使用贝努利朴素贝叶斯模型进行二项分析。

from sklearn.naive_bayes import BernoulliNBmodel = BernoulliNB().fit(X_train, y_train)# Fit the model on train datasetmodel.fit(X_train, y_train)predicted_signal = model.predict(X_test)

我们的模型的准确性如何? 让我们来看看。

from sklearn import metricsprint('Binomial Naive Bayes model accuracy(in %):', metrics.accuracy_score(y_test, predicted_signal)*100)

二项朴素贝叶斯模型精度(%) :
51.33333333333333333333333

这里显然还有改进的空间,但这只是展示了朴素贝叶斯模型是如何工作的。但是,在特殊情况下是否应该使用该模型?请看下文。

朴素贝叶斯模型的优点

  • 朴素贝叶斯模型的主要优势在于它的简单性和快速计算时间。这主要是因为它强烈假设所有事件都是相互独立的
  • 他们也可以处理有限的数据
  • 当需要快速响应时,它们的快速计算被用于实时分析
  • 尽管这种速度是有代价的,让我们在下一节中看看它是如何实现的。

朴素贝叶斯模型的缺点

  • 由于 Naive Bayes 假设所有事件都是相互独立的,因此它无法计算两个事件之间的关系
  • 朴素贝叶斯模型是快速的,但它是以精确性为代价的。朴素的贝叶斯有时被称为坏估计量
  • 朴素贝叶斯方程表明,我们正在乘以各种概率。因此,如果一个特征返回0的概率,它可以把整个结果变成0。然而,有各种各样的方法可以克服这种情况。其中比较著名的一个叫做拉普拉斯校正。在这种方法中,特征的组合或概率设置为1,以确保我们不会得到零的概率。

结论

朴素贝叶斯模型,尽管它是幼稚的,但是在现实生活中的大量用例中是相当简单和有效的。虽然它主要用于文本分析,但也被用作交易领域的验证工具。

朴素贝叶斯模型也可以作为一个步骤,以更精确和复杂的分类为基础的机器学习模型。您可以查看往期文章了解: 机器学习算法入门,以便将各种机器学习模型纳入您的交易武器库。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多