使用Pandas DataFrame在python中计算熵分布的快速方法

时间:2018-08-02 17:24:55

标签: python pandas scipy

我有一个百分比的熊猫DataFrame,例如:

Feature    Sample1    Sample2     ...
feat_1     0          .5
feat_2     .2         .4
feat_3     .7         .6
...

原始问题中有两个类。对于每个功能样本,该值代表第一类的百分比(第二类的百分比只是补数1-perc)。

我想为每个功能计算entropy分布,即:

  • 对于feat_1,分布将由Sample1的最小熵(0),Sample2的最大熵等组成。
  • 对于feat_2feat_3,熵的前两个值将处于中间状态

我的方法如下:

  • 因为scipy.stats.entropy需要每个类别的概率,并且我有两个类别,所以我将每个列(样本)复制到百分比列(原始列)和互补百分比列(1-原始列)中
  • 根据功能为每对列(每个样本)计算熵

现在我正在使用以下代码:

import pandas as pd
import scipy.stats as ss

n_samples = 1000

# duplicate each column into percentage column and complementary percentage column
df = pd.concat([df, 1 - df], axis=1)
df.columns = [f'{sp}_{cl}' for cl in ['pos', 'zer'] for sp in range(n_samples)]

# compute entropy for each pair of columns
entropy = pd.concat([df.loc[:, df.columns.str.startswith(str(s) + '_')].apply(ss.entropy, axis=1) for s in range(n_samples)], axis=1)

是否有使用内置pandas API优化此代码的方法?我可以使用joblib进行并行化,但是我更喜欢内置方法。

0 个答案:

没有答案