{ "cells": [ { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "from sklearn.utils import shuffle\n", "from sklearn.model_selection import train_test_split\n", "import tensorflow as tf\n", "from tensorflow.keras import models,layers,callbacks\n", "from tensorflow.keras.utils import to_categorical,plot_model\n", "import matplotlib.pyplot as plt\n", "from sklearn import metrics" ] }, { "cell_type": "code", "execution_count": 130, "metadata": {}, "outputs": [], "source": [ "galaxies = pd.read_csv('./LAMOST_spectra/galaxy_standardised.csv')\n", "qsos = pd.read_csv('./LAMOST_spectra/qso_standardised.csv')\n", "spectras = galaxies.append(qsos)" ] }, { "cell_type": "code", "execution_count": 131, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...254125422543254425452546254725482549type
1830.5204200.7966251.4138140.7649560.5187331.5212261.5664531.5483850.5990720.847522...0.5988010.373492-0.8249160.7126310.9956890.8012630.8140500.9089270.9253602
6411.9049631.7338441.3122331.2945922.3252092.2423201.8146561.6934231.9595082.122070...1.3267032.0173140.4675930.6781830.9100540.7574240.6819560.6232070.6976783
18882.117233-0.1170271.7017811.5815593.2212722.3073211.8331222.7716730.5088160.976961...0.7491471.345877-0.411363-0.645604-0.3262041.3378810.6075890.2564650.5950383
7560.6425690.7285730.8287911.0739271.2481450.7053940.7546070.9860460.8107660.808010...0.6344650.6649330.6840130.6676600.6391960.6040260.6478090.6718330.6693172
237-1.1152473.2265630.6638830.856039-0.0753422.9716683.5369782.1383471.8600071.488960...3.1972363.4514661.094434-0.854920-0.7059390.0539180.1184480.5969120.9316163
\n", "

5 rows × 2551 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 \\\n", "183 0.520420 0.796625 1.413814 0.764956 0.518733 1.521226 1.566453 \n", "641 1.904963 1.733844 1.312233 1.294592 2.325209 2.242320 1.814656 \n", "1888 2.117233 -0.117027 1.701781 1.581559 3.221272 2.307321 1.833122 \n", "756 0.642569 0.728573 0.828791 1.073927 1.248145 0.705394 0.754607 \n", "237 -1.115247 3.226563 0.663883 0.856039 -0.075342 2.971668 3.536978 \n", "\n", " 7 8 9 ... 2541 2542 2543 \\\n", "183 1.548385 0.599072 0.847522 ... 0.598801 0.373492 -0.824916 \n", "641 1.693423 1.959508 2.122070 ... 1.326703 2.017314 0.467593 \n", "1888 2.771673 0.508816 0.976961 ... 0.749147 1.345877 -0.411363 \n", "756 0.986046 0.810766 0.808010 ... 0.634465 0.664933 0.684013 \n", "237 2.138347 1.860007 1.488960 ... 3.197236 3.451466 1.094434 \n", "\n", " 2544 2545 2546 2547 2548 2549 type \n", "183 0.712631 0.995689 0.801263 0.814050 0.908927 0.925360 2 \n", "641 0.678183 0.910054 0.757424 0.681956 0.623207 0.697678 3 \n", "1888 -0.645604 -0.326204 1.337881 0.607589 0.256465 0.595038 3 \n", "756 0.667660 0.639196 0.604026 0.647809 0.671833 0.669317 2 \n", "237 -0.854920 -0.705939 0.053918 0.118448 0.596912 0.931616 3 \n", "\n", "[5 rows x 2551 columns]" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spectras= shuffle(spectras)\n", "spectras.head()" ] }, { "cell_type": "code", "execution_count": 132, "metadata": {}, "outputs": [], "source": [ "spectras.loc[spectras['type'] == 2,'type'] = 0\n", "spectras.loc[spectras['type'] == 3,'type'] = 1" ] }, { "cell_type": "code", "execution_count": 133, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...254125422543254425452546254725482549type
1830.5204200.7966251.4138140.7649560.5187331.5212261.5664531.5483850.5990720.847522...0.5988010.373492-0.8249160.7126310.9956890.8012630.8140500.9089270.9253600
6411.9049631.7338441.3122331.2945922.3252092.2423201.8146561.6934231.9595082.122070...1.3267032.0173140.4675930.6781830.9100540.7574240.6819560.6232070.6976781
18882.117233-0.1170271.7017811.5815593.2212722.3073211.8331222.7716730.5088160.976961...0.7491471.345877-0.411363-0.645604-0.3262041.3378810.6075890.2564650.5950381
7560.6425690.7285730.8287911.0739271.2481450.7053940.7546070.9860460.8107660.808010...0.6344650.6649330.6840130.6676600.6391960.6040260.6478090.6718330.6693170
237-1.1152473.2265630.6638830.856039-0.0753422.9716683.5369782.1383471.8600071.488960...3.1972363.4514661.094434-0.854920-0.7059390.0539180.1184480.5969120.9316161
\n", "

5 rows × 2551 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 \\\n", "183 0.520420 0.796625 1.413814 0.764956 0.518733 1.521226 1.566453 \n", "641 1.904963 1.733844 1.312233 1.294592 2.325209 2.242320 1.814656 \n", "1888 2.117233 -0.117027 1.701781 1.581559 3.221272 2.307321 1.833122 \n", "756 0.642569 0.728573 0.828791 1.073927 1.248145 0.705394 0.754607 \n", "237 -1.115247 3.226563 0.663883 0.856039 -0.075342 2.971668 3.536978 \n", "\n", " 7 8 9 ... 2541 2542 2543 \\\n", "183 1.548385 0.599072 0.847522 ... 0.598801 0.373492 -0.824916 \n", "641 1.693423 1.959508 2.122070 ... 1.326703 2.017314 0.467593 \n", "1888 2.771673 0.508816 0.976961 ... 0.749147 1.345877 -0.411363 \n", "756 0.986046 0.810766 0.808010 ... 0.634465 0.664933 0.684013 \n", "237 2.138347 1.860007 1.488960 ... 3.197236 3.451466 1.094434 \n", "\n", " 2544 2545 2546 2547 2548 2549 type \n", "183 0.712631 0.995689 0.801263 0.814050 0.908927 0.925360 0 \n", "641 0.678183 0.910054 0.757424 0.681956 0.623207 0.697678 1 \n", "1888 -0.645604 -0.326204 1.337881 0.607589 0.256465 0.595038 1 \n", "756 0.667660 0.639196 0.604026 0.647809 0.671833 0.669317 0 \n", "237 -0.854920 -0.705939 0.053918 0.118448 0.596912 0.931616 1 \n", "\n", "[5 rows x 2551 columns]" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spectras.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# train, test = train_test_split(spectras, test_size=0.2)\n", "# train, val = train_test_split(train, test_size=0.2)" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(spectras.iloc[:,0:2550],spectras['type'], test_size=0.2, random_state=0)" ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [], "source": [ "X_train, X_val, y_train, y_val = train_test_split(X_train.iloc[:,0:2550],y_train, test_size=0.2, random_state=0)" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [], "source": [ "X_train = X_train.values\n", "X_test = X_test.values\n", "y_train = y_train.values\n", "y_test = y_test.values" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [], "source": [ "X_val = X_val.values\n", "y_val = y_val.values" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((2560, 2550), (2560,))" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.shape, y_train.shape" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [], "source": [ "y_train=to_categorical(y_train)\n", "y_val=to_categorical(y_val)" ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2560, 2)" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train.shape" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [], "source": [ "X_train= X_train.reshape((-1, 2550, 1)).astype(\"float32\")\n", "X_test = X_test.reshape((-1, 2550, 1)).astype(\"float32\")" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [], "source": [ "X_val = X_val.reshape((-1, 2550, 1)).astype(\"float32\")" ] }, { "cell_type": "code", "execution_count": 152, "metadata": {}, "outputs": [], "source": [ "model = models.Sequential()\n", "model.add(layers.Conv1D(filters=32, kernel_size=5, activation='relu', input_shape=(2550,1)))\n", "model.add(layers.MaxPooling1D(pool_size=2))\n", "model.add(layers.Conv1D(filters=32, kernel_size=5, activation='relu'))\n", "model.add(layers.MaxPooling1D(pool_size=2))\n", "model.add(layers.Flatten())\n", "model.add(layers.Dense(16, activation='relu'))\n", "model.add(layers.Dense(2, activation='softmax'))" ] }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.layers" ] }, { "cell_type": "code", "execution_count": 154, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_8\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "conv1d_16 (Conv1D) (None, 2546, 32) 192 \n", "_________________________________________________________________\n", "max_pooling1d_16 (MaxPooling (None, 1273, 32) 0 \n", "_________________________________________________________________\n", "conv1d_17 (Conv1D) (None, 1269, 32) 5152 \n", "_________________________________________________________________\n", "max_pooling1d_17 (MaxPooling (None, 634, 32) 0 \n", "_________________________________________________________________\n", "flatten_8 (Flatten) (None, 20288) 0 \n", "_________________________________________________________________\n", "dense_16 (Dense) (None, 16) 324624 \n", "_________________________________________________________________\n", "dense_17 (Dense) (None, 2) 34 \n", "=================================================================\n", "Total params: 330,002\n", "Trainable params: 330,002\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 155, "metadata": {}, "outputs": [], "source": [ "model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 156, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 2560 samples, validate on 640 samples\n", "Epoch 1/10\n", "2560/2560 [==============================] - 2s 732us/sample - loss: 0.3623 - accuracy: 0.8699 - val_loss: 0.2426 - val_accuracy: 0.9250\n", "Epoch 2/10\n", "2560/2560 [==============================] - 1s 473us/sample - loss: 0.2184 - accuracy: 0.9395 - val_loss: 0.2520 - val_accuracy: 0.9328\n", "Epoch 3/10\n", "2560/2560 [==============================] - 1s 467us/sample - loss: 0.1684 - accuracy: 0.9570 - val_loss: 0.2204 - val_accuracy: 0.9344\n", "Epoch 4/10\n", "2560/2560 [==============================] - 1s 464us/sample - loss: 0.1373 - accuracy: 0.9621 - val_loss: 0.3544 - val_accuracy: 0.9000\n", "Epoch 5/10\n", "2560/2560 [==============================] - 1s 480us/sample - loss: 0.1093 - accuracy: 0.9734 - val_loss: 0.2581 - val_accuracy: 0.9359\n", "Epoch 6/10\n", "2560/2560 [==============================] - 1s 492us/sample - loss: 0.1002 - accuracy: 0.9758 - val_loss: 0.2983 - val_accuracy: 0.9359\n", "Epoch 7/10\n", "2560/2560 [==============================] - 1s 484us/sample - loss: 0.0860 - accuracy: 0.9809 - val_loss: 0.3514 - val_accuracy: 0.9250\n", "Epoch 8/10\n", "2560/2560 [==============================] - 1s 483us/sample - loss: 0.0690 - accuracy: 0.9812 - val_loss: 0.3000 - val_accuracy: 0.9359\n", "Epoch 9/10\n", "2560/2560 [==============================] - 1s 477us/sample - loss: 0.0639 - accuracy: 0.9840 - val_loss: 0.4772 - val_accuracy: 0.9141\n", "Epoch 10/10\n", "2560/2560 [==============================] - 1s 474us/sample - loss: 0.0483 - accuracy: 0.9895 - val_loss: 0.3928 - val_accuracy: 0.9281\n" ] } ], "source": [ "history=model.fit(X_train,y_train,epochs=10,batch_size=32, validation_data=(X_val,y_val))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 2560 samples, validate on 640 samples\n", "Epoch 1/20\n", "2560/2560 [==============================] - 2s 845us/sample - loss: 0.5918 - accuracy: 0.7621 - val_loss: 0.3076 - val_accuracy: 0.9219\n", "Epoch 2/20\n", "2560/2560 [==============================] - 1s 431us/sample - loss: 0.2895 - accuracy: 0.9023 - val_loss: 0.2532 - val_accuracy: 0.9250\n", "Epoch 3/20\n", "2560/2560 [==============================] - 1s 435us/sample - loss: 0.2366 - accuracy: 0.9164 - val_loss: 0.2121 - val_accuracy: 0.9312\n", "Epoch 4/20\n", "2560/2560 [==============================] - 1s 437us/sample - loss: 0.1995 - accuracy: 0.9312 - val_loss: 0.2778 - val_accuracy: 0.9094\n", "Epoch 5/20\n", "2560/2560 [==============================] - 1s 431us/sample - loss: 0.1886 - accuracy: 0.9336 - val_loss: 0.2235 - val_accuracy: 0.9344\n", "Epoch 6/20\n", "2560/2560 [==============================] - 1s 431us/sample - loss: 0.1466 - accuracy: 0.9523 - val_loss: 0.3196 - val_accuracy: 0.8906\n", "Epoch 7/20\n", "2560/2560 [==============================] - 1s 438us/sample - loss: 0.1381 - accuracy: 0.9582 - val_loss: 0.2780 - val_accuracy: 0.9172\n", "Epoch 8/20\n", "2560/2560 [==============================] - 1s 434us/sample - loss: 0.1231 - accuracy: 0.9582 - val_loss: 0.2912 - val_accuracy: 0.9000\n" ] } ], "source": [ "history=model.fit(X_train,y_train,epochs=20,batch_size=32, validation_data=(X_val,y_val),callbacks=[\n", " callbacks.EarlyStopping(monitor=\"val_loss\", patience=5, mode=\"min\")\n", " ])" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "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mDHce++9LFmypOe+dA9SEIhIv7dw4UIaGxuZNm0ad955J+eddx5FRUUsX76cT3/608ycOZPFixcD8PWvf51Dhw5xxhlnMHPmTFatWgXAd7/7XS6//HIuuOACRo8e3eVn3XHHHXz1q19l1qxZbc4i+vznP8/48eM588wzmTlzJk8+2foI9uuuu45x48Yxbdq0JP0CJ0c3nRORk7Jp06Y+W8H1FTfffDOzZs3ixhtv7JXP6+xvopvOiYikyOzZs8nLy+Nf//VfU12ULikIRESSaN26dakuwjGpj0BEJOQUBCIiIacgEBEJOQWBiEjIKQhEREJOQSAioTJo0KBUF6HP0emjItJzXrgTPljfs9scNQMu+27PbrMPaGxs7DP3HdIRgYj0a3feeWebewfdc8893HvvvcyfP5+zzz6bGTNm8Mtf/jKhbVVVVXW53uOPP95y+4jrr78egP379/OpT32KmTNnMnPmTF5//XV27NjBGWec0bLe9773Pe655x4ALrnkEm699VbmzJnDfffdx3PPPcfcuXOZNWsWl156Kfv3728px5IlS5gxYwZnnnkmTz/9NA8//DC33npry3YfeughbrvtthP+3dpw9371mj17totI37Fx48aUfv6bb77pF110Ucv4tGnTfNeuXV5RUeHu7qWlpX7KKad4U1OTu7vn5eV1ua2GhoZO1/vzn//sU6ZM8dLSUnd3Ly8vd3f3q6++2r///e+7u3tjY6MfPnzYt2/f7tOnT2/Z5r/8y7/43Xff7e7uF198sX/xi19smXfw4MGWcj300EN+++23u7v7HXfc4cuWLWuz3JEjR3zy5MleX1/v7u7nn3++v/POO51+j87+JsBa76Je7RvHJSIiJ2jWrFkcOHCAvXv3UlpaSn5+PqNGjeK2225j9erVpKWlsWfPHvbv38+oUaO63Za7c9ddd3VY79VXX2XRokUUFhYCrc8aePXVV1ueL5Cens7QoUOP+aCb5pvfQfDAm8WLF7Nv3z7q6+tbnp3Q1TMT5s2bx/PPP8+0adNoaGhgxowZx/lrdU5BICL93qJFi1i5ciUffPABixcv5oknnqC0tJR169aRkZHBxIkTOzxjoDMnul68SCRCU1NTy3h3zza45ZZbuP3227niiit47bXXWpqQuvL5z3+e73znO5x22mk9ektr9RGISL+3ePFiVqxYwcqVK1m0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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "800/800 - 0s - loss: 0.4506 - accuracy: 0.9262\n" ] } ], "source": [ "plt.plot(history.history['accuracy'], label='accuracy')\n", "plt.plot(history.history['val_accuracy'], label = 'val_accuracy')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Accuracy')\n", "plt.ylim([0.5, 1])\n", "plt.legend(loc='lower right')\n", "plt.show()\n", "\n", "test_loss, test_acc = model.evaluate(X_test,y_test, verbose=2)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.92625\n" ] } ], "source": [ "print(test_acc)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "predictions = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[9.9657696e-01, 3.4230000e-03],\n", " [1.2145663e-12, 1.0000000e+00],\n", " [7.5070602e-05, 9.9992490e-01],\n", " ...,\n", " [4.6137668e-02, 9.5386237e-01],\n", " [5.4975968e-05, 9.9994504e-01],\n", " [1.1919570e-03, 9.9880803e-01]], dtype=float32)" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predictions" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "y_pred = model.predict_classes(X_test)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,\n", " 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1,\n", " 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,\n", " 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,\n", " 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1,\n", " 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,\n", " 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0,\n", " 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0,\n", " 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,\n", " 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,\n", " 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1,\n", " 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0,\n", " 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0,\n", " 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1,\n", " 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1,\n", " 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0,\n", " 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0,\n", " 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1,\n", " 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1,\n", " 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0,\n", " 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,\n", " 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0,\n", " 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0,\n", " 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1,\n", " 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1,\n", " 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0,\n", " 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1,\n", " 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0,\n", " 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0,\n", " 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1,\n", " 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1,\n", " 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,\n", " 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,\n", " 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n", " 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1,\n", " 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1,\n", " 1, 1, 0, 1, 0, 1, 1, 1])" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_pred" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "model.save('cnn_model.h5')" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "model = tf.keras.models.load_model('cnn_model.h5')" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_2\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "conv1d_4 (Conv1D) (None, 2546, 32) 192 \n", "_________________________________________________________________\n", "max_pooling1d_4 (MaxPooling1 (None, 1273, 32) 0 \n", "_________________________________________________________________\n", "conv1d_5 (Conv1D) (None, 1269, 32) 5152 \n", "_________________________________________________________________\n", "max_pooling1d_5 (MaxPooling1 (None, 634, 32) 0 \n", "_________________________________________________________________\n", "flatten_2 (Flatten) (None, 20288) 0 \n", "_________________________________________________________________\n", "dense_4 (Dense) (None, 16) 324624 \n", "_________________________________________________________________\n", "dense_5 (Dense) (None, 2) 34 \n", "=================================================================\n", "Total params: 330,002\n", "Trainable params: 330,002\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.947717731829574" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "metrics.roc_auc_score(y_test,predictions)" ] }, { "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.9.0" } }, "nbformat": 4, "nbformat_minor": 4 }