comparison scripts/learn-motion-patterns.py @ 735:0e875a7f5759 dev

modified prototypeCluster algorithm to enforce similarity when re-assigning and to compute only the necessary similarities
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 12 Aug 2015 00:24:06 -0400
parents 1d4dcb5c8708
children 181bcb6dad3a
comparison
equal deleted inserted replaced
734:1d4dcb5c8708 735:0e875a7f5759
40 trajectories = [o.getPositions().asArray().T for o in objects] 40 trajectories = [o.getPositions().asArray().T for o in objects]
41 41
42 lcss = utils.LCSS(metric = args.metric, epsilon = args.epsilon) 42 lcss = utils.LCSS(metric = args.metric, epsilon = args.epsilon)
43 nTrajectories = len(trajectories) 43 nTrajectories = len(trajectories)
44 44
45 similarities = np.zeros((nTrajectories, nTrajectories)) 45 similarities = -np.ones((nTrajectories, nTrajectories))
46 for i in xrange(nTrajectories): 46 # for i in xrange(nTrajectories):
47 for j in xrange(i): 47 # for j in xrange(i):
48 similarities[i,j] = lcss.computeNormalized(trajectories[i], trajectories[j]) 48 # similarities[i,j] = lcss.computeNormalized(trajectories[i], trajectories[j])
49 similarities[j,i] = similarities[i,j] 49 # similarities[j,i] = similarities[i,j]
50 50
51 prototypeIndices, labels = ml.prototypeCluster(trajectories, similarities, args.minSimilarity, args.minClusterSize) 51 prototypeIndices, labels = ml.prototypeCluster(trajectories, similarities, args.minSimilarity, lambda x,y : lcss.computeNormalized(x, y), args.minClusterSize) # this line can be called again without reinitializing similarities
52 52
53 if args.display: 53 if args.display:
54 from matplotlib.pyplot import figure
55 figure()
54 for i,o in enumerate(objects): 56 for i,o in enumerate(objects):
55 if i not in prototypeIndices: 57 if i not in prototypeIndices:
56 o.plot(utils.colors[labels[i]]) 58 if labels[i] < 0:
59 o.plot('kx')
60 else:
61 o.plot(utils.colors[labels[i]])
57 for i in prototypeIndices: 62 for i in prototypeIndices:
58 objects[i].plot(utils.colors[i]+'o') 63 objects[i].plot(utils.colors[i]+'o')
59 64
60 # TODO store the prototypes (if features, easy, if objects, info must be stored about the type) 65 # TODO store the prototypes (if features, easy, if objects, info must be stored about the type)