Sum*_*ift 3 statistics distribution
我有一个示例程序的距离向量。我试图量化它们的相似程度。我在样本组之间使用欧几里得距离(每个值属于一个桶,我们逐桶比较),效果很好。但是需要对大量样本进行太多比较。
我想知道是否有一种有效的方法来构建索引来比较样本。样品看起来像这样——
Sample:1 = {25 0 17 3 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
Sample:2 = {25 1 16 2 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
Sample:3 = {25 3 16 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
Run Code Online (Sandbox Code Playgroud)
有很多方法可以表征“两个分布之间的差异”。一个特定的和有针对性的答案需要更多的细节,例如潜在的概率分布。
这完全取决于您如何定义两个分布之间的差异。给你两个思路:
重温这篇文章时,强调以下几点可能很重要:
Matching::ks.boot. 更多细节可以在例如交叉验证中找到:我可以使用 Kolmogorov-Smirnov 来比较两个经验分布吗?以及在维基百科上:双样本 Kolmogorov-Smirnov 检验。用更一般的术语(并忽略上一点中指出的限制),要计算所有成对组合的 KL 散度,可以执行以下操作
library(entropy)
library(tidyverse)
expand.grid(1:length(lst), 1:length(lst)) %>%
rowwise() %>%
mutate(KL = KL.empirical(lst[[Var1]], lst[[Var2]]))
Run Code Online (Sandbox Code Playgroud)
由于 KL 散度不是对称的,我们需要计算成对 KL 散度矩阵的上三角和下三角部分。为了减少计算时间,可以改用对称 KL 散度,这需要仅计算成对 KL 散度矩阵的上三角部分或下三角部分的 KL 散度(尽管对称 KL 散度版本本身需要计算两个 KL分歧,即KL(1->2)和KL(2->1)但这可以通过优化的例程来完成)。
| 归档时间: |
|
| 查看次数: |
8291 次 |
| 最近记录: |