【问题标题】:how to predict with gaussianhmm sklearn如何使用 gaussianhmm sklearn 进行预测
【发布时间】:2013-06-24 14:32:47
【问题描述】:

我正在尝试使用 sklearn 预测股票价格。我是新来的预测。我尝试了来自 sklearn 的示例,用于使用高斯 hmm 进行股票预测。但是 predict 给出了覆盖在价格上的状态序列,并且它还从给定的输入收盘价中获取点。我的问题是如何生成接下来的 10 个价格?

【问题讨论】:

    标签: scikit-learn prediction hidden-markov-models


    【解决方案1】:

    您将始终使用最后一个状态来预测下一个状态,所以让我们通过将结束日期更改为 23 日来添加 10 天的输入:

    date2 = datetime.date(2012, 1, 23)
    

    您可以仔细检查其余代码,以确保我实际上并未使用未来数据进行预测。这些行的其余部分可以添加到文件的底部。首先,我们想找出给定状态的预期回报是多少。 model.means_ 数组有回报,这两个都是让我们进入这个状态的回报,而不是你想要的未来回报。为了获得未来的回报,我们考虑进入 5 个状态中的任何一个的概率,以及这些状态的回报是多少。我们从 model.transmat_ 矩阵中获得进入任何特定状态的概率,对于每个状态的返回,我们使用 model.means_ 值。我们采用点积来获得特定状态的预期回报。然后我们会删除数量数据(如果需要,您可以保留它,但您似乎对未来的价格最感兴趣)。

    expected_returns_and_volumes = np.dot(model.transmat_, model.means_)
    returns_and_volumes_columnwise = zip(*expected_returns_and_volumes)
    returns = returns_and_volumes_columnwise[0]
    

    如果您打印returns[0] 的值,您将看到状态0 的预期回报(美元),状态1 的returns[1] 等。现在,给定一天和一个状态,我们想要预测明天的价格。你说的是 10 天,所以让我们将其用于 lastN。

    predicted_prices = []
    lastN = 10
    for idx in xrange(lastN):
        state = hidden_states[-lastN+idx]
        current_price = quotes[-lastN+idx][2]
        current_date = datetime.date.fromordinal(dates[-lastN+idx])
        predicted_date = current_date + datetime.timedelta(days=1)
        predicted_prices.append((predicted_date, current_price + returns[state]))
    
    print(predicted_prices)
    

    如果您在“生产”中运行此程序,您会将 date2 设置为您拥有的最后一个日期,然后 lastN 将是 1。请注意,我没有考虑 predict_date 的周末。

    这是一个有趣的练习,但您可能不会在生产环境中运行它,因此使用了引号。首先,时间序列是原始价格;这应该是百分比回报或对数回报。另外,没有理由为 HMM 选择 5 个状态,或者 HMM 甚至可以解决这种问题,我对此表示怀疑。他们可能只是把它作为一个例子。我认为另一个使用 PCA 的 sklearn 示例更有趣。

    【讨论】:

    • 你能用完整的例子分享一个要点吗?
    • predictme 就 sklearn 网站上的一些示例代码提出了一个非常具体的问题。我只是查看它以获取源代码,看起来他们已经把那个例子拿下来了。
    猜你喜欢
    • 2018-03-23
    • 2018-10-15
    • 2017-08-10
    • 2018-12-20
    • 2018-12-01
    • 2018-12-27
    • 2015-06-19
    • 1970-01-01
    • 2018-01-01
    相关资源
    最近更新 更多