{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#This notebook classifies localization of a protein from the Yeast dataset" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#IMPORT LIBRARIES" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd; import numpy as np" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#LOAD DATA" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "master = pd.read_csv('yeast.csv') #dataset with 8 variables, localization is in feature 'Target'\n", "\n", "backup = master" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Sequence NamemcggvhalmmiterlpoxvacnucTarget
0ADT1_YEAST0.580.610.470.130.50.00.480.22MIT
1ADT2_YEAST0.430.670.480.270.50.00.530.22MIT
2ADT3_YEAST0.640.620.490.150.50.00.530.22MIT
3AAR2_YEAST0.580.440.570.130.50.00.540.22NUC
4AATM_YEAST0.420.440.480.540.50.00.480.22MIT
\n", "
" ], "text/plain": [ " Sequence Name mcg gvh alm mit erl pox vac nuc Target\n", "0 ADT1_YEAST 0.58 0.61 0.47 0.13 0.5 0.0 0.48 0.22 MIT\n", "1 ADT2_YEAST 0.43 0.67 0.48 0.27 0.5 0.0 0.53 0.22 MIT\n", "2 ADT3_YEAST 0.64 0.62 0.49 0.15 0.5 0.0 0.53 0.22 MIT\n", "3 AAR2_YEAST 0.58 0.44 0.57 0.13 0.5 0.0 0.54 0.22 NUC\n", "4 AATM_YEAST 0.42 0.44 0.48 0.54 0.5 0.0 0.48 0.22 MIT" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "master.head() #sanity check" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1484, 10)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#START RE-RUNNING CODE FROM HERE\n", "\n", "master = backup\n", "master.shape" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CYT 463\n", "NUC 429\n", "MIT 244\n", "ME3 163\n", "ME2 51\n", "ME1 44\n", "EXC 35\n", "VAC 30\n", "POX 20\n", "ERL 5\n", "Name: Target, dtype: int64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Look at the different classes in the dataset: ERL has only 5 samples\n", "\n", "master['Target'].value_counts()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1484, 10)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#drop ERL due to insufficient data\n", "\n", "# master = master[master['Target'] != 'ERL']\n", "master.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1484, 9)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#drop sequence name column, do not need this column\n", "\n", "master = master.drop(columns='Sequence Name')\n", "master.shape" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "#identify feature columns\n", "\n", "data = master.columns.drop('Target')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "#label encode the target localization site\n", "\n", "from sklearn.preprocessing import LabelEncoder\n", "\n", "le = LabelEncoder()\n", "localization = ['CYT', 'ERL', 'EXC', 'ME1', 'ME2', 'ME3', 'MIT', 'NUC', 'POX', 'VAC']\n", "le.fit(localization)\n", "target = le.fit_transform(master['Target'])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/abhay/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", " from ._conv import register_converters as _register_converters\n", "Using TensorFlow backend.\n" ] } ], "source": [ "#onehotencode the target localization site\n", "\n", "from keras.utils import np_utils\n", "\n", "target = np_utils.to_categorical(target)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mcggvhalmmiterlpoxvacnucTargetCYTERLEXCME1ME2ME3MITNUCPOXVAC
00.580.610.470.130.50.00.480.22MIT0.00.00.00.00.00.01.00.00.00.0
10.430.670.480.270.50.00.530.22MIT0.00.00.00.00.00.01.00.00.00.0
20.640.620.490.150.50.00.530.22MIT0.00.00.00.00.00.01.00.00.00.0
30.580.440.570.130.50.00.540.22NUC0.00.00.00.00.00.00.01.00.00.0
40.420.440.480.540.50.00.480.22MIT0.00.00.00.00.00.01.00.00.00.0
\n", "
" ], "text/plain": [ " mcg gvh alm mit erl pox vac nuc Target CYT ERL EXC ME1 \\\n", "0 0.58 0.61 0.47 0.13 0.5 0.0 0.48 0.22 MIT 0.0 0.0 0.0 0.0 \n", "1 0.43 0.67 0.48 0.27 0.5 0.0 0.53 0.22 MIT 0.0 0.0 0.0 0.0 \n", "2 0.64 0.62 0.49 0.15 0.5 0.0 0.53 0.22 MIT 0.0 0.0 0.0 0.0 \n", "3 0.58 0.44 0.57 0.13 0.5 0.0 0.54 0.22 NUC 0.0 0.0 0.0 0.0 \n", "4 0.42 0.44 0.48 0.54 0.5 0.0 0.48 0.22 MIT 0.0 0.0 0.0 0.0 \n", "\n", " ME2 ME3 MIT NUC POX VAC \n", "0 0.0 0.0 1.0 0.0 0.0 0.0 \n", "1 0.0 0.0 1.0 0.0 0.0 0.0 \n", "2 0.0 0.0 1.0 0.0 0.0 0.0 \n", "3 0.0 0.0 0.0 1.0 0.0 0.0 \n", "4 0.0 0.0 1.0 0.0 0.0 0.0 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#join the indicator variables to create master dataframe with features as well as OneHotEncoded target\n", "\n", "master = master.join(pd.DataFrame(data=target, columns=localization))\n", "master.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "#LOF outlier detection (this is what we chose to use)\n", "\n", "from sklearn.neighbors import LocalOutlierFactor\n", "\n", "lof = LocalOutlierFactor(contamination='auto')\n", "\n", "lofOutliers = lof.fit_predict(master[data])" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "76" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#identify number of samples with highest outlier score\n", "\n", "(lofOutliers == -1).sum()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "#Isolation Forest outlier detection \n", "\n", "from sklearn.ensemble import IsolationForest\n", "\n", "iso = IsolationForest(behaviour='new', max_features=8, contamination='auto')\n", "\n", "iso.fit(master[data])\n", "isoOutliers = iso.predict(master[data])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "66" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#identify samples with highest outlier score\n", "\n", "(isoOutliers == -1).sum()\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "32" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# compare the common outliers from both functions\n", "\n", "((isoOutliers - lofOutliers) == 2).sum()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1408, 19)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#DROP OUTLIER SAMPLES\n", "\n", "master = master[lofOutliers == 1]\n", "master.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# split into train and test\n", "\n", "from sklearn.model_selection import train_test_split\n", "\n", "trainData, testData, trainTarget, testTarget = train_test_split(master[data], master[localization], \n", " test_size = 0.3, random_state = 0)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CYTERLEXCME1ME2ME3MITNUCPOXVAC
6910.00.00.00.00.00.00.01.00.00.0
850.00.00.00.00.01.00.00.00.00.0
9701.00.00.00.00.00.00.00.00.00.0
4561.00.00.00.00.00.00.00.00.00.0
10531.00.00.00.00.00.00.00.00.00.0
\n", "
" ], "text/plain": [ " CYT ERL EXC ME1 ME2 ME3 MIT NUC POX VAC\n", "691 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0\n", "85 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0\n", "970 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", "456 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n", "1053 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trainTarget.head() #sanity check" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mcggvhalmmiterlpoxvacnuc
9700.610.480.560.190.50.00.530.31
4560.500.460.520.160.50.00.520.26
10530.380.400.530.120.50.00.550.22
3660.640.530.450.130.50.00.530.22
9990.730.600.470.200.50.00.720.22
\n", "
" ], "text/plain": [ " mcg gvh alm mit erl pox vac nuc\n", "970 0.61 0.48 0.56 0.19 0.5 0.0 0.53 0.31\n", "456 0.50 0.46 0.52 0.16 0.5 0.0 0.52 0.26\n", "1053 0.38 0.40 0.53 0.12 0.5 0.0 0.55 0.22\n", "366 0.64 0.53 0.45 0.13 0.5 0.0 0.53 0.22\n", "999 0.73 0.60 0.47 0.20 0.5 0.0 0.72 0.22" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#select only CYT samples from train and test sets\n", "\n", "trainCYT = trainData[trainTarget['CYT'] == 1]\n", "testCYT = testData[testTarget['CYT'] == 1]\n", "trainCYT.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# 4-STEP MODELLING PROCESS: IMPORT MODEL, ADD LAYERS TO MODEL, TRAIN USING FIT, EVALUATE" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense, Activation, Input\n", "from keras.optimizers import SGD\n", "from keras.losses import categorical_crossentropy" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "#using stochastic gradient descent, set learning rate\n", "\n", "sgd = SGD(lr = 0.01)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "model = Sequential()\n", "model.add(Dense(3, input_shape=(8,), activation='sigmoid'))\n", "model.add(Dense(3, activation='sigmoid'))\n", "model.add(Dense(10, activation='softmax'))\n", "\n", "model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "#plot details for CYT class\n", "\n", "import matplotlib.pyplot as plt\n", "from keras.callbacks import ModelCheckpoint as mc\n", "from keras.callbacks import LambdaCallback as lc\n", "\n", "weightList = [[],[],[],[]]\n", "cyt_err_train = []\n", "cyt_err_test = []\n", "\n", "node1 = lc(on_epoch_end=lambda epoch, logs: weightList[0].append(model.layers[2].get_weights()[0][0][0]))\n", "node2 = lc(on_epoch_end=lambda epoch, logs: weightList[1].append(model.layers[2].get_weights()[0][1][0]))\n", "node3 = lc(on_epoch_end=lambda epoch, logs: weightList[2].append(model.layers[2].get_weights()[0][2][0]))\n", "node4 = lc(on_epoch_end=lambda epoch, logs: weightList[3].append(model.layers[2].get_weights()[1][0]))\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "985/985 [==============================] - 4s 4ms/step - loss: 1.8798 - acc: 0.3259\n", "Epoch 2/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.7272 - acc: 0.3289\n", "Epoch 3/100\n", "985/985 [==============================] - 2s 3ms/step - loss: 1.7102 - acc: 0.3320\n", "Epoch 4/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.7047 - acc: 0.3310\n", "Epoch 5/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.7009 - acc: 0.3320\n", "Epoch 6/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6985 - acc: 0.3299\n", "Epoch 7/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6991 - acc: 0.3279\n", "Epoch 8/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6977 - acc: 0.3310\n", "Epoch 9/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6963 - acc: 0.3279\n", "Epoch 10/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6952 - acc: 0.3310\n", "Epoch 11/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6954 - acc: 0.3289\n", "Epoch 12/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6965 - acc: 0.3340\n", "Epoch 13/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6958 - acc: 0.3310\n", "Epoch 14/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6957 - acc: 0.3239\n", "Epoch 15/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6946 - acc: 0.3310\n", "Epoch 16/100\n", "985/985 [==============================] - 2s 3ms/step - loss: 1.6908 - acc: 0.3259\n", "Epoch 17/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6939 - acc: 0.3208\n", "Epoch 18/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6944 - acc: 0.3310\n", "Epoch 19/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6936 - acc: 0.3249\n", "Epoch 20/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6935 - acc: 0.3228\n", "Epoch 21/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6946 - acc: 0.3330\n", "Epoch 22/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6936 - acc: 0.3269\n", "Epoch 23/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6921 - acc: 0.3310\n", "Epoch 24/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6942 - acc: 0.3289\n", "Epoch 25/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6938 - acc: 0.3340\n", "Epoch 26/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6933 - acc: 0.3320\n", "Epoch 27/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6937 - acc: 0.3340\n", "Epoch 28/100\n", "985/985 [==============================] - 2s 3ms/step - loss: 1.6926 - acc: 0.3279\n", "Epoch 29/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6925 - acc: 0.3269\n", "Epoch 30/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6909 - acc: 0.3350\n", "Epoch 31/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6900 - acc: 0.3289\n", "Epoch 32/100\n", "985/985 [==============================] - 2s 3ms/step - loss: 1.6917 - acc: 0.3259\n", "Epoch 33/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6903 - acc: 0.3269\n", "Epoch 34/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6917 - acc: 0.3289\n", "Epoch 35/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6923 - acc: 0.3320\n", "Epoch 36/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6887 - acc: 0.3320\n", "Epoch 37/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6895 - acc: 0.3289\n", "Epoch 38/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6907 - acc: 0.3330\n", "Epoch 39/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6901 - acc: 0.3299\n", "Epoch 40/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6884 - acc: 0.3279\n", "Epoch 41/100\n", "985/985 [==============================] - 2s 3ms/step - loss: 1.6873 - acc: 0.3249\n", "Epoch 42/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6888 - acc: 0.3259\n", "Epoch 43/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6879 - acc: 0.3147\n", "Epoch 44/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6887 - acc: 0.3340\n", "Epoch 45/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6881 - acc: 0.3228\n", "Epoch 46/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6881 - acc: 0.3310\n", "Epoch 47/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6849 - acc: 0.3330\n", "Epoch 48/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6869 - acc: 0.3279\n", "Epoch 49/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6870 - acc: 0.3340\n", "Epoch 50/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6853 - acc: 0.3228\n", "Epoch 51/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6852 - acc: 0.3289\n", "Epoch 52/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6843 - acc: 0.3198\n", "Epoch 53/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6829 - acc: 0.3279\n", "Epoch 54/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6816 - acc: 0.3299\n", "Epoch 55/100\n", "985/985 [==============================] - 2s 3ms/step - loss: 1.6825 - acc: 0.3269\n", "Epoch 56/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6813 - acc: 0.3330\n", "Epoch 57/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6787 - acc: 0.3320\n", "Epoch 58/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6792 - acc: 0.3289\n", "Epoch 59/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6783 - acc: 0.3269\n", "Epoch 60/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6776 - acc: 0.3320\n", "Epoch 61/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6750 - acc: 0.3259\n", "Epoch 62/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6732 - acc: 0.3299\n", "Epoch 63/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6707 - acc: 0.3279\n", "Epoch 64/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6707 - acc: 0.3249\n", "Epoch 65/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6675 - acc: 0.3310\n", "Epoch 66/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6659 - acc: 0.3228\n", "Epoch 67/100\n", "985/985 [==============================] - 3s 3ms/step - loss: 1.6642 - acc: 0.3320\n", "Epoch 68/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6605 - acc: 0.3320\n", "Epoch 69/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6565 - acc: 0.3279\n", "Epoch 70/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6533 - acc: 0.3299\n", "Epoch 71/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6474 - acc: 0.3249\n", "Epoch 72/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6438 - acc: 0.3269\n", "Epoch 73/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6381 - acc: 0.3299\n", "Epoch 74/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6321 - acc: 0.3188\n", "Epoch 75/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6271 - acc: 0.3340\n", "Epoch 76/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6197 - acc: 0.3340\n", "Epoch 77/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6106 - acc: 0.3350\n", "Epoch 78/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.6028 - acc: 0.3188\n", "Epoch 79/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5929 - acc: 0.3320\n", "Epoch 80/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5839 - acc: 0.3320\n", "Epoch 81/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5733 - acc: 0.3391\n", "Epoch 82/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5640 - acc: 0.3462\n", "Epoch 83/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5534 - acc: 0.3523\n", "Epoch 84/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5437 - acc: 0.3563\n", "Epoch 85/100\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "985/985 [==============================] - 2s 2ms/step - loss: 1.5344 - acc: 0.3594\n", "Epoch 86/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5250 - acc: 0.3736\n", "Epoch 87/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5147 - acc: 0.3675\n", "Epoch 88/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.5056 - acc: 0.3766\n", "Epoch 89/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4981 - acc: 0.3807\n", "Epoch 90/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4886 - acc: 0.3838\n", "Epoch 91/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4809 - acc: 0.3919\n", "Epoch 92/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4736 - acc: 0.3939\n", "Epoch 93/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4689 - acc: 0.3868\n", "Epoch 94/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4623 - acc: 0.3909\n", "Epoch 95/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4560 - acc: 0.4051\n", "Epoch 96/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4526 - acc: 0.3797\n", "Epoch 97/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4466 - acc: 0.3949\n", "Epoch 98/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4398 - acc: 0.3909\n", "Epoch 99/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4367 - acc: 0.4010\n", "Epoch 100/100\n", "985/985 [==============================] - 2s 2ms/step - loss: 1.4300 - acc: 0.3990\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weightList = [[],[],[],[]]\n", "numepochs = 100\n", "batch = 1\n", "\n", "model.fit(trainData.values, trainTarget.values, epochs = numepochs, \n", " batch_size=batch, callbacks=[node1, node2, node3, node4])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "423/423 [==============================] - 0s 984us/step\n" ] }, { "data": { "text/plain": [ "[1.4144956797854558, 0.425531914893617]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#EVALUATE MODEL USING METRICS\n", "\n", "model.evaluate(testData.values, testTarget.values, batch_size=batch)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "weightList = np.array(weightList).T" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.plot(weightList)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAADsBJREFUeJzt23GonXd9x/H3x1xMUaFN2kRr0+xWWhjpBoqHFtkGnbVtOtAU7R/p/jBslfwx+8cUwUg3aqt/tN2kIrqNoEIQZusqYkBGia2FMUbtSduhmcZco9JrS42kFLpiS+Z3f9yn2/ldzu29uc+59+TW9wsO53l+v+95zveXA/nc53nOSVUhSdKr3jDtBiRJ5xaDQZLUMBgkSQ2DQZLUMBgkSQ2DQZLUMBgkSQ2DQZLUMBgkSY2ZaTewGhdddFHNzs5Ouw1J2lCOHj3666ratlzdhgyG2dlZhsPhtNuQpA0lyS9WUuelJElSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUMBklSw2CQJDUmEgxJdic5nmQuyYEx85uTPNDNP5ZkdtH8ziQvJvnEJPqRJK1e72BIsgn4EnAjsAu4JcmuRWW3As9X1eXAfcA9i+bvA/61by+SpP4mccZwFTBXVSer6hXgfmDPopo9wKFu+0Hg2iQBSHITcBI4NoFeJEk9TSIYLgGeHtmf78bG1lTVGeAF4MIkbwY+Cdw5gT4kSRMwiWDImLFaYc2dwH1V9eKyb5LsTzJMMjx16tQq2pQkrcTMBI4xD1w6sr8DeGaJmvkkM8D5wGngauDmJPcCFwC/TfKbqvri4jepqoPAQYDBYLA4eCRJEzKJYHgcuCLJZcAvgb3Any+qOQzsA/4DuBl4pKoK+JNXC5J8GnhxXChIktZP72CoqjNJbgMeAjYBX62qY0nuAoZVdRj4CvC1JHMsnCns7fu+kqS1kYU/3DeWwWBQw+Fw2m1I0oaS5GhVDZar85fPkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqTGRIIhye4kx5PMJTkwZn5zkge6+ceSzHbj1yU5muQH3fN7J9GPJGn1egdDkk3Al4AbgV3ALUl2LSq7FXi+qi4H7gPu6cZ/Dby/qv4Q2Ad8rW8/kqR+JnHGcBUwV1Unq+oV4H5gz6KaPcChbvtB4Nokqaonq+qZbvwYcF6SzRPoSZK0SpMIhkuAp0f257uxsTVVdQZ4AbhwUc2HgCer6uUJ9CRJWqWZCRwjY8bqbGqSXMnC5aXrl3yTZD+wH2Dnzp1n36UkaUUmccYwD1w6sr8DeGapmiQzwPnA6W5/B/At4MNV9dOl3qSqDlbVoKoG27Ztm0DbkqRxJhEMjwNXJLksyRuBvcDhRTWHWbi5DHAz8EhVVZILgO8An6qqf59AL5KknnoHQ3fP4DbgIeBHwDeq6liSu5J8oCv7CnBhkjng48CrX2m9Dbgc+NskT3WP7X17kiStXqoW3w449w0GgxoOh9NuQ5I2lCRHq2qwXJ2/fJYkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVJjIsGQZHeS40nmkhwYM785yQPd/GNJZkfmPtWNH09ywyT6kSStXu9gSLIJ+BJwI7ALuCXJrkVltwLPV9XlwH3APd1rdwF7gSuB3cA/dMeTJE3JJM4YrgLmqupkVb0C3A/sWVSzBzjUbT8IXJsk3fj9VfVyVf0MmOuOJ0makkkEwyXA0yP7893Y2JqqOgO8AFy4wtdKktbRJIIhY8ZqhTUree3CAZL9SYZJhqdOnTrLFiVJKzWJYJgHLh3Z3wE8s1RNkhngfOD0Cl8LQFUdrKpBVQ22bds2gbYlSeNMIhgeB65IclmSN7JwM/nwoprDwL5u+2bgkaqqbnxv962ly4ArgO9PoCdJ0irN9D1AVZ1JchvwELAJ+GpVHUtyFzCsqsPAV4CvJZlj4Uxhb/faY0m+AfwXcAb4aFX9T9+eJEmrl4U/3DeWwWBQw+Fw2m1I0oaS5GhVDZar85fPkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqSGwSBJahgMkqRGr2BIsjXJkSQnuuctS9Tt62pOJNnXjb0pyXeS/DjJsSR39+lFkjQZfc8YDgAPV9UVwMPdfiPJVuAO4GrgKuCOkQD5+6r6feBdwB8lubFnP5KknvoGwx7gULd9CLhpTM0NwJGqOl1VzwNHgN1V9VJVfQ+gql4BngB29OxHktRT32B4a1U9C9A9bx9Tcwnw9Mj+fDf2f5JcALyfhbMOSdIUzSxXkOS7wNvGTN2+wvfImLEaOf4M8HXgC1V18jX62A/sB9i5c+cK31qSdLaWDYaqet9Sc0meS3JxVT2b5GLgV2PK5oFrRvZ3AI+O7B8ETlTV55fp42BXy2AwqNeqlSStXt9LSYeBfd32PuDbY2oeAq5PsqW76Xx9N0aSzwLnA3/dsw9J0oT0DYa7geuSnACu6/ZJMkjyZYCqOg18Bni8e9xVVaeT7GDhctQu4IkkTyX5SM9+JEk9pWrjXZUZDAY1HA6n3YYkbShJjlbVYLk6f/ksSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkRq9gSLI1yZEkJ7rnLUvU7etqTiTZN2b+cJIf9ulFkjQZfc8YDgAPV9UVwMPdfiPJVuAO4GrgKuCO0QBJ8kHgxZ59SJImpG8w7AEOdduHgJvG1NwAHKmq01X1PHAE2A2Q5C3Ax4HP9uxDkjQhfYPhrVX1LED3vH1MzSXA0yP7890YwGeAzwEv9exDkjQhM8sVJPku8LYxU7ev8D0yZqySvBO4vKo+lmR2BX3sB/YD7Ny5c4VvLUk6W8sGQ1W9b6m5JM8lubiqnk1yMfCrMWXzwDUj+zuAR4H3AO9O8vOuj+1JHq2qaxijqg4CBwEGg0Et17ckaXX6Xko6DLz6LaN9wLfH1DwEXJ9kS3fT+Xrgoar6x6p6e1XNAn8M/GSpUJAkrZ++wXA3cF2SE8B13T5JBkm+DFBVp1m4l/B497irG5MknYNStfGuygwGgxoOh9NuQ5I2lCRHq2qwXJ2/fJYkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNQwGSVLDYJAkNVJV0+7hrCU5Bfxi2n2cpYuAX0+7iXXmmn83uOaN4/eqattyRRsyGDaiJMOqGky7j/Xkmn83uObXHy8lSZIaBoMkqWEwrJ+D025gClzz7wbX/DrjPQZJUsMzBklSw2CYoCRbkxxJcqJ73rJE3b6u5kSSfWPmDyf54dp33F+fNSd5U5LvJPlxkmNJ7l7f7s9Okt1JjieZS3JgzPzmJA90848lmR2Z+1Q3fjzJDevZdx+rXXOS65IcTfKD7vm96937avT5jLv5nUleTPKJ9ep5TVSVjwk9gHuBA932AeCeMTVbgZPd85Zue8vI/AeBfwZ+OO31rPWagTcBf9rVvBH4N+DGaa9piXVuAn4KvKPr9T+BXYtq/gr4p257L/BAt72rq98MXNYdZ9O017TGa34X8PZu+w+AX057PWu53pH5bwL/Anxi2uvp8/CMYbL2AIe67UPATWNqbgCOVNXpqnoeOALsBkjyFuDjwGfXoddJWfWaq+qlqvoeQFW9AjwB7FiHnlfjKmCuqk52vd7PwtpHjf5bPAhcmyTd+P1V9XJV/QyY6453rlv1mqvqyap6phs/BpyXZPO6dL16fT5jktzEwh89x9ap3zVjMEzWW6vqWYDuefuYmkuAp0f257sxgM8AnwNeWssmJ6zvmgFIcgHwfuDhNeqzr2XXMFpTVWeAF4ALV/jac1GfNY/6EPBkVb28Rn1OyqrXm+TNwCeBO9ehzzU3M+0GNpok3wXeNmbq9pUeYsxYJXkncHlVfWzxdctpW6s1jxx/Bvg68IWqOnn2Ha6L11zDMjUree25qM+aFyaTK4F7gOsn2Nda6bPeO4H7qurF7gRiQzMYzlJVvW+puSTPJbm4qp5NcjHwqzFl88A1I/s7gEeB9wDvTvJzFj6X7UkeraprmLI1XPOrDgInqurzE2h3rcwDl47s7wCeWaJmvgu784HTK3ztuajPmkmyA/gW8OGq+unat9tbn/VeDdyc5F7gAuC3SX5TVV9c+7bXwLRvcryeHsDf0d6IvXdMzVbgZyzcfN3SbW9dVDPLxrn53GvNLNxP+SbwhmmvZZl1zrBw/fgy/v/G5JWLaj5Ke2PyG932lbQ3n0+yMW4+91nzBV39h6a9jvVY76KaT7PBbz5PvYHX04OFa6sPAye651f/8xsAXx6p+0sWbkDOAX8x5jgbKRhWvWYW/iIr4EfAU93jI9Ne02us9c+An7DwzZXbu7G7gA902+ex8I2UOeD7wDtGXnt797rjnKPfvJrkmoG/Af575HN9Ctg+7fWs5Wc8cowNHwz+8lmS1PBbSZKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWoYDJKkhsEgSWr8L4G+I6VKUcyzAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(cyt_err_test)\n", "plt.plot(cyt_err_train)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Train on all data instead of just the train set" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model3 = Sequential()\n", "model3.add(Dense(3, input_shape=(8,), activation='sigmoid'))\n", "model3.add(Dense(3, activation='sigmoid'))\n", "model3.add(Dense(9, activation='softmax'))\n", "\n", "model3.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "history = model3.fit(master[data].values, master[localization].values, epochs = numepochs, batch_size=batch)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#EVALUATE MODEL USING PRECISION METRICS\n", "\n", "model.evaluate(master[data].values, master[localization].values, batch_size=batch)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model3.evaluate(master[data].values, master[localization].values, batch_size=batch)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.5" } }, "nbformat": 4, "nbformat_minor": 2 }