{ "cells": [ { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import pandas as pd \n", "import numpy as np\n", "import nltk\n", "import string\n", "from sklearn import model_selection \n", "from sklearn.feature_extraction.text import CountVectorizer\n", "from sklearn.feature_extraction.text import TfidfTransformer\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.naive_bayes import MultinomialNB\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.svm import SVC\n", "from sklearn.neural_network import MLPClassifier\n", "from sklearn.metrics import classification_report , accuracy_score , confusion_matrix\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from sklearn.utils.multiclass import unique_labels" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " id age job marital education default balance housing \\\n", "0 0 58 management married tertiary no 2143 yes \n", "1 1 44 technician single secondary no 29 yes \n", "2 2 33 entrepreneur married secondary no 2 yes \n", "3 3 47 blue-collar married unknown no 1506 yes \n", "4 4 33 unknown single unknown no 1 no \n", "5 5 35 management married tertiary no 231 yes \n", "6 6 28 management single tertiary no 447 yes \n", "7 7 42 entrepreneur divorced tertiary yes 2 yes \n", "8 8 58 retired married primary no 121 yes \n", "9 9 43 technician single secondary no 593 yes \n", "10 10 41 admin. divorced secondary no 270 yes \n", "11 11 29 admin. single secondary no 390 yes \n", "12 12 53 technician married secondary no 6 yes \n", "13 13 58 technician married unknown no 71 yes \n", "14 14 57 services married secondary no 162 yes \n", "15 15 51 retired married primary no 229 yes \n", "16 16 45 admin. single unknown no 13 yes \n", "17 17 57 blue-collar married primary no 52 yes \n", "18 18 60 retired married primary no 60 yes \n", "19 19 33 services married secondary no 0 yes \n", "20 20 28 blue-collar married secondary no 723 yes \n", "21 21 56 management married tertiary no 779 yes \n", "22 22 32 blue-collar single primary no 23 yes \n", "23 23 25 services married secondary no 50 yes \n", "24 24 40 retired married primary no 0 yes \n", "25 25 44 admin. married secondary no -372 yes \n", "26 26 39 management single tertiary no 255 yes \n", "27 27 52 entrepreneur married secondary no 113 yes \n", "28 28 46 management single secondary no -246 yes \n", "29 29 36 technician single secondary no 265 yes \n", ".. ... ... ... ... ... ... ... ... \n", "470 470 44 services divorced secondary no 424 yes \n", "471 471 39 housemaid single primary no 109 yes \n", "472 472 46 blue-collar married unknown no 1044 yes \n", "473 473 39 blue-collar married secondary no 983 yes \n", "474 474 34 admin. married secondary no 869 no \n", "475 475 40 blue-collar married primary no 668 yes \n", "476 476 50 management married tertiary no 964 yes \n", "477 477 31 management single secondary no 301 yes \n", "478 478 37 admin. single secondary no 140 yes \n", "479 479 39 management single secondary no 1877 yes \n", "480 480 51 blue-collar married primary no 1127 yes \n", "481 481 41 technician married secondary no 871 yes \n", "482 482 41 technician married secondary no 767 yes \n", "483 483 43 blue-collar married secondary no 0 no \n", "484 484 30 services single secondary no 209 yes \n", "485 485 54 management divorced primary no 0 no \n", "486 486 43 blue-collar divorced secondary no 110 yes \n", "487 487 59 management divorced tertiary no -76 yes \n", "488 488 47 technician married unknown no 178 yes \n", "489 489 40 blue-collar married primary no -66 yes \n", "490 490 32 technician married secondary no 0 yes \n", "491 491 29 blue-collar married secondary no 1 yes \n", "492 492 36 blue-collar married secondary no 0 yes \n", "493 493 55 unemployed married tertiary no 5345 no \n", "494 494 30 blue-collar divorced secondary no -209 yes \n", "495 495 39 admin. single secondary no 0 yes \n", "496 496 39 blue-collar divorced secondary no 42 yes \n", "497 497 50 blue-collar divorced secondary no 41 yes \n", "498 498 44 blue-collar married secondary no -99 yes \n", "499 499 37 technician single secondary no 17 yes \n", "\n", " loan contact day month duration campaign pdays previous poutcome \\\n", "0 no unknown 5 may 261 1 -1 0 unknown \n", "1 no unknown 5 may 151 1 -1 0 unknown \n", "2 yes unknown 5 may 76 1 -1 0 unknown \n", "3 no unknown 5 may 92 1 -1 0 unknown \n", "4 no unknown 5 may 198 1 -1 0 unknown \n", "5 no unknown 5 may 139 1 -1 0 unknown \n", "6 yes unknown 5 may 217 1 -1 0 unknown \n", "7 no unknown 5 may 380 1 -1 0 unknown \n", "8 no unknown 5 may 50 1 -1 0 unknown \n", "9 no unknown 5 may 55 1 -1 0 unknown \n", "10 no unknown 5 may 222 1 -1 0 unknown \n", "11 no unknown 5 may 137 1 -1 0 unknown \n", "12 no unknown 5 may 517 1 -1 0 unknown \n", "13 no unknown 5 may 71 1 -1 0 unknown \n", "14 no unknown 5 may 174 1 -1 0 unknown \n", "15 no unknown 5 may 353 1 -1 0 unknown \n", "16 no unknown 5 may 98 1 -1 0 unknown \n", "17 no unknown 5 may 38 1 -1 0 unknown \n", "18 no unknown 5 may 219 1 -1 0 unknown \n", "19 no unknown 5 may 54 1 -1 0 unknown \n", "20 yes unknown 5 may 262 1 -1 0 unknown \n", "21 no unknown 5 may 164 1 -1 0 unknown \n", "22 yes unknown 5 may 160 1 -1 0 unknown \n", "23 no unknown 5 may 342 1 -1 0 unknown \n", "24 yes unknown 5 may 181 1 -1 0 unknown \n", "25 no unknown 5 may 172 1 -1 0 unknown \n", "26 no unknown 5 may 296 1 -1 0 unknown \n", "27 yes unknown 5 may 127 1 -1 0 unknown \n", "28 no unknown 5 may 255 2 -1 0 unknown \n", "29 yes unknown 5 may 348 1 -1 0 unknown \n", ".. ... ... ... ... ... ... ... ... ... \n", "470 no unknown 6 may 27 1 -1 0 unknown \n", "471 no unknown 6 may 699 3 -1 0 unknown \n", "472 no unknown 6 may 43 1 -1 0 unknown \n", "473 no unknown 6 may 97 1 -1 0 unknown \n", "474 no unknown 6 may 1677 1 -1 0 unknown \n", "475 no unknown 6 may 283 2 -1 0 unknown \n", "476 no unknown 6 may 323 1 -1 0 unknown \n", "477 no unknown 6 may 82 1 -1 0 unknown \n", "478 no unknown 6 may 310 1 -1 0 unknown \n", "479 no unknown 6 may 185 1 -1 0 unknown \n", "480 no unknown 6 may 47 1 -1 0 unknown \n", "481 no unknown 6 may 145 1 -1 0 unknown \n", "482 yes unknown 6 may 204 1 -1 0 unknown \n", "483 no unknown 6 may 187 1 -1 0 unknown \n", "484 no unknown 6 may 30 2 -1 0 unknown \n", "485 no unknown 6 may 472 1 -1 0 unknown \n", "486 yes unknown 6 may 448 1 -1 0 unknown \n", "487 yes unknown 6 may 264 1 -1 0 unknown \n", "488 no unknown 6 may 169 1 -1 0 unknown \n", "489 no unknown 6 may 288 1 -1 0 unknown \n", "490 no unknown 6 may 176 2 -1 0 unknown \n", "491 no unknown 6 may 215 1 -1 0 unknown \n", "492 no unknown 6 may 337 1 -1 0 unknown \n", "493 no unknown 6 may 278 1 -1 0 unknown \n", "494 no unknown 6 may 188 2 -1 0 unknown \n", "495 no unknown 6 may 174 2 -1 0 unknown \n", "496 no unknown 6 may 226 2 -1 0 unknown \n", "497 no unknown 6 may 190 1 -1 0 unknown \n", "498 no unknown 6 may 111 2 -1 0 unknown \n", "499 no unknown 6 may 164 1 -1 0 unknown \n", "\n", " y \n", "0 no \n", "1 no \n", "2 no \n", "3 no \n", "4 no \n", "5 no \n", "6 no \n", "7 no \n", "8 no \n", "9 no \n", "10 no \n", "11 no \n", "12 no \n", "13 no \n", "14 no \n", "15 no \n", "16 no \n", "17 no \n", "18 no \n", "19 no \n", "20 no \n", "21 no \n", "22 no \n", "23 no \n", "24 no \n", "25 no \n", "26 no \n", "27 no \n", "28 no \n", "29 no \n", ".. ... \n", "470 no \n", "471 no \n", "472 no \n", "473 no \n", "474 yes \n", "475 no \n", "476 no \n", "477 no \n", "478 no \n", "479 no \n", "480 no \n", "481 no \n", "482 no \n", "483 no \n", "484 no \n", "485 no \n", "486 no \n", "487 no \n", "488 no \n", "489 no \n", "490 no \n", "491 no \n", "492 no \n", "493 no \n", "494 no \n", "495 no \n", "496 no \n", "497 no \n", "498 no \n", "499 no \n", "\n", "[500 rows x 18 columns]\n" ] } ], "source": [ "# text preproprocessing\n", "filecsv = 'bankfull01.csv'\n", "teks = pd.read_csv(filecsv, header = 0, delimiter = ';', encoding ='utf-8')\n", "df = pd.DataFrame(teks)\n", "print(df)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " age job marital education default balance housing loan \\\n", "0 58 management married tertiary no 2143 yes no \n", "1 44 technician single secondary no 29 yes no \n", "2 33 entrepreneur married secondary no 2 yes yes \n", "3 47 blue-collar married unknown no 1506 yes no \n", "4 33 unknown single unknown no 1 no no \n", "5 35 management married tertiary no 231 yes no \n", "6 28 management single tertiary no 447 yes yes \n", "7 42 entrepreneur divorced tertiary yes 2 yes no \n", "8 58 retired married primary no 121 yes no \n", "9 43 technician single secondary no 593 yes no \n", "10 41 admin. divorced secondary no 270 yes no \n", "11 29 admin. single secondary no 390 yes no \n", "12 53 technician married secondary no 6 yes no \n", "13 58 technician married unknown no 71 yes no \n", "14 57 services married secondary no 162 yes no \n", "15 51 retired married primary no 229 yes no \n", "16 45 admin. single unknown no 13 yes no \n", "17 57 blue-collar married primary no 52 yes no \n", "18 60 retired married primary no 60 yes no \n", "19 33 services married secondary no 0 yes no \n", "20 28 blue-collar married secondary no 723 yes yes \n", "21 56 management married tertiary no 779 yes no \n", "22 32 blue-collar single primary no 23 yes yes \n", "23 25 services married secondary no 50 yes no \n", "24 40 retired married primary no 0 yes yes \n", "25 44 admin. married secondary no -372 yes no \n", "26 39 management single tertiary no 255 yes no \n", "27 52 entrepreneur married secondary no 113 yes yes \n", "28 46 management single secondary no -246 yes no \n", "29 36 technician single secondary no 265 yes yes \n", ".. ... ... ... ... ... ... ... ... \n", "470 44 services divorced secondary no 424 yes no \n", "471 39 housemaid single primary no 109 yes no \n", "472 46 blue-collar married unknown no 1044 yes no \n", "473 39 blue-collar married secondary no 983 yes no \n", "474 34 admin. married secondary no 869 no no \n", "475 40 blue-collar married primary no 668 yes no \n", "476 50 management married tertiary no 964 yes no \n", "477 31 management single secondary no 301 yes no \n", "478 37 admin. single secondary no 140 yes no \n", "479 39 management single secondary no 1877 yes no \n", "480 51 blue-collar married primary no 1127 yes no \n", "481 41 technician married secondary no 871 yes no \n", "482 41 technician married secondary no 767 yes yes \n", "483 43 blue-collar married secondary no 0 no no \n", "484 30 services single secondary no 209 yes no \n", "485 54 management divorced primary no 0 no no \n", "486 43 blue-collar divorced secondary no 110 yes yes \n", "487 59 management divorced tertiary no -76 yes yes \n", "488 47 technician married unknown no 178 yes no \n", "489 40 blue-collar married primary no -66 yes no \n", "490 32 technician married secondary no 0 yes no \n", "491 29 blue-collar married secondary no 1 yes no \n", "492 36 blue-collar married secondary no 0 yes no \n", "493 55 unemployed married tertiary no 5345 no no \n", "494 30 blue-collar divorced secondary no -209 yes no \n", "495 39 admin. single secondary no 0 yes no \n", "496 39 blue-collar divorced secondary no 42 yes no \n", "497 50 blue-collar divorced secondary no 41 yes no \n", "498 44 blue-collar married secondary no -99 yes no \n", "499 37 technician single secondary no 17 yes no \n", "\n", " contact day month duration campaign pdays previous poutcome \n", "0 unknown 5 may 261 1 -1 0 unknown \n", "1 unknown 5 may 151 1 -1 0 unknown \n", "2 unknown 5 may 76 1 -1 0 unknown \n", "3 unknown 5 may 92 1 -1 0 unknown \n", "4 unknown 5 may 198 1 -1 0 unknown \n", "5 unknown 5 may 139 1 -1 0 unknown \n", "6 unknown 5 may 217 1 -1 0 unknown \n", "7 unknown 5 may 380 1 -1 0 unknown \n", "8 unknown 5 may 50 1 -1 0 unknown \n", "9 unknown 5 may 55 1 -1 0 unknown \n", "10 unknown 5 may 222 1 -1 0 unknown \n", "11 unknown 5 may 137 1 -1 0 unknown \n", "12 unknown 5 may 517 1 -1 0 unknown \n", "13 unknown 5 may 71 1 -1 0 unknown \n", "14 unknown 5 may 174 1 -1 0 unknown \n", "15 unknown 5 may 353 1 -1 0 unknown \n", "16 unknown 5 may 98 1 -1 0 unknown \n", "17 unknown 5 may 38 1 -1 0 unknown \n", "18 unknown 5 may 219 1 -1 0 unknown \n", "19 unknown 5 may 54 1 -1 0 unknown \n", "20 unknown 5 may 262 1 -1 0 unknown \n", "21 unknown 5 may 164 1 -1 0 unknown \n", "22 unknown 5 may 160 1 -1 0 unknown \n", "23 unknown 5 may 342 1 -1 0 unknown \n", "24 unknown 5 may 181 1 -1 0 unknown \n", "25 unknown 5 may 172 1 -1 0 unknown \n", "26 unknown 5 may 296 1 -1 0 unknown \n", "27 unknown 5 may 127 1 -1 0 unknown \n", "28 unknown 5 may 255 2 -1 0 unknown \n", "29 unknown 5 may 348 1 -1 0 unknown \n", ".. ... ... ... ... ... ... ... ... \n", "470 unknown 6 may 27 1 -1 0 unknown \n", "471 unknown 6 may 699 3 -1 0 unknown \n", "472 unknown 6 may 43 1 -1 0 unknown \n", "473 unknown 6 may 97 1 -1 0 unknown \n", "474 unknown 6 may 1677 1 -1 0 unknown \n", "475 unknown 6 may 283 2 -1 0 unknown \n", "476 unknown 6 may 323 1 -1 0 unknown \n", "477 unknown 6 may 82 1 -1 0 unknown \n", "478 unknown 6 may 310 1 -1 0 unknown \n", "479 unknown 6 may 185 1 -1 0 unknown \n", "480 unknown 6 may 47 1 -1 0 unknown \n", "481 unknown 6 may 145 1 -1 0 unknown \n", "482 unknown 6 may 204 1 -1 0 unknown \n", "483 unknown 6 may 187 1 -1 0 unknown \n", "484 unknown 6 may 30 2 -1 0 unknown \n", "485 unknown 6 may 472 1 -1 0 unknown \n", "486 unknown 6 may 448 1 -1 0 unknown \n", "487 unknown 6 may 264 1 -1 0 unknown \n", "488 unknown 6 may 169 1 -1 0 unknown \n", "489 unknown 6 may 288 1 -1 0 unknown \n", "490 unknown 6 may 176 2 -1 0 unknown \n", "491 unknown 6 may 215 1 -1 0 unknown \n", "492 unknown 6 may 337 1 -1 0 unknown \n", "493 unknown 6 may 278 1 -1 0 unknown \n", "494 unknown 6 may 188 2 -1 0 unknown \n", "495 unknown 6 may 174 2 -1 0 unknown \n", "496 unknown 6 may 226 2 -1 0 unknown \n", "497 unknown 6 may 190 1 -1 0 unknown \n", "498 unknown 6 may 111 2 -1 0 unknown \n", "499 unknown 6 may 164 1 -1 0 unknown \n", "\n", "[500 rows x 16 columns]\n" ] } ], "source": [ "xTarget = df.drop(['id','y'],axis = 1)\n", "print(xTarget)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 no\n", "1 no\n", "2 no\n", "3 no\n", "4 no\n", "5 no\n", "6 no\n", "7 no\n", "8 no\n", "9 no\n", "10 no\n", "11 no\n", "12 no\n", "13 no\n", "14 no\n", "15 no\n", "16 no\n", "17 no\n", "18 no\n", "19 no\n", "20 no\n", "21 no\n", "22 no\n", "23 no\n", "24 no\n", "25 no\n", "26 no\n", "27 no\n", "28 no\n", "29 no\n", " ... \n", "470 no\n", "471 no\n", "472 no\n", "473 no\n", "474 yes\n", "475 no\n", "476 no\n", "477 no\n", "478 no\n", "479 no\n", "480 no\n", "481 no\n", "482 no\n", "483 no\n", "484 no\n", "485 no\n", "486 no\n", "487 no\n", "488 no\n", "489 no\n", "490 no\n", "491 no\n", "492 no\n", "493 no\n", "494 no\n", "495 no\n", "496 no\n", "497 no\n", "498 no\n", "499 no\n", "Name: y, Length: 500, dtype: object\n" ] } ], "source": [ "yTarget = df['y']\n", "print(yTarget)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [1]\n", " [0]\n", " [0]\n", " [1]\n", " [1]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [1]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [1]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [1]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [1]\n", " [0]\n", " [1]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [1]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [1]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [1]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]\n", " [0]]\n" ] } ], "source": [ "# #merubah yes / no menjadi angka 0 dan 1\n", "from sklearn.preprocessing import LabelBinarizer, OrdinalEncoder, OneHotEncoder\n", "encoder = LabelBinarizer()\n", "Y = encoder.fit_transform(yTarget)\n", "print(Y)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " (0, 36)\t1.0\n", " (0, 44)\t1.0\n", " (0, 53)\t1.0\n", " (0, 57)\t1.0\n", " (0, 59)\t1.0\n", " (0, 389)\t1.0\n", " (0, 411)\t1.0\n", " (0, 412)\t1.0\n", " (0, 414)\t1.0\n", " (0, 415)\t1.0\n", " (0, 417)\t1.0\n", " (0, 598)\t1.0\n", " (0, 742)\t1.0\n", " (0, 747)\t1.0\n", " (0, 748)\t1.0\n", " (0, 749)\t1.0\n", " (1, 22)\t1.0\n", " (1, 49)\t1.0\n", " (1, 54)\t1.0\n", " (1, 56)\t1.0\n", " (1, 59)\t1.0\n", " (1, 123)\t1.0\n", " (1, 411)\t1.0\n", " (1, 412)\t1.0\n", " (1, 414)\t1.0\n", " :\t:\n", " (498, 412)\t1.0\n", " (498, 414)\t1.0\n", " (498, 416)\t1.0\n", " (498, 417)\t1.0\n", " (498, 475)\t1.0\n", " (498, 743)\t1.0\n", " (498, 747)\t1.0\n", " (498, 748)\t1.0\n", " (498, 749)\t1.0\n", " (499, 15)\t1.0\n", " (499, 49)\t1.0\n", " (499, 54)\t1.0\n", " (499, 56)\t1.0\n", " (499, 59)\t1.0\n", " (499, 112)\t1.0\n", " (499, 411)\t1.0\n", " (499, 412)\t1.0\n", " (499, 414)\t1.0\n", " (499, 416)\t1.0\n", " (499, 417)\t1.0\n", " (499, 517)\t1.0\n", " (499, 742)\t1.0\n", " (499, 747)\t1.0\n", " (499, 748)\t1.0\n", " (499, 749)\t1.0\n" ] } ], "source": [ "# #mengkodekan semua value menjadi ordinal\n", "tfidf_transformer = OneHotEncoder()\n", "X = tfidf_transformer.fit_transform(xTarget)\n", "print(X)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(350, 750)\n", "(350, 1)\n", "(150, 750)\n", "(150, 1)\n" ] } ], "source": [ "X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)\n", "print(X_train.shape)\n", "print(y_train.shape)\n", "print(X_test.shape)\n", "print(y_test.shape)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\PA AGUS\\AppData\\Roaming\\Python\\Python37\\site-packages\\sklearn\\neural_network\\multilayer_perceptron.py:566: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", " % self.max_iter, ConvergenceWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "(150, 1)\n", " Classifier prediction accuracy\n", "0 NB MultinomialNB(alpha=1.0, class_prior=None, fit... 0.986667\n", "1 K-NN KNeighborsClassifier(algorithm='auto', leaf_si... 0.986667\n", "2 RF (DecisionTreeClassifier(class_weight=None, cri... 0.986667\n", "3 DT DecisionTreeClassifier(class_weight=None, crit... 0.980000\n", "4 MLP MLPClassifier(activation='relu', alpha=0.0001,... 0.986667\n", "5 SVM SVC(C=1.0, cache_size=200, class_weight=None, ... 0.986667\n" ] } ], "source": [ "NaiveBayes \t= MultinomialNB().fit(X_train,np.ravel(y_train,order='C'))\n", "Knn \t= KNeighborsClassifier(n_neighbors = 3).fit(X_train,np.ravel(y_train,order='C'))\n", "RandomForest = RandomForestClassifier(n_estimators=50, max_depth=3).fit(X_train,np.ravel(y_train,order='C'))\n", "DTree \t= DecisionTreeClassifier().fit(X_train,np.ravel(y_train,order='C'))\n", "MultiLP = MLPClassifier(max_iter= 100).fit(X_train,np.ravel(y_train,order='C'))\n", "SuppVM \t= SVC(gamma='scale', decision_function_shape='ovo', kernel = 'linear').fit(X_train,np.ravel(y_train,order='C'))\n", "\n", "models = [\n", " NaiveBayes,\n", " Knn, \n", " RandomForest, \n", " DTree, \n", " MultiLP, \n", " SuppVM, \n", "] \n", "dlist = [\n", " 'NB',\n", " 'K-NN', \n", " 'RF', \n", " 'DT', \n", " 'MLP', \n", " 'SVM', \n", "]\n", "\n", "i = 0\n", "print(y_test.shape)\n", "entries = []\n", "for model in models:\n", " prediction = model.predict(X_test)\n", " accuracies = accuracy_score(y_test, prediction)\n", " nameS = dlist[i]\n", " entries.append((nameS, model, accuracies))\n", " i = i + 1\n", "\n", "cv_df = pd.DataFrame(entries, columns=['Classifier','prediction','accuracy'])\n", "cv_df.to_csv('akurasiBank.csv')\n", "print(cv_df)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[148 0]\n", " [ 2 0]]\n", "accuracy\n", "0.980000 0.980000\n", "0.986667 0.986667\n", "Name: accuracy, dtype: float64\n", "Confusion matrix, without normalization\n", "[[148 0]\n", " [ 2 0]]\n", "Normalized confusion matrix\n", "[[1. 0.]\n", " [1. 0.]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cv_df = pd.DataFrame(entries, columns=['Classifier','prediction','accuracy'])\n", "#cv_df.to_csv('../bankClass/akurasiBank.csv')\n", "#print(cv_df)\n", "\n", "\n", "print(confusion_matrix(y_test, prediction))\n", "\n", "\n", "sns.boxplot(x='Classifier', y='accuracy', data=cv_df)\n", "sns.stripplot(x='Classifier', y='accuracy', data=cv_df, \n", " size=8, jitter=True, edgecolor=\"gray\", linewidth=2)\n", "\n", "print(cv_df.groupby('accuracy').accuracy.mean())\n", "\n", "def plot_confusion_matrix(y_true, y_pred, classes,\n", " normalize=False,\n", " title=None,\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", " if not title:\n", " if normalize:\n", " title = 'Normalized confusion matrix'\n", " else:\n", " title = 'Confusion matrix, without normalization'\n", "\n", " # Compute confusion matrix\n", " cm = confusion_matrix(y_true, y_pred)\n", " # Only use the labels that appear in the data\n", " classes = classes[unique_labels(y_true, y_pred)]\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", " fig, ax = plt.subplots()\n", " im = ax.imshow(cm, interpolation='nearest', cmap=cmap)\n", " ax.figure.colorbar(im, ax=ax)\n", " # We want to show all ticks...\n", " ax.set(xticks=np.arange(cm.shape[1]),\n", " yticks=np.arange(cm.shape[0]),\n", " # ... and label them with the respective list entries\n", " xticklabels=classes, yticklabels=classes,\n", " title=title,\n", " ylabel='True label',\n", " xlabel='Predicted label')\n", "\n", " # Rotate the tick labels and set their alignment.\n", " plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\",\n", " rotation_mode=\"anchor\")\n", "\n", " # Loop over data dimensions and create text annotations.\n", " fmt = '.2f' if normalize else 'd'\n", " thresh = cm.max() / 2.\n", " for i in range(cm.shape[0]):\n", " for j in range(cm.shape[1]):\n", " ax.text(j, i, format(cm[i, j], fmt),\n", " ha=\"center\", va=\"center\",\n", " color=\"white\" if cm[i, j] > thresh else \"black\")\n", " fig.tight_layout()\n", " return ax\n", "\n", "\n", "\n", "class_names = yTarget\n", "np.set_printoptions(precision=2)\n", "\n", "# Plot non-normalized confusion matrix\n", "plot_confusion_matrix(y_test, prediction, classes=class_names,\n", " title='Confusion matrix, without normalization')\n", "\n", "# Plot normalized confusion matrix\n", "plot_confusion_matrix(y_test, prediction, classes=class_names, normalize=True,\n", " title='Normalized confusion matrix')\n", "plt.show()\n" ] }, { "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }