Pyspark Расчет взаимной информации - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь вычислить с помощью Pyspark взаимную информацию о непрерывной переменной и категориальной, без необходимости использовать непрерывную переменную (см. https://journals.plos.org/plosone/articleid=10.1371/journal.pone.0087357).

Формула из вышеприведенной статьи требует, чтобы я вычислял в каждой точке моей категориальной переменной K ближайших соседей с точки зрения расстояния, определенного для непрерывной переменной, с учетом только точек данных из того же категориального класса, что и текущий точка. Хорошее значение К обычно 3. Например, в этом наборе данных: (обратите внимание, что нет избыточности, я только показал 2 функции здесь). Набор данных, отсортированный по метрике

Если k = 3 и я нахожусь в точке A = (0,023, оранжевый), я нахожу 3 ближайших соседа в терминах метрики с категориями = Orange, так что это будет: (0, оранжевый), (0, оранжевый), (0,11, оранжевый). После того, как я нашел этих соседей, мне нужно найти расстояние до самого дальнего и определить его как мой диаметр вокруг A (здесь 0,11 - 0,023), а затем найти количество соседей во всем наборе данных, который я назову m.

Как только у нас есть диаметр и m для каждой точки, мы используем их, чтобы вычислить число Ni для каждой точки, и мы делаем среднее значение для всего набора данных.

У меня проблемы с созданием кода, который зацикливается на точках в моем наборе данных pyspark (.rdd.map) и выполняет всю операцию по поиску диаметра и числа соседей m. Я пытался использовать оконные функции, но было трудно определить диапазон, поскольку диапазон не является постоянным.

Спасибо.

...