def train_model(self, training_ffts, training_labels): """ Takes a set of training examples + corresponding true labels and returns a trained SOM and kNN. """ som_size = self.params['som_size'] som_iterations = self.params['som_iterations'] som_learning_rate = self.params['som_learning_rate'] knn_k = self.params['knn_k'] som = SelfOrganizingMap(size=som_size, n_iterations=som_iterations, learning_rate=som_learning_rate) column_vectors = np.hstack(training_ffts).T np.random.shuffle(column_vectors) som.fit(column_vectors) training_sequences = [ self.sound_fft_to_string(sound_fft, som) for sound_fft in training_ffts ] knn_model = kNN.train(training_sequences, training_labels, knn_k) return som, knn_model
def train_model(self, training_ffts, training_labels): """ Takes a set of training examples + corresponding true labels and returns a trained SOM and kNN. """ som_size = self.params['som_size'] som_iterations = self.params['som_iterations'] som_learning_rate = self.params['som_learning_rate'] knn_k = self.params['knn_k'] som = SelfOrganizingMap(size=som_size, n_iterations=som_iterations, learning_rate=som_learning_rate) column_vectors = np.hstack(training_ffts).T np.random.shuffle(column_vectors) som.fit(column_vectors) training_sequences = [self.sound_fft_to_string(sound_fft, som) for sound_fft in training_ffts] knn_model = kNN.train(training_sequences, training_labels, knn_k) return som, knn_model
h, w, d = neurons.shape hexmap = np.apply_along_axis(rgb2hex, 1, neurons.reshape(-1, 3) / 256) index = np.arange(h * w).reshape(h, w) pl.pcolor(index, cmap=ListedColormap(hexmap), norm=NoNorm()) train = np.array([[0, 0, 0], # black [255, 255, 255], # white [255, 0, 0], # red [0, 255, 0], # green [0, 0, 255], # blue [255, 255, 0], # yellow [0, 255, 255], # cyan [255, 0, 255]]) # magenta init = np.random.rand(16, 16, 3) * 255 pl.subplot(1, 2, 1, aspect='equal') plot(init) pl.title('Initial map') som = SelfOrganizingMap(init, n_iterations=1024, init='matrix', learning_rate=1) som.fit(train) pl.subplot(1, 2, 2, aspect='equal') plot(som.neurons_) pl.title('Organized Map') F = pl.gcf() F.set_size_inches((40, 20)) pl.show()
n_samples, n_features = data.shape n_digits = len(np.unique(digits.target)) print "Digits dataset" print "n_digits : %d" % n_digits print "n_features : %d" % n_features print "n_samples : %d" % n_samples print ################################################################################ # Digits dataset clustering using Self-Organizing Map print "Self-Organizing Map " t0 = time() grid_width = 4 som = SelfOrganizingMap(size=grid_width, n_iterations=n_samples*5, learning_rate=1) som.fit(data) print "done in %0.3fs" % (time() - t0) print F = pseudo_F(data, som.labels_, som.neurons_) print 'pseudo_F %0.2f | %0.2f%%' % (F, 100 * (F / (1 + F))) print ################################################################################ # Digits dataset clustering using Kmeans print "KMeans " t0 = time() km = KMeans(init='k-means++', k=grid_width**2, n_init=10) km.fit(data)