美文网首页
使用Python计算数据集中不同维度下的方差和 JS 散度

使用Python计算数据集中不同维度下的方差和 JS 散度

作者: 价值INVEST | 来源:发表于2023-05-29 19:01 被阅读0次

    在数据挖掘领域中,我们经常需要衡量不同维度之间的差异或相似度。为了实现这一目标,通常需要使用各种方法来计算两个样本之间的差异。例如,KS 检验和相对熵等方法可以用于连续变量的比较。

    本文将介绍如何使用 Python 和 Pandas 库来计算数据集中不同维度下的方差和 JS 散度,以评估各维度变化的波动大小。

    代码实现:

    首先,定义一个函数 JS_divergence() 来计算两个分布之间的 JS 散度:

    import scipy.stats as ss
    
    def JS_divergence(p, q, base):
        M = (p+q)/2
        return 0.5 * ss.entropy(p, M, base=base) + 0.5 * ss.entropy(q, M, base=base)
    
    

    接下来,定义一个函数 compute_metrics() 来计算指定维度下的方差和 JS 散度:

    import pandas as pd
    import numpy as np
    
    def compute_metrics(df, dim):
        var = np.var(df.query(f"dimension == '{dim}'")['pred'] - df.query(f"dimension == '{dim}'")['actual'])
        js_div = JS_divergence(df.query(f"dimension == '{dim}'")['pred'], df.query(f"dimension == '{dim}'")['actual'], 2)
        
        return [var, js_div]
    
    

    然后,我们将数据存储在一个 Pandas 数据框中,并使用上述函数 compute_metrics() 对每个维度计算方差和 JS 散度:

    lists = [['分发模块','精选', 100000,85000]
            ,['分发模块','关注', 20000,10000]
            ,['分发模块','发现', 1000,1500]
            ,['用户分类','儿童', 2000,2000]
            ,['用户分类','青年', 30000,19500]
            ,['用户分类','中年', 69000,50000]
            ,['用户分类','老年', 20000,25000]
          ]
    
    df = pd.DataFrame(lists, columns=['dimension', 'indicator', 'pred', 'actual'])
    
    # 计算方差和 JS 散度
    metrics = {}
    for dim in df['dimension'].unique():
        metrics[dim] = compute_metrics(df, dim)
    
    print(pd.DataFrame(metrics, index=['Var', 'JS_Div']))
    
    

    最后,我们得到了各维度下的方差和 JS 散度指标。

    总结:

    本文介绍了如何使用 Python 和 Pandas 库计算数据集中不同维度下的方差和 JS 散度。这些指标可以用于评估各维度变化的波动大小,从而实现异常维度挖掘和数据分析等目的。希望对大家有启发!

    本文由mdnice多平台发布

    相关文章

      网友评论

          本文标题:使用Python计算数据集中不同维度下的方差和 JS 散度

          本文链接:https://www.haomeiwen.com/subject/cttsedtx.html