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):