我正在尝试使用sklearn来预测股票价格。我是预测的新手。我尝试了sklearn的例子,用高斯哼声进行股票预测。但是预测给出了覆盖价格的状态序列,它也从给定的输入收盘价中获得了点数。我的问题是如何产生下一个10个价格?
答案 0 :(得分: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]
如果打印return [0]的值,您将看到状态0的预期美元回报,状态1等的返回[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.注意我没有考虑到expected_date的周末。
这是一个有趣的练习,但你可能不会在生产中运行它,因此引用。首先,时间序列是原始价格;这应该是百分比回报或日志回报。另外,没有理由为HMM挑选5个州,或者HMM甚至对这个问题都有好处,我对此表示怀疑。他们可能只是选择它作为一个例子。我认为使用PCA的另一个sklearn示例更有趣。