She*_*Rey 3 entropy google-bigquery
我对BQ人员有一个建议:我认为如果有一个内置函数可以返回列的熵,那将非常有用.一列离散的类别或值将相对容易.思考?这已经存在但我找不到了吗?
Mos*_*sky 10
简单的解决方案如下 - 它计算列中不同值的数量,然后在基数2上取对数 - 这给出了编码所有不同值所需的位数,即列熵.
SELECT LOG2(COUNT(DISTINCT column)) FROM Table
Run Code Online (Sandbox Code Playgroud)
然而,这没有考虑到不同值具有不同概率的事实.香农熵公式是-SUM(P(xi)*log(P(xi))其中P(xi)是值xi的概率.这里是一个如何计算在BigQuery中的示例year,natality表中的列的Shannon熵:
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))
Run Code Online (Sandbox Code Playgroud)
更新如果列变量不是离散类型(即FLOAT),则可以对值进行离散化.下面的示例显示了一种方法 - 首先它找到最大值和最小值,计算范围,然后将所有FLOAT值(在natality表中的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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1489 次 |
| 最近记录: |