Python を使用してデータセット内のさまざまな次元で分散と JS 発散を計算する

データマイニングの分野では、多くの場合、異なる次元間の相違点または類似点を測定する必要があります。これを実現するには、多くの場合、さまざまな方法を使用して 2 つのサンプル間の差を計算する必要があります。たとえば、KS テストや相対エントロピーなどの方法は、連続変数の比較に使用できます。

この記事では、Python と Pandas ライブラリを使用して、データセット内のさまざまな次元で分散と JS 発散を計算し、各次元での変化の変動を評価する方法を紹介します。

コード:

まず、関数 JS_divergence() を定義して、2 つの分布間の 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 発散を計算する方法について説明します。これらの指標を利用することで、各次元の変化の変動を評価することができ、異常次元マイニングやデータ分析などの目的を達成できます。それがみんなにインスピレーションを与えることを願っています!

おすすめ

転載: blog.csdn.net/weixin_44976611/article/details/130955024