繁体   English   中英

当数据集不包含频率为零的条目时计算频率的方差

[英]Calculate variance of frequencies when dataset does not contain entries of frequency zero

我有一个包含三个字段的数据集:id,特征和频率。 我想要做的是找出一组给定ID的特征,该特征具有最大的频率分布。 我想要的结果是,如果使用该功能的频率中值将一组id分成两个子组,则我会有两组彼此之间最大的不同,但大小大致相等。

我的第一个想法是我计算每个特征的频率方差,并使用方差最大的特征。

给定一个数据库表,看起来像这样:

id | feature | frequency
---+---------+-------------
 0 | 0       | 1
 0 | 1       | 1
 0 | 2       | 0
 1 | 0       | 2
 1 | 1       | 2
 1 | 2       | 0
 2 | 0       | 3
 2 | 1       | 3
 2 | 2       | 8
 3 | 0       | 4
 3 | 1       | 8
 3 | 2       | 10
 4 | 0       | 5
 4 | 1       | 10
 4 | 2       | 12
  • 功能0的频率为1,2,3,4,5
  • 功能1的频率为1,2,3,9,10
  • 功能2的频率为0、0、4、10、12

我们可以看到特征2具有最大的扩展,将4拆分会很好地将其分为两组(0、0和4分为一组,而10和12分为另一组)。

我可以使用以下SQL查询来计算:

SELECT feature, variance(frequency) as f FROM Dataset WHERE id IN (<list of ids>) GROUP BY feature ORDER BY f DESC LIMIT 1;

这可以正常工作,但有一个缺陷。 我的数据集稀疏(大多数条目的频率为零),并且对于我(在空间和插入条目所需的时间方面)来说,将零频率项存储在数据库中对我来说是昂贵的。 因此,我的实际表格如下所示:

id | feature | frequency
---+---------+-------------
 0 | 0       | 1
 0 | 1       | 1
 1 | 0       | 2
 1 | 1       | 2
 2 | 0       | 3
 2 | 1       | 3
 2 | 2       | 8
 3 | 0       | 4
 3 | 1       | 8
 3 | 2       | 10
 4 | 0       | 5
 4 | 1       | 10
 4 | 2       | 12

上面的SQL查询现在无法获得正确的结果,因为它需要考虑零频率条目以计算正确的方差值。 我的SQL技能不足以找出可以解决此限制的(性能)查询...

我的下一个想法是计算最大熵,但是这受到以下事实的困扰:它没有考虑实际的频率值(以及“频率” /相同频率值在同一数据集中的次数)-仅不同值的数量。 除非我误解了熵公式。

所以我的问题是:

  1. 有没有办法在SQL中做到这一点?
  2. 如果不是,是否有一种方法可以“调整”计算出的零条目数量的方差? (假设我知道省略了多少个零条目)
  3. 如果是,是否有办法在上述单个SQL查询中执行此操作? (再次,假设我事先知道省略了多少个零条目)
  4. 如果两者都不可行,是否有办法使用熵并调整实际值?
  5. 我还应该考虑其他一些措施(例如峰度)吗? 是否有可以轻松调整的零缺失条目?
  6. 或其他建议或替代解决方案?

关于填补表中的空白,您可以使用带有有效功能列表的“ helper”临时表,通过CROSS JOINUNION缺失的零频值。 “方式”实际上取决于您使用的数据库语言。 例如,假设您有一个名为“ helper”的表,该表具有三行(用于三种不同功能)。 然后这可能起作用:

select id, feature, frequency
from have
union
select b.id
     , a.feature
     , 0 as frequency
from helper a
cross join have b
where not exists (
   select 1 from have b1
   where b1.id=b.id
     and b1.feature = a.feature
   )

这是一个SQLFiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM