データマイニングの分野では、多くの場合、異なる次元間の相違点または類似点を測定する必要があります。これを実現するには、多くの場合、さまざまな方法を使用して 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 発散を計算する方法について説明します。これらの指標を利用することで、各次元の変化の変動を評価することができ、異常次元マイニングやデータ分析などの目的を達成できます。それがみんなにインスピレーションを与えることを願っています!