gpt4 book ai didi

google-bigquery - 大查询 : compute entropy of a column

转载 作者:行者123 更新时间:2023-12-04 11:16:22 27 4
gpt4 key购买 nike

我对 BQ 的人有一个建议:我认为如果有一个内置函数可以返回列的熵,那将非常有用。一列离散类别或值相对容易。想法?这是否已经存在,但我没有找到它?

最佳答案

简单的解决方案如下 - 它计算列中不同值的数量,然后以 2 为底取对数 - 这给出了编码所有不同值所需的位数,即列熵。

SELECT LOG2(COUNT(DISTINCT column)) FROM Table

但是,这并没有考虑到不同的值具有不同的概率这一事实。香农熵公式是 -SUM(P(xi)*log(P(xi)) 其中 P(xi) 是值 xi 的概率。以下是如何在 BigQuery 中计算该值的示例, year 表中列 natality 的香农熵:
select -sum(p*log2(p)) from (
select ratio_to_report(c) over() p from (
select year, count(*) c from publicdata:samples.natality group by 1))

UPDATE 如果列变量不是离散类型(即 FLOAT),则可以对值进行离散化。下面的示例显示了一种方法 - 首先它找到最大值和最小值,计算范围,然后将所有 FLOAT 值(出生表中的 weight_pound 列)放入 100 个桶中。之后 - 问题简化为 INTEGER 值的熵。
select discrete_weight, count(*) from (
select
cast((weight_pounds - min_weight) * 100 / range_weight as integer)
as discrete_weight
from [publicdata:samples.natality] a cross join
(select
min(weight_pounds) as min_weight,
max(weight_pounds) - min(weight_pounds) as range_weight
from [publicdata:samples.natality]) b) group by 1

关于google-bigquery - 大查询 : compute entropy of a column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310168/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com