From c82ba5c63a6b5ba1fb2bfb100a22e43a65345979 Mon Sep 17 00:00:00 2001 From: hellboy Date: Mon, 15 Mar 2010 12:13:11 +0100 Subject: [PATCH] kohonen.py: minor change --- kohonen_map.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/kohonen_map.py b/kohonen_map.py index b71edaa..2f52c3b 100755 --- a/kohonen_map.py +++ b/kohonen_map.py @@ -21,13 +21,14 @@ class ComponentEuclideanMetric(DistanceMetric): def __call__(self, x, y): d = x - y if self.k: - return numpy.sqrt((d * d)[k]) + print k + return numpy.sqrt((d * d)[self.k]) else: return numpy.sqrt(numpy.sum(d * d, axis=-1)) if __name__ == '__main__': main_pat_filename = Data.main_pat_filename - filename = 'koh_all.data' + filename = 'koh_all.data2' num_features = 300 size=16 players_ignore = [ 'Honinbo Shusaku', 'Kuwahara Shusaku', 'Yasuda Shusaku', 'Go Seigen', 'Cho Tae-hyeon','Rui Naiwei'] @@ -56,12 +57,7 @@ if __name__ == '__main__': # Perform a PCA on input vectors input_vectors = pca.process_list_of_vectors(input_vectors) dim = len(input_vectors[0]) - - m = kohonen.Map(kohonen.Parameters(dimension=dim, - shape=(size,size), - learning_rate=kohonen.ExponentialTimeseries(-5e-4, 0.5, 0.2), - noise_variance=None)) - m.reset() + #print "dim:",dim lc =[] num_linc=2000 @@ -79,7 +75,16 @@ if __name__ == '__main__': input_vectors = [numpy.array(vec) for vec in input_vectors] input_vectors_lc = [numpy.array(vec) for vec in lc] total = input_vectors + input_vectors_lc - print len(total) + #print len(total) + + m = kohonen.Map(kohonen.Parameters(dimension=dim, + shape=(size,size), + learning_rate=kohonen.ExponentialTimeseries(-5e-4, 0.5, 0.2), + noise_variance=None)) + def def_neurs(*args): + return random.choice(total) + + m.reset(def_neurs) print >>sys.stderr, "Training Kohonen net." num_iter = 2000 @@ -87,7 +92,7 @@ if __name__ == '__main__': if i % (num_iter/10) == 0: err = sum( [ m.distances(random.choice(total)).min() for _ in xrange(10) ] ) / 10.0 print >>sys.stderr, "%2d%% (%4d): error = %5f alpha = %5f"%(100 * i/num_iter,i, err, m._learning_rate.last) - if err < 0.2: + if err < 0.08: print >>sys.stderr, "Current error is good enough." break if i > 0 and err > 1.5 and False: @@ -98,13 +103,14 @@ if __name__ == '__main__': #im = m.neuron_heatmap() #im.show() - ''' + orig_m = m._metric - m._metric = ComponentEuclideanMetric(0) - im2 = m.distance_heatmap(input_vectors[0]) - im2.show() + for i in xrange(0): + m._metric = ComponentEuclideanMetric(i) + im2 = m.neuron_heatmap() + im2.show() m._metric = orig_m - ''' + winner_neurons= [ m.winner(input_vector) for input_vector in input_vectors ] #print winner_neurons[0]/16, winner_neurons[0]%16 -- 2.11.4.GIT