2014-12-17 10 views
1

Я использую меру объединения потоковой взаимной информации (PMI), чтобы рассчитать, как часто слова соединяются, используя частоты слов, полученные из большого корпуса.Взаимная информация: пример вычисления (Java) в стиле таблицы непредвиденных обстоятельств

Я расчет PMI по классическим формулам

log(P(X,Y)/(P(X)*P(Y)) 

и используя таблицу сопряженности обозначения с складочными и предельными частотами, которые я нашел на http://collocations.de/AM/index.html

Результатов я получаю очень похож, но не тоже самое. Насколько я понял, оба метода должны приводить к точному такому же результату. Я сделал небольшую Java-программу (минимальный рабочий пример), в которой используются слова-частоты из корпуса с использованием обеих формул. Я получаю разные результаты для двух методов. Кто-нибудь знает, почему?

public class MutualInformation 
{ 
    public static void main(String[] args) 
    { 
     long N = 1024908267229L; 

     // mutual information = log(P(X,Y)/P(X) * P(Y)) 
     double XandY = (double) 1210738/N; 
     double X = (double) 67360790/N; 
     double Y = (double) 1871676/N; 

     System.out.println(Math.log(XandY/(X * Y))/Math.log(10)); 
     System.out.println("------"); 

     // contingency table notation as on www.collocations.de 
     long o11 = 1210738; 
     long o12 = 67360790; 
     long o21 = 1871676; 
     long c1 = o11 + o21; 
     long r1 = o11 + o12; 
     double e11 = ((double) r1 * c1/N); 
     double frac = (double) o11/e11; 
     System.out.println(Math.log(frac)/Math.log(10)); 
    } 

} 
+0

Что вы подразумеваете под 'очень похожим, но не тем же? BTW Я мог бы написать' e11 = r1 * c1/(double) N; гидроразрыва = О11/e11, и 'Y = 1871676,0/N' –

+0

я получаю эти результаты: +3,9930973261888347 ------ 3,768700373995412 похожи, но не то же самое – toobee

ответ

1

Пусть записать его в тех же условиях

long o11 = 1210738; 
    long o12 = 67360790; 
    long o21 = 1871676; 
    long N = 1024908267229L 

Первое уравнение

XandY = o11/N; 
    X = o12/N; 
    Y = o21/N; 

так

XandY/(X * Y) 

является

(o11/N)/(o12/N * o21/N) 

или

o11 * N/(o12 * o21) 

Примечание нет добавления происходит.

Второе уравнение довольно отличается.

c1 = o11 + o21; 
r1 = o11 + o12; 
e11 = ((double) r1 * c1/N); 
frac = (double) o11/e11; 

так

e11 = (o11 + o21) * (o11 + o12) /N; 
frac = (o11 * N)/(o11^2 + o11 * o12 + o21 * o11 + o21 * o12); 

Я бы ожидать, чтобы они были разные, как математически они не являются одинаковыми.

Предлагаю вам сначала написать, что вы хотите, как математику, а затем найти наиболее эффективный способ ее кодирования.

+0

ок спасибо. Таким образом, я был недооценен от меня, ожидая, что обе формулы приведут к точному результату. Я не мог найти утверждение относительно их равенства или почему они будут отличаться лишь немного. По крайней мере, для частоты слов часто используется версия таблицы действий в непредвиденных ситуациях. – toobee

+0

@toobee они на самом деле сильно отличаются друг от друга, если вы сначала не берете журнал из них 10;) –

Смежные вопросы