Python/NumPyでのエレガントなグリッド検索 質問する

Python/NumPyでのエレガントなグリッド検索 質問する

たくさんのパラメータを持つ関数があります。すべてのパラメータを手動で設定するのではなく、グリッド検索を実行したいと思います。各パラメータの可能な値のリストがあります。パラメータの可能な組み合わせごとに、それらのパラメータでのアルゴリズムのパフォーマンスを報告する関数を実行します。この結果を多次元マトリックスに保存して、後で最大パフォーマンスのインデックスを見つけられるようにします。これにより、最適なパラメータが得られます。現在のコードは次のように記述されています。

param1_list = [p11, p12, p13,...]
param2_list = [p21, p22, p23,...] # not necessarily the same number of values
...

results_size = (len(param1_list), len(param2_list),...)
results = np.zeros(results_size, dtype = np.float)

for param1_idx in range(len(param1_list)):
  for param2_idx in range(len(param2_list)):
    ...
    param1 = param1_list[param1_idx]
    param2 = param2_list[param2_idx]
    ...
    results[param1_idx, param2_idx, ...] = my_func(param1, param2, ...)

max_index = np.argmax(results) # indices of best parameters!

検索する値を簡単に操作できるようにしたいので、リストを定義する最初の部分はそのままにしておきます。

また、さまざまなパラメータを変更するとアルゴリズムのパフォーマンスにどのような影響があるかを視覚化するため、結果マトリックスをそのままにしておきたいと思います。

ただし、真ん中の部分は非常に反復的でかさばっています (特に、パラメーターが多数あり、パラメーターを追加または削除する必要がある場合があるため)。結果マトリックスを初期化し、すべてのインデックスを反復処理して、適切なパラメーターを設定するための、より簡潔でエレガントな方法があるべきだと感じています。

それで、あるんですか?

ベストアンサー1

sklearnモジュールのParameterGridを使用することができます

http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.ParameterGrid.html

from sklearn.grid_search import ParameterGrid
param_grid = {'param1': [value1, value2, value3], 'paramN' : [value1, value2, valueM]}

grid = ParameterGrid(param_grid)

for params in grid:
    your_function(params['param1'], params['param2'])

おすすめ記事