Python でsklearn.mixture.GMMを使用していますが、結果はデータのスケーリングに依存しているようです。次のコード例では、全体のスケーリングを変更しますが、寸法の相対的なスケーリングは変更しません。それでも、3 つの異なるスケーリング設定では、まったく異なる結果が得られます。
from sklearn.mixture import GMM
from numpy import array, shape
from numpy.random import randn
from random import choice
# centroids will be normally-distributed around zero:
truelumps = randn(20, 5) * 10
# data randomly sampled from the centroids:
data = array([choice(truelumps) + randn(5) for _ in xrange(1000)])
for scaler in [0.01, 1, 100]:
scdata = data * scaler
thegmm = GMM(n_components=10)
thegmm.fit(scdata, n_iter=1000)
ll = thegmm.score(scdata)
print sum(ll)
これが私が得る出力です:
GMM(cvtype='diag', n_components=10)
7094.87886779
GMM(cvtype='diag', n_components=10)
-14681.566456
GMM(cvtype='diag', n_components=10)
-37576.4496656
原則として、全体的なデータのスケーリングは重要ではなく、対数尤度の合計は毎回同様になるはずです。しかし、私が見落としている実装上の問題があるのではないでしょうか?