2016-10-08 6 views
0

私はプログラムを持っています。なぜ私は関数hmmlearn.hmm.GaussianHMM.fit()を実行するたびに異なる値を得る

n = 6 
data=pd.read_csv('11.csv',index_col='datetime') 
volume = data['TotalVolumeTraded'] 



close = data['ClosingPx'] 
logDel = np.log(np.array(data['HighPx'])) - np.log(np.array(data['LowPx'])) 
logRet_1 = np.array(np.diff(np.log(close))) 
logRet_5 = np.log(np.array(close[5:])) - np.log(np.array(close[:-5])) 
logVol_5 = np.log(np.array(volume[5:])) - np.log(np.array(volume[:-5])) 
logDel = logDel[5:] 
logRet_1 = logRet_1[4:] 
close = close[5:] 
Date = pd.to_datetime(data.index[5:]) 
A = np.column_stack([logDel,logRet_5,logVol_5]) 


model = GaussianHMM(n_components= n, covariance_type="full", n_iter=2000).fit([A]) 
hidden_states = model.predict(A) 

Iコード初めて実行Iコードをもう一度実行し、

enter image description here

に従うように、「hidden_​​states」の値は、「hidden_​​states」の値としてです続き、 enter image description here

なぜ「hidden_​​states」の値が異なるのですか?

答えて

1

私はここで何が起こっているのか完全にはわかりませんが、あなたが見ている結果については2つの可能な説明があります。

  1. このモデルでは、状態ラベルに対する順序は維持されません。したがって、1つのランで1とラベル付けされた状態は、別のランで4となる可能性があります。これは、潜在変数モデルにおけるラベルスイッチング問題として知られています。
  2. GaussianHMMは、データに応じて異なる値に収束するk-meansを介して放出パラメータを初期化します。初期パラメータはEMアルゴリズムにも渡され、EMアルゴリズムも局所的な最大値になりがちです。したがって、実行が異なると、パラメータの見積もりが異なる可能性があり、結果として若干異なる予測が可能になります。
0

モデルを定義するときにseedrandom_stateを設定してランダム性を制御してください。さらに、startprob_transmat_を初期化して、その動作を確認することもできます。

このようにすれば、この現象の原因についてより詳しく説明できます。

関連する問題