{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout\nfrom keras.layers import Embedding\nfrom keras.layers import LSTM, CuDNNLSTM, BatchNormalization, Conv2D, Flatten, MaxPooling2D, Dropout\nfrom keras.optimizers import Adam\nfrom sklearn.metrics import roc_curve, auc, roc_auc_score\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import numpy as np\nload = 1\ntime_steps = 1000\nsubsample = 100\nx_paths = [\"train/subj1_series1_data.csv\", \"train/subj1_series2_data.csv\", \"train/subj1_series3_data.csv\", \"train/subj1_series4_data.csv\", \\\n          \"train/subj2_series1_data.csv\", \"train/subj2_series2_data.csv\", \"train/subj2_series3_data.csv\", \"train/subj2_series4_data.csv\", \\\n          \"train/subj3_series1_data.csv\", \"train/subj3_series2_data.csv\", \"train/subj3_series3_data.csv\", \"train/subj3_series4_data.csv\", \\\n          \"train/subj4_series1_data.csv\", \"train/subj4_series2_data.csv\", \"train/subj4_series3_data.csv\", \"train/subj4_series4_data.csv\",\\\n          \"train/subj5_series1_data.csv\", \"train/subj5_series2_data.csv\", \"train/subj5_series3_data.csv\", \"train/subj5_series4_data.csv\",\\\n          \"train/subj6_series1_data.csv\", \"train/subj6_series2_data.csv\", \"train/subj6_series3_data.csv\", \"train/subj6_series4_data.csv\"]\ny_paths = [\"train/subj1_series1_events.csv\", \"train/subj1_series2_events.csv\", \"train/subj1_series3_events.csv\", \"train/subj1_series4_events.csv\", \\\n          \"train/subj2_series1_events.csv\", \"train/subj2_series2_events.csv\", \"train/subj2_series3_events.csv\", \"train/subj2_series4_events.csv\", \\\n          \"train/subj3_series1_events.csv\", \"train/subj3_series2_events.csv\", \"train/subj3_series3_events.csv\", \"train/subj3_series4_events.csv\", \\\n          \"train/subj4_series1_events.csv\", \"train/subj4_series2_events.csv\", \"train/subj4_series3_events.csv\", \"train/subj4_series4_events.csv\", \\\n          \"train/subj5_series1_events.csv\", \"train/subj5_series2_events.csv\", \"train/subj5_series3_events.csv\", \"train/subj5_series4_events.csv\", \\\n          \"train/subj6_series1_events.csv\", \"train/subj6_series2_events.csv\", \"train/subj6_series3_events.csv\", \"train/subj6_series4_events.csv\"]\n\nif load:\n    x_data = []\n    for x_path in x_paths:\n        x_path = \"../input/\" + x_path\n        with open(x_path) as file:\n            for line in file:\n                if line[0] == \"i\": continue\n                line_array = []\n                for word in range(len(line.split(','))-1):\n                    word+=1\n                    line_array.append(int(line.split(',')[word]))\n                line_array = np.asarray(line_array)\n                x_data.append(line_array)\n    x_data = np.asarray(x_data)    \n        \n  \n    y_data = []\n    for y_path in y_paths:\n        y_path = \"../input/\" + y_path\n        with open(y_path) as file:\n            for line in file:\n                if line[0] == \"i\": continue\n                line_array = []\n                for word in range(len(line.split(','))-1):\n                    word+=1\n                    line_array.append(int(line.split(',')[word]))\n                line_array = np.asarray(line_array)\n                y_data.append(line_array)\n    y_data = np.asarray(y_data)\n\nprint(x_data)\n    ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Creating the CNN Model**"},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\n#model.add(CuDNNLSTM(128, input_shape = (time_steps//subsample, 32)))\nmodel.add(Conv2D(filters = 64, kernel_size = (7,7), padding = \"same\", activation = \"relu\", input_shape = (time_steps//subsample, 32, 1)))\nmodel.add(BatchNormalization())\n#model.add(MaxPooling2D(pool_size = (3,3)))\nmodel.add(Conv2D(filters = 64, kernel_size = (5,5), padding = \"same\", activation = \"relu\", input_shape = (time_steps//subsample, 32, 1)))\nmodel.add(BatchNormalization())\n#model.add(MaxPooling2D(pool_size = (3,3)))\nmodel.add(Conv2D(filters = 64, kernel_size = (3,3), padding = \"same\", activation = \"relu\", input_shape = (time_steps//subsample, 32, 1)))\nmodel.add(BatchNormalization())\n#model.add(MaxPooling2D(pool_size = (3,3)))\nmodel.add(Flatten())\n#model.add(Dropout(0.2))\nmodel.add(Dense(32, activation = \"relu\"))\nmodel.add(BatchNormalization())\n# model.add(Dropout(0.2))\nmodel.add(Dense(6, activation = \"sigmoid\"))\n\n\nadam = Adam(lr = 0.001)\n\nmodel.compile(optimizer = adam, loss = \"categorical_crossentropy\", metrics = [\"accuracy\"])\n\nmodel.summary()\n\ndef generator(batch_size):\n    while 1:\n        \n        x_time_data = np.zeros((batch_size, time_steps//subsample, 32))\n        yy = []\n        for i in range(batch_size):\n            random_index = np.random.randint(0, len(x_data)-time_steps)\n            x_time_data[i] = x_data[random_index:random_index+time_steps:subsample]\n            yy.append(y_data[random_index + time_steps])\n        yy = np.asarray(yy)\n        yield x_time_data.reshape((x_time_data.shape[0],x_time_data.shape[1], x_time_data.shape[2], 1)), yy\n\nmodel.fit_generator(generator(32), steps_per_epoch = 5000, epochs = 3)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Testing with unseen data**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_val_path = \"../input/train/subj4_series7_data.csv\"\ny_val_path = \"../input/train/subj4_series7_events.csv\"\nx_val_data = []\nwith open(x_val_path) as file:\n    for line in file:\n        if line[0] == \"i\": continue\n        line_array = []\n        for word in range(len(line.split(','))-1):\n            word+=1\n            line_array.append(int(line.split(',')[word]))\n        line_array = np.asarray(line_array)\n        x_val_data.append(line_array)\nx_val_data = np.asarray(x_val_data)    \n        \ny_val_data = []\nwith open(y_val_path) as file:\n    for line in file:\n        if line[0] == \"i\": continue\n        line_array = []\n        for word in range(len(line.split(','))-1):\n            word+=1\n            line_array.append(int(line.split(',')[word]))\n        line_array = np.asarray(line_array)\n        y_val_data.append(line_array)\ny_val_data = np.asarray(y_val_data)\n\ndef val_generator():\n    while 1:\n        batch_size = 1\n        x_time_data = np.zeros((batch_size, time_steps//subsample, 32))\n        yy = []\n        for i in range(batch_size):\n            random_index = np.random.randint(0, len(x_val_data)-time_steps)\n            x_time_data[i] = x_val_data[random_index:random_index+time_steps:subsample]\n            yy.append(y_val_data[random_index + time_steps])\n        yy = np.asarray(yy)\n        yield x_time_data.reshape((x_time_data.shape[0],x_time_data.shape[1], x_time_data.shape[2], 1)), yy","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Model Prediction**"},{"metadata":{"trusted":true},"cell_type":"code","source":"gen_data = val_generator()\nscores = []\nnum_test = 1000\nfor i in range(num_test):\n    x_test, y_test = next(gen_data)\n    while not 1 in y_test:\n#         print(y_test)\n        x_test, y_test = next(gen_data)\n\n#     print(y_test)\n    y_out = model.predict(x_test).reshape((6,1))\n#     print(y_out)\n    scores.append(roc_auc_score(y_test.reshape((6,1)), y_out))\nscores = np.asarray(scores)\nprint(\"Mean \", np.mean(scores))","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}