2016-11-24 17 views
0

私はsklearnのBayesianGaussianMixture(と同じ問題を示しているGaussianMixture)を使ってPythonを試しました。sklearnのBayesianGaussianMixtureからの非常に大きなログ確率

ディストリビューションから引き出されたいくつかのアイテムをモデルにあてはめ、保持されているデータセット(ディストリビューションの一部、外部のもの)でモデルをテストしました。

何か等:

X_train = ... # 70x321 matrix 
X_in = ... # 20x321 matrix of held out data points from X 
X_out = ... # 20x321 matrix of data points drawn from a different distribution 
model = BayesianGaussianMixture(n_components=1) 
model.fit(X_train) 
print(model.score_samples(X_in).mean()) 
print(model.score_samples(X_out).mean()) 

出力:

-1334380148.57 
-2953544628.45 

score_samples方法のサンプルは、はるかに可能性が高い "よりも「の」与えられたデータのサンプルごとの対数尤度を返し、そして私はちょうど絶対値がなぜそんなに高いのだろうかと思っていますか?

score_samplesのドキュメントでは、「各サンプルの重み付けされたログ確率を計算します」と記載されていますが、重みの基になっているかどうかは不明です。

まず入力を拡大する必要がありますか?入力ディメンションが高すぎますか?パラメータのチューニングを追加する必要がありますか?あるいは、私は方法が返すものを誤解していますか?

答えて

1

私はおそらくこれに遅れていますが、誰かが役に立つと思った場合に備えて私の答えを追加すると思いました。重みは、混合重みに基づいています。

入力を最初に調整する必要はありますか?

これは通常悪い考えではありませんが、私はあなたのデータについてもっと知らないとは言えません。

入力ディメンションが高すぎますか?

あなたが実際にフィットしているデータ量が大きすぎると思われます。次元の呪いを忘れないでください。データの行数が少なく、312個の機能、1:4の比率があります。それは実際には実際には動作しません。

パラメータ調整を追加する必要がありますか?または、私はちょうど メソッドが返すものを誤解していますか?

あなたの出力は非常に否定的なログ確率です。 eをこのような大きな負の大きさにすると、ゼロに非常に近い確率が得られます。あなたの結果は実際にはその観点から意味があります。あなたは、そのコンポーネント内に存在する可能性が高いことが分かっているエリアでログ確率をチェックすることができます。また、各コンポーネントの共分散をチェックして、縮退解を持たないようにすることもできます。これは、この場合のデータ量と次元数を考慮するとかなり可能性があります。その前に、より多くのデータを取得したり、ディメンション数を減らすことができるかどうかを確認することができます。

私はかなり重要な点について言及していませんでした:出力は密度のためですので、あまりにもそれを念頭に置いてください。