-
Notifications
You must be signed in to change notification settings - Fork 0
/
validater.py
79 lines (66 loc) · 2.91 KB
/
validater.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import sys
sys.dont_write_bytecode = True
import logging
import cache
import episodes as epi
import portfolio as ptf
import objective as obj
import w
import date
def validate(batch, params, i, remote, debug):
logging.info("--------------")
logging.info("episode %s" % i)
result = {'success' : False, 'error' : 'none'}
try:
portfolio = cache.get(params['portfolioKey'], remote)
episodes = params['episodes']
validateParams = params['validate']
logging.debug("validateParams : %s" % validateParams)
trainParams = params['train']
wParams = params['w']
fromDate = episodes['validate'][i][0]
toDate = episodes['validate'][i][1]
logging.info("fromDate, toDate : %s, %s" % (date.to_yyyymmdd(fromDate), date.to_yyyymmdd(toDate)))
nFromDate = episodes['train'][i][0]
nToDate = episodes['train'][i][1]
logging.info("nFromDate, nToDate : %s, %s" % (date.to_yyyymmdd(nFromDate), date.to_yyyymmdd(nToDate)))
portfolio.instantiate(fromDate, toDate, True, nFromDate, nToDate)
numTrainIters = trainParams['iters']
accumulate = validateParams['accumulate']
objective = validateParams['objective']
threshold = validateParams['threshold']
trainLibrary = []
winner_ = []
loser_ = []
numCandidates = 0
iTrainFrom = 0 if accumulate else i
iTrainTo = i + 1
for iTrain in range(iTrainFrom, iTrainTo):
for j in range(numTrainIters):
logging.info("train %s.%s : " % (iTrain, j))
trainResult = cache.get("batch/%s/train/%s.%s" % (batch, iTrain, j), remote)
trainWinner_ = trainResult['winner_']
numCandidates += len(trainWinner_)
for trainWinner in trainWinner_:
W_ = trainWinner['W_']
F__ = w.run_W(portfolio, W_, wParams)
S = obj.score(objective, portfolio, F__)
outcome = {'W_' : W_, 'S' : S, 'provenance' : iTrain}
if (debug):
outcome.update({'F__' : F__})
if (S >= threshold):
winner_.append(outcome)
else:
loser_.append(outcome)
logging.info("candidates : %s" % numCandidates)
logging.info("winners : %s" % len(winner_))
logging.info("losers : %s" % len(loser_))
result = {'success' : True, 'error' : 'none', 'winner_' : winner_, 'loser_' : loser_}
except (KeyboardInterrupt):
raise
except:
result['error'] = sys.exc_info()[0]
logging.info("error %s", result['error'])
cache.put("batch/%s/validate/%s" % (batch, i), result, remote)
logging.info("--------------")
return result