Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Sequential_Model.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "code",
"metadata": {
"id": "r_BTXnbqexwU"
},
"source": [
"import keras\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.model_selection import StratifiedShuffleSplit\n",
"from keras.layers import MaxPooling2D, Dropout, LocallyConnected2D, MaxPool2D, MaxPool1D\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense, Activation, Flatten, Convolution1D, Dropout\n",
"from keras.optimizers import SGD\n",
"from keras.utils import np_utils\n",
"import matplotlib.pyplot as plt\n",
"import numpy\n",
"from sklearn.metrics import accuracy_score , precision_score , recall_score , classification_report ,plot_confusion_matrix , confusion_matrix , f1_score\n",
"import itertools"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "oeN4kMU5rVSJ",
"outputId": "a39dbe0e-c6ab-40d8-8804-5a740b62f607"
},
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "VIL1LO0lfAsu"
},
"source": [
"train = pd.read_csv('/content/drive/MyDrive/train.csv')\n",
"test = pd.read_csv('/content/drive/MyDrive/test.csv')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-s1a3iVtfO_r"
},
"source": [
"def encode(train, test):\n",
" label_encoder = LabelEncoder().fit(train.species)\n",
" labels = label_encoder.transform(train.species)\n",
" classes = list(label_encoder.classes_)\n",
"\n",
" train = train.drop(['species', 'id'], axis=1)\n",
" test_ids=test.id\n",
" test = test.drop('id', axis=1)\n",
"\n",
" return train, labels, test, classes,test_ids"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ix9Nc37TfWTm"
},
"source": [
"train, labels, test, classes,test_ids = encode(train, test)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "gXXX4wpBfY9v"
},
"source": [
"scaler = StandardScaler().fit(train.values)\n",
"scaled_train = scaler.transform(train.values)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "vMGwwJ1wfbK4"
},
"source": [
"sss = StratifiedShuffleSplit(test_size=0.1, random_state=23)\n",
"for train_index, valid_index in sss.split(scaled_train, labels):\n",
" X_train, X_test = scaled_train[train_index], scaled_train[valid_index]\n",
" y_train, y_test = labels[train_index], labels[valid_index]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "HQYUsKeUmCTY"
},
"source": [
"nb_class = len(classes)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Djg9bpxTyT4u",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "247e90cc-02d5-4682-829c-ee53e1807c34"
},
"source": [
"y_test"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([12, 51, 41, 17, 26, 47, 56, 21, 54, 34, 28, 11, 40, 59, 98, 65, 46,\n",
" 38, 36, 45, 90, 24, 44, 16, 18, 50, 61, 9, 22, 5, 30, 2, 66, 76,\n",
" 49, 14, 6, 31, 23, 32, 15, 20, 55, 83, 43, 19, 60, 78, 7, 25, 42,\n",
" 8, 68, 89, 74, 58, 27, 85, 35, 1, 71, 67, 75, 93, 77, 57, 80, 81,\n",
" 94, 48, 63, 86, 87, 53, 95, 52, 97, 69, 62, 70, 4, 3, 64, 84, 91,\n",
" 39, 88, 13, 0, 79, 10, 72, 96, 73, 82, 37, 92, 33, 29])"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "atrIIpj4mRvm"
},
"source": [
"y_train = np_utils.to_categorical(y_train, nb_class)\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "loVYRllGnEDR",
"outputId": "b5f8689e-7630-401d-f09d-a7a602b0a7fc"
},
"source": [
"X_train.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(891, 192)"
]
},
"metadata": {
"tags": []
},
"execution_count": 15
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "mj19y2idneKp",
"outputId": "22fe60f4-6263-46e2-8ec1-91e92b3ddc0c"
},
"source": [
"y_train.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(891, 99)"
]
},
"metadata": {
"tags": []
},
"execution_count": 16
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "QzK99fjtn85E",
"outputId": "c37bdb17-d8e6-46c1-c2a4-63edc48e1be7"
},
"source": [
"X_test.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(99, 192)"
]
},
"metadata": {
"tags": []
},
"execution_count": 17
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Vv7pX5nLoHzb",
"outputId": "9862dc6e-ebf2-456e-97cb-0646b3ed75d0"
},
"source": [
"y_test.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(99,)"
]
},
"metadata": {
"tags": []
},
"execution_count": 18
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "moONa4QPoPJV"
},
"source": [
"X_train = X_train.reshape(-1, 192, 1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ZPfRxxS6mMVV"
},
"source": [
"dnn_clf = Sequential([\n",
"\n",
" Dense(100, input_shape=(192, 1), activation='relu'),\n",
" MaxPool1D(),\n",
" Flatten(),\n",
" Dense(100, activation='relu'),\n",
" Dropout(.25),\n",
" Dense(99, activation='softmax')\n",
"])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Ivl1bbSzmk9l"
},
"source": [
"dnn_clf.compile(loss=\"categorical_crossentropy\",\n",
" optimizer=\"adam\",\n",
" metrics=['accuracy'])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "7KRRJJtCpB03",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "5346b112-77c5-40ca-f08d-7b3df9c8fd7d"
},
"source": [
"dnn_clf.summary()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Model: \"sequential\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"dense (Dense) (None, 192, 100) 200 \n",
"_________________________________________________________________\n",
"max_pooling1d (MaxPooling1D) (None, 96, 100) 0 \n",
"_________________________________________________________________\n",
"flatten (Flatten) (None, 9600) 0 \n",
"_________________________________________________________________\n",
"dense_1 (Dense) (None, 100) 960100 \n",
"_________________________________________________________________\n",
"dropout (Dropout) (None, 100) 0 \n",
"_________________________________________________________________\n",
"dense_2 (Dense) (None, 99) 9999 \n",
"=================================================================\n",
"Total params: 970,299\n",
"Trainable params: 970,299\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Y7kh51TFo95i",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "c8540276-034c-4196-d419-facf5c3f00f3"
},
"source": [
"History = dnn_clf.fit(X_train , y_train , validation_split=.3 , epochs=15)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/15\n",
"20/20 [==============================] - 2s 44ms/step - loss: 4.3610 - accuracy: 0.0550 - val_loss: 3.5683 - val_accuracy: 0.2537\n",
"Epoch 2/15\n",
"20/20 [==============================] - 0s 20ms/step - loss: 2.9549 - accuracy: 0.3452 - val_loss: 2.3639 - val_accuracy: 0.5000\n",
"Epoch 3/15\n",
"20/20 [==============================] - 0s 21ms/step - loss: 1.8578 - accuracy: 0.5812 - val_loss: 1.4291 - val_accuracy: 0.7351\n",
"Epoch 4/15\n",
"20/20 [==============================] - 0s 21ms/step - loss: 0.9520 - accuracy: 0.7902 - val_loss: 0.8440 - val_accuracy: 0.8209\n",
"Epoch 5/15\n",
"20/20 [==============================] - 0s 21ms/step - loss: 0.6843 - accuracy: 0.8230 - val_loss: 0.6070 - val_accuracy: 0.8507\n",
"Epoch 6/15\n",
"20/20 [==============================] - 0s 19ms/step - loss: 0.5045 - accuracy: 0.8733 - val_loss: 0.5447 - val_accuracy: 0.8806\n",
"Epoch 7/15\n",
"20/20 [==============================] - 0s 21ms/step - loss: 0.4157 - accuracy: 0.8837 - val_loss: 0.3760 - val_accuracy: 0.9142\n",
"Epoch 8/15\n",
"20/20 [==============================] - 0s 20ms/step - loss: 0.2511 - accuracy: 0.9367 - val_loss: 0.3828 - val_accuracy: 0.8918\n",
"Epoch 9/15\n",
"20/20 [==============================] - 0s 20ms/step - loss: 0.2172 - accuracy: 0.9454 - val_loss: 0.2766 - val_accuracy: 0.9366\n",
"Epoch 10/15\n",
"20/20 [==============================] - 0s 20ms/step - loss: 0.2289 - accuracy: 0.9318 - val_loss: 0.2725 - val_accuracy: 0.9403\n",
"Epoch 11/15\n",
"20/20 [==============================] - 0s 19ms/step - loss: 0.1585 - accuracy: 0.9662 - val_loss: 0.2909 - val_accuracy: 0.8955\n",
"Epoch 12/15\n",
"20/20 [==============================] - 0s 20ms/step - loss: 0.1606 - accuracy: 0.9651 - val_loss: 0.1865 - val_accuracy: 0.9478\n",
"Epoch 13/15\n",
"20/20 [==============================] - 0s 20ms/step - loss: 0.1158 - accuracy: 0.9718 - val_loss: 0.2181 - val_accuracy: 0.9179\n",
"Epoch 14/15\n",
"20/20 [==============================] - 0s 20ms/step - loss: 0.0804 - accuracy: 0.9796 - val_loss: 0.2387 - val_accuracy: 0.9254\n",
"Epoch 15/15\n",
"20/20 [==============================] - 0s 21ms/step - loss: 0.0884 - accuracy: 0.9869 - val_loss: 0.2297 - val_accuracy: 0.9216\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 590
},
"id": "7Z2tGgJuSLlW",
"outputId": "cde2a8eb-bc8a-44dc-b784-808a05cfa3cd"
},
"source": [
"# summarize history for accuracy\n",
"print(History.history.keys())\n",
"plt.plot(History.history['accuracy'])\n",
"plt.plot(History.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='lower right')\n",
"plt.show()\n",
"# summarize history for loss\n",
"plt.plot(History.history['loss'])\n",
"plt.plot(History.history['val_loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper right')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Ehmn9a0gtrQ1"
},
"source": [
"X_test = X_test.reshape(-1, 192, 1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "06J4iATcGS67"
},
"source": [
"scaled_train, labels"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "iJ5ImcTIL9-s"
},
"source": [
"X_test = scaled_train.reshape(-1, 192, 1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ScATHG_ly8fs"
},
"source": [
"y_preds = np.argmax(dnn_clf.predict(X_test), axis = -1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ILLqju74zLtE",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "05731de5-d704-40e6-feb4-e1a7e78b4b4c"
},
"source": [
"y_test == y_preds"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" False, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, False,\n",
" True, True, True, True, True, True, True, True, True,\n",
" False, True, False, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, False])"
]
},
"metadata": {
"tags": []
},
"execution_count": 24
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Gz2Ln2dya-ZD",
"outputId": "621e7ca8-4ede-4412-ec72-8acc4e52ad07"
},
"source": [
"y_test"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([12, 51, 41, 17, 26, 47, 56, 21, 54, 34, 28, 11, 40, 59, 98, 65, 46,\n",
" 38, 36, 45, 90, 24, 44, 16, 18, 50, 61, 9, 22, 5, 30, 2, 66, 76,\n",
" 49, 14, 6, 31, 23, 32, 15, 20, 55, 83, 43, 19, 60, 78, 7, 25, 42,\n",
" 8, 68, 89, 74, 58, 27, 85, 35, 1, 71, 67, 75, 93, 77, 57, 80, 81,\n",
" 94, 48, 63, 86, 87, 53, 95, 52, 97, 69, 62, 70, 4, 3, 64, 84, 91,\n",
" 39, 88, 13, 0, 79, 10, 72, 96, 73, 82, 37, 92, 33, 29])"
]
},
"metadata": {
"tags": []
},
"execution_count": 25
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yHPFs-Blae1Q",
"outputId": "8a2e7e6d-5ad6-4a49-ce66-2713d4b566ae"
},
"source": [
"y_preds"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([12, 51, 41, 17, 26, 47, 56, 21, 54, 34, 28, 11, 40, 59, 98, 65, 46,\n",
" 38, 36, 45, 90, 24, 44, 16, 18, 50, 61, 54, 22, 5, 30, 2, 66, 76,\n",
" 49, 14, 6, 31, 23, 32, 15, 20, 55, 83, 43, 19, 60, 78, 7, 25, 42,\n",
" 8, 68, 89, 74, 58, 27, 85, 35, 1, 71, 67, 54, 93, 77, 57, 80, 81,\n",
" 94, 48, 63, 86, 2, 53, 94, 52, 97, 69, 62, 70, 4, 3, 64, 84, 91,\n",
" 39, 88, 13, 0, 79, 10, 72, 96, 73, 82, 37, 92, 33, 28])"
]
},
"metadata": {
"tags": []
},
"execution_count": 26
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "KLTect7HbWBb",
"outputId": "324d9696-ecc9-4a00-bab4-405ee1149538"
},
"source": [
"print(accuracy_score(y_test, y_preds))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.9494949494949495"
]
},
"metadata": {
"tags": []
},
"execution_count": 28
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "uzoO0sSJHwNa"
},
"source": [
"y_preds = np.argmax(dnn_clf.predict(X_test), axis = -1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "C35O-bfSdUQH"
},
"source": [
"print(precision_score(y_test, y_preds, average='macro'))\n",
"print(precision_score(y_test, y_preds, average='micro'))\n",
"print(precision_score(y_test, y_preds, average='weighted'))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6ucacK4cdx22",
"outputId": "2e890895-45d9-4da1-dbc8-3b1099b24017"
},
"source": [
"print(recall_score(y_test, y_preds, average='macro'))\n",
"print(recall_score(y_test, y_preds, average='micro'))\n",
"print(recall_score(y_test, y_preds, average='weighted'))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.9595959595959596\n",
"0.9595959595959596\n",
"0.9595959595959596\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ALZF_LW3H9r7",
"outputId": "6afd1116-8048-43e2-ba06-9f06fc11a969"
},
"source": [
"f1_score(y_test, y_preds , average='micro')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.9494949494949495"
]
},
"metadata": {
"tags": []
},
"execution_count": 34
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "EYXyLjShI1zq"
},
"source": [
"cer_Capillipes 1.00 1.00 1.00 10\n",
" Acer_Circinatum 1.00 1.00 1.00 10\n",
" Acer_Mono 1.00 1.00 1.00 10\n",
" Acer_Opalus 1.00 1.00 1.00 10\n",
" Acer_Palmatum 1.00 1.00 1.00 10\n",
" Acer_Pictum 1.00 1.00 1.00 10\n",
" Acer_Platanoids 1.00 1.00 1.00 10\n",
" Acer_Rubrum 1.00 1.00 1.00 10\n",
" Acer_Rufinerve 0.91 1.00 0.95 10\n",
" Acer_Saccharinum 1.00 0.90 0.95 10\n",
" Alnus_Cordata 1.00 1.00 1.00 10\n",
" Alnus_Maximowiczii 1.00 1.00 1.00 10\n",
" Alnus_Rubra 0.91 1.00 0.95 10\n",
" Alnus_Sieboldiana 1.00 1.00 1.00 10\n",
" Alnus_Viridis 1.00 1.00 1.00 10\n",
" Arundinaria_Simonii 1.00 1.00 1.00 10\n",
" Betula_Austrosinensis 1.00 1.00 1.00 10\n",
" Betula_Pendula 1.00 0.90 0.95 10\n",
" Callicarpa_Bodinieri 1.00 0.90 0.95 10\n",
" Castanea_Sativa 0.91 1.00 0.95 10\n",
" Celtis_Koraiensis 1.00 1.00 1.00 10\n",
" Cercis_Siliquastrum 0.91 1.00 0.95 10\n",
" Cornus_Chinensis 1.00 1.00 1.00 10\n",
" Cornus_Controversa 1.00 1.00 1.00 10\n",
" Cornus_Macrophylla 1.00 1.00 1.00 "
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "mXiVr90neqTp",
"outputId": "c3a0fc40-d929-4f49-e906-0cfd2ed98dd3"
},
"source": [
"print(classification_report(labels, y_preds, target_names=classes))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Acer_Capillipes 1.00 1.00 1.00 10\n",
" Acer_Circinatum 1.00 1.00 1.00 10\n",
" Acer_Mono 1.00 1.00 1.00 10\n",
" Acer_Opalus 1.00 1.00 1.00 10\n",
" Acer_Palmatum 1.00 1.00 1.00 10\n",
" Acer_Pictum 1.00 1.00 1.00 10\n",
" Acer_Platanoids 1.00 1.00 1.00 10\n",
" Acer_Rubrum 1.00 1.00 1.00 10\n",
" Acer_Rufinerve 0.91 1.00 0.95 10\n",
" Acer_Saccharinum 1.00 0.90 0.95 10\n",
" Alnus_Cordata 1.00 1.00 1.00 10\n",
" Alnus_Maximowiczii 1.00 1.00 1.00 10\n",
" Alnus_Rubra 0.91 1.00 0.95 10\n",
" Alnus_Sieboldiana 1.00 1.00 1.00 10\n",
" Alnus_Viridis 1.00 1.00 1.00 10\n",
" Arundinaria_Simonii 1.00 1.00 1.00 10\n",
" Betula_Austrosinensis 1.00 1.00 1.00 10\n",
" Betula_Pendula 1.00 0.90 0.95 10\n",
" Callicarpa_Bodinieri 1.00 0.90 0.95 10\n",
" Castanea_Sativa 0.91 1.00 0.95 10\n",
" Celtis_Koraiensis 1.00 1.00 1.00 10\n",
" Cercis_Siliquastrum 0.91 1.00 0.95 10\n",
" Cornus_Chinensis 1.00 1.00 1.00 10\n",
" Cornus_Controversa 1.00 1.00 1.00 10\n",
" Cornus_Macrophylla 1.00 1.00 1.00 10\n",
" Cotinus_Coggygria 1.00 1.00 1.00 10\n",
" Crataegus_Monogyna 1.00 1.00 1.00 10\n",
" Cytisus_Battandieri 1.00 1.00 1.00 10\n",
" Eucalyptus_Glaucescens 0.80 0.80 0.80 10\n",
" Eucalyptus_Neglecta 0.82 0.90 0.86 10\n",
" Eucalyptus_Urnigera 1.00 0.90 0.95 10\n",
" Fagus_Sylvatica 0.83 1.00 0.91 10\n",
" Ginkgo_Biloba 1.00 0.60 0.75 10\n",
" Ilex_Aquifolium 1.00 1.00 1.00 10\n",
" Ilex_Cornuta 1.00 0.90 0.95 10\n",
" Liquidambar_Styraciflua 1.00 1.00 1.00 10\n",
" Liriodendron_Tulipifera 1.00 0.90 0.95 10\n",
" Lithocarpus_Cleistocarpus 1.00 0.60 0.75 10\n",
" Lithocarpus_Edulis 0.67 1.00 0.80 10\n",
" Magnolia_Heptapeta 0.91 1.00 0.95 10\n",
" Magnolia_Salicifolia 1.00 1.00 1.00 10\n",
" Morus_Nigra 1.00 1.00 1.00 10\n",
" Olea_Europaea 1.00 1.00 1.00 10\n",
" Phildelphus 1.00 1.00 1.00 10\n",
" Populus_Adenopoda 1.00 0.90 0.95 10\n",
" Populus_Grandidentata 1.00 1.00 1.00 10\n",
" Populus_Nigra 1.00 1.00 1.00 10\n",
" Prunus_Avium 1.00 1.00 1.00 10\n",
" Prunus_X_Shmittii 1.00 1.00 1.00 10\n",
" Pterocarya_Stenoptera 0.91 1.00 0.95 10\n",
" Quercus_Afares 1.00 1.00 1.00 10\n",
" Quercus_Agrifolia 1.00 0.80 0.89 10\n",
" Quercus_Alnifolia 1.00 1.00 1.00 10\n",
" Quercus_Brantii 1.00 1.00 1.00 10\n",
" Quercus_Canariensis 1.00 1.00 1.00 10\n",
" Quercus_Castaneifolia 1.00 0.90 0.95 10\n",
" Quercus_Cerris 1.00 0.90 0.95 10\n",
" Quercus_Chrysolepis 1.00 1.00 1.00 10\n",
" Quercus_Coccifera 1.00 1.00 1.00 10\n",
" Quercus_Coccinea 1.00 1.00 1.00 10\n",
" Quercus_Crassifolia 1.00 1.00 1.00 10\n",
" Quercus_Crassipes 0.91 1.00 0.95 10\n",
" Quercus_Dolicholepis 0.91 1.00 0.95 10\n",
" Quercus_Ellipsoidalis 1.00 1.00 1.00 10\n",
" Quercus_Greggii 0.83 1.00 0.91 10\n",
" Quercus_Hartwissiana 1.00 1.00 1.00 10\n",
" Quercus_Ilex 0.91 1.00 0.95 10\n",
" Quercus_Imbricaria 1.00 1.00 1.00 10\n",
" Quercus_Infectoria_sub 1.00 0.90 0.95 10\n",
" Quercus_Kewensis 1.00 1.00 1.00 10\n",
" Quercus_Nigra 1.00 1.00 1.00 10\n",
" Quercus_Palustris 1.00 1.00 1.00 10\n",
" Quercus_Phellos 1.00 1.00 1.00 10\n",
" Quercus_Phillyraeoides 1.00 0.90 0.95 10\n",
" Quercus_Pontica 0.83 1.00 0.91 10\n",
" Quercus_Pubescens 1.00 0.90 0.95 10\n",
" Quercus_Pyrenaica 1.00 1.00 1.00 10\n",
" Quercus_Rhysophylla 1.00 0.80 0.89 10\n",
" Quercus_Rubra 0.91 1.00 0.95 10\n",
" Quercus_Semecarpifolia 1.00 1.00 1.00 10\n",
" Quercus_Shumardii 1.00 1.00 1.00 10\n",
" Quercus_Suber 1.00 1.00 1.00 10\n",
" Quercus_Texana 1.00 1.00 1.00 10\n",
" Quercus_Trojana 1.00 0.90 0.95 10\n",
" Quercus_Variabilis 1.00 1.00 1.00 10\n",
" Quercus_Vulcanica 1.00 1.00 1.00 10\n",
" Quercus_x_Hispanica 0.91 1.00 0.95 10\n",
" Quercus_x_Turneri 1.00 1.00 1.00 10\n",
" Rhododendron_x_Russellianum 1.00 1.00 1.00 10\n",
" Salix_Fragilis 1.00 0.90 0.95 10\n",
" Salix_Intergra 1.00 1.00 1.00 10\n",
" Sorbus_Aria 1.00 0.90 0.95 10\n",
" Tilia_Oliveri 0.91 1.00 0.95 10\n",
" Tilia_Platyphyllos 1.00 1.00 1.00 10\n",
" Tilia_Tomentosa 0.91 1.00 0.95 10\n",
" Ulmus_Bergmanniana 1.00 1.00 1.00 10\n",
" Viburnum_Tinus 1.00 1.00 1.00 10\n",
"Viburnum_x_Rhytidophylloides 0.83 1.00 0.91 10\n",
" Zelkova_Serrata 1.00 1.00 1.00 10\n",
"\n",
" accuracy 0.97 990\n",
" macro avg 0.97 0.97 0.97 990\n",
" weighted avg 0.97 0.97 0.97 990\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Ifm-kgFpJFhL"
},
"source": [
"train, labels"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "h08OUq2yJvbP"
},
"source": [
"scaler = StandardScaler().fit(train.values)\n",
"scaled_train = scaler.transform(train.values)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "h8NdouBCJ40u"
},
"source": [
"scaled_train"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "k5iM2IWpJzFs",
"outputId": "349e3a1a-d0af-4931-b84b-89aab4598126"
},
"source": [
"scaler"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"StandardScaler(copy=True, with_mean=True, with_std=True)"
]
},
"metadata": {
"tags": []
},
"execution_count": 41
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "2eSuYJrgJHgT"
},
"source": [
"X_test = scaled_train.reshape(-1, 192, 1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "XVa9n-9fjMec"
},
"source": [
" y_preds_new_ = np.argmax(dnn_clf.predict(X_test), axis = -1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "yeD7AUGAjX40"
},
"source": [
"y_preds_new_"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ZXvN6LePKVf9",
"outputId": "29565869-8d48-426e-c5cc-ee02ca25a871"
},
"source": [
"len(labels)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"990"
]
},
"metadata": {
"tags": []
},
"execution_count": 51
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yEunYWb0KZVa",
"outputId": "73464ef7-284f-4ce9-c70d-dec64504301b"
},
"source": [
"len(y_preds_new_)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"990"
]
},
"metadata": {
"tags": []
},
"execution_count": 52
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "77CvCszQhHMJ"
},
"source": [
"cm = confusion_matrix( y_true = labels , y_pred = y_preds_new_ )"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Z8bQH3cIf18B"
},
"source": [
"def plot_confusion_matrix(cm, classes,\n",
" normalize=False,\n",
" title='Confusion matrix',\n",
" cmap=plt.cm.Blues):\n",
" \"\"\"\n",
" This function prints and plots the confusion matrix.\n",
" Normalization can be applied by setting `normalize=True`.\n",
" \"\"\"\n",
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
" plt.title(title)\n",
" plt.colorbar()\n",
" tick_marks = np.arange(len(classes))\n",
" plt.xticks(tick_marks, classes, rotation=45)\n",
" plt.yticks(tick_marks, classes)\n",
"\n",
" if normalize:\n",
" cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
" print(\"Normalized confusion matrix\")\n",
" else:\n",
" print('Confusion matrix, without normalization')\n",
"\n",
" print(cm)\n",
"\n",
" thresh = cm.max() / 2.\n",
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
" plt.text(j, i, cm[i, j],\n",
" horizontalalignment=\"center\",\n",
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
"\n",
" plt.tight_layout()\n",
" plt.ylabel('True label')\n",
" plt.xlabel('Predicted label')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "PPqkNFU-LHyy",
"outputId": "1d2641d0-9383-4a3b-8a7e-3d68231737fb"
},
"source": [
"print(classification_report(labels, y_preds_new_, target_names=classes))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Acer_Capillipes 0.91 1.00 0.95 10\n",
" Acer_Circinatum 1.00 1.00 1.00 10\n",
" Acer_Mono 0.83 1.00 0.91 10\n",
" Acer_Opalus 1.00 1.00 1.00 10\n",
" Acer_Palmatum 1.00 1.00 1.00 10\n",
" Acer_Pictum 1.00 0.90 0.95 10\n",
" Acer_Platanoids 1.00 1.00 1.00 10\n",
" Acer_Rubrum 0.91 1.00 0.95 10\n",
" Acer_Rufinerve 1.00 1.00 1.00 10\n",
" Acer_Saccharinum 1.00 0.80 0.89 10\n",
" Alnus_Cordata 1.00 1.00 1.00 10\n",
" Alnus_Maximowiczii 1.00 1.00 1.00 10\n",
" Alnus_Rubra 1.00 1.00 1.00 10\n",
" Alnus_Sieboldiana 1.00 1.00 1.00 10\n",
" Alnus_Viridis 1.00 1.00 1.00 10\n",
" Arundinaria_Simonii 1.00 1.00 1.00 10\n",
" Betula_Austrosinensis 1.00 1.00 1.00 10\n",
" Betula_Pendula 1.00 1.00 1.00 10\n",
" Callicarpa_Bodinieri 1.00 0.90 0.95 10\n",
" Castanea_Sativa 0.91 1.00 0.95 10\n",
" Celtis_Koraiensis 1.00 0.80 0.89 10\n",
" Cercis_Siliquastrum 0.91 1.00 0.95 10\n",
" Cornus_Chinensis 1.00 0.90 0.95 10\n",
" Cornus_Controversa 1.00 1.00 1.00 10\n",
" Cornus_Macrophylla 0.91 1.00 0.95 10\n",
" Cotinus_Coggygria 0.91 1.00 0.95 10\n",
" Crataegus_Monogyna 1.00 0.90 0.95 10\n",
" Cytisus_Battandieri 1.00 1.00 1.00 10\n",
" Eucalyptus_Glaucescens 0.91 1.00 0.95 10\n",
" Eucalyptus_Neglecta 1.00 0.90 0.95 10\n",
" Eucalyptus_Urnigera 1.00 1.00 1.00 10\n",
" Fagus_Sylvatica 1.00 1.00 1.00 10\n",
" Ginkgo_Biloba 1.00 1.00 1.00 10\n",
" Ilex_Aquifolium 1.00 1.00 1.00 10\n",
" Ilex_Cornuta 0.91 1.00 0.95 10\n",
" Liquidambar_Styraciflua 1.00 1.00 1.00 10\n",
" Liriodendron_Tulipifera 1.00 0.90 0.95 10\n",
" Lithocarpus_Cleistocarpus 1.00 1.00 1.00 10\n",
" Lithocarpus_Edulis 1.00 1.00 1.00 10\n",
" Magnolia_Heptapeta 1.00 1.00 1.00 10\n",
" Magnolia_Salicifolia 0.91 1.00 0.95 10\n",
" Morus_Nigra 1.00 1.00 1.00 10\n",
" Olea_Europaea 1.00 1.00 1.00 10\n",
" Phildelphus 1.00 1.00 1.00 10\n",
" Populus_Adenopoda 1.00 1.00 1.00 10\n",
" Populus_Grandidentata 1.00 1.00 1.00 10\n",
" Populus_Nigra 1.00 1.00 1.00 10\n",
" Prunus_Avium 1.00 1.00 1.00 10\n",
" Prunus_X_Shmittii 1.00 1.00 1.00 10\n",
" Pterocarya_Stenoptera 1.00 1.00 1.00 10\n",
" Quercus_Afares 1.00 1.00 1.00 10\n",
" Quercus_Agrifolia 1.00 0.70 0.82 10\n",
" Quercus_Alnifolia 1.00 1.00 1.00 10\n",
" Quercus_Brantii 0.91 1.00 0.95 10\n",
" Quercus_Canariensis 0.77 1.00 0.87 10\n",
" Quercus_Castaneifolia 1.00 0.90 0.95 10\n",
" Quercus_Cerris 1.00 1.00 1.00 10\n",
" Quercus_Chrysolepis 1.00 1.00 1.00 10\n",
" Quercus_Coccifera 1.00 1.00 1.00 10\n",
" Quercus_Coccinea 1.00 1.00 1.00 10\n",
" Quercus_Crassifolia 1.00 1.00 1.00 10\n",
" Quercus_Crassipes 1.00 1.00 1.00 10\n",
" Quercus_Dolicholepis 0.91 1.00 0.95 10\n",
" Quercus_Ellipsoidalis 1.00 1.00 1.00 10\n",
" Quercus_Greggii 1.00 1.00 1.00 10\n",
" Quercus_Hartwissiana 0.91 1.00 0.95 10\n",
" Quercus_Ilex 0.83 1.00 0.91 10\n",
" Quercus_Imbricaria 1.00 1.00 1.00 10\n",
" Quercus_Infectoria_sub 1.00 0.90 0.95 10\n",
" Quercus_Kewensis 1.00 1.00 1.00 10\n",
" Quercus_Nigra 1.00 1.00 1.00 10\n",
" Quercus_Palustris 1.00 1.00 1.00 10\n",
" Quercus_Phellos 1.00 1.00 1.00 10\n",
" Quercus_Phillyraeoides 1.00 0.90 0.95 10\n",
" Quercus_Pontica 0.77 1.00 0.87 10\n",
" Quercus_Pubescens 1.00 0.90 0.95 10\n",
" Quercus_Pyrenaica 1.00 1.00 1.00 10\n",
" Quercus_Rhysophylla 1.00 0.70 0.82 10\n",
" Quercus_Rubra 1.00 1.00 1.00 10\n",
" Quercus_Semecarpifolia 1.00 0.80 0.89 10\n",
" Quercus_Shumardii 1.00 1.00 1.00 10\n",
" Quercus_Suber 1.00 0.90 0.95 10\n",
" Quercus_Texana 1.00 1.00 1.00 10\n",
" Quercus_Trojana 1.00 1.00 1.00 10\n",
" Quercus_Variabilis 1.00 1.00 1.00 10\n",
" Quercus_Vulcanica 1.00 1.00 1.00 10\n",
" Quercus_x_Hispanica 1.00 1.00 1.00 10\n",
" Quercus_x_Turneri 1.00 0.90 0.95 10\n",
" Rhododendron_x_Russellianum 1.00 1.00 1.00 10\n",
" Salix_Fragilis 1.00 1.00 1.00 10\n",
" Salix_Intergra 1.00 1.00 1.00 10\n",
" Sorbus_Aria 1.00 1.00 1.00 10\n",
" Tilia_Oliveri 1.00 1.00 1.00 10\n",
" Tilia_Platyphyllos 1.00 1.00 1.00 10\n",
" Tilia_Tomentosa 0.91 1.00 0.95 10\n",
" Ulmus_Bergmanniana 1.00 0.90 0.95 10\n",
" Viburnum_Tinus 1.00 1.00 1.00 10\n",
"Viburnum_x_Rhytidophylloides 0.83 1.00 0.91 10\n",
" Zelkova_Serrata 1.00 1.00 1.00 10\n",
"\n",
" accuracy 0.97 990\n",
" macro avg 0.98 0.97 0.97 990\n",
" weighted avg 0.98 0.97 0.97 990\n",
"\n"
],
"name": "stdout"
}
]
}
]
}