DPGMM кластеризация всех значений в один кластер
Итак, я преобразовал свой корпус в красивую матрицу word2vec. Эта матрица представляет собой матрицу с плавающей точкой с отрицательными и положительными числами.
Я не могу заставить бесконечный процесс Дирихле дать мне какой-либо сплоченный ответ.
Пример вывода [за 2 шага] выглядит так:
original word2vec matrix:
[[-0.09597077 -0.1617426 -0.01935256 ..., 0.03843787 -0.11019679
0.02837373]
[-0.20119116 0.09759717 0.1382935 ..., -0.08172804 -0.14392921
-0.08032629]
[-0.04258473 0.03070175 0.11503845 ..., -0.10350088 -0.18130976
-0.02993774]
...,
[-0.08478324 -0.01961064 0.02305113 ..., -0.01231162 -0.10988192
0.00473828]
[ 0.13998444 0.05631495 0.00559074 ..., 0.05252389 -0.14202785
-0.03951728]
[-0.02888418 -0.0327519 -0.09636743 ..., 0.10880557 -0.08889513
-0.08584201]]
Running DGPMM for 20 clusters of shape (4480, 100)
Bound after updating z: -1935576384.727921
Bound after updating gamma: -1935354454.981427
Bound after updating mu: -1935354033.389434
Bound after updating a and b: -inf
Cluster proportions: [ 4.48098985e+03 1.00053406e+00 1.00053406e+00 1.00053406e+00
1.00053406e+00 1.00053406e+00 1.00053406e+00 1.00053406e+00
1.00053406e+00 1.00053406e+00 1.00053406e+00 1.00053406e+00
1.00053406e+00 1.00053406e+00 1.00053406e+00 1.00053406e+00
1.00053406e+00 1.00053406e+00 1.00053406e+00 1.00053406e+00]
covariance_type: full
Bound after updating z: -inf
Bound after updating gamma: -inf
Bound after updating mu: -inf
Bound after updating a and b: -inf
Cluster proportions: [ 4.48098985e+03 1.00053406e+00 1.00053406e+00 1.00053406e+00
1.00053406e+00 1.00053406e+00 1.00053406e+00 1.00053406e+00
1.00053406e+00 1.00053406e+00 1.00053406e+00 1.00053406e+00
1.00053406e+00 1.00053406e+00 1.00053406e+00 1.00053406e+00
1.00053406e+00 1.00053406e+00 1.00053406e+00 1.00053406e+00]
Как можно заметить, все выглядит так, как будто z, gamma & mu взрываются, и в итоге система сходится к одному кластеру, что не совсем точно. Я попытался поиграться с альфа-версией для DPGMM, но она не сильно изменилась.
Я пытаюсь автоматически кластеризовать слова, которые ближе к значению, используя автономную систему кластеризации. K-Means требует "K", которое я не хочу предоставлять.
1 ответ
Здесь могут быть некоторые скрытые числовые проблемы. Проблема заключается в высокой размерности вашего набора данных. Это приведет к бесконечно малым вероятностям при моделировании гауссовой смеси, что сделает модель очень маловероятной. В какой-то момент вы, кажется, получите -inf
значение, а затем это не удается.
В целом кластеризация, похоже, просто плохо работает. Если вы посмотрите на размеры кластеров, вы сможете увидеть как численные проблемы, так и то, что результат выродился.
Один кластер имеет размер 4480,98985, остальные 19 кластеров имеют размер 1.00053406. Это должно добавить до 4480, я думаю... но это не так. Кроме того, 19 из 20 кластеров состоят из одного элемента тогда? Так что у вас тоже могут быть проблемы с выбросами.
К-значит тоже не будет работать лучше.