2013-06-24 62 views
1

我試圖用sklearn預測股票價格。我是新來的預測。我試着用sklearn做高斯hmm的股票預測。但預測給出了價格疊加的狀態序列,並且它還需要來自給定輸入收盤價的點。我的問題是如何生成下10個價格?如何用高斯倫斯卡爾恩預測

回答

0

你總是會使用最後的狀態來預測下一個狀態,所以讓我們加10天的投入,通過改變結束日期爲23:

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

你可以仔細檢查代碼的其餘部分以確保我實際上未使用未來數據進行預測。其餘這些行可以添加到文件的底部。首先,我們要找出給定狀態的預期收益。 model.means_數組有回報,這兩個是讓我們回到這個狀態的回報,而不是未來回報,這是你想要的。爲了獲得未來的回報,我們考慮去5個州中的任何一個的可能性,以及這些州的回報是多少。我們從model.transmat_ matrix得到任何特定狀態的概率,我們使用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] 

如果打印的回報[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) 

如果您在「生產」中運行這個,你會設定日期2到你的最後日期,然後lastN將是1。注意,我沒有考慮到週末的predicted_date。

這是一個有趣的練習,但您可能不會在生產中運行此操作,因此會引用引號。首先,時間序列是原始價格;這應該是百分比回報或日誌回報。另外,沒有理由爲HMM選擇5個狀態,或者HMM甚至對這個有點問題更好,我懷疑它。他們可能只是把它作爲一個例子。我認爲使用PCA的另一個sklearn例子更有趣。