Mercurial Hosting > traffic-intelligence
changeset 953:989917b1ed85
assign and learn work
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 25 Jul 2017 17:36:07 -0400 |
parents | a9b2beef0db4 |
children | 030b16ab4f64 |
files | python/ml.py scripts/learn-motion-patterns.py |
diffstat | 2 files changed, 7 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/python/ml.py Mon Jul 24 21:22:18 2017 -0400 +++ b/python/ml.py Tue Jul 25 17:36:07 2017 -0400 @@ -138,7 +138,7 @@ self.prototypeId = prototypeId self.memberIndices = memberIndices -def assignToPrototypeClusters(instances, prototypeIndices, similarities, minSimilarity, similarityFunc = None, minClusterSize = None): +def assignToPrototypeClusters(instances, prototypeIndices, similarities, minSimilarity, similarityFunc = None, minClusterSize = 0): '''Assigns instances to prototypes if minClusterSize is not None, the clusters will be refined by removing iteratively the smallest clusters and reassigning all elements in the cluster until no cluster is smaller than minClusterSize''' @@ -166,8 +166,7 @@ prototypeIndices.remove(smallestClusterIndex) indices = [i for i in range(similarities.shape[0]) if labels[i] == smallestClusterIndex] return prototypeIndices, labels - -def prototypeCluster(instances, similarities, minSimilarity, similarityFunc = None, minClusterSize = 0, optimizeCentroid = True, randomInitialization = False, initialPrototypeIndices = None): +def prototypeCluster(instances, similarities, minSimilarity, similarityFunc = None, optimizeCentroid = True, randomInitialization = False, initialPrototypeIndices = None): '''Finds exemplar (prototype) instance that represent each cluster Returns the prototype indices (in the instances list)
--- a/scripts/learn-motion-patterns.py Mon Jul 24 21:22:18 2017 -0400 +++ b/scripts/learn-motion-patterns.py Tue Jul 25 17:36:07 2017 -0400 @@ -18,7 +18,7 @@ parser.add_argument('-e', dest = 'epsilon', help = 'distance for the similarity of trajectory points', type = float, required = True) parser.add_argument('--metric', dest = 'metric', help = 'metric for the similarity of trajectory points', default = 'cityblock') # default is manhattan distance parser.add_argument('-s', dest = 'minSimilarity', help = 'minimum similarity to put a trajectory in a cluster', type = float, required = True) -parser.add_argument('-c', dest = 'minClusterSize', help = 'minimum cluster size', type = int, default = None) +parser.add_argument('-c', dest = 'minClusterSize', help = 'minimum cluster size', type = int, default = 0) parser.add_argument('--learn', dest = 'learn', help = 'learn', action = 'store_true') parser.add_argument('--optimize', dest = 'optimizeCentroid', help = 'recompute centroid at each assignment', action = 'store_true') parser.add_argument('--random', dest = 'randomInitialization', help = 'random initialization of clustering algorithm', action = 'store_true') @@ -77,9 +77,11 @@ similarityFunc = lambda x,y : lcss.computeNormalized(x, y) # the next line can be called again without reinitializing similarities if args.learn: - prototypeIndices = ml.prototypeCluster(trajectories, similarities, args.minSimilarity, similarityFunc, args.minClusterSize, args.optimizeCentroid, args.randomInitialization, initialPrototypeIndices) + prototypeIndices = ml.prototypeCluster(trajectories, similarities, args.minSimilarity, similarityFunc, args.optimizeCentroid, args.randomInitialization, initialPrototypeIndices) # assignment is done if explicitly passed as argument or if working on the same database (starting prototypes from scratch and assigning the ) # (otherwise the matchings will not compare and one has to to matchings on a large scale at once) +else: + prototypeIndices = initialPrototypeIndices if args.assign: prototypeIndices, labels = ml.assignToPrototypeClusters(trajectories, prototypeIndices, similarities, args.minSimilarity, similarityFunc, args.minClusterSize) @@ -90,7 +92,7 @@ prototypes = [] for i in prototypeIndices: if args.assign: - nMatchings = clusterSizes[i] + nMatchings = clusterSizes[i]-1 else: nMatchings = 0 if i<len(initialPrototypes):