Рассчитать энтропию распределения вероятностей двух наборов данных - анализ текста и настроения в C # - PullRequest
1 голос
/ 27 сентября 2011

Я использую 1,6-миллиметровый корпус твитов для обучения наивного двигателя байесовских настроений.

У меня есть два словаря n-грамм (Dictionary<string,int>, где string - это мой n-грамм, а int - это число вхождений n-грамм в моем корпусе). Первый список извлекается из положительных твитов, второй список извлекается из отрицательных твитов. В статье на эту тему авторы отбрасывают общие n-граммы (то есть n-граммы, которые не сильно указывают на какие-либо чувства и не указывают на объективность предложения. Такие n-граммы появляются равномерно во всех наборах данных). Концептуально я понимаю это довольно хорошо, но формула, которую они предоставляют, основана на математике, а не на коде, и я не могу расшифровать то, что я должен делать.

Последние несколько часов я потратил на поиски в Интернете того, как это сделать. Я нашел примеры вычисления энтропии для поисковых систем, которые обычно вычисляют энтропию строки, и наиболее распространенным блоком кода является ShannonsEntropy.

Я также относительно новичок в этом пространстве, поэтому я уверен, что мое невежество играет определенную роль в этом, но я надеюсь, что кто-то на SO может помочь подтолкнуть меня в правильном направлении. Подведем итог:

Учитывая два словаря, PosDictionary & NegDictionary, как рассчитать энтропию идентичных n-грамм?

Psuedo-код в порядке, и я думаю, он выглядит примерно так:

foreach(string myNGram in PosDictionary) {
    if(NegDictionary.ContainsKey(myNGram) {
        double result = CalculateEntropyOfNGram(myNGram);
        if(result > someThetaSuchAs0.80) {
            PosDictionary.Remove(myNGram);
            NegDictionary.Remove(myNGram);
        }
    }
}

Я думаю это процесс, который мне нужно предпринять. Чего я не знаю, так это то, как выглядит функция CalculateEntropyOfNGram ...

(Edit) Вот ссылка на PDF-файл, используемый для описания процесса энтропии / значимости (раздел 5.3)

1 Ответ

1 голос
/ 27 сентября 2011

Уравнение (10) в статье дает определение. Если у вас проблемы с чтением уравнения, это короткая запись для

    H(..) = -log(p(S1|g)) * p(S1|g)  - log(p(S2|g)) * p(S2|g) - ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...