在大熊猫数据框架中提取最佳性能代理的时间序列



我很抱歉,如果这个问题是基本的,但是我已经完成了文档,我很难弄清楚如何处理这个问题的简单规范方法是什么,尽管这可能是因为我是熊猫的新手。

i具有一系列系统的score s的时间序列数据(通过step s测量时间)的数据框df,由HyperParameters paramAparamB进行参数。

数据的合成样本如下:

| paramA | paramB | score | step |
----------------------------------
|   A    |    c   |   .8  |  10  |
|   B    |    e   |   .2  |  10  |
|   A    |    f   |   .1  |  40  |
|   C    |    c   |   .9  |  10  |
|   B    |    e   |   .3  |  20  |
|   B    |    c   |   .3  |  10  |
|   A    |    c   |   .7  |  20  |
|   C    |    f   |   .4  |  60  |
|  ...   |   ...  |  ...  |  ... |

我想做以下操作:

1。查找最高评分模型

对于每个模型(即,对于数据集中的每对超参数对),请找到具有最高分数的行。我目前正在这样做:

df.groupby([df.paramA, df.paramB]).score.max()

2。提取最高得分子的时间序列

我现在想获得我在上一步中获得的最大值k型号的时间序列。

显然,我可以在上一步中手动查找最高的评分模型,使用k单独的查询获取CC_7数据范围,但这感觉很慢且不高。我假设有一种更聪明的方法。

再次表示,如果这很简单,但是以聪明的方式解决这个问题,而不是我目前想到的蛮力。

要回答问题一个,首先创建一组唯一的模型,使用每个模型的参数集初始化一个空词典,然后用最大分数的索引填充词典:

pairs = pd.Series(zip(df.paramA, df.paramB)).unique()
models = {(A, B): None for A, B in pairs}
for A, B in pairs:
    models[(A, B)] = df.loc[((df.paramA == A) & (df.paramB == B)), 'score'].idxmax()
>>> models
{('A', 'c'): 0,
 ('A', 'f'): 2,
 ('B', 'c'): 5,
 ('B', 'e'): 4,
 ('C', 'c'): 3,
 ('C', 'f'): 7}

获得得分最高的顶级k模型:

k = 5  # Top number of models to return
m = [(v, k_) for k_, v in models.iteritems()]
m.sort(reverse=True)
top_models = [model[1] for model in m[:k]]
>>> top_models
[('C', 'f'), ('B', 'c'), ('B', 'e'), ('C', 'c'), ('A', 'f')]

最新更新