From 0bd01afcec0b8120a4f40f61c50892e1d0ab1084 Mon Sep 17 00:00:00 2001 From: yl1r22 <yl1r22@soton.ac.uk> Date: Tue, 6 Jun 2023 17:07:52 +0000 Subject: [PATCH] Upload New File --- AI_Part1.ipynb | 326 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100644 AI_Part1.ipynb diff --git a/AI_Part1.ipynb b/AI_Part1.ipynb new file mode 100644 index 0000000..2ce6eb2 --- /dev/null +++ b/AI_Part1.ipynb @@ -0,0 +1,326 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "6064e0b1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 1 2 3 4 5 \\\n", + "0 70.399324 127673.0908 -49.572308 127648.0176 -169.578319 127723.2374 \n", + "\n", + " 6 7 8 9 ... 119 120 121 122 123 \\\n", + "0 65.689611 605.91099 -57.003571 626.78553 ... 0 0 0 0 0 \n", + "\n", + " 124 125 126 127 128 \n", + "0 0 0 0 0 0 \n", + "\n", + "[1 rows x 129 columns]\n" + ] + } + ], + "source": [ + "#Import scikit-learn dataset library\n", + "#from sklearn import datasets\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn import svm, metrics\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from joblib import dump\n", + "from sklearn.metrics import confusion_matrix, f1_score\n", + "from sklearn.metrics import roc_curve, auc\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "#Read training datasets\n", + "df = pd.read_csv('H:\\AI classification\\TrainingDataBinary.csv', header=None)\n", + "\n", + "# Print the head of csv document to check\n", + "print(df.head(1))\n", + "\n", + "# The first 128 columns are features\n", + "df_feature = df.iloc[:, :128]\n", + "\n", + "# the 129th column is labels\n", + "df_label = df.iloc[:, 128]\n", + "\n", + "# Split dataset into training set and test set\n", + "X_train, X_test, y_train, y_test = train_test_split(df_feature, df_label, test_size=0.2) # 80% training and 20% test\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "cdc65331", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.9741666666666666\n" + ] + } + ], + "source": [ + "# Create a Randomforest Classifier \n", + "clf1 = RandomForestClassifier(n_estimators=100, max_features=78) \n", + "\n", + "# Train the model using the training sets\n", + "clf1.fit(X_train, y_train)\n", + "\n", + "# #Predict the response for test dataset\n", + "y_pred1 = clf1.predict(X_test)\n", + "\n", + "print(\"Accuracy:\",metrics.accuracy_score(y_test, y_pred1))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "12a28ae3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scores [0.971875 0.97291667 0.96666667 0.978125 0.97916667]\n", + "Mean Scores 0.9737500000000001\n" + ] + } + ], + "source": [ + "# Using Cross-validation to evaluate classifier\n", + "scores1 = cross_val_score(clf1, X_train, y_train, cv=5)\n", + "\n", + "#Print model's Scores\n", + "print(\"Scores\", scores1)\n", + "print(\"Mean Scores\", np.mean(scores1))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "16ad1a95", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['H:/AI classification/RFC_part1.pkl']" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Dump the model\n", + "dump(clf1, 'H:/AI classification/RFC_part1.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "06c58b04", + "metadata": {}, + "outputs": [], + "source": [ + "# Load testing dataset\n", + "test_data=pd.read_csv('H:\\AI classification\\TestingDataBinary.csv', header=None)\n", + "\n", + "# Predict Testing dataset\n", + "predictions = clf1.predict(test_data) # Using clf1 model to predict\n", + "\n", + "# Convert predictions into dataframe format\n", + "predictions_df = pd.DataFrame(predictions) \n", + "\n", + "#Write the predictions to testing dataset\n", + "result = pd.concat([test_data,predictions_df], axis=1)\n", + "\n", + "#Output a csv document\n", + "result.to_csv('H:/AI classification/test_pre1.csv', index = False, header = False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c089a3e7", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1\n", + " 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n" + ] + } + ], + "source": [ + "# print precdictions\n", + "print(predictions)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "47105ba9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion Matrix:\n", + "[[591 14]\n", + " [ 17 578]]\n" + ] + } + ], + "source": [ + "# Create and print confusion matrix\n", + "conf_mat = confusion_matrix(y_test, y_pred1)\n", + "print(\"Confusion Matrix:\")\n", + "print(conf_mat)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e71eff12", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "F1 Score: 0.9738837405223252\n" + ] + } + ], + "source": [ + "# Calculating f1 score\n", + "f1 = f1_score(y_test, y_pred1)\n", + "print(\"F1 Score:\", f1)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "57ae5f66", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 720x504 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Plotting confusion matixs\n", + "plt.figure(figsize=(10, 7))\n", + "sns.heatmap(conf_mat, annot=True, fmt='d', cmap='YlGnBu')\n", + "plt.xlabel('Predicted')\n", + "plt.ylabel('Actual')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "fef4fa06", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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6tWrV6CxZWRknPcynnnmGYYNG1ao6zwbtWrVYubMmdx8881epxs0aBDTpk1j27ZtbNu2jc8//xyAGTNmULFiRRITExkxYgSjRo0CoHLlylStWpWlS5d6W2yBsaIn19q1v5GQMJchQ1ozYEAzAB54oEOAozLFxj/9VFcx0ven/9u3b8/69U4z9++88w4dOnTgqquuAqBMmTJMnDiRzp07M2TIEJ5//nkeeugh4uLiAAgLC2Pw4MFnLDMlJYVhw4axatUqRITHHnuM66+/nnLlypGSkgLA+++/z9y5c5k5cya33XYblSpVYs2aNTRv3pyPPvqItWvXUqFCBQAaNGjA0qVLCQkJISEhgZ07dwLw0ksv0aHDH/8fjx49yvr162nWzPl/XbFiBffccw+pqalERkby73//m0aNGjFz5kzmzZtHWloax44d45NPPmHYsGFs2LCBjIwMxowZQ79+/dixYwcDBgzg2LFjAEycOJHLLrvM5/2bmzp16gAQEpL3OfmePXs4cuQI7du3B+DWW29l9uzZ9OrVizlz5jBmzBgA/vSnPzF06FBUFRHh2muv5e233z5jv/hDiU8UR4+e4LHHFjJhwnKyspQTJzL5y1+aWiWkKVYyMzP56quvuOOOOwCn2OnSSy/9wzT169cnJSWFI0eOsHHjRkaOHJnvcp988kmio6PZsGEDAIcOHcp3nq1bt7JgwQJCQ0PJysrio48+4vbbb2f58uXUqVOHKlWqcPPNNzNixAguv/xydu7cSY8ePdi8efMflrNq1SqaNGmSPRwXF8fixYsJCwtjwYIFjB49mg8++ACA7777jvXr11OpUiVGjx5Nly5deO211zh8+DBt2rShW7duXHDBBXz55ZdERESwbds2brrpJlatWnVG/B07duTo0aNnfP/iiy/SrVu3fLc/p927d1OjRo3s4Ro1arB79+7scTVr1gScZB0dHc2BAweIjY2lVatWPPzww2e9vnNRYhOFqjJ79haGD/+cpKQjhIQId9/dlieeuNKShCl4Z3HmX5BSU1Np3rw5O3bs4NJLL6V79+4A2WeluTmbv/8FCxYwa9as7OGKFSvmO88NN9xAaKjTF0v//v154oknuP3225k1axb9+/fPXu6mTZuy5zly5AhHjx4lKioq+7s9e/ZQuXLl7OHk5GT++te/sm3bNkSE9PT07HHdu3enUiWn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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#ROC curve plotting\n", + "#Calculate predicted scores, put positives into 1D array\n", + "y_score = clf1.predict_proba(X_test)\n", + "y_score_positive = y_score[:, 1]\n", + "\n", + "# y_test is the true label,y_score_positive is predicted score \n", + "fpr, tpr, _ = roc_curve(y_test, y_score_positive)\n", + "roc_auc = auc(fpr, tpr)\n", + "\n", + "#plotting the curve\n", + "plt.figure()\n", + "plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)\n", + "plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n", + "plt.xlim([0.0, 1.0])\n", + "plt.ylim([0.0, 1.05])\n", + "plt.xlabel('False Positive Rate')\n", + "plt.ylabel('True Positive Rate')\n", + "plt.title('Receiver Operating Characteristic')\n", + "plt.legend(loc=\"lower right\")\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e4a85cd9", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab