将DEAP结果保存到pandas数据框中

时间:2017-03-20 13:30:06

标签: python python-2.7 genetic-algorithm deap

使用DEAP包进行遗传算法一段时间。

我已经知道了这个例程并获得了一些有效的结果。

但我想知道人群中适应度函数的变化。

使用 stats 功能,我可以打印mean,std等作为输出。

手册告诉 logbook 用于保存结果。我还没有学到这些,而且我不熟悉泡菜

有没有办法直接以.csv或excel格式保存结果?

2 个答案:

答案 0 :(得分:1)

日志是一个词典列表,所以你需要转换"转换"将这些数据写入列表字典。

这就是我使用pandas进行多目标日志的方式。

import pandas as pd
from functools import reduce
from operator import add, itemgetter

chapter_keys = logbook.chapters.keys()
sub_chaper_keys = [c[0].keys() for c in logbook.chapters.values()]

data = [list(map(itemgetter(*skey), chapter)) for skey, chapter 
             in zip(sub_chaper_keys, logbook.chapters.values())]
data = np.array([[*a, *b] for a, b in zip(*data)])

columns = reduce(add, [["_".join([x, y]) for y in s] 
                       for x, s in zip(chapter_keys, sub_chaper_keys)])
df = pd.DataFrame(data, columns=columns)

keys = logbook[0].keys()
data = [[d[k] for d in logbook] for k in keys]
for d, k in zip(data, keys):
    df[k] = d

首先,我将统计信息解析为数组并创建数据帧。其次,我将不基于统计(即gen或evals)的列添加为我的df的列。您可以使用df.to_csv将数据框导出到csv。

答案 1 :(得分:1)

要将单个统计信息(无章节)转换为Pandas数据框,请使用此

data = [[i for i in item.values()] for item in log]
df = pd.DataFrame(data, columns=log.header)
print(df)

因为数据在日志对象本身中。