我最近开始使用 pybrain 库来解决使用神经网络的分类问题,并通过一些努力和文档使其工作。
现在,我想使用同一个库中的黑盒优化算法,但不适用于分类。
基本上,我试图从 Randy 的博客http://www.randalolson.com/2015/02/03/heres-waldo-computing-the-optimal-search-strategy-for-finding-waldo/中复制一些结果。
因此,作为第一步,我使用以下代码段构建了监督数据集:
ds = SupervisedDataSet(2, 2)
for row in range(len(waldo_df)):
ds.addSample(inp=waldo_df.iloc[row][['Book', 'Page']], target=waldo_df.iloc[row][['X', 'Y']])
return ds
现在,数据集中的一个样本如下所示:
ds.getSample()
[array([ 5., 8.]), array([ 3.51388889, 4.31944444])]
在下一步中,我想使用 HillClimber 算法找到最佳路径:
ef = ds.evaluateModuleMSE
init_value = ds.getSample()
learner = HillClimber(evaluator=ef, initEvaluable=init_value, minimize=True)
learner.learn()
我得到的异常:
/Users/maestro/anaconda/lib/python2.7/site-packages/pybrain/datasets/supervised.pyc in evaluateModuleMSE(self, module, averageOver, **args)
96 res = 0.
97 for dummy in range(averageOver):
---> 98 module.reset()
99 res += self.evaluateMSE(module.activate, **args)
100 return res/averageOver
AttributeError: 'numpy.ndarray' object has no attribute 'reset'
有人可以帮我弄清楚我做错了什么吗?这方面的文档非常稀少,甚至搜索代码库也无济于事。
谢谢
PS如果我正确阅读API
class pybrain.optimization.HillClimber(evaluator=None, initEvaluable=None, **kwargs)
最简单的随机搜索:健身景观中的爬山。
优化算法只需要采用评估器,在我的情况下是 ds.evaluateModuleMSE
更新
整个代码片段是:
import pandas as pd
from pybrain.optimization import HillClimber
from pybrain.datasets import SupervisedDataSet
waldo_df = pd.read_csv('whereis-waldo-locations.csv')
ds = SupervisedDataSet(2, 2)
for row in range(len(waldo_df)):
ds.addSample(inp=waldo_df.iloc[row][['Book', 'Page']], target=waldo_df.iloc[row][['X', 'Y']])
learner = HillClimber(evaluator=ds.evaluateModuleMSE, initEvaluable=ds.getSample(), minimize=True)