本文摘要你听说过奥卡姆剃须刀吗? 简而言之,奥卡姆剃须刀的提出者威廉说,“最简单的解决方案几乎总是最好的解决方案。” 但是在一篇关于朴素贝叶斯的文章中,我们为什么要谈论奥卡姆剃须刀呢?实际上,朴素贝叶斯隐含地融入了这一信念,因为它确实是一个简单的模型。让我们看看像朴素贝叶斯模型这样的简单模型如何在交易中使用。 文章目录
朴素贝叶斯是什么?让我们绕个小圈子,看看朴素贝叶斯中的“贝叶斯”是什么意思。关于概率,基本上有两种学派。一个学派建议,通过计算所有可能事件的概率,然后计算你感兴趣的事件的概率,可以推断出事件发生的概率。 例如,在抛硬币的实验中,你知道正面的概率是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日。 此外,我们将使用两个特性。
最后,我们的目标变量是第二天的返回值。如果第二天的收益是正的,这个值设置为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) 我们将计算指标以及它们的信号值。
为了得到我们的目标变量,我们将计算我们的收益,并移动1得到第二天的收益。 data['ret1'] = data['Adj Close'].pct_change()data['retFut1'] = data.ret1.shift(-1) 现在我们将定义朴素贝叶斯模型的X和Y变量。
现在我们将把数据集分成几部分,训练和测试 # 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 import metricsprint('Binomial Naive Bayes model accuracy(in %):', metrics.accuracy_score(y_test, predicted_signal)*100) 二项朴素贝叶斯模型精度(%) : 这里显然还有改进的空间,但这只是展示了朴素贝叶斯模型是如何工作的。但是,在特殊情况下是否应该使用该模型?请看下文。 朴素贝叶斯模型的优点
朴素贝叶斯模型的缺点
结论朴素贝叶斯模型,尽管它是幼稚的,但是在现实生活中的大量用例中是相当简单和有效的。虽然它主要用于文本分析,但也被用作交易领域的验证工具。 朴素贝叶斯模型也可以作为一个步骤,以更精确和复杂的分类为基础的机器学习模型。您可以查看往期文章了解: 机器学习算法入门,以便将各种机器学习模型纳入您的交易武器库。 |
|