[{'role': 'system', 'content': "You are an expert in machine learning and your task is to classify the code snippets into categories from the provided list of categories. List of categories: ['helper_functions', 'load_data', 'data_exploration', 'data_preprocessing', 'evaluation', 'modelling', 'prediction', 'result_visualization', 'save_results', 'comment_only']"}, {'role': 'user', 'content': 'Identify to which category the provided code belongs and assign the code snippet to at least 1 but up to 5 categories based on the probabilities, ignore if the probability of the category is negligible. Strictly provide your response as a list. Avoid providing any additional information, commentary, or personal opinions.\\nPython Code:class RunnerOfMLP(AbstractRunner):\n"""\nCombines and structurizes all utilities\nthat evaluate MLP performance in\nthe task of forecasting `horizon` steps\nahead with `n_lags` previous values,\na current value, and some aggregates\nas features.\n"""\ndef __init__(self, horizon, n_lags, hidden_layers_widths):\n"""\n@type horizon: int\n@type n_lags: int\n@type hidden_layers_widths: int\n"""\nsuper().__init__(horizon, n_lags)\nself.hidden_layers_widths = hidden_layers_widths\nwith self.graph.as_default():\nself.preds = build_mlp(self.inputs, self.horizon,\nself.hidden_layers_widths, self.keep_prob)\nself._set_optimization_problem()\ndef _define_placeholders(self):\n"""\nDefines placeholders for input values,\ntarget values, learning rate, and\nprobability to keep unit after dropout.\n@rtype: NoneType\n"""\nwith self.graph.as_default():\nself.inputs = tf.placeholder(tf.float32,\nshape=(None, self.n_lags + 1),\nname=\'inputs\')\nself.targets = tf.placeholder(tf.float32,\nshape=(None, self.horizon),\nname=\'targets\')\nself.learning_rate = tf.placeholder(tf.float32, name=\'learning_rate\')\nself.keep_prob = tf.placeholder(tf.float32, name=\'keep_prob\')\ndef _train(self, train_ser, batch_size, n_epochs, learn_rate, keep_prob, ckpt_path):\n"""\nTrains MLP and informs about training.\nAlso can save trained model\nif `ckpt_path` is set.\n@type train_ser: pandas.Series\n@type batch_size: int\n@type n_epochs: int\n@type learn_rate: float\n@type keep_prob: float\n@type ckpt_path: str\n@rtype: NoneType\n"""\nbatches = get_batches_for_mlp(train_ser, batch_size, self.horizon, self.n_lags)\nfor epoch_cnt in range(n_epochs):\nfor batch_cnt, (x, y) in enumerate(batches):\nfeed_dict = {self.inputs: x,\nself.targets: y,\nself.learning_rate: learn_rate,\nself.keep_prob: keep_prob}\ny_hat, train_loss, _ = self.sess.run([self.preds,\nself.cost,\nself.train_optim],\nfeed_dict)\nif epoch_cnt % 5 == 0:\nprint(\'Epoch {:>3}:    train_loss = {:.3f}\'.format(epoch_cnt, train_loss))\nif ckpt_path is not None:\nsaver = tf.train.Saver()\nsaver.save(self.sess, ckpt_path)\ndef _test(self, test_ser):\n"""\nReports performance on hold-out test set\nas coefficient of determination.\nAlso visualizes some predictions against\nthe corresponding actual values.\n@type test_ser: pandas.Series\n@rtype: float\n"""\nscores = []\nbatch_size = 1  # It is testing, not training.\nbatches = get_batches_for_mlp(test_ser, batch_size, self.horizon, self.n_lags)\nfor batch_cnt, (x, y) in enumerate(batches):\nfeed_dict = {self.inputs: x,\nself.keep_prob: 1}\ny_hat = self.sess.run(self.preds, feed_dict)\ny_hat[y_hat < 0] = 0  # Obvious improvement.\ncurr_score = r2_score(y[0], y_hat[0])\nscores.append(curr_score)\nif batch_cnt % 500 == 0:\nself._plot(y[0], y_hat[0], batch_cnt)\nreturn sum(scores) / len(scores)'}, {'role': 'assistant', 'content': "['evaluation', 'modelling']"}]