簡體   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