Я использую эту реализацию на Python lda для моделирования с использованием скрытого распределения Дирихле. Я создал экземпляры модели k-1 для другого количества тем из 2 ... k. Я пытаюсь определить оптимальное количество тем на основе среднего для ряда логарифмических правдоподобий. Итак, мой код выглядит так:
def optimal(models):
ll = [m.loglikelihoods_ for m in models]
means=[mean(vals) for vals in ll]
print(means)
val, idx = min([(val, idx) for (idx, val) in enumerate(means)])
print('\n*OPTIMAL:{} topics, likelihood:{}'.format(idx+2, val))
return models[idx]
Результат:
[-116437.19151950255, -116432.23207017583, -117125.84739129762, -115787.39060737971, -116028.07281838865, -116343.8361756514, -116698.45128717832, -116924.95163260077, -117215.84926933098]
*OPTIMAL:10 topics, likelihood:-117215.84926933098
Это правильный подход, или я должен максимизировать, а не минимизировать? Таким образом, код сказал бы:
max([(val, idx) for (idx, val) in enumerate(means)])