我正在尝试使用Pyspark计算连续变量和分类变量的互信息,而不必对连续变量进行分类(参见https://journals.plos.org/plosone/articleid=10.1371/journal.pone.0087357)。
以上文章中的公式要求我在分类变量的每个点上根据连续变量上定义的距离计算K个最近邻居,仅计算与当前分类类相同的数据点点。好的K通常为3。 例如,在此数据集上:(请注意,这里没有冗余,这里只显示了2个功能)。 Dataset sorted by metric
如果k = 3并且我在点A =(0.023,橙色)上,我发现在类别为Orange的度量方面,这3个最接近的邻居,因此它将是: (0,橙色),(0,橙色),(0.11,橙色)。 找到这些邻居后,我需要找到最远的邻居的距离并将其定义为我在A周围的直径(此处为0.11-0.023),然后在整个数据集中找到邻居的数量,我将其称为m。
一旦有了每个点的直径和m,就可以使用它们来计算每个点的Ni数,然后对整个数据集求平均值。
我无法实现在pyspark数据集中的点(.rdd.map)上循环的代码,并无法完成寻找直径和邻居数m的整个操作。我尝试使用窗口函数,但是由于范围不是恒定的,因此很难定义范围。
谢谢。