Skip to content

Instantly share code, notes, and snippets.

@Radi4
Created March 31, 2018 12:23
Show Gist options
  • Save Radi4/ea6fdb2c6a5adc4b073b8793135044bf to your computer and use it in GitHub Desktop.
Save Radi4/ea6fdb2c6a5adc4b073b8793135044bf to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Importing"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import mne\n",
"import os\n",
"from sklearn.model_selection import train_test_split\n",
"import h5py\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sb\n",
"from sklearn.decomposition import PCA\n",
"from sklearn.preprocessing import StandardScaler\n",
"import torch\n",
"from keras.models import load_model"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from ipyparallel import Client\n",
"c = Client()\n",
"# lview = c.load_balanced_view()\n",
"lview = c[:]\n",
"lview.block = True"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%%px\n",
"import numpy as np\n",
"from sklearn.metrics import mean_squared_error"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Metric"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Физический смысл - метрика соответствует соотношению энергий: \n",
" а) объясненной y_pred \n",
" б) общей энергии y_true (энергия пропорциональна L2-норме вектора)\n",
"С точки зрения оптимизиации, минимизация mse ведет к минимизации l2, поэтому сети можно учить на mse"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def metric(y_true, y_pred):\n",
" l2ratio = np.sum((y_true - y_pred)**2) / np.sum(y_true**2)\n",
" return np.sqrt(l2ratio) * 100"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load train data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"@lview.parallel()\n",
"def load_file(fnames):\n",
" import h5py\n",
" try:\n",
" h5_file = h5py.File(fnames, 'r')\n",
" a_group_key = list(h5_file.keys())[0]\n",
" eeg_data = np.array(h5_file[a_group_key]).T\n",
" except FileNotFoundError:\n",
" eeg_data = None\n",
" return [eeg_data, eeg_data.shape[0]]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def find_bad_channels(X, X_size):\n",
" X_delete_channels = []\n",
" start = 0\n",
" for finish in X_size:\n",
" part_data = X[start : finish]\n",
" X_delete_channels.append([])\n",
" for i in range(X.shape[1]):\n",
" part_data[:, i]\n",
" if (np.array_equal(part_data[:, i], np.zeros(finish - start))):\n",
" X_delete_channels[-1].append(i)\n",
" start = finish\n",
" return X_delete_channels "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train_dir = \"/mnt/radi4/data/train/\"\n",
"train_names = [x for x in os.listdir(train_dir) \n",
" if x[-3:] == \".h5\"]\n",
"data = [x for x in load_file.map([train_dir + f for f in train_names]) if x is not None]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X_train = np.concatenate([x[0] for x in data], axis = 0)\n",
"X_train_size = np.cumsum(np.array([x[1] for x in data]))\n",
"X_train_delete_channels = find_bad_channels(X_train, X_train_size)\n",
"del data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load test data"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def load_new_data():\n",
" eeg_dir = \"/mnt/radi4/data/test/\"\n",
" eeg_names = [x for x in os.listdir(eeg_dir) \n",
" if x[-3:] == \".h5\"]\n",
" data = np.concatenate([x for x in \n",
" load_file.map([eeg_dir + f for f in eeg_names]) \n",
" if x is not None], axis=0)\n",
" return np.concatenate([x[0] for x in data], axis = 0), np.cumsum(np.array([x[1] for x in data]))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X_test, X_test_size = load_new_data()\n",
"X_test_delete_channels = find_bad_channels(X_test, X_test_size)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X_test_delete_channels = []\n",
"start = 0\n",
"for finish in X_test_size:\n",
" part_data = X_test[start : finish]\n",
" X_train_delete_channels.append([])\n",
" for i in range(58):\n",
" part_data[:, i]\n",
" if (np.array_equal(part_data[:, i],np.zeros(finish - start))):\n",
" X_train_delete_channels[-1].append(i)\n",
" start = finish"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# PCA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Метод главныx компонент - бейзлайн, который в идеале надо побить с помощью NN"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class L2RatioTester(object):\n",
" def metric(self, y_true, y_pred):\n",
" l2ratio = np.sum((y_true - y_pred)**2) / np.sum(y_true**2)\n",
" return np.sqrt(l2ratio) * 100"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"components_count = [1, 2, 4, 8, 12, 29, 40, 45, 50, 55, 58]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"@lview.parallel()\n",
"def calc_metric(n_components):\n",
" from sklearn.decomposition import PCA\n",
" pca = PCA(n_components=n_components)\n",
" pca.fit(X_train)\n",
" return (tester.metric(X_test, pca.inverse_transform(pca.transform(X_test)))\n",
" , tester.metric(X_train, pca.inverse_transform(pca.transform(X_train))))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"lview['X_train'] = X_train[:200000]\n",
"lview['X_test'] = X_test[:200000]\n",
"lview['L2RatioTester'] = L2RatioTester"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## L2Ratio On PCA"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 44 ms, sys: 12 ms, total: 56 ms\n",
"Wall time: 11.5 s\n"
]
}
],
"source": [
"%%time \n",
"lview['tester'] = L2RatioTester()\n",
"l2_ratio = calc_metric.map(components_count)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
" (prop.get_family(), self.defaultFamily[fontext]))\n"
]
},
{
"data": {
"image/png": "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\niKwaZ04jIiKyIgxuIiIiK8LgJiIisiIMbiIiIivC4CYiIrIiDG4iIiIrwuAmIiKyIgxuIiIiKyLQ\narVacxdBRERE+uERNxERkRVhcBMREVkRBjcREZEVYXATERFZEQY3ERGRFWFwExERWRGrD+6DBw9i\n0aJFWLhwIZKSkq55XKvV4tVXX8XChQuxdOlSZGdnm6FKyzdUH7du3YqlS5di6dKluOuuu5CTk2OG\nKq3DUL3slZWVhSlTpuDnn382YXXWRZ9epqen47bbbkNcXBzuu+8+E1doHYbqY0NDAx5++GHceuut\niIuLw/fff2+GKi3fc889h+joaCxZsqTfx02WN1or1tHRoV2wYIG2sLBQ29raql26dKn2woULfZ6z\nf/9+7YMPPqjt6urSnjhxQrt8+XIzVWu59OljZmamtra2VqvVdveUfeyfPr3sfd6KFSu0q1at0v70\n009mqNTy6dPLuro67eLFi7UlJSVarVarraqqMkepFk2fPr7//vva119/XavVarUajUYbERGhbW1t\nNUe5Fu3o0aPa06dPa+Pi4vp93FR5Y9VH3FlZWfD19cW4ceNgZ2eHuLg47Nmzp89z9uzZg/j4eAgE\nAsyYMQP19fVQq9Vmqtgy6dPHmTNnQiqVAgBmzJiB8vJyc5Rq8fTpJQB88cUXWLRoETw8PMxQpXXQ\np5fbtm3DwoULoVKpAID97Ic+fRQIBGhqaoJWq0VTUxOkUilEIpGZKrZcERERut+D/TFV3lh1cFdU\nVECpVOq+VygUqKioGPQ5SqXymueMdfr08WqbNm3CvHnzTFGa1dH3Z3L37t24++67TV2eVdGnl/n5\n+aivr8eKFStw++23Izk52dRlWjx9+njvvfciNzcXN9xwA2699VasW7cOQqFVx4NZmCpv+CcVDcuR\nI0ewadMmfPXVV+YuxWqtX78eTz31FH8xGkBnZyeys7Px2WefoaWlBXfddRdCQ0MxYcIEc5dmVX75\n5RcEBwfj888/R2FhIRISEhAeHg5nZ2dzl0b9sOrgVigUfU7ZVlRUQKFQDPqc8vLya54z1unTRwDI\nycnBn//8Z3z44Ydwc3MzZYlWQ59enj59Gk888QQAoKamBgcOHIBIJMLNN99s0lotnT69VCqVcHV1\nhVgshlgsRnh4OHJychjcV9Gnj5s3b0ZiYiIEAgF8fX3h4+ODvLw8TJ8+3dTlWjVT5Y1V/8k/bdo0\n5Ofno6ioCG1tbUhJSUFMTEyf58TExCA5ORlarRYnT56ERCKBXC43U8WWSZ8+lpaW4rHHHsPrr7/O\nX54SajkAAAOhSURBVIqD0KeXe/fu1X0tWrQIL730EkO7H/r0csGCBcjMzERHRwcuX76MrKwsBAQE\nmKliy6RPH728vJCWlgYAqKqqwqVLl+Dj42OOcq2aqfLGqo+4RSIRXnzxRaxatQqdnZ1YtmwZgoKC\n8PXXXwMA7r77bsyfPx8HDhzAwoUL4ejoiL/+9a9mrtry6NPH9957D7W1tXj55ZcBADY2Nti8ebM5\ny7ZI+vSS9KNPLwMCAnTjskKhEMuXL8fEiRPNXLll0aePjzzyCJ577jksXboUWq0WTz31FNzd3c1c\nueV54okncPToUdTU1GDevHl47LHH0NHRAcC0ecNlPYmIiKyIVZ8qJyIiGmsY3ERERFaEwU1ERGRF\nGNxERERWhMFNRERkRRjcRGNEXV0dpk+fjldffVW37d1338Xf/va3IV+7efNmrFmzxpjlEZGeGNxE\nY8T27dsRGhqKlJQUtLW1mbscIhohBjfRGPH999/jkUcewaRJk/pdsWzz5s1ISEjAww8/jN/85jdY\nuXJlnwUSGhsb8fjjjyMuLg533XUXKisrAQDnzp3DPffcg//+7//Gb37zG3z22Wem+khEYxKDm2gM\nyMnJQW1tLWbPno3bb78d33//fb/Py8zMxDPPPIMff/wRkZGRWL9+ve6xX3/9FX/605+QkpKCwMBA\nfPnllwAAb29vfPbZZ/jhhx/w3Xff4dtvv0Vubq5JPhfRWMTgJhoDNm3ahNtuuw0CgQCxsbHIysrq\nd7nBWbNmwd/fHwBwxx134MiRI7rHZs6cCS8vLwBAaGgoCgsLAQAtLS14/vnnsXTpUtx9991Qq9XI\nyckxwaciGpuseq5yIhpaW1sbtm/fDjs7O2zZsgUA0N7ePuy55u3t7XX/trGxQWdnJwDgrbfegkwm\nw//+7/9CJBLh/7d3xyYSAmEYhr/AEgxMJzdREGzCJsxswB7EzAKsQLECQQxFLMBIazAykQsW9m45\nuE2EY5b3CYdhmD/6+GcGJk1Tned5XwEAXtBxAx+u73sZYzSO4/NXsrqu1XXdr7nLsmjbNkmPO/E4\njt+ufxyHPM+T4zha11XzPN9dAoAf6LiBD9e2rZIkeRkLgkDXdWmaJvm+/xwPw1BFUWjfd7muq7Is\n366fZZnyPFfTNDLGKIqi22sA8I3fwQBIerwqH4ZBVVX991YA/IGjcgAALELHDQCARei4AQCwCMEN\nAIBFCG4AACxCcAMAYBGCGwAAixDcAABY5AvEPPdu3QXlzwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4615177128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.array(components_count) / 58.\n",
"y = np.array([i[0] for i in l2_ratio])\n",
"plt.plot(x, y, label = \"PCA on Test\", marker='o')\n",
"plt.title(\"L2Ratio vs Alpha Test\")\n",
"plt.xlabel(\"Alpha\")\n",
"plt.ylabel(\"L2Ratio\")\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
" (prop.get_family(), self.defaultFamily[fontext]))\n"
]
},
{
"data": {
"image/png": "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\na9YsfPHFF/Dz88P8+fOxZs0aREREDPgaBrd1sS1Ng+1oOmxL02A7Dk1TexknzlciK7cKucW16EnM\nQKUMKm9XHD/fd8b6b+4Yd83hbVNLnmZnZyM4OBhBQUEAgOTkZGRmZg4a3ERERNag8nJF0uTRSJo8\nGvXNbTiZq19+9dSlapT0c80c0G+sYs5bzCwe3BUVFfD39zc89vPzQ3Z29qCv8fZ2g0Qy/NVvBvuL\nhYaHbWkabEfTYVuaBtvReEoA4cEK3HVbNC63duDel7eivzHrMm2TWdvVLian1dQ0D/s1HAIyHbal\nabAdTYdtaRpsx2sT6Cvrd6Z6gEJ2ze06WPBb/D5uPz8/lJeXGx5XVFTAz8++Vq0hIiJKTggZ4Hiw\nWT/X4sF9/fXXIz8/H0VFRWhra8PWrVuRmJho6TKIiIiuSfxYP/zmjnEYpXSHWCRglNLdJBPThmLx\noXKJRIJXX30VixcvRmdnJ+6++25ERkZaugwiIqJrFj/WD/Fj/Sx62cEq17inTZuGadOmWeOjiYiI\n7BrXKiciIrIjDG4iIiI7wuAmIiKyIwxuIiIiO8LgJiIisiMMbiIiIjvC4CYiIrIjDG4iIiI7YvH9\nuImIiOjqscdNRERkRxjcREREdoTBTUREZEcY3ERERHaEwU1ERGRHGNxERER2xO6De9++fZg1axZm\nzpyJtLS0Ps/rdDq8+eabmDlzJubNm4fTp09boUrbN1Q7btq0CfPmzcO8efNw3333IScnxwpV2oeh\n2rJHdnY2xo4dix9++MGC1dkXY9ry0KFDuPPOO5GcnIyHHnrIwhXah6HasaGhAU888QTuuOMOJCcn\n49tvv7VClbbvxRdfREJCAubOndvv8xbLG50d6+jo0M2YMUNXWFioa21t1c2bN0+Xm5vb65w9e/bo\nFi1apOvq6tIdP35cN3/+fCtVa7uMacdjx47pamtrdTqdvk3Zjv0zpi17zlu4cKFu8eLFuu+//94K\nldo+Y9qyrq5ON2fOHF1JSYlOp9PpqqqqrFGqTTOmHT/55BPdu+++q9PpdDqtVqubNGmSrrW11Rrl\n2rTDhw/rTp06pUtOTu73eUvljV33uLOzsxEcHIygoCBIpVIkJycjMzOz1zmZmZlISUmBIAgYP348\n6uvrodForFSxbTKmHSdMmAC5XA4AGD9+PMrLy61Rqs0zpi0B4Ouvv8asWbOgUCisUKV9MKYtN2/e\njJkzZ0KtVgMA27MfxrSjIAhoamqCTqdDU1MT5HI5JBKJlSq2XZMmTTL8HuyPpfLGroO7oqIC/v7+\nhsd+fn6oqKgY9Bx/f/8+5zg6Y9rxSunp6Zg6daolSrM7xv5M7ty5E/fff7+ly7MrxrRlfn4+6uvr\nsXDhQtx1113IyMiwdJk2z5h2fPDBB3Hx4kXccsstuOOOO/Dyyy9DJLLreLAKS+UN/6SiYfn555+R\nnp6Ov//979YuxW6tXr0aK1eu5C9GE+js7MTp06fx5ZdfoqWlBffddx9iY2MRGhpq7dLsyo8//oiY\nmBh89dVXKCwsRGpqKiZOnAh3d3drl0b9sOvg9vPz6zVkW1FRAT8/v0HPKS8v73OOozOmHQEgJycH\nv//97/HXv/4V3t7elizRbhjTlqdOncKzzz4LAKipqcHevXshkUhw2223WbRWW2dMW/r7+8PLywtu\nbm5wc3PDxIkTkZOTw+C+gjHtuGHDBixZsgSCICA4OBijRo1CXl4ebrjhBkuXa9cslTd2/Sf/9ddf\nj/z8fBQVFaGtrQ1bt25FYmJir3MSExORkZEBnU6HEydOwMPDAyqVykoV2yZj2rG0tBTPPPMM3n33\nXf5SHIQxbblr1y7Dv1mzZuG1115jaPfDmLacMWMGjh07ho6ODly+fBnZ2dkIDw+3UsW2yZh2DAgI\nwMGDBwEAVVVVuHTpEkaNGmWNcu2apfLGrnvcEokEr776KhYvXozOzk7cfffdiIyMxD/+8Q8AwP33\n349p06Zh7969mDlzJlxdXfHWW29ZuWrbY0w7fvzxx6itrcXrr78OABCLxdiwYYM1y7ZJxrQlGceY\ntgwPDzdclxWJRJg/fz6ioqKsXLltMaYdly5dihdffBHz5s2DTqfDypUr4ePjY+XKbc+zzz6Lw4cP\no6amBlOnTsUzzzyDjo4OAJbNG27rSUREZEfseqiciIjI0TC4iYiI7AiDm4iIyI4wuImIiOwIg5uI\niMiOMLiJHERdXR1uuOEGvPnmm4ZjH330Ed55550hX7thwwYsW7bMnOURkZEY3EQOYsuWLYiNjcXW\nrVvR1tZm7XKI6CoxuIkcxLfffoulS5ciOjq63x3LNmzYgNTUVDzxxBO4/fbb8fDDD/faIKGxsRHL\nly9HcnIy7rvvPlRWVgIAzp07hwceeAD/9V//hdtvvx1ffvmlpb4lIofE4CZyADk5OaitrcWUKVNw\n11134dtvv+33vGPHjuGFF17Atm3bMHnyZKxevdrw3C+//ILf/e532Lp1KyIiIvC3v/0NABAYGIgv\nv+BQzYgAAAGVSURBVPwS3333Hf71r3/hm2++wcWLFy3yfRE5IgY3kQNIT0/HnXfeCUEQkJSUhOzs\n7H63G7zxxhsRFhYGAFiwYAF+/vlnw3MTJkxAQEAAACA2NhaFhYUAgJaWFrz00kuYN28e7r//fmg0\nGuTk5FjguyJyTHa9VjkRDa2trQ1btmyBVCrFxo0bAQDt7e3DXmve2dnZ8LVYLEZnZycAYM2aNVAq\nlfjjH/8IiUSCxx57DK2trab7BoioF/a4iUa4zMxMhIaGYt++fYZdyT7//HN89913fc7NyspCfn4+\nAP018SlTpgz5/g0NDfD394dEIsH58+dx9OhRU38LRHQF9riJRrhvv/0W8+bN63UsLi4OXV1dOHz4\nMK677jrD8QkTJuCdd95BQUEBfH198d577w35/k8++SReeOEFpKenIzQ0FJMmTTL590BEv+LuYEQE\nQD+rfM+ePfjwww+tXQoRDYJD5URERHaEPW4iIiI7wh43ERGRHWFwExER2REGNxERkR1hcBMREdkR\nBjcREZEdYXATERHZkf8fVJC+kc7TIroAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4616a2cda0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.array(components_count) / 58.\n",
"y = np.array([i[1] for i in l2_ratio])\n",
"plt.plot(x, y, label = \"PCA on Train\", marker='o')\n",
"plt.title(\"L2Ratio vs Alpha Train\")\n",
"plt.xlabel(\"Alpha\")\n",
"plt.ylabel(\"L2Ratio\")\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dense NN Students"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"enc_dims = [8, 29, 40, 58]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Команда Девушек"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Calc L2Ratio on Train"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def calc_metric(enc_dim, X, X_scaled, scaler, delete_channels = None):\n",
" name = \"./Girls_model_\"\n",
" autoencoder = load_model(name + str(enc_dim) + \".h5\")\n",
" X_predict = scaler.inverse_transform(autoencoder.predict(X_scaled))\n",
" if delete_channel is not None:\n",
" l2 = metric(np.delete(X, delete_channel, 1), np.delete(X_predict, delete_channel, 1))\n",
" else:\n",
" l2 = metric(X, X_predict)\n",
" return l2"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def autoencode(enc_dim, X, X_scaled, scaler, delete_channels = None):\n",
" name = \"./Girls_model_\"\n",
" autoencoder = load_model(name + str(enc_dim) + \".h5\")\n",
" X_predict = scaler.inverse_transform(autoencoder.predict(X_scaled))\n",
" return X_predict"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"scaler_train = StandardScaler()\n",
"X_train_scaled = scaler_train.fit_transform(X_train)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 302750, 909350, 1513250, 2116100, 2732700, 3337650,\n",
" 3940850, 4260150, 4894050, 5496900, 6099000, 6701750,\n",
" 7305700, 7909100, 8524700, 9177400, 9787400, 10391950,\n",
" 10999150, 11602950, 11904950, 12226550, 12830750, 13456000,\n",
" 14099750, 14704550, 15342500, 15946450, 16569700, 17173400,\n",
" 17780950, 18411000])"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train_size"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"l2_train = []\n",
"div = np.sum(X_train**2)\n",
"for enc_dim in enc_dims:\n",
" X_predict = autoencode(enc_dim, X_train, X_train_scaled, scaler_train)\n",
" start = 0\n",
" loss = 0\n",
" for i in range(X_train_size.shape[0]):\n",
" finish = X_train_size[i]\n",
" part_data = np.delete(X_train[start : finish], X_train_delete_channels[i], 1)\n",
" part_data_pred = np.delete(X_predict[start : finish], X_train_delete_channels[i], 1)\n",
" add = np.sum((part_data - part_data_pred)**2)\n",
" loss += add\n",
" print(add)\n",
" print(np.sqrt(add / np.sum(X_train[start : finish]**2)) * 100)\n",
" print(len(X_train_delete_channels[i]))\n",
" start = finish\n",
" loss /= div\n",
" loss = np.sqrt(loss) * 100\n",
" print(loss)\n",
" l2_train.append(loss)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
" (prop.get_family(), self.defaultFamily[fontext]))\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA4UAAAG5CAYAAAA595FfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt4lPWd///XPadkJpmQhISAJKDGACqCsAZRUL9E0CpQ\nD4iw68/aKrXaVtvVHlRQKpX2Z9dSdrtqBcqKvUTXVAoLuHyjKFLPoiC2BQnI+RCSkPMkkzl9/0gy\nEHIg5HBPJvN8XBeX5J65534PfK7qq5/3/b6NUCgUEgAAAAAgJlkiXQAAAAAAIHIIhQAAAAAQwwiF\nAAAAABDDCIUAAAAAEMMIhQAAAAAQwwiFAAAAABDDCIUAAFPk5eXpgw8+MO16TzzxhJ599lnTrteW\nOXPm6C9/+Uuky2jTxx9/rKuvvrrb3wsAiB6EQgCA6f7yl7/o1ltv1dixY3X11VfrN7/5jfx+f6c/\nb9WqVfrnf/7nZscWLFigH/zgB12qc/jw4dq/f3+XPmPZsmW65ZZbuvQZ3WHVqlUaPny43njjjUiX\nAgDoZQiFAADT1dbW6rHHHtNHH32k/Px8ffTRR1q+fHmr7+1KWOxpvbm20/3lL39RcnKyVq9eHelS\nAAC9DKEQAGC6f/mXf9Fll10mh8OhjIwMTZ8+XZ9//nn49by8PC1ZskTTp0/XpZdeKr/fryVLlmjy\n5MkaM2aMbrzxRr355puSpD179mj+/Pnatm2bxowZo8suu0yS9Mgjj+h3v/td+DNfe+01TZkyRePG\njdN9992noqKidmu84447JEk33XSTxowZozfeeCPcPrlkyRJNmDBBjz76qCoqKvS9731P48ePV25u\nrr73ve/p2LFj4c+58847lZ+fL+nkjubTTz+t3Nxc5eXl6d133231+kuWLNGDDz7Y7NhTTz2lp556\nKvxZ1157rcaMGaO8vDz9z//8T5vf5fDhw/r000+1YMECvffeeyouLm7zvXl5eXrhhRd04403Kjc3\nV48++qi8Xm+z9yxfvlxXXHGFJk6cqNdffz18fNOmTbr55ps1duxYXXPNNfr973/f5nUAAL0HoRAA\nEHGffvqpLrjggmbH1q9fryVLlmjLli2y2WzKysrSyy+/rM8++0w//OEP9dOf/lTHjx9Xdna2nnzy\nSV166aXaunWrtmzZ0uLzP/zwQ/32t7/V4sWL9d5772nw4MF66KGH2q3p5ZdfliStWbNGW7du1Y03\n3ihJKikpUUVFhd555x398pe/VDAY1K233qp33nlH77zzjuLi4rRgwYI2P3f79u0677zz9NFHH2nO\nnDmaO3euQqFQi/dNnTpV7777rqqrqyVJgUBAGzZs0LRp0+TxePTUU09p6dKl2rp1q1599VVdeOGF\nbV5z9erVGjlypK6//nplZ2dr7dq17X73tWvX6o9//KPefPNN7d27V88991z4tZKSElVVVWnz5s1a\nuHChFixYoIqKCkmS0+nU008/rS1btuiFF17QK6+8orfeeqvdawEAIo9QCACIqD//+c/629/+prvv\nvrvZ8TvvvFODBg1SfHy8JOmGG25QRkaGLBaLbrzxRg0dOlTbt2/v0DXWrl2rGTNm6OKLL5bD4dBD\nDz2kbdu26dChQ2ddr8Vi0YMPPiiHw6H4+HilpKTo+uuvl9PpVGJiou6//359+umnbZ5/zjnn6Pbb\nb5fVatUtt9yi4uJilZSUtHjf4MGDddFFF4VD1UcffaT4+Hhdeuml4ToKCwtVV1enAQMGKCcnp81r\nrlmzRtOmTZMkTZs27YwtpHfccYcGDRqk5ORk3X///Vq/fn34NZvNph/84Aey2+265ppr5HK5tHfv\nXknS5ZdfruHDh8tisWjEiBGaOnWqPvnkk3avBQCIPEIhACBi3nrrLS1atEhLly5Vampqs9cGDRrU\n7OfVq1frpptu0mWXXabLLrtMhYWFKisr69B1jh8/rsGDB4d/TkhIUHJy8hlbSFuTkpKiuLi48M+1\ntbV64oknNGnSJI0dO1Z33HGHKisrFQgEWj0/LS0t/Hun0ylJ8ng8rb532rRpWrdunSRp3bp14WDn\ncrn0u9/9Tq+++qomTpyoe++9V3v27Gn1Mz777DMdOnRIU6dODX/mrl27tGPHjja/46l/9uecc46O\nHz8e/jk5OVk2m63Zd2iq/4svvtCdd96p8ePH65/+6Z/06quvdvjvCAAQOYRCAEBEbN68WfPmzdMf\n/vAHDR8+vMXrhmGEf3/48GHNmzdPjz/+uD7++GNt2bKl2c7Yqe9tzYABA3T48OHwzx6PR+Xl5crI\nyDjruk+/1vLly7V371699tpr+vzzz8Ntp621hJ6tG264QZ988omOHTumN998U9OnTw+/dtVVV+m/\n/uu/9N577+n888/X448/3upnrF69WqFQSDfffLMmTJig22+/XZLafUzG0aNHw78/cuSIBgwY0KF6\nH374YV177bV699139dlnn2n27Nnd8ucAAOhZhEIAgOk+/PBD/fSnP9Xvf/97jRo16ozvr62tlWEY\n4d3E119/XYWFheHX+/fvr6KiItXX17d6/rRp07Rq1Srt2LFD9fX1WrRokUaNGqXMzMx2r5uWlqaD\nBw+2+56amhrFxcUpKSlJ5eXl+s///M8zfp+OSk1N1bhx4/Too48qMzNT2dnZkhru63vrrbfk8Xjk\ncDjkcrlksbT8V7rX69X//u//asGCBVq9enX41+OPP65169a1OT115cqVOnbsmMrLy/WHP/whfD/l\nmdTU1Khfv36Ki4vT9u3bw7ucAIDejVAIADDdc889p6qqKt17770aM2aMxowZozlz5rT5/gsuuEB3\n3323Zs+erSuvvFK7du3S2LFjw6+PHz9eF1xwgSZOnKjLL7+8xflXXnmlfvSjH+mBBx7QxIkTdfDg\nwWaTSdvywx/+UI888oguu+yyNp/vd9ddd8nr9Wr8+PGaNWuWrrrqqg78CXTctGnT9MEHH4RbRyUp\nGAzqxRdf1FVXXaVx48bp008/1S9+8YsW57711luKj4/XzTffrPT09PCvGTNmKBAI6K9//Wub17z7\n7rs1efJkDRkyRPfff3+Hap0/f77+4z/+Q2PGjNGzzz6rG264oVPfGQBgLiNEXwcAAGiUl5enp556\nSldeeWWkSwEAmISdQgAAAACIYbYzvwUAgL5py5Yt+u53v9vqa1u3bjW5GgAAIoP2UQAAAACIYbSP\nAgAAAEAMi4n20eLiqh6/RkqKS2VlrT98GOgurDOYhbUGs7DWYBbWGszSW9daerq7zdfYKewmNps1\n0iUgBrDOYBbWGszCWoNZWGswSzSuNUIhAAAAAMSwHguFjz76qK644opmD9stLy/Xd77zHV133XX6\nzne+o4qKivBrL7zwgqZMmaLrr7++zYfptnc+AAAAAODs9VgovPXWW7Vs2bJmx5YsWaIrrrhCBQUF\nuuKKK7RkyRJJ0u7du7V+/XqtX79ey5Yt05NPPqlAINDiM9s6HwAAAADQOT0WCnNzc9WvX79mxzZu\n3Kibb75ZknTzzTfrrbfeCh+fOnWqHA6HsrKyNHToUG3fvr3FZ7Z1PgAAAACgc0ydPlpaWqoBAwZI\nktLT01VaWipJKioq0ujRo8Pvy8jIUFFRUYfPP5OUFJcpN3y2N9EH6C6sM5iFtQazsNZgFtYazBJt\nay1ij6QwDEOGYZhyvhkjYdPT3aY8+gKxjXUGs7DWYBbWGszCWoNZeuta6zWPpOjfv7+OHz8uSTp+\n/LhSU1MlNewMHjt2LPy+oqIiZWRkdPh8AAAAAEDnmBoK8/LytHr1aknS6tWrde2114aPr1+/XvX1\n9Tp48KD27dunUaNGdfh8AAAAAEDn9FgofOihhzR79mzt3btXV199tfLz83Xvvffq/fff13XXXacP\nPvhA9957ryQpJydHN9xwg2688UbNmTNHTzzxhKzWhnsA586dqy+//FKS2jwfAAAAANA5RigUCkW6\niJ5mRk9vb+0dRt/COoNZWGswC2sNZmGt9V6HiqtVeLBcVR6f3C67crKSlZme2KXPnDLlKr355l9V\nWPiVnnnm/1dNTY2sVou+9a27de21153VZ23evElZWUN03nnnS5KWLfuDRo8eo9zcy1t9f1tr7bXX\nVuqb37xV8fHxZ3X9M12vo9q7pzBig2YAAAAAxLZDxdXasvN4+OeKmvrwz10NhpIUFxevefOeVFbW\nEJWUFOuee/4/jRt3hdzu5gEpEAiEOxVP99e/btKVV04Mh8I5c+7rVC2vvfaKrrvuxlZDYXvX7+z1\nzgahEAAAAECP+NveUh0paftJAIWHylVXH2hx/HBJjXIyk1s955w0l0ae179D1x8yZGj492lp6UpO\nTlV5eZncbrduu2268vKmaMuWj/Uv//IteTwe/c///EU+n0+ZmZl6/PFfqrDwK7333mZt2/a5VqxY\nroULf6MXX1ymK6+cqEmTJmvLlk/07LOLFQgENGLERfrJTx5ttY78/FdVUlKsBx/8nvr1S9bvf/+C\npky5St/85q3asuUTPfTQz/X555/q/ff/Kq+3TiNHjtbPfvaYDMPQwoW/CF/vttum64Ybpun99zfL\n7/frl798WkOHntuhP4v2mDpoBgAAAACaeFsJhO0d74p//ONv8vt9Gjw4M3ysX79+Wr78ZU2efL2u\nuWaSli17SStWvKKhQ8/TunWrdcklozVx4tX6/vcf1Isvrmx2rtfr1a9+9aSefPLXeuml/1YgENDq\n1X9u9dozZ85WWlq6/uM/XtDvf/+CJKm2tlYXXTRSK1a8otGjL9WMGbdr2bKX9Kc/vab6+jq9//5f\nW/2spppvvvk2vfLKn7rlz4adwgjoib5pAAAAoLcZeV7/dnf17FZDFTX1LY73S3Bo0tjMVs7onJKS\n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\nRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f46065bbe80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.array(enc_dims) / 58.\n",
"plt.figure(figsize=(15, 7))\n",
"\n",
"y = np.array(l2_train)\n",
"plt.plot(x, y, marker='o', alpha = 0.5, label = \"l2ratio_train\")\n",
"\n",
"plt.title(\"l2ratio_train vs Alpha\")\n",
"plt.xlabel(\"Alpha\")\n",
"plt.ylabel(\"l2ratio\")\n",
"plt.legend(loc = 'best')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Calc L2Ratio on Test"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"scaler_test = StandardScaler()\n",
"X_test_scaled = scaler_test.fit_transform(X_test)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%%time\n",
"l2_test = []\n",
"for enc_dim in enc_dims:\n",
" l2_test.append(calc_metric(enc_dim, X_test, X_test_scaled, scaler_test))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
" (prop.get_family(), self.defaultFamily[fontext]))\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA3sAAAG5CAYAAAA3ci11AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8XHW9//H3mX1LZjJL9raUrnQPdqct0CpeoUgFBa5c\nF1z6k6vcq6g/QcUFuXpFRC7ovVoF9T68XlTAXi/gTy1SoKWlLdCVLumePZNlJslMMplM5vdH2kCF\ntmmbmcnyej4eeTw658yc80n4MpN3vp/zPUY6nU4LAAAAADCimHJdAAAAAABg8BH2AAAAAGAEIuwB\nAAAAwAhE2AMAAACAEYiwBwAAAAAjEGEPAAAAAEYgwh4AYNAsX75cL730UtbO97WvfU0/+tGPsna+\n4eDll1/WsmXLBv25AIDhh7AHAMiI3//+97r++ut16aWXatmyZbrvvvvU09Nz3sd78skn9fd///en\nbLvnnnv06U9/+oLqnDJlio4dO3ZBx5Ckhx9+WF/4whcu+DgD9eSTT2rKlCl65plnsnZOAMDwQtgD\nAGREZ2envvzlL2vz5s363e9+p82bN+vRRx992+deSAgcrX7/+9/L5/Np7dq1uS4FADBEEfYAABnx\nwQ9+UHPnzpXNZlNRUZGuvfZavfrqq/37ly9frjVr1ujaa6/VnDlz1NPTozVr1uid73ynKioqdPXV\nV+svf/mLJOnQoUP6+te/ru3bt6uiokJz586VJN155536wQ9+0H/M3/72t3rXu96l+fPn61Of+pQa\nGhrOWOMtt9wiSbruuutUUVHRP0v23HPP6brrrtPcuXN18803a9++ff2vWbNmjZYuXaqKigq9+93v\n1qZNm/TCCy/oJz/5if74xz+qoqJC733ve99yrjVr1uif/umfTtl277336t5775XUN1O3YsUKVVRU\naPny5frDH/5w2rpramq0detW3XPPPdqwYYPC4fBpn7t8+XL95Cc/0dVXX6158+bprrvuUiKROOU5\njz76qBYtWqQlS5boiSee6N++fv16rVq1Spdeeqkuv/xyPfzww6c9DwBgCEoDADBIrrzyyvTGjRvf\ndt9tt92W/t73vnfKc9/73vema2tr052dnel0Op1+5pln0vX19elUKpV++umn07Nnz043NDSk0+l0\n+oknnkjffPPNpxzzS1/6UvqBBx5Ip9Pp9EsvvZSeP39+evfu3elEIpG+55570h/84AfPWvPkyZPT\nR48e7X+8Z8+e9MKFC9Pbt29P9/T0pJ988sn0lVdemU4kEulDhw6lly1blq6vr0+n0+l0VVVV+tix\nY+l0Op1+6KGH0p///OdPe57q6ur0rFmz0u3t7el0Op3u6elJX3bZZenXXnstHYvF0hUVFelDhw6l\n0+l0uqGhIX3gwIHTHuuHP/xh+oYbbkin0+n0ypUr04888kj/vs2bN6eXLl3a//jKK69MX3PNNena\n2tp0a2tr+qabbur/mW3evDl9ySWXpB988MF0d3d3ev369elZs2alI5FI//59+/alU6lUeu/evelF\nixal//KXv5z1ZwoAGBqY2QMAZNzjjz+u3bt362Mf+9gp2z/0oQ+ppKREDodDkvSe97xHRUVFMplM\nuvrqqzVu3Djt3LlzQOf43//9X91www2aPn26bDab7rjjDm3fvl3V1dXnVOtvfvMb3XTTTZo9e7bM\nZrPe9773yWq1avv27TKbzeru7tahQ4eUTCZVXl6usWPHDui4ZWVlmjZtmtatWydJ2rx5sxwOh+bM\nmSNJMplMqqysVFdXlwoLCzVp0qTTHut//ud/tHLlSknSypUrz9rKecstt6ikpEQ+n0+33Xabnn76\n6f59FotFn/70p2W1WnX55ZfL5XLpyJEjkqQFCxZoypQpMplMmjp1qq655hpt2bJlQN8vACD3CHsA\ngIxat26dHnjgAf30pz+V3+8/ZV9JSckpj9euXdvfPjl37lxVVlaqtbV1QOdpbGxUWVlZ/2O32y2f\nz3fWVs6/VVtbq5///Of9NcydO1f19fVqbGzUuHHj9OUvf1kPP/ywFi9erM997nPndPyVK1fqqaee\nkiQ99dRT/YHN5XLpBz/4gR577DEtWbJEq1ev1qFDh972GK+88oqqq6t1zTXX9B/zwIED2rt372nP\n++afc2lpqRobG/sf+3w+WSyW/sdOp1PxeFyStGPHDn3oQx/SwoUL9Y53vEOPPfbYgP97AAByj7AH\nAMiYF154QV/96lf14x//WFOmTHnLfsMw+v9dU1Ojr371q7r77rv18ssva9u2bafMbr35uW+nsLBQ\nNTU1/Y/j8bgikYiKiorOqeaSkhJ96lOf0rZt2/q/duzY0R/Mrr32Wv33f/+3nnvuORmGofvvv39A\n9Ul9M5dbtmxRfX29/vKXv+jaa6/t37d06VL9/Oc/14YNG3TxxRfr7rvvfttjrF27Vul0WqtWrdJl\n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\nKz8//7zb+Hy+L20DnM9o5kySampq9Mtf/lJ//vOflZWVFcuISBCjmbWqqio98sgjkqSOjg5t3bpV\nDodD3/nOd2KaFfFtNLNWUFCgzMxMpaWlKS0tTYsXL1ZNTQ1lD1/JaGZtw4YNeuCBB2QYhqZOnaqS\nkhLV1dVpwYIFsY6LBBZvnYC3dCXNnz9fx44dU319vSKRiDZt2qRrr732rG2uvfZabdy4UaZpau/e\nvcrIyFBeXp5FiRGPRjNnjY2NWr16tZ5//nleCOGijWbW3n333eH/li9frieffJKih69sNLN23XXX\naffu3RoYGFBPT4/27dunsrIyixIjXo1m1goLC7V9+3ZJUmtrqz777DOVlJRYERcJLN46AUf2JDkc\nDj3xxBO6//77NTg4qO9973sqLy/Xa6+9Jkm66667dM0112jr1q1atmyZUlNT9eyzz1qcGvFmNHP2\nhz/8QYFAQE899ZQkyW63a8OGDVbGRhwazawBY2E0s1ZWVja8hspms+n222/XrFmzLE6OeDOaWXvo\noYf0+OOPa+XKlTJNU48++qiys7MtTo5488gjj2jnzp3q6OjQ0qVLtXr1ag0MDEiKz05gmKZpWh0C\nAAAAADC2OI0TAAAAABIQZQ8AAAAAEhBlDwAAAAASEGUPAAAAABIQZQ8AAAAAEhBlDwAAScFgUAsW\nLNDTTz89fN3vf/97Pffccxe874YNG/TTn/50POMBAPCVUfYAAJD01ltvqaKiQps2bVIkErE6DgAA\nXxtlDwAASevXr9dDDz2k2bNna8uWLV+6fcOGDVq1apUefPBB3XjjjfrhD38ov98/fHtXV5cefvhh\nrVixQnfeeadaWlokSYcOHdLdd9+t7373u7rxxhu1Zs2aWD0lAMAkR9kDAEx6NTU1CgQCuvLKK3Xb\nbbdp/fr1I263e/duPfbYY3r77bf1jW98Q88888zwbfv379fPfvYzbdq0STNnztSrr74qSSouLtaa\nNWv05ptvau3atXrjjTdUW1sbk+cFAJjcKHsAgElv3bp1uuWWW2QYhq6//nrt27fvrKN2p11++eWa\nMWOGJOmOO+7Qjh07hm9btGiRCgsLJUkVFRU6ceKEJKm3t1c///nPtXLlSt11111qbm5WTU1NDJ4V\nAGCyc1gdAAAAK0UiEb311ltKSkrSP/7xD0lSf3+/NmzY8JX2k5ycPHzZbrdrcHBQkvTiiy/K6/Xq\nf/7nf+RwOPSjH/1IfX19Y/cEAAA4B47sAQAmtS1btmj69Ol6//339e677+rdd9/VX/7yF7355ptf\n2nbPnj06duyYpKE1fldeeeUF99/Z2amCggI5HA4dPnxYu3btGuunAADAiDiyBwCY1NavX6+VK1ee\ndd1ll12maDSqnTt3at68ecPXL1q0SM8995yOHz+u3NxcvfDCCxfc/49//GM99thjWrdunaZPn67K\nysoxfw4AAIzEME3TtDoEAAAT3YYNG/Tee+/pd7/7ndVRAAAYFU7jBAAAAIAExJE9AAAAAEhAHNkD\nAAAAgARE2QMAAACABETZAwAAAIAERNkDAAAAgARE2QMAAACABPT/Adm3CQdixba9AAAAAElFTkSu\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fee74d1ac18>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.array(enc_dims) / 58.\n",
"plt.figure(figsize=(15, 7))\n",
"\n",
"y = np.array(l2_test)\n",
"plt.plot(x, y, marker='o', alpha = 0.5, label = \"l2ratio_test\")\n",
"\n",
"plt.title(\"l2ratio_test vs Alpha\")\n",
"plt.xlabel(\"Alpha\")\n",
"plt.ylabel(\"l2ratio\")\n",
"plt.legend(loc = 'best')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Петр"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Model"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"SAMPLES_COUNT_DEFAULT = 1000"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def predict(eeg_data_batch, autoencoder):\n",
" batch_mean = eeg_data_batch.mean(axis=2)\n",
" batch_std = eeg_data_batch.std(axis=2)\n",
" for i in range(batch_std.shape[0]):\n",
" for j in range(batch_std.shape[1]):\n",
" if (batch_std[i][j] == 0):\n",
" batch_std[i][j] = 1\n",
" \n",
" eeg_data_batch_norm = (eeg_data_batch - batch_mean.reshape(\n",
" eeg_data_batch.shape[0], eeg_data_batch.shape[1], 1\n",
" )) / batch_std.reshape(eeg_data_batch.shape[0], eeg_data_batch.shape[1], 1)\n",
" \n",
" eeg_data_batch_norm = torch.autograd.Variable(torch.FloatTensor(eeg_data_batch_norm)).cuda()\n",
" samples_len = eeg_data_batch_norm.size(2)\n",
" centered_samples_pos = samples_len // 2\n",
" centered_samples_from_batch = eeg_data_batch_norm[:, :, centered_samples_pos]\n",
" \n",
" autoencoded_batch = autoencoder(centered_samples_from_batch)\n",
" \n",
" \n",
" numpy_val = autoencoded_batch.data.cpu().numpy()\n",
" numpy_val = numpy_val * batch_std + batch_mean\n",
" return numpy_val"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def make_batch(eeg_data_file, channels_count, batch_size, batch_start, samples_count=SAMPLES_COUNT_DEFAULT):\n",
" result = np.zeros((batch_size, channels_count, samples_count))\n",
" for i in range(batch_size):\n",
" eeg_data = eeg_data_file\n",
" result[i] = eeg_data[:, batch_start - samples_count // 2: batch_start+samples_count // 2]\n",
" batch_start += 1\n",
" return np.array(result)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import torch.nn.functional as F\n",
"class PlainEncoderEEG(torch.nn.Module):\n",
" def __init__(self, input_channels, target_channels):\n",
" super().__init__()\n",
" self.dense1 = torch.nn.Linear(input_channels, 100)\n",
" self.dense2 = torch.nn.Linear(100, 80)\n",
" self.dense3 = torch.nn.Linear(80, 50)\n",
" self.dense4 = torch.nn.Linear(50, 40)\n",
" self.dense5 = torch.nn.Linear(40, target_channels)\n",
" \n",
" def forward(self, x):\n",
" x = x.cuda()\n",
" x = F.tanh(self.dense1(x))\n",
" x = F.tanh(self.dense2(x))\n",
" x = F.tanh(self.dense3(x))\n",
" x = F.tanh(self.dense4(x))\n",
" x = F.tanh(self.dense5(x))\n",
" return x\n",
" \n",
"class PlainDecoderEEG(torch.nn.Module):\n",
" def __init__(self, input_channels, target_channels):\n",
" super().__init__()\n",
" self.dense1 = torch.nn.Linear(input_channels, 30)\n",
" self.dense2 = torch.nn.Linear(30, 40)\n",
" self.dense3 = torch.nn.Linear(40, 50)\n",
" self.dense4 = torch.nn.Linear(50, 70)\n",
" self.dense5 = torch.nn.Linear(70, target_channels)\n",
" \n",
" \n",
" def forward(self, x):\n",
" x = x.cuda()\n",
" x = F.tanh(self.dense1(x))\n",
" x = F.tanh(self.dense2(x))\n",
" x = F.tanh(self.dense3(x))\n",
" x = F.tanh(self.dense4(x))\n",
" x = self.dense5(x)\n",
" return x\n",
" \n",
"class PlainAutoencoderEEG(torch.nn.Module):\n",
" def __init__(self, input_channels, target_channels):\n",
" super().__init__()\n",
" self.encoder = PlainEncoderEEG(input_channels, target_channels)\n",
" self.decoder = PlainDecoderEEG(target_channels, input_channels)\n",
" \n",
" def forward(self, x):\n",
" x = x.cuda()\n",
" x = self.encoder(x)\n",
" x = self.decoder(x)\n",
" return x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### L2Ratio on Train"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Load_data"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import torch\n",
"import mne\n",
"import pathlib\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import h5py\n",
"\n",
"SAMPLES_COUNT_DEFAULT = 1000"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def read_eeg_file(file_path):\n",
" h5_file = h5py.File(file_path, 'r')\n",
" a_group_key = list(h5_file.keys())[0]\n",
" raw = np.array(h5_file[a_group_key])\n",
" return raw"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def find_bad_channels(part_data):\n",
" res = []\n",
" for i in range(part_data.shape[0]):\n",
" if (np.array_equal(part_data[i], np.zeros(part_data.shape[1]))):\n",
" res.append(i)\n",
" return res"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from typing import List\n",
"def pad_all_eeg_files(eeg_files, samples_count=SAMPLES_COUNT_DEFAULT) -> List[np.array]:\n",
" half_samples_count = samples_count // 2\n",
" result = []\n",
" for eeg_file in eeg_files:\n",
" eeg_data = eeg_file\n",
" eeg_data_padded = np.pad(eeg_data,\n",
" pad_width=[(0, 0), (half_samples_count, half_samples_count)],\n",
" mode='mean', stat_length=samples_count)\n",
" result.append(eeg_data_padded)\n",
" return result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load Train data"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"DATA_FOLDER = pathlib.Path('/home/radi4/data/data/train')\n",
"all_files_data = []\n",
"all_files_names = []\n",
"bad_channels = []\n",
"for eeg_file_path in DATA_FOLDER.glob('*.h5'):\n",
" all_files_names.append(str(eeg_file_path))\n",
" all_files_data.append(read_eeg_file(str(eeg_file_path)))\n",
" bad_channels.append(find_bad_channels(all_files_data[-1]).copy())\n",
"channels_count = all_files_data[0].shape[0]\n",
"all_padded_data = pad_all_eeg_files(all_files_data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Подсчет Loss L2Ratio on Train"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%%time\n",
"enc_dims = [1, 2, 6, 29, 58]\n",
"l2_loss_by_files = []\n",
"for enc_dim in enc_dims:\n",
" autoencoder = torch.load(\"./Petr/Petr_dense_{}.pt\".format(str(enc_dim)))\n",
" autoencoder = autoencoder.cuda()\n",
" loss = 0\n",
" adds = []\n",
" for i in range(len(all_files_data)):\n",
" start = 0\n",
" res = np.zeros((0, 58))\n",
" while (start < all_files_data[i].shape[1]):\n",
" size = min(500, all_files_data[i].shape[1] - start)\n",
" batch = make_batch(all_padded_data[i], channels_count, size, start + SAMPLES_COUNT_DEFAULT // 2)\n",
" start += size\n",
" res = np.concatenate([res, predict(batch, autoencoder)], axis = 0)\n",
" res = res.T\n",
" add = np.sum((np.delete(res, с[i]) - np.delete(all_files_data[i], bad_channels[i]))**2)\n",
" print(i, add, all_files_names[i])\n",
" loss += add\n",
" adds.append(add)\n",
" \n",
" l2_loss_by_files.append(adds.copy()) \n",
" print(enc_dim)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"bad_files = [1, 7, 10, 12, 13, 16, 17, 25, 26, 29, 30]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"div = np.sum(np.sum(all_files_data[i]**2)\n",
" for i in np.delete(np.arange(len(all_files_data)), bad_files))\n",
"l2_train = np.sum(np.delete(l2_loss_by_files, bad_files, axis = 1), axis = 1) / div\n",
"l2_train = np.sqrt(l2_train) * 100"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans\n",
" (prop.get_family(), self.defaultFamily[fontext]))\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA3sAAAG5CAYAAAA3ci11AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl0XPVh/v/nzq59HY1GlvfdkmxsvMkWUOxgApjGCZSQ\nUkLNl5iShaQkaUMSIBBIDmlKaNPkGxxCE3qS8CMsJmCaL7FZ5d3YIHnD+yJ7Rvs+0kiz/P4wKHaw\nZdnWzB2N3q9zfI7m3jv3PhIfhB8+n7nXiEajUQEAAAAAkorF7AAAAAAAgMFH2QMAAACAJETZAwAA\nAIAkRNkDAAAAgCRE2QMAAACAJETZAwAAAIAkRNkDAFyURYsWaf369XG73v3336+f/exncbve2dxx\nxx168cUXzY5xVps2bdLll18+6McCAIYOyh4AYNC8+OKL+sxnPqNZs2bp8ssv149+9COFQqELPt8L\nL7ygz33uc6dte+ihh/SlL33ponJOnjxZR44cuahzPPnkk/r0pz99UecYDC+88IImT56sV1991ewo\nAIAEQ9kDAAyarq4uffvb39bGjRv1hz/8QRs3btRTTz11xmMvpgTGWiJn+2svvviisrOztWrVKrOj\nAAASDGUPADBo/v7v/16zZ8+Ww+GQx+PR9ddfr23btvXtX7RokVauXKnrr79el1xyiUKhkFauXKlP\nfOITmjlzpq699lr9+c9/liQdOHBADzzwgN577z3NnDlTs2fPliR961vf0k9+8pO+cz777LO66qqr\nNHfuXP3TP/2Tamtr+814yy23SJI+9alPaebMmXr11Vf7ljGuXLlSCxcu1L333qvW1lbdeeedmj9/\nvubMmaM777xTfr+/7zy33nqr/vCHP0j6ywzko48+qjlz5mjRokV66623znj9lStX6u677z5t28MP\nP6yHH36471yLFy/WzJkztWjRIv3xj3886/dy/PhxbdmyRQ899JAqKytVX19/1mMXLVqkJ554Qtde\ne63mzJmje++9V8Fg8LRjnnrqKZWXl6uiokLPP/983/Y333xTy5Yt06xZs3TFFVfopz/96VmvAwBI\nHJQ9AEDMbNmyRRMmTDht2+rVq7Vy5Upt3bpVNptNI0eO1G9/+1u9++67+vKXv6xvfvObqqur0/jx\n4/Xggw/qkksu0fbt27V169aPnX/Dhg3693//dz3++OOqrKzUiBEjdM899/Sb6be//a0k6aWXXtL2\n7dt17bXXSpIaGhrU2tqqN954Q9///vcViUT0mc98Rm+88YbeeOMNOZ1OPfTQQ2c9b1VVlcaOHauN\nGzfqjjvu0He+8x1Fo9GPHXfdddfprbfeUkdHhyQpHA7rT3/6k5YuXapAIKCHH35Yv/zlL7V9+3Y9\n88wzmjp16lmvuWrVKpWWlurqq6/W+PHj9fLLL/f7vb/88sv61a9+pT//+c86dOiQfv7zn/fta2ho\nUHt7u95++2098sgjeuihh9Ta2ipJSklJ0aOPPqqtW7fqiSee0O9//3utWbOm32sBAMxH2QMAxMRz\nzz2nHTt26Pbbbz9t+6233iqv1yuXyyVJuuaaa+TxeGSxWHTttddq9OjRqqqqGtA1Xn75Zd1www0q\nKSmRw+HQPffco/fee081NTXnnddisejuu++Ww+GQy+VSTk6Orr76aqWkpCg9PV133XWXtmzZctb3\nFxUV6aabbpLVatWnP/1p1dfXq6Gh4WPHjRgxQtOmTesrSxs3bpTL5dIll1zSl2Pfvn3q7u5WQUGB\nJk6ceNZrvvTSS1q6dKkkaenSpedcynnLLbfI6/UqOztbd911l1avXt23z2az6Utf+pLsdruuuOIK\npaam6tChQ5KkefPmafLkybJYLJoyZYquu+46bd68ud9rAQDMR9kDAAy6NWvW6LHHHtMvf/lL5ebm\nnrbP6/We9nrVqlX61Kc+pdmzZ2v27Nnat2+fmpubB3Sduro6jRgxou91WlqasrOzz7mU80xycnLk\ndDr7Xnd1den+++/XlVdeqVmzZumWW25RW1ubwuHwGd+fn5/f93VKSookKRAInPHYpUuX6pVXXpEk\nvfLKK32FLTU1VT/5yU/0zDPPqKKiQitWrNCBAwfOeI53331XNTU1uu666/rOuXfvXu3evfus3+Op\nP/uioiLV1dX1vc7OzpbNZjvte/go//vvv69bb71V8+fP16WXXqpnnnlmwP+MAADmoewBAAbV22+/\nre9+97v6xS9+ocmTJ39sv2EYfV8fP35c3/3ud3Xfffdp06ZN2rp162kzWaceeyYFBQU6fvx43+tA\nIKCWlhZ5PJ7zzv3X13rqqad06NAhPfvss9q2bVvf8s8zLc08X9dcc402b94sv9+vP//5z7r++uv7\n9l122WX67//+b1VWVmrcuHG67777zniOVatWKRqNatmyZVq4cKFuuukmSer3cRA+n6/v6xMnTqig\noGBAeb/+9a9r8eLFeuutt/Tuu+/q5ptvHpSfAwAgtih7AIBBs2HDBn3zm9/UT3/6U02fPv2cx3d1\ndckwjL7Zv+eff1779u3r25+Xl6fa2lr19PSc8f1Lly7VCy+8oN27d6unp0ePPfaYpk+fruLi4n6v\nm5+fr2PHjvV7TGdnp5xOpzIzM9XS0qL/+q//Ouf3M1C5ubmaO3eu7r33XhUXF2v8+PGSTn5ubs2a\nNQoEAnI4HEpNTZXF8vH/VAeDQf3v//6vHnroIa1atarvz3333adXXnnlrHcT/d3vfie/36+Wlhb9\n4he/6Pu84rl0dnYqKytLTqdTVVVVfbOSAIDERtkDAAyan//852pvb9eKFSs0c+ZMzZw5U3fcccdZ\nj58wYYJuv/123XzzzVqwYIH27t2rWbNm9e2fP3++JkyYoIqKCs2bN+9j71+wYIG++tWv6itf+Yoq\nKip07Nix0+7UeTZf/vKX9a1vfUuzZ88+6/PpbrvtNgWDQc2fP1+f/exnddlllw3gJzBwS5cu1fr1\n6/uWcEpSJBLRr3/9a1122WWaO3eutmzZou9973sfe++aNWvkcrm0bNkyud3uvj833HCDwuGw3nnn\nnbNe8/bbb9cnPvEJjRo1SnfdddeAsj7wwAP6z//8T82cOVM/+9nPdM0111zQ9wwAiC8jyjoMAACS\n3qJFi/Twww9rwYIFZkcBAMQJM3sAAAAAkIRs5z4EAIChZevWrfrCF75wxn3bt2+PcxoAAMzBMk4A\nAAAASEIs4wQAAACAJDSkl3HW17fH/Bo5Oalqbj7zQ3GBwcRYQ7ww1hAvjDXEA+MM8ZKoY83tzjjr\nPmb2zsFms5odAcMEYw3xwlhDvDDWEA+MM8TLUBxrlD0AAAAASEKUPQAAAABIQpQ9AAAAAEhClD0A\nAAAASEKUPQAAAABIQpQ9AAAAAEhClD0AAAAASEKUPQAAAABIQpQ9AAAAAEhClD0AAAAAMVFT36E3\nttXoj5WH9Ma2GtXUd1z0Oa+66jJJ0r59H+jOO5frH/7hJt12281au/a18z7X22+/qUOHDva9fvLJ\nX2jLlk3nfZ5nn/2duru7z/t9F3q9gbLF7MwAAAAAhq2a+g5t3VPX97q1s6fvdbE7/aLP73S69N3v\nPqiRI0epoaFe/+f//IPmzi1XRkbGaceFw2FZrdYznuOdd97UggUVGjt2nCTpjjv+6YKyPPvs77Vk\nybVyuVwf29ff9S/0egNF2QMAAABw3nYcatSJhsBZ9++raVF3T/hj2483dGpicfYZ31OUn6rSsXkD\nuv6oUaP7vs7Pdys7O1ctLc3KyMjQjTder0WLrtLWrZv093//eQUCAf3xjy+qt7dXxcXFuu++72vf\nvg9UWfm23ntvm37zm6f0yCM/0q9//aQWLKjQlVd+Qlu3btbPfva4wuGwpkyZpkcf/cEZc/zhD8+o\noaFed999p7KysvXTnz6hq666TH/7t5/R1q2bdc89/6pt27Zo3bp3FAx2q7R0hv7lX74twzD0yCPf\n67vejTder2uuWap1695WKBTS97//qEaPHjOgn8XZsIwTAAAAwKALnqHo9bf9YuzatUOhUK9GjCju\n25aVlaWnnvqtPvGJq3XFFVfqySef1m9+83uNHj1Wr7yySmVlM1RRcbm++MW79etf/+609waDQf3g\nBw/qwQd/qKef/v8UDof1u9/97ozX/ru/u1n5+W79538+oZ/+9AlJUldXl6ZNK9VvfvN7zZhxiW64\n4SY9+eTT+p//eVY9Pd1at+6dM57ro8zLlt2o3//+fy7658LMXgKoqe/QvmMtag/0KiPVrokjswdl\nahsAAACIldKxef3Owtmthlo7ez62PSvNoStnFZ/hHRemoaFB3//+/frOdx6UxfKXuazFi5f0fX3w\n4AH98pf/Vx0d7erq6tLcufP7PefRo0fk9Rb1zR5ec81SrV79oq677oYBZbJarfqbv1nU93rbtq36\n7W+fVjDYrba2No0ZM14VFZd/7H1XXHHyPZMnT9Vbb70xoGv1h7Jnso/WMveEIrJ9+C/EYK5lBgAA\nAMwwcWT2aZ/ZO3X7YOns7NC//MtXtWLFF1VaWnbaPpcrpe/rH/zgQf3gBz/WxImT9OqrL2v79ncH\nLcOZOByOvs/pBYNB/fu/P6onn3xaHk+hfvWrJ9TTEzzj++x2hyTJarUoHA5ddA6WcZps37EWdQVD\nOnSiTUdrOxSORPu2AwAAAENVsTtds6cUKCvNIYthKCvNodlTCgZtQqO3t1ff/vY39clPXqcrr/xE\nv8cGAp3Kz89XKBTSa6/9b9/21NRUBQIf/9zhqFGj5fOdUE3NMUnS//t/r2rOnDlnPf/J83SecV9P\nz8nZzezsbAUCAb355tpzfm+DhZk9k7UHetXY1q2oouruCelYXYdGFqSrPdBrdjQAAADgohS702O2\n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\nfbu++eYbff311zp9+nSPnBcAoG+j7AEA+rzs7GwtWrRIhmHo4YcfVn5+frtX7a666667NGLECEnS\nk08+qYMHD7bty8jIUGpqqiRpypQpKikpkSQ1NTXp1VdfVVZWlpYtW6by8nIVFRX1wFkBAPo6p9UB\nAACwktfr1c6dOxUREaFvv/1WktTc3KycnJybOk6/fv3aboeFhamlpUWS9N577ykpKUnvvPOOnE6n\nnnvuOXk8nu47AQAAusArewCAPi03N1fp6enat2+fdu/erd27d+vTTz/V9u3bO409duyYiouLJV1+\nj9+sWbNuePza2lq5XC45nU6dPHlSR44c6e5TAAAgIF7ZAwD0adu2bVNWVla7bdOmTVNra6sOHz6s\niRMntm3PyMjQ5s2bdfbsWQ0aNEjvvvvuDY//4osvav369crOzlZ6erpmzJjR7ecAAEAghmmaptUh\nAADo7XJycrRnzx69//77VkcBACAo/BgnAAAAANgQr+wBAAAAgA3xyh4AAAAA2BBlDwAAAABsiLIH\nAAAAADZE2QMAAAAAG6LsAQAAAIAN/R8pPLekSDO5NQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb02925ada0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.array(enc_dims) / 58.\n",
"plt.figure(figsize=(15, 7))\n",
"\n",
"y = np.array(l2_train)\n",
"plt.plot(x, y, marker='o', alpha = 0.5, label = \"l2ratio_train\")\n",
"\n",
"plt.title(\"l2ratio_train vs Alpha\")\n",
"plt.xlabel(\"Alpha\")\n",
"plt.ylabel(\"l2ratio\")\n",
"plt.legend(loc = 'best')\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment