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