Как оптимально искать пространство параметров с помощью Dask? (без перекрестной проверки)
Вот код (здесь нет DASK):
def build(ntries,param,niter,func,score,train,test):
res=[]
for i in range(ntries):
cparam=param.rvs(size=niter,random_state=i)
res.append( func(cparam, train, test, score) )
return res
def score(test,correct):
return np.linalg.norm(test-correct)
def compute_optimal(res):
from operator import itemgetter
_sorted=sorted(res,None,itemgetter(1))
return _sorted
def func(c,train,test,score):
dt=1.0/len(c)
for cc in c:
train=train - cc*dt
return (c,score(train,test))
Вот как я его использую:
from dask import delayed
from distributed import LocalCluster, Client
cluster=LocalCluster(n_workers=4, threads_per_worker=1)
cli=Client(cluster)
from scipy.stats import uniform
import numpy as np
niter=500
loc=1.0e-09
scale=1.0
ntries=1000
sched=uniform(loc=loc,scale=scale)
train=np.arange(1000)+0.5
test=np.arange(1000)
# HERE IS THE DASK
graph=build(ntries,sched,niter,delayed(func),score,train,test)
# THE QUESTION SECTION
# I do these steps to bring back all the values so that I could search for the score-wise optimal pair: (parameter, score)
res=[cli.compute(g) for g in graph]
results=[r.result() for r in res]
# Actual search for the optimal pair
optimal=compute_optimal(results)
best,worst=optimal[0],optimal[-1]
Вопросы:
- Правильно ли я использую Dask здесь?
- Правильно ли я возвращаю данные клиенту? Есть ли более эффективные способы сделать это?
- Есть ли способ сделать поиск оптимальной пары на рабочих?
P.S. Недавно я разместил связанный вопрос, но с другой проблемой (thread. блокировка во время класса поиска пользовательских параметров с использованием распределенного Dask). Я решил это и вскоре опубликую ответ и закрою эту проблему.
res = cli.compute(graph)
; также вы можете использоватьcli.gather
для одновременного получения нескольких результатов. - person mdurant   schedule 09.07.2017