diff --git a/Assignment Colab/.ipynb_checkpoints/Fezile Dlamini (2)-checkpoint.ipynb b/Assignment Colab/.ipynb_checkpoints/Fezile Dlamini (2)-checkpoint.ipynb new file mode 100644 index 0000000..8c8fc2d --- /dev/null +++ b/Assignment Colab/.ipynb_checkpoints/Fezile Dlamini (2)-checkpoint.ipynb @@ -0,0 +1,3695 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " Whenever you see these signs below, understand that you need to do more:\n", + " \n", + " ## ??\n", + "
" + ] + }, + { + "cell_type": "raw", + "metadata": { + "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", + "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5" + }, + "source": [ + "# This Python 3 environment comes with many helpful analytics libraries installed\n", + "# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n", + "# For example, here's several helpful packages to load in \n", + "\n", + "import numpy as np # linear algebra\n", + "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", + "\n", + "# Input data files are available in the \"../input/\" directory.\n", + "# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n", + "\n", + "import os\n", + "for dirname, _, filenames in os.walk('/kaggle/input'):\n", + " for filename in filenames:\n", + " print(os.path.join(dirname, filename))\n", + "\n", + "# Any results you write to the current directory are saved as output." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importing Libraries\n", + "\n", + "
\n", + "\n", + "## ?? Your importing is causing errors:\n", + "\n", + "You import pandas without pd, but later you use the alias pd. Why?\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0", + "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a" + }, + "outputs": [], + "source": [ + "###Importing libraries\n", + "import pandas\n", + "import scipy\n", + "import numpy\n", + "import matplotlib\n", + "import sklearn\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading some libraries\n", + "### These are some of the libraries I think I will need\n", + "\n", + "
\n", + " \n", + " #### I think your notes below would look better in markdown, if you intend to write long sentences\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import read_csv #for reading in csv files\n", + "from pandas.plotting import scatter_matrix #for showing how one variable is affected by another\n", + "from matplotlib import pyplot #for plotting graphs\n", + "from sklearn.model_selection import train_test_split # for splitting my data into train and test\n", + "from sklearn.model_selection import cross_val_score #to estimate the skill of a machine learning model on unseen data\n", + "from sklearn.model_selection import StratifiedKFold #he folds are selected so that the mean response value is approximately equal in all the folds. In the case of a dichotomous classification, this means that each fold contains roughly the same proportions of the two types of class labels\n", + "from sklearn.metrics import classification_report #Visual classification reports are used to compare classification models to select models that are “redder”, e.g. have stronger classification metrics or that are more balanced.\n", + "from sklearn.metrics import confusion_matrix #A confusion matrix is a table that is often used to describe the performance of a classification model (or “classifier”) on a set of test data for which the true values are known. It allows the visualization of the performance of an algorithm.\n", + "from sklearn.metrics import accuracy_score #It is the ratio of number of correct predictions to the total number of input samples\n", + "from sklearn.linear_model import LogisticRegression #an algorithm for classification\n", + "from sklearn.tree import DecisionTreeClassifier #create a model that predicts the value of a target variable by learning simple decision rules inferred from the data features.\n", + "from sklearn.neighbors import KNeighborsClassifier #for classification\n", + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis #used for modeling differences in groups i.e. separating two or more classes\n", + "from sklearn.naive_bayes import GaussianNB #an algorithm that estimates the mean and the standard deviation from your training data,\n", + "from sklearn.svm import SVC #an algorithm that creates a line or a hyperplane which separates the data into classes\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.linear_model import SGDClassifier\n", + "from sklearn.neighbors import NearestCentroid\n", + "from sklearn.neural_network import MLPClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "#this suprreses unnecesary warnings from my output\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading My Dataset\n", + "\n", + "##### I am going to first use my training dataset, then the test dataset last." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FULL_ChargeFULL_AcidicMolPercFULL_AURR980107FULL_DAYM780201FULL_GEOR030101FULL_OOBM850104NT_EFC195AS_MeanAmphiMomentAS_DAYM780201AS_FUKS010112CT_RACS820104CLASS
05.00.0000.95174.8420.975-3.66300.28273.4445.6611.0411
14.05.4050.93171.5950.957-4.01110.60068.2226.5371.4531
25.55.4050.87373.5950.961-2.51200.59369.4444.9341.7221
35.04.1670.89566.2500.999-1.36200.61467.2224.3161.3821
47.58.5370.93264.7200.979-2.09100.61672.9444.5401.5391
55.07.6921.03078.9490.976-3.09110.51178.7785.9921.0911
63.06.8970.93078.5860.957-3.54410.38578.2226.2841.4671
72.05.8820.86876.5880.949-5.83200.15476.5886.4791.0861
87.02.6320.85760.4471.012-0.29200.18864.3333.8491.9251
99.00.0000.91165.8081.049-3.88800.36163.2226.3271.2161
102.03.4480.99171.1720.990-3.71200.51076.3895.4021.2851
112.50.0000.96060.5790.998-1.36100.16361.6675.6271.0551
123.00.0000.84870.8750.967-3.60310.26371.6116.8041.0291
133.07.1430.88571.3570.955-4.33010.23272.7786.7261.4451
142.57.6920.95360.7691.021-3.64100.40260.7697.1121.0281
156.04.3480.84267.8700.980-1.43200.18765.1675.2381.4381
162.00.0000.83873.8420.990-4.92800.53675.6676.9961.0711
174.00.0000.89064.0830.993-4.97700.82665.9446.0381.4421
184.511.1111.03277.1851.020-0.69401.10078.4446.1411.3341
192.04.1670.92568.6670.997-3.12701.21066.9446.1491.1651
202.06.6670.95568.2330.961-3.32701.30473.5006.6041.3921
213.010.3451.07272.0000.974-4.70401.72661.0565.7220.8901
223.52.7030.98672.9190.967-3.62811.71770.8336.6691.4451
231.00.0000.84552.7691.037-4.65802.83452.7697.4261.0241
241.00.0000.83863.2311.048-4.06002.98063.2316.9421.1321
255.54.3480.96058.9130.994-4.75602.13863.4447.5460.9791
266.50.0000.94163.9171.030-3.42102.43562.0566.8011.2101
271.05.5560.88074.8330.977-3.87812.04474.8336.6441.1431
286.50.0000.97366.5000.995-4.23402.70469.4445.6731.1431
297.58.3330.93669.3750.989-1.76502.74365.8895.2421.5591
.......................................
3008-6.020.0001.07383.6861.000-1.426015.45281.7226.5661.0930
3009-1.022.5001.09977.7001.001-0.214015.62578.3335.7471.1130
30101.012.5000.96379.7080.980-1.255015.50275.5565.5581.0360
30110.05.2630.95773.0790.991-1.528015.67670.5565.7231.0790
3012-3.019.6081.14483.4121.015-1.029015.81375.1116.3781.1680
3013-1.012.2450.99176.1220.985-1.688015.77478.2786.3741.1530
3014-1.016.6671.13880.2500.993-0.350023.50280.2505.3251.2070
30152.010.8110.94667.5140.985-2.240015.97465.9445.1691.1740
3016-1.08.3330.94271.0001.017-1.488023.55071.0005.0171.3910
30170.010.2561.00980.0771.003-1.074015.78180.1676.1491.1070
30180.018.7501.18188.2500.998-1.314017.66688.2506.3831.1330
3019-0.516.6671.06177.7291.000-1.155015.83880.1116.1381.0380
30200.511.4291.05977.6571.008-0.905015.86774.1675.5231.0880
30211.011.5381.01578.0381.037-0.200016.20979.9445.2671.0440
30223.00.0000.95866.7691.036-0.173022.47766.7696.0681.3790
30232.012.0001.00475.8671.001-1.416016.44474.1115.6111.1620
30243.520.0001.01573.0500.991-2.797016.49574.9446.6061.1410
30252.510.7140.93378.0710.966-2.887016.51382.0565.7321.1140
30260.50.0000.86081.5450.995-0.618026.93181.5455.1201.2050
30279.07.5470.92677.2830.998-3.418016.51778.1115.4511.1810
3028-2.018.7501.28979.9381.0281.094018.11979.9386.2411.0600
30294.514.2861.05869.1430.995-1.085020.62569.1435.7691.2000
30302.012.9630.99972.8150.985-3.446016.25665.7226.3781.3400
30310.017.0211.04576.2340.993-2.268016.36577.2785.8211.1160
30320.016.6671.08182.9171.001-2.073024.49782.9175.6401.1850
30331.05.2630.94567.9471.006-2.151016.70668.6115.5981.1440
3034-6.521.6671.13375.4331.015-1.675016.89773.2786.1941.6390
3035-1.512.5001.09176.5420.991-0.918016.91882.1115.8891.1310
30362.05.0000.84973.7501.017-2.722017.13174.7226.0551.2700
3037-1.015.7891.06666.1580.998-2.080017.15167.1115.8531.1360
\n", + "

3038 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 FULL_DAYM780201 \\\n", + "0 5.0 0.000 0.951 74.842 \n", + "1 4.0 5.405 0.931 71.595 \n", + "2 5.5 5.405 0.873 73.595 \n", + "3 5.0 4.167 0.895 66.250 \n", + "4 7.5 8.537 0.932 64.720 \n", + "5 5.0 7.692 1.030 78.949 \n", + "6 3.0 6.897 0.930 78.586 \n", + "7 2.0 5.882 0.868 76.588 \n", + "8 7.0 2.632 0.857 60.447 \n", + "9 9.0 0.000 0.911 65.808 \n", + "10 2.0 3.448 0.991 71.172 \n", + "11 2.5 0.000 0.960 60.579 \n", + "12 3.0 0.000 0.848 70.875 \n", + "13 3.0 7.143 0.885 71.357 \n", + "14 2.5 7.692 0.953 60.769 \n", + "15 6.0 4.348 0.842 67.870 \n", + "16 2.0 0.000 0.838 73.842 \n", + "17 4.0 0.000 0.890 64.083 \n", + "18 4.5 11.111 1.032 77.185 \n", + "19 2.0 4.167 0.925 68.667 \n", + "20 2.0 6.667 0.955 68.233 \n", + "21 3.0 10.345 1.072 72.000 \n", + "22 3.5 2.703 0.986 72.919 \n", + "23 1.0 0.000 0.845 52.769 \n", + "24 1.0 0.000 0.838 63.231 \n", + "25 5.5 4.348 0.960 58.913 \n", + "26 6.5 0.000 0.941 63.917 \n", + "27 1.0 5.556 0.880 74.833 \n", + "28 6.5 0.000 0.973 66.500 \n", + "29 7.5 8.333 0.936 69.375 \n", + "... ... ... ... ... \n", + "3008 -6.0 20.000 1.073 83.686 \n", + "3009 -1.0 22.500 1.099 77.700 \n", + "3010 1.0 12.500 0.963 79.708 \n", + "3011 0.0 5.263 0.957 73.079 \n", + "3012 -3.0 19.608 1.144 83.412 \n", + "3013 -1.0 12.245 0.991 76.122 \n", + "3014 -1.0 16.667 1.138 80.250 \n", + "3015 2.0 10.811 0.946 67.514 \n", + "3016 -1.0 8.333 0.942 71.000 \n", + "3017 0.0 10.256 1.009 80.077 \n", + "3018 0.0 18.750 1.181 88.250 \n", + "3019 -0.5 16.667 1.061 77.729 \n", + "3020 0.5 11.429 1.059 77.657 \n", + "3021 1.0 11.538 1.015 78.038 \n", + "3022 3.0 0.000 0.958 66.769 \n", + "3023 2.0 12.000 1.004 75.867 \n", + "3024 3.5 20.000 1.015 73.050 \n", + "3025 2.5 10.714 0.933 78.071 \n", + "3026 0.5 0.000 0.860 81.545 \n", + "3027 9.0 7.547 0.926 77.283 \n", + "3028 -2.0 18.750 1.289 79.938 \n", + "3029 4.5 14.286 1.058 69.143 \n", + "3030 2.0 12.963 0.999 72.815 \n", + "3031 0.0 17.021 1.045 76.234 \n", + "3032 0.0 16.667 1.081 82.917 \n", + "3033 1.0 5.263 0.945 67.947 \n", + "3034 -6.5 21.667 1.133 75.433 \n", + "3035 -1.5 12.500 1.091 76.542 \n", + "3036 2.0 5.000 0.849 73.750 \n", + "3037 -1.0 15.789 1.066 66.158 \n", + "\n", + " FULL_GEOR030101 FULL_OOBM850104 NT_EFC195 AS_MeanAmphiMoment \\\n", + "0 0.975 -3.663 0 0.282 \n", + "1 0.957 -4.011 1 0.600 \n", + "2 0.961 -2.512 0 0.593 \n", + "3 0.999 -1.362 0 0.614 \n", + "4 0.979 -2.091 0 0.616 \n", + "5 0.976 -3.091 1 0.511 \n", + "6 0.957 -3.544 1 0.385 \n", + "7 0.949 -5.832 0 0.154 \n", + "8 1.012 -0.292 0 0.188 \n", + "9 1.049 -3.888 0 0.361 \n", + "10 0.990 -3.712 0 0.510 \n", + "11 0.998 -1.361 0 0.163 \n", + "12 0.967 -3.603 1 0.263 \n", + "13 0.955 -4.330 1 0.232 \n", + "14 1.021 -3.641 0 0.402 \n", + "15 0.980 -1.432 0 0.187 \n", + "16 0.990 -4.928 0 0.536 \n", + "17 0.993 -4.977 0 0.826 \n", + "18 1.020 -0.694 0 1.100 \n", + "19 0.997 -3.127 0 1.210 \n", + "20 0.961 -3.327 0 1.304 \n", + "21 0.974 -4.704 0 1.726 \n", + "22 0.967 -3.628 1 1.717 \n", + "23 1.037 -4.658 0 2.834 \n", + "24 1.048 -4.060 0 2.980 \n", + "25 0.994 -4.756 0 2.138 \n", + "26 1.030 -3.421 0 2.435 \n", + "27 0.977 -3.878 1 2.044 \n", + "28 0.995 -4.234 0 2.704 \n", + "29 0.989 -1.765 0 2.743 \n", + "... ... ... ... ... \n", + "3008 1.000 -1.426 0 15.452 \n", + "3009 1.001 -0.214 0 15.625 \n", + "3010 0.980 -1.255 0 15.502 \n", + "3011 0.991 -1.528 0 15.676 \n", + "3012 1.015 -1.029 0 15.813 \n", + "3013 0.985 -1.688 0 15.774 \n", + "3014 0.993 -0.350 0 23.502 \n", + "3015 0.985 -2.240 0 15.974 \n", + "3016 1.017 -1.488 0 23.550 \n", + "3017 1.003 -1.074 0 15.781 \n", + "3018 0.998 -1.314 0 17.666 \n", + "3019 1.000 -1.155 0 15.838 \n", + "3020 1.008 -0.905 0 15.867 \n", + "3021 1.037 -0.200 0 16.209 \n", + "3022 1.036 -0.173 0 22.477 \n", + "3023 1.001 -1.416 0 16.444 \n", + "3024 0.991 -2.797 0 16.495 \n", + "3025 0.966 -2.887 0 16.513 \n", + "3026 0.995 -0.618 0 26.931 \n", + "3027 0.998 -3.418 0 16.517 \n", + "3028 1.028 1.094 0 18.119 \n", + "3029 0.995 -1.085 0 20.625 \n", + "3030 0.985 -3.446 0 16.256 \n", + "3031 0.993 -2.268 0 16.365 \n", + "3032 1.001 -2.073 0 24.497 \n", + "3033 1.006 -2.151 0 16.706 \n", + "3034 1.015 -1.675 0 16.897 \n", + "3035 0.991 -0.918 0 16.918 \n", + "3036 1.017 -2.722 0 17.131 \n", + "3037 0.998 -2.080 0 17.151 \n", + "\n", + " AS_DAYM780201 AS_FUKS010112 CT_RACS820104 CLASS \n", + "0 73.444 5.661 1.041 1 \n", + "1 68.222 6.537 1.453 1 \n", + "2 69.444 4.934 1.722 1 \n", + "3 67.222 4.316 1.382 1 \n", + "4 72.944 4.540 1.539 1 \n", + "5 78.778 5.992 1.091 1 \n", + "6 78.222 6.284 1.467 1 \n", + "7 76.588 6.479 1.086 1 \n", + "8 64.333 3.849 1.925 1 \n", + "9 63.222 6.327 1.216 1 \n", + "10 76.389 5.402 1.285 1 \n", + "11 61.667 5.627 1.055 1 \n", + "12 71.611 6.804 1.029 1 \n", + "13 72.778 6.726 1.445 1 \n", + "14 60.769 7.112 1.028 1 \n", + "15 65.167 5.238 1.438 1 \n", + "16 75.667 6.996 1.071 1 \n", + "17 65.944 6.038 1.442 1 \n", + "18 78.444 6.141 1.334 1 \n", + "19 66.944 6.149 1.165 1 \n", + "20 73.500 6.604 1.392 1 \n", + "21 61.056 5.722 0.890 1 \n", + "22 70.833 6.669 1.445 1 \n", + "23 52.769 7.426 1.024 1 \n", + "24 63.231 6.942 1.132 1 \n", + "25 63.444 7.546 0.979 1 \n", + "26 62.056 6.801 1.210 1 \n", + "27 74.833 6.644 1.143 1 \n", + "28 69.444 5.673 1.143 1 \n", + "29 65.889 5.242 1.559 1 \n", + "... ... ... ... ... \n", + "3008 81.722 6.566 1.093 0 \n", + "3009 78.333 5.747 1.113 0 \n", + "3010 75.556 5.558 1.036 0 \n", + "3011 70.556 5.723 1.079 0 \n", + "3012 75.111 6.378 1.168 0 \n", + "3013 78.278 6.374 1.153 0 \n", + "3014 80.250 5.325 1.207 0 \n", + "3015 65.944 5.169 1.174 0 \n", + "3016 71.000 5.017 1.391 0 \n", + "3017 80.167 6.149 1.107 0 \n", + "3018 88.250 6.383 1.133 0 \n", + "3019 80.111 6.138 1.038 0 \n", + "3020 74.167 5.523 1.088 0 \n", + "3021 79.944 5.267 1.044 0 \n", + "3022 66.769 6.068 1.379 0 \n", + "3023 74.111 5.611 1.162 0 \n", + "3024 74.944 6.606 1.141 0 \n", + "3025 82.056 5.732 1.114 0 \n", + "3026 81.545 5.120 1.205 0 \n", + "3027 78.111 5.451 1.181 0 \n", + "3028 79.938 6.241 1.060 0 \n", + "3029 69.143 5.769 1.200 0 \n", + "3030 65.722 6.378 1.340 0 \n", + "3031 77.278 5.821 1.116 0 \n", + "3032 82.917 5.640 1.185 0 \n", + "3033 68.611 5.598 1.144 0 \n", + "3034 73.278 6.194 1.639 0 \n", + "3035 82.111 5.889 1.131 0 \n", + "3036 74.722 6.055 1.270 0 \n", + "3037 67.111 5.853 1.136 0 \n", + "\n", + "[3038 rows x 12 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train = pandas.read_csv('../AMP Data Sets/AMP_TrainSet.csv')#reading in my train dataset\n", + "train\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FULL_ChargeFULL_AcidicMolPercFULL_AURR980107FULL_DAYM780201FULL_GEOR030101FULL_OOBM850104NT_EFC195AS_MeanAmphiMomentAS_DAYM780201AS_FUKS010112CT_RACS820104
04.03.7040.87373.5190.987-4.83300.38274.5567.2251.234
14.04.4440.89262.4440.931-0.58400.32056.0564.9421.853
22.00.0000.90147.0001.039-5.66400.16447.0005.9691.174
34.50.0000.86969.2220.982-5.42302.01069.2225.4621.138
4-4.021.5911.06171.6820.976-2.00202.75866.0005.5821.453
54.56.9770.89568.5120.950-1.87803.09072.0005.7791.844
612.03.1751.02274.4601.010-3.22503.17276.7225.6641.215
71.53.7040.93269.5190.977-2.50902.54372.0004.2511.560
83.03.3330.90359.5000.963-1.68202.99066.0005.1751.514
94.00.0000.87372.7920.998-4.94302.98577.4445.6261.621
1011.08.2190.92775.0680.989-3.11803.49376.3896.0471.126
114.52.7030.96669.7570.972-3.89613.71476.4445.4921.445
120.011.5381.02777.9230.981-3.95413.67978.0567.2221.054
136.03.3331.11479.1001.024-2.43703.98875.5566.6671.079
140.00.0001.00578.9711.1021.54404.14378.5564.4721.280
153.06.0610.89776.4550.955-4.03214.31081.2226.2071.506
163.02.1280.88964.0641.0000.58304.09774.6675.0971.302
179.50.0000.78655.6470.955-0.57703.81661.6674.8292.026
181.512.0000.94870.7200.956-3.55913.98266.5007.0241.050
194.00.0000.82854.8751.048-2.85304.29354.8755.2291.651
205.03.1250.90169.5940.995-1.67703.87658.5005.2781.486
211.50.0000.87267.2000.972-5.39204.47167.2006.5240.986
222.00.0000.78664.1500.969-4.70603.92963.7226.9411.040
238.00.0000.93362.8001.008-4.17004.10462.6674.8701.547
243.010.8111.08677.1081.010-2.11204.20878.0565.7481.249
254.02.9410.90071.2060.967-3.96304.12672.6116.8281.507
2610.00.0000.84569.5110.975-2.04903.97770.7224.8911.543
275.50.0000.94671.6671.023-4.98203.43971.6675.9531.108
289.00.0000.82254.5450.993-3.95503.56255.5006.0861.114
29-6.038.2351.23983.5591.0020.10813.31791.5005.7231.055
....................................
7281.04.1670.93167.8330.936-0.775014.99368.6676.0471.125
7291.07.4070.93081.2590.985-2.859014.99380.7786.0121.051
7300.025.0001.11979.6671.023-0.379014.98677.6676.0421.137
731-2.017.5001.06884.1000.995-1.328014.94390.0006.0811.484
7321.04.5450.83085.0910.996-3.729014.98285.8335.6121.165
7331.011.5381.05070.8851.015-2.530014.98175.7225.3371.327
7340.013.3330.92572.5330.993-2.093018.27972.5335.5251.147
7350.511.1111.13580.7781.034-1.448014.95180.7785.4111.079
736-0.513.3330.95775.2000.969-1.257017.79975.2005.9391.150
7375.010.2040.94778.1840.986-3.313015.30077.1116.2391.050
738-1.019.2311.06591.0771.0040.520015.21495.6115.3691.276
739-1.517.6471.11982.1471.005-1.477015.32181.3335.7711.016
7406.53.7040.90976.1111.009-2.840015.66679.2226.0231.242
7415.00.0000.83680.0970.973-2.795015.11082.6115.9231.245
742-3.513.3331.11575.2891.027-1.292015.05880.3895.8091.300
7434.08.3330.92879.0000.960-3.607015.09180.9445.4171.316
74410.517.0001.09182.1601.003-2.414015.27074.9445.6011.053
7455.512.8210.99667.5130.991-4.674014.98967.9446.9281.166
746-2.019.0481.03085.3330.969-1.162015.45886.5006.2841.156
747-2.520.5131.09982.7951.014-0.965015.71586.3335.5891.127
748-2.025.0001.17886.4171.0131.322022.98986.4175.5841.228
749-4.021.8751.02166.1880.994-0.523015.49971.2225.9391.080
7502.00.0001.05486.4621.051-0.815020.86686.4625.7121.298
751-2.014.8941.04283.2550.978-1.303015.26085.1675.7181.164
752-8.028.2611.22182.1091.014-0.153015.35581.1676.9040.933
753-1.516.0001.10082.8200.991-1.987015.18585.3337.0531.325
754-1.018.1821.08573.4551.027-0.745016.55074.6676.7291.132
755-1.019.0481.10882.1901.033-1.789016.11279.6676.0361.219
756-1.07.1430.95576.7861.0231.141020.63076.7865.6691.111
757-7.017.1431.07884.1861.009-0.066017.16876.6116.6881.305
\n", + "

758 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 FULL_DAYM780201 \\\n", + "0 4.0 3.704 0.873 73.519 \n", + "1 4.0 4.444 0.892 62.444 \n", + "2 2.0 0.000 0.901 47.000 \n", + "3 4.5 0.000 0.869 69.222 \n", + "4 -4.0 21.591 1.061 71.682 \n", + "5 4.5 6.977 0.895 68.512 \n", + "6 12.0 3.175 1.022 74.460 \n", + "7 1.5 3.704 0.932 69.519 \n", + "8 3.0 3.333 0.903 59.500 \n", + "9 4.0 0.000 0.873 72.792 \n", + "10 11.0 8.219 0.927 75.068 \n", + "11 4.5 2.703 0.966 69.757 \n", + "12 0.0 11.538 1.027 77.923 \n", + "13 6.0 3.333 1.114 79.100 \n", + "14 0.0 0.000 1.005 78.971 \n", + "15 3.0 6.061 0.897 76.455 \n", + "16 3.0 2.128 0.889 64.064 \n", + "17 9.5 0.000 0.786 55.647 \n", + "18 1.5 12.000 0.948 70.720 \n", + "19 4.0 0.000 0.828 54.875 \n", + "20 5.0 3.125 0.901 69.594 \n", + "21 1.5 0.000 0.872 67.200 \n", + "22 2.0 0.000 0.786 64.150 \n", + "23 8.0 0.000 0.933 62.800 \n", + "24 3.0 10.811 1.086 77.108 \n", + "25 4.0 2.941 0.900 71.206 \n", + "26 10.0 0.000 0.845 69.511 \n", + "27 5.5 0.000 0.946 71.667 \n", + "28 9.0 0.000 0.822 54.545 \n", + "29 -6.0 38.235 1.239 83.559 \n", + ".. ... ... ... ... \n", + "728 1.0 4.167 0.931 67.833 \n", + "729 1.0 7.407 0.930 81.259 \n", + "730 0.0 25.000 1.119 79.667 \n", + "731 -2.0 17.500 1.068 84.100 \n", + "732 1.0 4.545 0.830 85.091 \n", + "733 1.0 11.538 1.050 70.885 \n", + "734 0.0 13.333 0.925 72.533 \n", + "735 0.5 11.111 1.135 80.778 \n", + "736 -0.5 13.333 0.957 75.200 \n", + "737 5.0 10.204 0.947 78.184 \n", + "738 -1.0 19.231 1.065 91.077 \n", + "739 -1.5 17.647 1.119 82.147 \n", + "740 6.5 3.704 0.909 76.111 \n", + "741 5.0 0.000 0.836 80.097 \n", + "742 -3.5 13.333 1.115 75.289 \n", + "743 4.0 8.333 0.928 79.000 \n", + "744 10.5 17.000 1.091 82.160 \n", + "745 5.5 12.821 0.996 67.513 \n", + "746 -2.0 19.048 1.030 85.333 \n", + "747 -2.5 20.513 1.099 82.795 \n", + "748 -2.0 25.000 1.178 86.417 \n", + "749 -4.0 21.875 1.021 66.188 \n", + "750 2.0 0.000 1.054 86.462 \n", + "751 -2.0 14.894 1.042 83.255 \n", + "752 -8.0 28.261 1.221 82.109 \n", + "753 -1.5 16.000 1.100 82.820 \n", + "754 -1.0 18.182 1.085 73.455 \n", + "755 -1.0 19.048 1.108 82.190 \n", + "756 -1.0 7.143 0.955 76.786 \n", + "757 -7.0 17.143 1.078 84.186 \n", + "\n", + " FULL_GEOR030101 FULL_OOBM850104 NT_EFC195 AS_MeanAmphiMoment \\\n", + "0 0.987 -4.833 0 0.382 \n", + "1 0.931 -0.584 0 0.320 \n", + "2 1.039 -5.664 0 0.164 \n", + "3 0.982 -5.423 0 2.010 \n", + "4 0.976 -2.002 0 2.758 \n", + "5 0.950 -1.878 0 3.090 \n", + "6 1.010 -3.225 0 3.172 \n", + "7 0.977 -2.509 0 2.543 \n", + "8 0.963 -1.682 0 2.990 \n", + "9 0.998 -4.943 0 2.985 \n", + "10 0.989 -3.118 0 3.493 \n", + "11 0.972 -3.896 1 3.714 \n", + "12 0.981 -3.954 1 3.679 \n", + "13 1.024 -2.437 0 3.988 \n", + "14 1.102 1.544 0 4.143 \n", + "15 0.955 -4.032 1 4.310 \n", + "16 1.000 0.583 0 4.097 \n", + "17 0.955 -0.577 0 3.816 \n", + "18 0.956 -3.559 1 3.982 \n", + "19 1.048 -2.853 0 4.293 \n", + "20 0.995 -1.677 0 3.876 \n", + "21 0.972 -5.392 0 4.471 \n", + "22 0.969 -4.706 0 3.929 \n", + "23 1.008 -4.170 0 4.104 \n", + "24 1.010 -2.112 0 4.208 \n", + "25 0.967 -3.963 0 4.126 \n", + "26 0.975 -2.049 0 3.977 \n", + "27 1.023 -4.982 0 3.439 \n", + "28 0.993 -3.955 0 3.562 \n", + "29 1.002 0.108 1 3.317 \n", + ".. ... ... ... ... \n", + "728 0.936 -0.775 0 14.993 \n", + "729 0.985 -2.859 0 14.993 \n", + "730 1.023 -0.379 0 14.986 \n", + "731 0.995 -1.328 0 14.943 \n", + "732 0.996 -3.729 0 14.982 \n", + "733 1.015 -2.530 0 14.981 \n", + "734 0.993 -2.093 0 18.279 \n", + "735 1.034 -1.448 0 14.951 \n", + "736 0.969 -1.257 0 17.799 \n", + "737 0.986 -3.313 0 15.300 \n", + "738 1.004 0.520 0 15.214 \n", + "739 1.005 -1.477 0 15.321 \n", + "740 1.009 -2.840 0 15.666 \n", + "741 0.973 -2.795 0 15.110 \n", + "742 1.027 -1.292 0 15.058 \n", + "743 0.960 -3.607 0 15.091 \n", + "744 1.003 -2.414 0 15.270 \n", + "745 0.991 -4.674 0 14.989 \n", + "746 0.969 -1.162 0 15.458 \n", + "747 1.014 -0.965 0 15.715 \n", + "748 1.013 1.322 0 22.989 \n", + "749 0.994 -0.523 0 15.499 \n", + "750 1.051 -0.815 0 20.866 \n", + "751 0.978 -1.303 0 15.260 \n", + "752 1.014 -0.153 0 15.355 \n", + "753 0.991 -1.987 0 15.185 \n", + "754 1.027 -0.745 0 16.550 \n", + "755 1.033 -1.789 0 16.112 \n", + "756 1.023 1.141 0 20.630 \n", + "757 1.009 -0.066 0 17.168 \n", + "\n", + " AS_DAYM780201 AS_FUKS010112 CT_RACS820104 \n", + "0 74.556 7.225 1.234 \n", + "1 56.056 4.942 1.853 \n", + "2 47.000 5.969 1.174 \n", + "3 69.222 5.462 1.138 \n", + "4 66.000 5.582 1.453 \n", + "5 72.000 5.779 1.844 \n", + "6 76.722 5.664 1.215 \n", + "7 72.000 4.251 1.560 \n", + "8 66.000 5.175 1.514 \n", + "9 77.444 5.626 1.621 \n", + "10 76.389 6.047 1.126 \n", + "11 76.444 5.492 1.445 \n", + "12 78.056 7.222 1.054 \n", + "13 75.556 6.667 1.079 \n", + "14 78.556 4.472 1.280 \n", + "15 81.222 6.207 1.506 \n", + "16 74.667 5.097 1.302 \n", + "17 61.667 4.829 2.026 \n", + "18 66.500 7.024 1.050 \n", + "19 54.875 5.229 1.651 \n", + "20 58.500 5.278 1.486 \n", + "21 67.200 6.524 0.986 \n", + "22 63.722 6.941 1.040 \n", + "23 62.667 4.870 1.547 \n", + "24 78.056 5.748 1.249 \n", + "25 72.611 6.828 1.507 \n", + "26 70.722 4.891 1.543 \n", + "27 71.667 5.953 1.108 \n", + "28 55.500 6.086 1.114 \n", + "29 91.500 5.723 1.055 \n", + ".. ... ... ... \n", + "728 68.667 6.047 1.125 \n", + "729 80.778 6.012 1.051 \n", + "730 77.667 6.042 1.137 \n", + "731 90.000 6.081 1.484 \n", + "732 85.833 5.612 1.165 \n", + "733 75.722 5.337 1.327 \n", + "734 72.533 5.525 1.147 \n", + "735 80.778 5.411 1.079 \n", + "736 75.200 5.939 1.150 \n", + "737 77.111 6.239 1.050 \n", + "738 95.611 5.369 1.276 \n", + "739 81.333 5.771 1.016 \n", + "740 79.222 6.023 1.242 \n", + "741 82.611 5.923 1.245 \n", + "742 80.389 5.809 1.300 \n", + "743 80.944 5.417 1.316 \n", + "744 74.944 5.601 1.053 \n", + "745 67.944 6.928 1.166 \n", + "746 86.500 6.284 1.156 \n", + "747 86.333 5.589 1.127 \n", + "748 86.417 5.584 1.228 \n", + "749 71.222 5.939 1.080 \n", + "750 86.462 5.712 1.298 \n", + "751 85.167 5.718 1.164 \n", + "752 81.167 6.904 0.933 \n", + "753 85.333 7.053 1.325 \n", + "754 74.667 6.729 1.132 \n", + "755 79.667 6.036 1.219 \n", + "756 76.786 5.669 1.111 \n", + "757 76.611 6.688 1.305 \n", + "\n", + "[758 rows x 11 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test= pandas.read_csv('../AMP Data Sets/Test.csv') #reading in my test dataset\n", + "test" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspecting my train dataset\n", + "\n", + "
\n", + "The way you are commenting in the code is fine.\n", + " \n", + " It would be better to write shorter explanation there and longer with markdown.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3038, 12)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.shape #a tuple that gives you an indication of the number of dimensions in the array." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FULL_Charge 0\n", + "FULL_AcidicMolPerc 0\n", + "FULL_AURR980107 0\n", + "FULL_DAYM780201 0\n", + "FULL_GEOR030101 0\n", + "FULL_OOBM850104 0\n", + "NT_EFC195 0\n", + "AS_MeanAmphiMoment 0\n", + "AS_DAYM780201 0\n", + "AS_FUKS010112 0\n", + "CT_RACS820104 0\n", + "CLASS 0\n", + "dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.isnull().sum() ###this will show the number of null values in my data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FULL_Charge 3038\n", + "FULL_AcidicMolPerc 3038\n", + "FULL_AURR980107 3038\n", + "FULL_DAYM780201 3038\n", + "FULL_GEOR030101 3038\n", + "FULL_OOBM850104 3038\n", + "NT_EFC195 3038\n", + "AS_MeanAmphiMoment 3038\n", + "AS_DAYM780201 3038\n", + "AS_FUKS010112 3038\n", + "CT_RACS820104 3038\n", + "CLASS 3038\n", + "dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.count() #returns number of non-null values in my data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### It seems i have no missing values in my data\n", + "\n", + "
\n", + "Good\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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", + "
FULL_ChargeFULL_AcidicMolPercFULL_AURR980107FULL_DAYM780201FULL_GEOR030101FULL_OOBM850104NT_EFC195AS_MeanAmphiMomentAS_DAYM780201AS_FUKS010112CT_RACS820104CLASS
count3038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.000000
mean2.0602378.5215200.97141073.6687600.994007-2.4329270.08854515.68323373.6508285.9113611.2352550.500000
std3.8199297.5866520.1074138.5274890.0313331.7072230.28413311.5756659.1660920.6936890.2100120.500082
min-16.0000000.0000000.68400042.7500000.866000-10.4320000.0000000.04100042.7780003.5330000.7850000.000000
25%0.0000002.5160000.89500068.2940000.974000-3.6060000.0000005.58750067.5560005.4592501.0820000.000000
50%2.0000007.1430000.96300074.0595000.994000-2.2965000.00000014.98850073.6970005.9255001.1840000.500000
75%4.00000013.1580001.04100079.3437501.011000-1.2832500.00000026.80775079.7780006.3820001.3510001.000000
max30.00000046.6670001.451000101.6820001.1960003.5760001.00000051.280000103.1670008.6620002.1920001.000000
\n", + "
" + ], + "text/plain": [ + " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 FULL_DAYM780201 \\\n", + "count 3038.000000 3038.000000 3038.000000 3038.000000 \n", + "mean 2.060237 8.521520 0.971410 73.668760 \n", + "std 3.819929 7.586652 0.107413 8.527489 \n", + "min -16.000000 0.000000 0.684000 42.750000 \n", + "25% 0.000000 2.516000 0.895000 68.294000 \n", + "50% 2.000000 7.143000 0.963000 74.059500 \n", + "75% 4.000000 13.158000 1.041000 79.343750 \n", + "max 30.000000 46.667000 1.451000 101.682000 \n", + "\n", + " FULL_GEOR030101 FULL_OOBM850104 NT_EFC195 AS_MeanAmphiMoment \\\n", + "count 3038.000000 3038.000000 3038.000000 3038.000000 \n", + "mean 0.994007 -2.432927 0.088545 15.683233 \n", + "std 0.031333 1.707223 0.284133 11.575665 \n", + "min 0.866000 -10.432000 0.000000 0.041000 \n", + "25% 0.974000 -3.606000 0.000000 5.587500 \n", + "50% 0.994000 -2.296500 0.000000 14.988500 \n", + "75% 1.011000 -1.283250 0.000000 26.807750 \n", + "max 1.196000 3.576000 1.000000 51.280000 \n", + "\n", + " AS_DAYM780201 AS_FUKS010112 CT_RACS820104 CLASS \n", + "count 3038.000000 3038.000000 3038.000000 3038.000000 \n", + "mean 73.650828 5.911361 1.235255 0.500000 \n", + "std 9.166092 0.693689 0.210012 0.500082 \n", + "min 42.778000 3.533000 0.785000 0.000000 \n", + "25% 67.556000 5.459250 1.082000 0.000000 \n", + "50% 73.697000 5.925500 1.184000 0.500000 \n", + "75% 79.778000 6.382000 1.351000 1.000000 \n", + "max 103.167000 8.662000 2.192000 1.000000 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.describe() #returns summary of the whole data" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 3038 entries, 0 to 3037\n", + "Data columns (total 12 columns):\n", + "FULL_Charge 3038 non-null float64\n", + "FULL_AcidicMolPerc 3038 non-null float64\n", + "FULL_AURR980107 3038 non-null float64\n", + "FULL_DAYM780201 3038 non-null float64\n", + "FULL_GEOR030101 3038 non-null float64\n", + "FULL_OOBM850104 3038 non-null float64\n", + "NT_EFC195 3038 non-null int64\n", + "AS_MeanAmphiMoment 3038 non-null float64\n", + "AS_DAYM780201 3038 non-null float64\n", + "AS_FUKS010112 3038 non-null float64\n", + "CT_RACS820104 3038 non-null float64\n", + "CLASS 3038 non-null int64\n", + "dtypes: float64(10), int64(2)\n", + "memory usage: 284.9 KB\n" + ] + } + ], + "source": [ + "train.info() #It returns range, column, number of non-null objects of each column, datatype and memory usage" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### This shows that my dataset has 3038 rows (instances) and 12 columns (attributes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### I will also take a look at how many instances i have for each class" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CLASS\n", + "0 1519\n", + "1 1519\n", + "dtype: int64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.groupby('CLASS').size()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pyplot' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'CLASS'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'bar'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#i can also show this in a graph form\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mpyplot\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'pyplot' is not defined" + ] + } + ], + "source": [ + "train.groupby('CLASS').size().plot(kind='bar') #i can also show this in a graph form\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I have two groups of classes, each with 1519 instances" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DATA VISUALISATION\n", + "\n", + "
\n", + "\n", + "## ??\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will start with univariate plots to see each individual variable\n", + "\n", + "
\n", + "\n", + "## ??\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pyplot' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#visualizing using histograms\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m16\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m16\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mpyplot\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'pyplot' is not defined" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#visualizing using histograms\n", + "train.hist(figsize=(16,16))\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### These histograms show that FullAcidicMolPerc is exponentially distributed while the rest are have a Gaussian distribution except for NT_EFC195 and CLASS. Histograms also help us identify outliers. From this output, I can say there are no outliers.\n", + "\n", + "
\n", + "Good observations\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "## ??\n", + "\n", + "What did you find out from the cell below.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FULL_Charge 0.534602\n", + "FULL_AcidicMolPerc -0.598816\n", + "FULL_AURR980107 -0.584111\n", + "FULL_DAYM780201 -0.554838\n", + "FULL_GEOR030101 -0.260470\n", + "FULL_OOBM850104 -0.453287\n", + "NT_EFC195 0.260702\n", + "AS_MeanAmphiMoment 0.693552\n", + "AS_DAYM780201 -0.437168\n", + "AS_FUKS010112 0.033432\n", + "CT_RACS820104 0.267652\n", + "CLASS 1.000000\n", + "Name: CLASS, dtype: float64" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.corr(method='pearson')['CLASS'] #Here I tried to see the correlation of all attributes with the class" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multivariate \n", + "\n", + "
\n", + " \n", + " Please import: `import matplotlib.pyplot as plt`\n", + "\n", + "## ??\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#plotting a heatmap to show correlation of data\n", + "pyplot.figure(figsize=(10,10))\n", + "sns.heatmap(train.corr(method='pearson'))\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### i did this plot in order to see which features are highly correlated as this can be a problem in soome models if some features are used together whereas they are highly correlated." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "## This plot takes a lot of time to draw, is it the best way to do this?\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0msns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpairplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/seaborn/axisgrid.py\u001b[0m in \u001b[0;36mpairplot\u001b[0;34m(data, hue, hue_order, palette, vars, x_vars, y_vars, kind, diag_kind, markers, height, aspect, dropna, plot_kws, diag_kws, grid_kws, size)\u001b[0m\n\u001b[1;32m 2082\u001b[0m \u001b[0mhue_order\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhue_order\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpalette\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpalette\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2083\u001b[0m \u001b[0mdiag_sharey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdiag_sharey\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2084\u001b[0;31m height=height, aspect=aspect, dropna=dropna, **grid_kws)\n\u001b[0m\u001b[1;32m 2085\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2086\u001b[0m \u001b[0;31m# Add the markers here as PairGrid has figured out how many levels of the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/seaborn/axisgrid.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, hue, hue_order, palette, hue_kws, vars, x_vars, y_vars, diag_sharey, height, aspect, despine, dropna, size)\u001b[0m\n\u001b[1;32m 1304\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdespine\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1305\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdespine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfig\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1306\u001b[0;31m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtight_layout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1307\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1308\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py\u001b[0m in \u001b[0;36mtight_layout\u001b[0;34m(self, renderer, pad, h_pad, w_pad, rect)\u001b[0m\n\u001b[1;32m 2473\u001b[0m kwargs = get_tight_layout_figure(\n\u001b[1;32m 2474\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubplotspec_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2475\u001b[0;31m pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n\u001b[0m\u001b[1;32m 2476\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2477\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplots_adjust\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/tight_layout.py\u001b[0m in \u001b[0;36mget_tight_layout_figure\u001b[0;34m(fig, axes_list, subplotspec_list, renderer, pad, h_pad, w_pad, rect)\u001b[0m\n\u001b[1;32m 360\u001b[0m \u001b[0msubplot_list\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msubplot_list\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 361\u001b[0m \u001b[0max_bbox_list\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0max_bbox_list\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 362\u001b[0;31m pad=pad, h_pad=h_pad, w_pad=w_pad)\n\u001b[0m\u001b[1;32m 363\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 364\u001b[0m \u001b[0;31m# kwargs can be none if tight_layout fails...\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/tight_layout.py\u001b[0m in \u001b[0;36mauto_adjust_subplotpars\u001b[0;34m(fig, renderer, nrows_ncols, num1num2_list, subplot_list, ax_bbox_list, pad, h_pad, w_pad, rect)\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;32mcontinue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 111\u001b[0;31m tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots\n\u001b[0m\u001b[1;32m 112\u001b[0m if ax.get_visible()])\n\u001b[1;32m 113\u001b[0m tight_bbox = TransformedBbox(tight_bbox_raw,\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/tight_layout.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 111\u001b[0m tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots\n\u001b[0;32m--> 112\u001b[0;31m if ax.get_visible()])\n\u001b[0m\u001b[1;32m 113\u001b[0m tight_bbox = TransformedBbox(tight_bbox_raw,\n\u001b[1;32m 114\u001b[0m fig.transFigure.inverted())\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36mget_tightbbox\u001b[0;34m(self, renderer, call_axes_locator, bbox_extra_artists)\u001b[0m\n\u001b[1;32m 4354\u001b[0m \u001b[0mbb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbb_yaxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4355\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4356\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_title_position\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4357\u001b[0m \u001b[0mbb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_window_extent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4358\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m_update_title_position\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 2545\u001b[0m if (ax.xaxis.get_label_position() == 'top' or\n\u001b[1;32m 2546\u001b[0m ax.xaxis.get_ticks_position() in choices):\n\u001b[0;32m-> 2547\u001b[0;31m \u001b[0mbb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_tightbbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2548\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2549\u001b[0m \u001b[0mbb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_window_extent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36mget_tightbbox\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 1163\u001b[0m \u001b[0mticks_to_draw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1164\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1165\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_label_position\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1166\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1167\u001b[0m \u001b[0;31m# go back to just this axis's tick labels\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_update_label_position\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 1985\u001b[0m \u001b[0;31m# get bounding boxes for this axis and any siblings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1986\u001b[0m \u001b[0;31m# that have been set by `fig.align_xlabels()`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1987\u001b[0;31m \u001b[0mbboxes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbboxes2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick_boxes_siblings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1988\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1989\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_position\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_get_tick_boxes_siblings\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 1969\u001b[0m \u001b[0;31m# if we want to align labels from other axes:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1970\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mnn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_siblings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1971\u001b[0;31m \u001b[0mticks_to_draw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maxx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1972\u001b[0m \u001b[0mtlb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtlb2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maxx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick_bboxes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mticks_to_draw\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1973\u001b[0m \u001b[0mbboxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtlb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_update_ticks\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1078\u001b[0m \u001b[0mthe\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mReturn\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mlist\u001b[0m \u001b[0mof\u001b[0m \u001b[0mticks\u001b[0m \u001b[0mthat\u001b[0m \u001b[0mwill\u001b[0m \u001b[0mbe\u001b[0m \u001b[0mdrawn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1079\u001b[0m \"\"\"\n\u001b[0;32m-> 1080\u001b[0;31m \u001b[0mmajor_locs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_majorticklocs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1081\u001b[0m \u001b[0mmajor_labels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmajor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmajor_locs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1082\u001b[0m \u001b[0mmajor_ticks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_major_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmajor_locs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36mget_majorticklocs\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1323\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_majorticklocs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1324\u001b[0m \u001b[0;34m\"\"\"Get the array of major tick locations in data coordinates.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1325\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmajor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlocator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1326\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1327\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_minorticklocs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/ticker.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2076\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2077\u001b[0m \u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_view_interval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2078\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtick_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2079\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2080\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtick_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/ticker.py\u001b[0m in \u001b[0;36mtick_values\u001b[0;34m(self, vmin, vmax)\u001b[0m\n\u001b[1;32m 2084\u001b[0m vmin, vmax = mtransforms.nonsingular(\n\u001b[1;32m 2085\u001b[0m vmin, vmax, expander=1e-13, tiny=1e-14)\n\u001b[0;32m-> 2086\u001b[0;31m \u001b[0mlocs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_raw_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2087\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2088\u001b[0m \u001b[0mprune\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_prune\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/ticker.py\u001b[0m in \u001b[0;36m_raw_ticks\u001b[0;34m(self, vmin, vmax)\u001b[0m\n\u001b[1;32m 2023\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_nbins\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'auto'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2024\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxis\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2025\u001b[0;31m nbins = np.clip(self.axis.get_tick_space(),\n\u001b[0m\u001b[1;32m 2026\u001b[0m max(1, self._min_n_ticks - 1), 9)\n\u001b[1;32m 2027\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36mget_tick_space\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2173\u001b[0m \u001b[0mends\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransAxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2174\u001b[0m \u001b[0mlength\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mends\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mends\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdpi\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m72\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2175\u001b[0;31m \u001b[0mtick\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2176\u001b[0m \u001b[0;31m# There is a heuristic here that the aspect ratio of tick text\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2177\u001b[0m \u001b[0;31m# is no more than 3:1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_get_tick\u001b[0;34m(self, major)\u001b[0m\n\u001b[1;32m 1904\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1905\u001b[0m \u001b[0mtick_kw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_minor_tick_kw\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1906\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mXTick\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmajor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmajor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mtick_kw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1907\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1908\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_get_label\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, axes, loc, label, size, width, color, tickdir, pad, labelsize, labelcolor, zorder, gridOn, tick1On, tick2On, label1On, label2On, major, labelrotation, grid_color, grid_linestyle, grid_linewidth, grid_alpha, **kw)\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtick1line\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick1line\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtick2line\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick2line\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 160\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgridline\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_gridline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 161\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabel1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_text1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabel2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_text2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_get_gridline\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 491\u001b[0m \u001b[0malpha\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_grid_alpha\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[0mmarkersize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 493\u001b[0;31m **self._grid_kw)\n\u001b[0m\u001b[1;32m 494\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_xaxis_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwhich\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'grid'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 495\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_interpolation_steps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mGRIDLINE_INTERPOLATION_STEPS\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/lines.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, xdata, ydata, linewidth, linestyle, color, marker, markersize, markeredgewidth, markeredgecolor, markerfacecolor, markerfacecoloralt, fillstyle, antialiased, dash_capstyle, solid_capstyle, dash_joinstyle, solid_joinstyle, pickradius, drawstyle, markevery, **kwargs)\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[0mdash_capstyle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'lines.dash_capstyle'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdash_joinstyle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 336\u001b[0;31m \u001b[0mdash_joinstyle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'lines.dash_joinstyle'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 337\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msolid_capstyle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 338\u001b[0m \u001b[0msolid_capstyle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'lines.solid_capstyle'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 820\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mswitch_backend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrcsetup\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_auto_backend_sentinel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 821\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 822\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 823\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 824\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__repr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#scatter plot\n", + "\n", + "import seaborn as sns\n", + "sns.pairplot(train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A scatter plot shows the relationship between two variables as dots in two dimensions. So from this output, i can be able to see the relationship between variables. If they show a good correlation, then they ccan be removed in feature selection." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# EVALUATING ALGORITHMS\n", + "#### I will now evaluate some algorithms and estimate their accuracy on unseen data.\n", + "\n", + "
\n", + "\n", + "## ??\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Building models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will first split my train data into test and train, so that I test the effectiveness of my model using the test data.\n", + "\n", + "\n", + "
\n", + "\n", + "### random seed generator gets you the same numbers each time.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "array = train.values #first create a variable for extracting the values from the train dataset to be used\n", + "X = array[:,0:11] #selecting which columns to use, in this case all of them\n", + "Y = array[:,11] #selecting the label for our data, which is the last column\n", + "test_size = 0.32 #this is the size of my test data, meaning my train data is 68%\n", + "seed = 3 #this is to initialize the random generator. So everytime i run this with a different seed number, i will get a different output\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## IMPORTING MODELS\n", + "\n", + "#### I will now use the models I imported in the beginning from sklearn to use for my algorithm.\n", + "\n", + "
\n", + "\n", + "## Add more algorithms please: Gradient Boosting\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LR: 0.912356 (0.013890)\n", + "LDA: 0.913808 (0.018930)\n", + "KNN: 0.907040 (0.017335)\n", + "CART: 0.896858 (0.014657)\n", + "NB: 0.913334 (0.016768)\n", + "SVM: 0.890594 (0.022649)\n", + "RTC: 0.933671 (0.015717)\n", + "SGD: 0.877977 (0.024229)\n", + "NC: 0.893481 (0.019393)\n", + "MLPC: 0.918158 (0.017259)\n" + ] + } + ], + "source": [ + "\n", + "\n", + "models = []\n", + "models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))\n", + "models.append(('LDA', LinearDiscriminantAnalysis()))\n", + "models.append(('KNN', KNeighborsClassifier()))\n", + "models.append(('CART', DecisionTreeClassifier()))\n", + "models.append(('NB', GaussianNB()))\n", + "models.append(('SVM', SVC(gamma='auto')))\n", + "models.append(('RTC', RandomForestClassifier()))\n", + "models.append(('SGD',SGDClassifier()))\n", + "models.append(('NC', NearestCentroid()))\n", + "models.append(('MLPC',MLPClassifier()))\n", + "# evaluate each model in turn\n", + "results = []\n", + "names = []\n", + "for name, model in models:\n", + " kfold = StratifiedKFold(n_splits=10)\n", + " cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')\n", + " results.append(cv_results)\n", + " names.append(name)\n", + " print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Compare Algorithms\n", + "pyplot.boxplot(results, labels=names)\n", + "pyplot.title('Algorithm Comparison')\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### from here, RTC is the best performing, followed by NB." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MCC 0.860278994009734\n" + ] + } + ], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(NB)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MCC 0.8788612940586917\n" + ] + } + ], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(RTC)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The MCC gives a score close to 100." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will now test the performance of my model first using all the features, then with some selected ones\n", + "\n", + "
\n", + "\n", + "## Why do you decide to do the feature selection this way, any reason?\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 93.01130524152107\n" + ] + } + ], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import GaussianNB\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9393627954779034\n", + "[[464 25]\n", + " [ 34 450]]\n", + " precision recall f1-score support\n", + "\n", + " 0.0 0.93 0.95 0.94 489\n", + " 1.0 0.95 0.93 0.94 484\n", + "\n", + " accuracy 0.94 973\n", + " macro avg 0.94 0.94 0.94 973\n", + "weighted avg 0.94 0.94 0.94 973\n", + "\n" + ] + } + ], + "source": [ + "# Evaluate predictions\n", + "print(accuracy_score(Y_test, predictions))\n", + "print(confusion_matrix(Y_test, predictions))\n", + "print(classification_report(Y_test, predictions))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gives me a good score of 93.6%. I will now try selecting some features based on feature importance.\n", + "\n", + "
\n", + "\n", + "I think this is a great move to take,but I would like to know why you are doing this this way.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This will be my first submission. It gave me a score of 99%\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pd' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"CLASS\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mOUTPUT\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mY\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mOUTPUT_1\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mOUTPUT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mOUTPUT_1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"CLASS\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mOUTPUT_1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Index\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'pd' is not defined" + ] + } + ], + "source": [ + "Y=train.CLASS\n", + "X=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X, Y).predict(test.values)\n", + "OUTPUT_1=pd.DataFrame(OUTPUT)\n", + "OUTPUT_1.columns=[\"CLASS\"]\n", + "OUTPUT_1.index.name=\"Index\"\n", + "OUTPUT_1[\"CLASS\"]=OUTPUT_1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_1.to_csv(\"output\") #converting my output file into a csv\n", + "print(OUTPUT_1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_1[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_1.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_1.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.0920619 0.12139276 0.09773584 0.08602068 0.05565946 0.07725613\n", + " 0.03620132 0.30737167 0.0480203 0.03222133 0.04605861]\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'pd' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfeature_importances_\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#use inbuilt class feature_importances of tree based classifiers\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m#plot graph of feature importances for better visualization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mfeat_importances\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSeries\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfeature_importances_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mfeat_importances\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlargest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'barh'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'pd' is not defined" + ] + } + ], + "source": [ + "#feature selection using feature importance\n", + "X = train.iloc[:,0:11] #independent columns\n", + "y = train.iloc[:,-1] #target column\n", + "from sklearn.ensemble import ExtraTreesClassifier\n", + "import matplotlib.pyplot as plt\n", + "model = ExtraTreesClassifier()\n", + "model.fit(X,y)\n", + "print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers\n", + "#plot graph of feature importances for better visualization\n", + "feat_importances = pd.Series(model.feature_importances_, index=X.columns)\n", + "feat_importances.nlargest(10).plot(kind='barh')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### I will select the features with the highest bars. The number of features selected will depend on the accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "train.columns\n", + "newtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "newtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "array = newtrain.values\n", + "X = array[:,0:5]\n", + "Y = array[:,-1]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new=newtrain.CLASS\n", + "X_new=newtrain.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X_new, Y_new).predict(newtest.values)\n", + "OUTPUT_new=pd.DataFrame(OUTPUT)\n", + "OUTPUT_new.columns=[\"CLASS\"]\n", + "OUTPUT_new.index.name=\"Index\"\n", + "OUTPUT_new[\"CLASS\"]=OUTPUT_new[\"CLASS\"].map({0.0:False,1.0:True})\n", + "OUTPUT_new.to_csv(\"out1\")\n", + "print(OUTPUT_new[\"CLASS\"].unique())\n", + "print(OUTPUT_new[\"CLASS\"].nunique())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### This gave me a score of 85%" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#this is how i checked the accuracy from the features selected\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import GaussianNB\n", + "\n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#i will now select 6 features to see if my score improves\n", + "\n", + "array = train.values\n", + "X = array[:,[0,1,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### the accuracy deacreases. let me try 4 features instead" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "array = train.values\n", + "X = array[:,[1,2,3,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### accuracy deacreases even further. so if i weere to feature select, I would use 5 features because they give me the best accuracy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Let me try the RTC model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### this actually gives me a better score than the one from GaussianNB. Let me submit it" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Evaluate predictions\n", + "print(accuracy_score(Y_test, predictions))\n", + "print(confusion_matrix(Y_test, predictions))\n", + "print(classification_report(Y_test, predictions))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new2=train.CLASS\n", + "X_new2=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT2=model.fit(X_new2, Y_new2).predict(test.values)\n", + "OUTPUT_new1=pd.DataFrame(OUTPUT2)\n", + "OUTPUT_new1.columns=[\"CLASS\"]\n", + "OUTPUT_new1.index.name=\"Index\"\n", + "OUTPUT_new1[\"CLASS\"]=OUTPUT_new1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_new1.to_csv(\"outputRTC\") #converting my output file into a csv\n", + "print(OUTPUT_new1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_new1[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_new1.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new1.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gave me a score of 83%. let me feature select the 5 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### this gives me a lower score than when all features are selected. So i will stop here." + ] + } + ], + "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.4" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Assignment Colab/.ipynb_checkpoints/Fezile Dlamini -corrected-checkpoint.ipynb b/Assignment Colab/.ipynb_checkpoints/Fezile Dlamini -corrected-checkpoint.ipynb new file mode 100644 index 0000000..66d5836 --- /dev/null +++ b/Assignment Colab/.ipynb_checkpoints/Fezile Dlamini -corrected-checkpoint.ipynb @@ -0,0 +1,1058 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Please use this link to learn Markdown\n", + "\n", + "[Link](https://www.earthdatascience.org/courses/intro-to-earth-data-science/file-formats/use-text-files/format-text-with-markdown-jupyter-notebook/)\n", + "\n", + "
\n", + " Please use it to write your report.\n", + " \n", + " So far its easy to follow your thought which is good.\n", + " \n", + " It would be better to explain more on the concepts, you have done it well in some parts ,others neglected.\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", + "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5" + }, + "outputs": [], + "source": [ + "# This Python 3 environment comes with many helpful analytics libraries installed\n", + "# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n", + "# For example, here's several helpful packages to load in \n", + "\n", + "#import seaborn as sb\n", + "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", + "\n", + "# Input data files are available in the \"../input/\" directory.\n", + "# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n", + "\n", + "import os\n", + "for dirname, _, filenames in os.walk('/kaggle/input'):\n", + " for filename in filenames:\n", + " print(os.path.join(dirname, filename))\n", + "\n", + "# Any results you write to the current directory are saved as output." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importing Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0", + "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a" + }, + "outputs": [], + "source": [ + "###Importing libraries\n", + "import pandas\n", + "import scipy\n", + "import numpy\n", + "import matplotlib.pyplot as plt\n", + "import sklearn\n", + "import seaborn as sns\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading some libraries\n", + "### These are some of the libraries I think I will need" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import read_csv #for reading in csv files\n", + "from pandas.plotting import scatter_matrix \n", + "from matplotlib import pyplot \n", + "from sklearn.model_selection import train_test_split \n", + "from sklearn.model_selection import cross_val_score \n", + "from sklearn.model_selection import StratifiedKFold\n", + "from sklearn.metrics import classification_report \n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.metrics import accuracy_score \n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.neighbors import KNeighborsClassifier \n", + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis \n", + "from sklearn.naive_bayes import GaussianNB \n", + "from sklearn.svm import SVC \n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.linear_model import SGDClassifier\n", + "from sklearn.neighbors import NearestCentroid\n", + "from sklearn.neural_network import MLPClassifier" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Brief description of the codes above:\n", + "#### 1.**read_csv**: for reading in csv files\n", + "#### 2.**scatter matrix**: for showing how one variable is affected by another\n", + "#### 3.**pyplot** : for plotting graphs\n", + "#### 4.**train_test_split**: for splitting my data into train and test\n", + "#### 5.**cross_val_score**: to estimate the skill of a machine learning model on unseen data\n", + "#### 6.**StratifiedKFold**: the folds are selected so that the mean response value is approximately equal in all the folds. In the case of a dichotomous classification, this means that each fold contains roughly the same proportions of the two types of class labels\n", + "#### 7.**classification_report**: Visual classification reports are used to compare classification models to select models that are “redder”, e.g. have stronger classification metrics or that are more balanced.\n", + "#### 8.**confusion_matrix**: A confusion matrix is a table that is often used to describe the performance of a classification model (or “classifier”) on a set of test data for which the true values are known. It allows the visualization of the performance of an algorithm.\n", + "#### 9.**accuracy_score**: It is the ratio of number of correct predictions to the total number of input samples\n", + "#### 10.**LogisticRegression**: an algorithm for classification\n", + "#### 11.**DecisionTreeClassifier**: create a model that predicts the value of a target variable by learning simple decision rules inferred from the data features.\n", + "#### 12.**KNeighborsClassifier**: for classification\n", + "#### 13.**LinearDiscriminantAnalysis**: used for modeling differences in groups i.e. separating two or more classes\n", + "#### 14.**GaussianNB**: an algorithm that estimates the mean and the standard deviation from your training data,\n", + "#### 15.**SVC**: an algorithm that creates a line or a hyperplane which separates the data into classes\n", + "#### 16.**RandomForestClassifier**: Random forests creates decision trees on randomly selected data samples, gets prediction from each tree and selects the best solution by means of voting\n", + "#### 17.**SGDClassifier**: Stochastic Gradient Descent Classifier (SGDC) is an incremental Gradient Descent method falling under the broad classification of Supervised Learning Model that helps converge faster and is thus very fast as compared to other iterative models capable of delivering similar performance\n", + "#### 18.**NearestCentroid**: assigns to observations the label of the class of training samples whose mean (centroid) is closest to the observation\n", + "#### 19.**MLPClassifier**: It can distinguish data that is not linearly separable\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#this suprreses unnecesary warnings from my output\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading My Dataset\n", + "\n", + "##### I am going to first use my training dataset, then the test dataset last." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train = pandas.read_csv('/kaggle/input/ace-class-assignment/AMP_TrainSet.csv')#reading in my train dataset\n", + "train\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "test= pandas.read_csv('/kaggle/input/ace-class-assignment/Test.csv') #reading in my test dataset\n", + "test" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspecting my train dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.shape #a tuple that gives you an indication of the number of dimensions in the array." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.isnull().sum() ###this will show the number of null values in my data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.count() #returns number of non-null values in my data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### It seems i have no missing values in my data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.describe() #returns summary of the whole data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.info() #It returns range, column, number of non-null objects of each column, datatype and memory usage" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### This shows that my dataset has 3038 rows (instances) and 12 columns (attributes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### I will also take a look at how many instances i have for each class" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.groupby('CLASS').size()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.groupby('CLASS').size().plot(kind='bar') #i can also show this in a graph form\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I have two groups of classes, each with 1519 instances" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DATA VISUALISATION" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will start with univariate plots to see each individual variable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. HISTOGRAMS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#visualizing using histograms\n", + "train.hist(figsize=(16,16))\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### These histograms show that FullAcidicMolPerc is exponentially distributed while the rest are have a Gaussian distribution except for NT_EFC195 and CLASS. Histograms also help us identify outliers. From this output, I can say there are no outliers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.corr(method='pearson')['CLASS'] #Here I tried to see the correlation of all attributes with the class" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### According to literature,Pearson’s correlation coefficient is the test statistics that measures the statistical relationship, or association, between two continuous variables. It is known as the best method of measuring the association between variables of interest because it is based on the method of covariance. It gives information about the magnitude of the association, or correlation, as well as the direction of the relationship.\n", + "\n", + "### So from the above results, i can see that most attributes have a negative correlation with the class. Only two have a high degree of correlation as they are between +o.5 and +1.0. AS_FUKS010112 has moderate corrlation as the range is between 0.30-0.49" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multivariate " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#plotting a heatmap to show correlation of data\n", + "pyplot.figure(figsize=(10,10))\n", + "sns.heatmap(train.corr(method='pearson'))\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### i did this plot in order to see which features are highly correlated as this can be a problem in soome models if some features are used together whereas they are highly correlated." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#scatter plot\n", + "\n", + "import seaborn as sns\n", + "sns.pairplot(train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A scatter plot shows the relationship between two variables as dots in two dimensions. So from this output, i can be able to see the relationship between variables. If they show a good correlation, then they ccan be removed in feature selection." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# EVALUATING ALGORITHMS\n", + "#### I will now evaluate some algorithms and estimate their accuracy on unseen data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Building models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will first split my train data into test and train, so that I test the effectiveness of my model using the test data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "array = train.values #first create a variable for extracting the values from the train dataset to be used\n", + "X = array[:,0:11] #selecting which columns to use, in this case all of them\n", + "Y = array[:,11] #selecting the label for our data, which is the last column\n", + "test_size = 0.32 #this is the size of my test data, meaning my train data is 68%\n", + "seed = 3 #this is to initialize the random generator, to ensure i get the same numbers each time.\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## IMPORTING MODELS\n", + "\n", + "#### I will now use the models I imported in the beginning from sklearn to use for my algorithm." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "from sklearn.ensemble import GradientBoostingClassifier\n", + "models = []\n", + "models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))\n", + "models.append(('LDA', LinearDiscriminantAnalysis()))\n", + "models.append(('KNN', KNeighborsClassifier()))\n", + "models.append(('CART', DecisionTreeClassifier()))\n", + "models.append(('NB', GaussianNB()))\n", + "models.append(('SVM', SVC(gamma='auto')))\n", + "models.append(('RTC', RandomForestClassifier()))\n", + "models.append(('SGD',SGDClassifier()))\n", + "models.append(('NC', NearestCentroid()))\n", + "models.append(('MLPC',MLPClassifier()))\n", + "models.append(('GBC', GradientBoostingClassifier()))\n", + "# evaluate each model in turn\n", + "results = []\n", + "names = []\n", + "for name, model in models:\n", + " kfold = StratifiedKFold(n_splits=10)\n", + " cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')\n", + " results.append(cv_results)\n", + " names.append(name)\n", + " print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Compare Algorithms\n", + "pyplot.boxplot(results, labels=names)\n", + "pyplot.title('Algorithm Comparison')\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### from here, RTC is the best performing, followed by gradient boosting then NB.\n", + "\n", + "### Irecently added Gradient boosting. It relies on the intuition that the best possible next model, when combined with previous models, minimizes the overall prediction error." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(NB)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(RTC)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The MCC gives a score close to 100." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(GBC)\n", + "model = GradientBoostingClassifier()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will now test the performance of my model first using all the features, then with some selected ones to see if my performance increases or decreases with either the addition of or dropping of some features.\n", + "#### I started with all features because my features are not that much for me to consider dropping." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import GaussianNB\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Evaluate predictions\n", + "print(accuracy_score(Y_test, predictions))\n", + "print(confusion_matrix(Y_test, predictions))\n", + "print(classification_report(Y_test, predictions))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gives me a good score of 93.6%. I will now try selecting some features based on feature importance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This will be my first submission. It gave me a score of 99%" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y=train.CLASS\n", + "X=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X, Y).predict(test.values)\n", + "OUTPUT_1=pandas.DataFrame(OUTPUT)\n", + "OUTPUT_1.columns=[\"CLASS\"]\n", + "OUTPUT_1.index.name=\"Index\"\n", + "OUTPUT_1[\"CLASS\"]=OUTPUT_1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_1.to_csv(\"output\") #converting my output file into a csv\n", + "print(OUTPUT_1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_1[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_1.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_1.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#feature selection using feature importance\n", + "X = train.iloc[:,0:11] #independent columns\n", + "y = train.iloc[:,-1] #target column\n", + "from sklearn.ensemble import ExtraTreesClassifier\n", + "import matplotlib.pyplot as plt\n", + "model = ExtraTreesClassifier()\n", + "model.fit(X,y)\n", + "print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers\n", + "#plot graph of feature importances for better visualization\n", + "feat_importances = pd.Series(model.feature_importances_, index=X.columns)\n", + "feat_importances.nlargest(10).plot(kind='barh')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### I will select the features with the highest bars. The number of features selected will depend on the accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.columns\n", + "newtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "newtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "array = newtrain.values\n", + "X = array[:,0:5]\n", + "Y = array[:,-1]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new=newtrain.CLASS\n", + "X_new=newtrain.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X_new, Y_new).predict(newtest.values)\n", + "OUTPUT_new=pd.DataFrame(OUTPUT)\n", + "OUTPUT_new.columns=[\"CLASS\"]\n", + "OUTPUT_new.index.name=\"Index\"\n", + "OUTPUT_new[\"CLASS\"]=OUTPUT_new[\"CLASS\"].map({0.0:False,1.0:True})\n", + "OUTPUT_new.to_csv(\"out1\")\n", + "print(OUTPUT_new[\"CLASS\"].unique())\n", + "print(OUTPUT_new[\"CLASS\"].nunique())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### This gave me a score of 85%" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#this is how i checked the accuracy from the features selected\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import GaussianNB\n", + "\n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#i will now select 6 features to see if my score improves\n", + "\n", + "array = train.values\n", + "X = array[:,[0,1,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### the accuracy deacreases. let me try 4 features instead" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "array = train.values\n", + "X = array[:,[1,2,3,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### accuracy deacreases even further. so if i weere to feature select, I would use 5 features because they give me the best accuracy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Let me try the RTC model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### this actually gives me a better score than the one from GaussianNB. Let me submit it" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Evaluate predictions\n", + "print(accuracy_score(Y_test, predictions))\n", + "print(confusion_matrix(Y_test, predictions))\n", + "print(classification_report(Y_test, predictions))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new2=train.CLASS\n", + "X_new2=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT2=model.fit(X_new2, Y_new2).predict(test.values)\n", + "OUTPUT_new1=pd.DataFrame(OUTPUT2)\n", + "OUTPUT_new1.columns=[\"CLASS\"]\n", + "OUTPUT_new1.index.name=\"Index\"\n", + "OUTPUT_new1[\"CLASS\"]=OUTPUT_new1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_new1.to_csv(\"outputRTC\") #converting my output file into a csv\n", + "print(OUTPUT_new1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_new1[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_new1.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new1.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gave me a score of 83%. let me feature select the 5 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### this gives me a lower score than when all features are selected. So i will stop here." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### GBC " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GradientBoostingClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#submission with all features\n", + "Y_new4=train.CLASS\n", + "X_new4=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT4=model.fit(X_new4, Y_new4).predict(test.values)\n", + "OUTPUT_new4=pd.DataFrame(OUTPUT4)\n", + "OUTPUT_new4.columns=[\"CLASS\"]\n", + "OUTPUT_new4.index.name=\"Index\"\n", + "OUTPUT_new4[\"CLASS\"]=OUTPUT_new4[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_new4.to_csv(\"outputGBC\") #converting my output file into a csv\n", + "print(OUTPUT_new4[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_new4[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_new4.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new4.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gave me a score of 82%" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " \n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GradientBoostingClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### i get accuracy of 92,4 if i choose 5 features" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#submission with dropped\n", + "train.columns\n", + "newtrain2=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "newtest2=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "array2 = newtrain2.values\n", + "X2 = array2[:,0:5]\n", + "Y2 = array2[:,-1]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X2, Y2, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.columns\n", + "newtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "newtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "array = newtrain.values\n", + "X = array[:,0:5]\n", + "Y = array[:,-1]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new=newtrain.CLASS\n", + "X_new=newtrain.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X_new, Y_new).predict(newtest.values)\n", + "OUTPUT_new=pd.DataFrame(OUTPUT)\n", + "OUTPUT_new.columns=[\"CLASS\"]\n", + "OUTPUT_new.index.name=\"Index\"\n", + "OUTPUT_new[\"CLASS\"]=OUTPUT_new[\"CLASS\"].map({0.0:False,1.0:True})\n", + "OUTPUT_new.to_csv(\"RTC_DROP\")\n", + "print(OUTPUT_new[\"CLASS\"].unique())\n", + "print(OUTPUT_new[\"CLASS\"].nunique())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### GBC gave me a score of 81%" + ] + } + ], + "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.4" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Assignment Colab/Fezile Dlamini (2).ipynb b/Assignment Colab/Fezile Dlamini (2).ipynb new file mode 100644 index 0000000..8c8fc2d --- /dev/null +++ b/Assignment Colab/Fezile Dlamini (2).ipynb @@ -0,0 +1,3695 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " Whenever you see these signs below, understand that you need to do more:\n", + " \n", + " ## ??\n", + "
" + ] + }, + { + "cell_type": "raw", + "metadata": { + "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", + "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5" + }, + "source": [ + "# This Python 3 environment comes with many helpful analytics libraries installed\n", + "# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n", + "# For example, here's several helpful packages to load in \n", + "\n", + "import numpy as np # linear algebra\n", + "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", + "\n", + "# Input data files are available in the \"../input/\" directory.\n", + "# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n", + "\n", + "import os\n", + "for dirname, _, filenames in os.walk('/kaggle/input'):\n", + " for filename in filenames:\n", + " print(os.path.join(dirname, filename))\n", + "\n", + "# Any results you write to the current directory are saved as output." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importing Libraries\n", + "\n", + "
\n", + "\n", + "## ?? Your importing is causing errors:\n", + "\n", + "You import pandas without pd, but later you use the alias pd. Why?\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0", + "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a" + }, + "outputs": [], + "source": [ + "###Importing libraries\n", + "import pandas\n", + "import scipy\n", + "import numpy\n", + "import matplotlib\n", + "import sklearn\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading some libraries\n", + "### These are some of the libraries I think I will need\n", + "\n", + "
\n", + " \n", + " #### I think your notes below would look better in markdown, if you intend to write long sentences\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import read_csv #for reading in csv files\n", + "from pandas.plotting import scatter_matrix #for showing how one variable is affected by another\n", + "from matplotlib import pyplot #for plotting graphs\n", + "from sklearn.model_selection import train_test_split # for splitting my data into train and test\n", + "from sklearn.model_selection import cross_val_score #to estimate the skill of a machine learning model on unseen data\n", + "from sklearn.model_selection import StratifiedKFold #he folds are selected so that the mean response value is approximately equal in all the folds. In the case of a dichotomous classification, this means that each fold contains roughly the same proportions of the two types of class labels\n", + "from sklearn.metrics import classification_report #Visual classification reports are used to compare classification models to select models that are “redder”, e.g. have stronger classification metrics or that are more balanced.\n", + "from sklearn.metrics import confusion_matrix #A confusion matrix is a table that is often used to describe the performance of a classification model (or “classifier”) on a set of test data for which the true values are known. It allows the visualization of the performance of an algorithm.\n", + "from sklearn.metrics import accuracy_score #It is the ratio of number of correct predictions to the total number of input samples\n", + "from sklearn.linear_model import LogisticRegression #an algorithm for classification\n", + "from sklearn.tree import DecisionTreeClassifier #create a model that predicts the value of a target variable by learning simple decision rules inferred from the data features.\n", + "from sklearn.neighbors import KNeighborsClassifier #for classification\n", + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis #used for modeling differences in groups i.e. separating two or more classes\n", + "from sklearn.naive_bayes import GaussianNB #an algorithm that estimates the mean and the standard deviation from your training data,\n", + "from sklearn.svm import SVC #an algorithm that creates a line or a hyperplane which separates the data into classes\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.linear_model import SGDClassifier\n", + "from sklearn.neighbors import NearestCentroid\n", + "from sklearn.neural_network import MLPClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "#this suprreses unnecesary warnings from my output\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading My Dataset\n", + "\n", + "##### I am going to first use my training dataset, then the test dataset last." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FULL_ChargeFULL_AcidicMolPercFULL_AURR980107FULL_DAYM780201FULL_GEOR030101FULL_OOBM850104NT_EFC195AS_MeanAmphiMomentAS_DAYM780201AS_FUKS010112CT_RACS820104CLASS
05.00.0000.95174.8420.975-3.66300.28273.4445.6611.0411
14.05.4050.93171.5950.957-4.01110.60068.2226.5371.4531
25.55.4050.87373.5950.961-2.51200.59369.4444.9341.7221
35.04.1670.89566.2500.999-1.36200.61467.2224.3161.3821
47.58.5370.93264.7200.979-2.09100.61672.9444.5401.5391
55.07.6921.03078.9490.976-3.09110.51178.7785.9921.0911
63.06.8970.93078.5860.957-3.54410.38578.2226.2841.4671
72.05.8820.86876.5880.949-5.83200.15476.5886.4791.0861
87.02.6320.85760.4471.012-0.29200.18864.3333.8491.9251
99.00.0000.91165.8081.049-3.88800.36163.2226.3271.2161
102.03.4480.99171.1720.990-3.71200.51076.3895.4021.2851
112.50.0000.96060.5790.998-1.36100.16361.6675.6271.0551
123.00.0000.84870.8750.967-3.60310.26371.6116.8041.0291
133.07.1430.88571.3570.955-4.33010.23272.7786.7261.4451
142.57.6920.95360.7691.021-3.64100.40260.7697.1121.0281
156.04.3480.84267.8700.980-1.43200.18765.1675.2381.4381
162.00.0000.83873.8420.990-4.92800.53675.6676.9961.0711
174.00.0000.89064.0830.993-4.97700.82665.9446.0381.4421
184.511.1111.03277.1851.020-0.69401.10078.4446.1411.3341
192.04.1670.92568.6670.997-3.12701.21066.9446.1491.1651
202.06.6670.95568.2330.961-3.32701.30473.5006.6041.3921
213.010.3451.07272.0000.974-4.70401.72661.0565.7220.8901
223.52.7030.98672.9190.967-3.62811.71770.8336.6691.4451
231.00.0000.84552.7691.037-4.65802.83452.7697.4261.0241
241.00.0000.83863.2311.048-4.06002.98063.2316.9421.1321
255.54.3480.96058.9130.994-4.75602.13863.4447.5460.9791
266.50.0000.94163.9171.030-3.42102.43562.0566.8011.2101
271.05.5560.88074.8330.977-3.87812.04474.8336.6441.1431
286.50.0000.97366.5000.995-4.23402.70469.4445.6731.1431
297.58.3330.93669.3750.989-1.76502.74365.8895.2421.5591
.......................................
3008-6.020.0001.07383.6861.000-1.426015.45281.7226.5661.0930
3009-1.022.5001.09977.7001.001-0.214015.62578.3335.7471.1130
30101.012.5000.96379.7080.980-1.255015.50275.5565.5581.0360
30110.05.2630.95773.0790.991-1.528015.67670.5565.7231.0790
3012-3.019.6081.14483.4121.015-1.029015.81375.1116.3781.1680
3013-1.012.2450.99176.1220.985-1.688015.77478.2786.3741.1530
3014-1.016.6671.13880.2500.993-0.350023.50280.2505.3251.2070
30152.010.8110.94667.5140.985-2.240015.97465.9445.1691.1740
3016-1.08.3330.94271.0001.017-1.488023.55071.0005.0171.3910
30170.010.2561.00980.0771.003-1.074015.78180.1676.1491.1070
30180.018.7501.18188.2500.998-1.314017.66688.2506.3831.1330
3019-0.516.6671.06177.7291.000-1.155015.83880.1116.1381.0380
30200.511.4291.05977.6571.008-0.905015.86774.1675.5231.0880
30211.011.5381.01578.0381.037-0.200016.20979.9445.2671.0440
30223.00.0000.95866.7691.036-0.173022.47766.7696.0681.3790
30232.012.0001.00475.8671.001-1.416016.44474.1115.6111.1620
30243.520.0001.01573.0500.991-2.797016.49574.9446.6061.1410
30252.510.7140.93378.0710.966-2.887016.51382.0565.7321.1140
30260.50.0000.86081.5450.995-0.618026.93181.5455.1201.2050
30279.07.5470.92677.2830.998-3.418016.51778.1115.4511.1810
3028-2.018.7501.28979.9381.0281.094018.11979.9386.2411.0600
30294.514.2861.05869.1430.995-1.085020.62569.1435.7691.2000
30302.012.9630.99972.8150.985-3.446016.25665.7226.3781.3400
30310.017.0211.04576.2340.993-2.268016.36577.2785.8211.1160
30320.016.6671.08182.9171.001-2.073024.49782.9175.6401.1850
30331.05.2630.94567.9471.006-2.151016.70668.6115.5981.1440
3034-6.521.6671.13375.4331.015-1.675016.89773.2786.1941.6390
3035-1.512.5001.09176.5420.991-0.918016.91882.1115.8891.1310
30362.05.0000.84973.7501.017-2.722017.13174.7226.0551.2700
3037-1.015.7891.06666.1580.998-2.080017.15167.1115.8531.1360
\n", + "

3038 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 FULL_DAYM780201 \\\n", + "0 5.0 0.000 0.951 74.842 \n", + "1 4.0 5.405 0.931 71.595 \n", + "2 5.5 5.405 0.873 73.595 \n", + "3 5.0 4.167 0.895 66.250 \n", + "4 7.5 8.537 0.932 64.720 \n", + "5 5.0 7.692 1.030 78.949 \n", + "6 3.0 6.897 0.930 78.586 \n", + "7 2.0 5.882 0.868 76.588 \n", + "8 7.0 2.632 0.857 60.447 \n", + "9 9.0 0.000 0.911 65.808 \n", + "10 2.0 3.448 0.991 71.172 \n", + "11 2.5 0.000 0.960 60.579 \n", + "12 3.0 0.000 0.848 70.875 \n", + "13 3.0 7.143 0.885 71.357 \n", + "14 2.5 7.692 0.953 60.769 \n", + "15 6.0 4.348 0.842 67.870 \n", + "16 2.0 0.000 0.838 73.842 \n", + "17 4.0 0.000 0.890 64.083 \n", + "18 4.5 11.111 1.032 77.185 \n", + "19 2.0 4.167 0.925 68.667 \n", + "20 2.0 6.667 0.955 68.233 \n", + "21 3.0 10.345 1.072 72.000 \n", + "22 3.5 2.703 0.986 72.919 \n", + "23 1.0 0.000 0.845 52.769 \n", + "24 1.0 0.000 0.838 63.231 \n", + "25 5.5 4.348 0.960 58.913 \n", + "26 6.5 0.000 0.941 63.917 \n", + "27 1.0 5.556 0.880 74.833 \n", + "28 6.5 0.000 0.973 66.500 \n", + "29 7.5 8.333 0.936 69.375 \n", + "... ... ... ... ... \n", + "3008 -6.0 20.000 1.073 83.686 \n", + "3009 -1.0 22.500 1.099 77.700 \n", + "3010 1.0 12.500 0.963 79.708 \n", + "3011 0.0 5.263 0.957 73.079 \n", + "3012 -3.0 19.608 1.144 83.412 \n", + "3013 -1.0 12.245 0.991 76.122 \n", + "3014 -1.0 16.667 1.138 80.250 \n", + "3015 2.0 10.811 0.946 67.514 \n", + "3016 -1.0 8.333 0.942 71.000 \n", + "3017 0.0 10.256 1.009 80.077 \n", + "3018 0.0 18.750 1.181 88.250 \n", + "3019 -0.5 16.667 1.061 77.729 \n", + "3020 0.5 11.429 1.059 77.657 \n", + "3021 1.0 11.538 1.015 78.038 \n", + "3022 3.0 0.000 0.958 66.769 \n", + "3023 2.0 12.000 1.004 75.867 \n", + "3024 3.5 20.000 1.015 73.050 \n", + "3025 2.5 10.714 0.933 78.071 \n", + "3026 0.5 0.000 0.860 81.545 \n", + "3027 9.0 7.547 0.926 77.283 \n", + "3028 -2.0 18.750 1.289 79.938 \n", + "3029 4.5 14.286 1.058 69.143 \n", + "3030 2.0 12.963 0.999 72.815 \n", + "3031 0.0 17.021 1.045 76.234 \n", + "3032 0.0 16.667 1.081 82.917 \n", + "3033 1.0 5.263 0.945 67.947 \n", + "3034 -6.5 21.667 1.133 75.433 \n", + "3035 -1.5 12.500 1.091 76.542 \n", + "3036 2.0 5.000 0.849 73.750 \n", + "3037 -1.0 15.789 1.066 66.158 \n", + "\n", + " FULL_GEOR030101 FULL_OOBM850104 NT_EFC195 AS_MeanAmphiMoment \\\n", + "0 0.975 -3.663 0 0.282 \n", + "1 0.957 -4.011 1 0.600 \n", + "2 0.961 -2.512 0 0.593 \n", + "3 0.999 -1.362 0 0.614 \n", + "4 0.979 -2.091 0 0.616 \n", + "5 0.976 -3.091 1 0.511 \n", + "6 0.957 -3.544 1 0.385 \n", + "7 0.949 -5.832 0 0.154 \n", + "8 1.012 -0.292 0 0.188 \n", + "9 1.049 -3.888 0 0.361 \n", + "10 0.990 -3.712 0 0.510 \n", + "11 0.998 -1.361 0 0.163 \n", + "12 0.967 -3.603 1 0.263 \n", + "13 0.955 -4.330 1 0.232 \n", + "14 1.021 -3.641 0 0.402 \n", + "15 0.980 -1.432 0 0.187 \n", + "16 0.990 -4.928 0 0.536 \n", + "17 0.993 -4.977 0 0.826 \n", + "18 1.020 -0.694 0 1.100 \n", + "19 0.997 -3.127 0 1.210 \n", + "20 0.961 -3.327 0 1.304 \n", + "21 0.974 -4.704 0 1.726 \n", + "22 0.967 -3.628 1 1.717 \n", + "23 1.037 -4.658 0 2.834 \n", + "24 1.048 -4.060 0 2.980 \n", + "25 0.994 -4.756 0 2.138 \n", + "26 1.030 -3.421 0 2.435 \n", + "27 0.977 -3.878 1 2.044 \n", + "28 0.995 -4.234 0 2.704 \n", + "29 0.989 -1.765 0 2.743 \n", + "... ... ... ... ... \n", + "3008 1.000 -1.426 0 15.452 \n", + "3009 1.001 -0.214 0 15.625 \n", + "3010 0.980 -1.255 0 15.502 \n", + "3011 0.991 -1.528 0 15.676 \n", + "3012 1.015 -1.029 0 15.813 \n", + "3013 0.985 -1.688 0 15.774 \n", + "3014 0.993 -0.350 0 23.502 \n", + "3015 0.985 -2.240 0 15.974 \n", + "3016 1.017 -1.488 0 23.550 \n", + "3017 1.003 -1.074 0 15.781 \n", + "3018 0.998 -1.314 0 17.666 \n", + "3019 1.000 -1.155 0 15.838 \n", + "3020 1.008 -0.905 0 15.867 \n", + "3021 1.037 -0.200 0 16.209 \n", + "3022 1.036 -0.173 0 22.477 \n", + "3023 1.001 -1.416 0 16.444 \n", + "3024 0.991 -2.797 0 16.495 \n", + "3025 0.966 -2.887 0 16.513 \n", + "3026 0.995 -0.618 0 26.931 \n", + "3027 0.998 -3.418 0 16.517 \n", + "3028 1.028 1.094 0 18.119 \n", + "3029 0.995 -1.085 0 20.625 \n", + "3030 0.985 -3.446 0 16.256 \n", + "3031 0.993 -2.268 0 16.365 \n", + "3032 1.001 -2.073 0 24.497 \n", + "3033 1.006 -2.151 0 16.706 \n", + "3034 1.015 -1.675 0 16.897 \n", + "3035 0.991 -0.918 0 16.918 \n", + "3036 1.017 -2.722 0 17.131 \n", + "3037 0.998 -2.080 0 17.151 \n", + "\n", + " AS_DAYM780201 AS_FUKS010112 CT_RACS820104 CLASS \n", + "0 73.444 5.661 1.041 1 \n", + "1 68.222 6.537 1.453 1 \n", + "2 69.444 4.934 1.722 1 \n", + "3 67.222 4.316 1.382 1 \n", + "4 72.944 4.540 1.539 1 \n", + "5 78.778 5.992 1.091 1 \n", + "6 78.222 6.284 1.467 1 \n", + "7 76.588 6.479 1.086 1 \n", + "8 64.333 3.849 1.925 1 \n", + "9 63.222 6.327 1.216 1 \n", + "10 76.389 5.402 1.285 1 \n", + "11 61.667 5.627 1.055 1 \n", + "12 71.611 6.804 1.029 1 \n", + "13 72.778 6.726 1.445 1 \n", + "14 60.769 7.112 1.028 1 \n", + "15 65.167 5.238 1.438 1 \n", + "16 75.667 6.996 1.071 1 \n", + "17 65.944 6.038 1.442 1 \n", + "18 78.444 6.141 1.334 1 \n", + "19 66.944 6.149 1.165 1 \n", + "20 73.500 6.604 1.392 1 \n", + "21 61.056 5.722 0.890 1 \n", + "22 70.833 6.669 1.445 1 \n", + "23 52.769 7.426 1.024 1 \n", + "24 63.231 6.942 1.132 1 \n", + "25 63.444 7.546 0.979 1 \n", + "26 62.056 6.801 1.210 1 \n", + "27 74.833 6.644 1.143 1 \n", + "28 69.444 5.673 1.143 1 \n", + "29 65.889 5.242 1.559 1 \n", + "... ... ... ... ... \n", + "3008 81.722 6.566 1.093 0 \n", + "3009 78.333 5.747 1.113 0 \n", + "3010 75.556 5.558 1.036 0 \n", + "3011 70.556 5.723 1.079 0 \n", + "3012 75.111 6.378 1.168 0 \n", + "3013 78.278 6.374 1.153 0 \n", + "3014 80.250 5.325 1.207 0 \n", + "3015 65.944 5.169 1.174 0 \n", + "3016 71.000 5.017 1.391 0 \n", + "3017 80.167 6.149 1.107 0 \n", + "3018 88.250 6.383 1.133 0 \n", + "3019 80.111 6.138 1.038 0 \n", + "3020 74.167 5.523 1.088 0 \n", + "3021 79.944 5.267 1.044 0 \n", + "3022 66.769 6.068 1.379 0 \n", + "3023 74.111 5.611 1.162 0 \n", + "3024 74.944 6.606 1.141 0 \n", + "3025 82.056 5.732 1.114 0 \n", + "3026 81.545 5.120 1.205 0 \n", + "3027 78.111 5.451 1.181 0 \n", + "3028 79.938 6.241 1.060 0 \n", + "3029 69.143 5.769 1.200 0 \n", + "3030 65.722 6.378 1.340 0 \n", + "3031 77.278 5.821 1.116 0 \n", + "3032 82.917 5.640 1.185 0 \n", + "3033 68.611 5.598 1.144 0 \n", + "3034 73.278 6.194 1.639 0 \n", + "3035 82.111 5.889 1.131 0 \n", + "3036 74.722 6.055 1.270 0 \n", + "3037 67.111 5.853 1.136 0 \n", + "\n", + "[3038 rows x 12 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train = pandas.read_csv('../AMP Data Sets/AMP_TrainSet.csv')#reading in my train dataset\n", + "train\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FULL_ChargeFULL_AcidicMolPercFULL_AURR980107FULL_DAYM780201FULL_GEOR030101FULL_OOBM850104NT_EFC195AS_MeanAmphiMomentAS_DAYM780201AS_FUKS010112CT_RACS820104
04.03.7040.87373.5190.987-4.83300.38274.5567.2251.234
14.04.4440.89262.4440.931-0.58400.32056.0564.9421.853
22.00.0000.90147.0001.039-5.66400.16447.0005.9691.174
34.50.0000.86969.2220.982-5.42302.01069.2225.4621.138
4-4.021.5911.06171.6820.976-2.00202.75866.0005.5821.453
54.56.9770.89568.5120.950-1.87803.09072.0005.7791.844
612.03.1751.02274.4601.010-3.22503.17276.7225.6641.215
71.53.7040.93269.5190.977-2.50902.54372.0004.2511.560
83.03.3330.90359.5000.963-1.68202.99066.0005.1751.514
94.00.0000.87372.7920.998-4.94302.98577.4445.6261.621
1011.08.2190.92775.0680.989-3.11803.49376.3896.0471.126
114.52.7030.96669.7570.972-3.89613.71476.4445.4921.445
120.011.5381.02777.9230.981-3.95413.67978.0567.2221.054
136.03.3331.11479.1001.024-2.43703.98875.5566.6671.079
140.00.0001.00578.9711.1021.54404.14378.5564.4721.280
153.06.0610.89776.4550.955-4.03214.31081.2226.2071.506
163.02.1280.88964.0641.0000.58304.09774.6675.0971.302
179.50.0000.78655.6470.955-0.57703.81661.6674.8292.026
181.512.0000.94870.7200.956-3.55913.98266.5007.0241.050
194.00.0000.82854.8751.048-2.85304.29354.8755.2291.651
205.03.1250.90169.5940.995-1.67703.87658.5005.2781.486
211.50.0000.87267.2000.972-5.39204.47167.2006.5240.986
222.00.0000.78664.1500.969-4.70603.92963.7226.9411.040
238.00.0000.93362.8001.008-4.17004.10462.6674.8701.547
243.010.8111.08677.1081.010-2.11204.20878.0565.7481.249
254.02.9410.90071.2060.967-3.96304.12672.6116.8281.507
2610.00.0000.84569.5110.975-2.04903.97770.7224.8911.543
275.50.0000.94671.6671.023-4.98203.43971.6675.9531.108
289.00.0000.82254.5450.993-3.95503.56255.5006.0861.114
29-6.038.2351.23983.5591.0020.10813.31791.5005.7231.055
....................................
7281.04.1670.93167.8330.936-0.775014.99368.6676.0471.125
7291.07.4070.93081.2590.985-2.859014.99380.7786.0121.051
7300.025.0001.11979.6671.023-0.379014.98677.6676.0421.137
731-2.017.5001.06884.1000.995-1.328014.94390.0006.0811.484
7321.04.5450.83085.0910.996-3.729014.98285.8335.6121.165
7331.011.5381.05070.8851.015-2.530014.98175.7225.3371.327
7340.013.3330.92572.5330.993-2.093018.27972.5335.5251.147
7350.511.1111.13580.7781.034-1.448014.95180.7785.4111.079
736-0.513.3330.95775.2000.969-1.257017.79975.2005.9391.150
7375.010.2040.94778.1840.986-3.313015.30077.1116.2391.050
738-1.019.2311.06591.0771.0040.520015.21495.6115.3691.276
739-1.517.6471.11982.1471.005-1.477015.32181.3335.7711.016
7406.53.7040.90976.1111.009-2.840015.66679.2226.0231.242
7415.00.0000.83680.0970.973-2.795015.11082.6115.9231.245
742-3.513.3331.11575.2891.027-1.292015.05880.3895.8091.300
7434.08.3330.92879.0000.960-3.607015.09180.9445.4171.316
74410.517.0001.09182.1601.003-2.414015.27074.9445.6011.053
7455.512.8210.99667.5130.991-4.674014.98967.9446.9281.166
746-2.019.0481.03085.3330.969-1.162015.45886.5006.2841.156
747-2.520.5131.09982.7951.014-0.965015.71586.3335.5891.127
748-2.025.0001.17886.4171.0131.322022.98986.4175.5841.228
749-4.021.8751.02166.1880.994-0.523015.49971.2225.9391.080
7502.00.0001.05486.4621.051-0.815020.86686.4625.7121.298
751-2.014.8941.04283.2550.978-1.303015.26085.1675.7181.164
752-8.028.2611.22182.1091.014-0.153015.35581.1676.9040.933
753-1.516.0001.10082.8200.991-1.987015.18585.3337.0531.325
754-1.018.1821.08573.4551.027-0.745016.55074.6676.7291.132
755-1.019.0481.10882.1901.033-1.789016.11279.6676.0361.219
756-1.07.1430.95576.7861.0231.141020.63076.7865.6691.111
757-7.017.1431.07884.1861.009-0.066017.16876.6116.6881.305
\n", + "

758 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 FULL_DAYM780201 \\\n", + "0 4.0 3.704 0.873 73.519 \n", + "1 4.0 4.444 0.892 62.444 \n", + "2 2.0 0.000 0.901 47.000 \n", + "3 4.5 0.000 0.869 69.222 \n", + "4 -4.0 21.591 1.061 71.682 \n", + "5 4.5 6.977 0.895 68.512 \n", + "6 12.0 3.175 1.022 74.460 \n", + "7 1.5 3.704 0.932 69.519 \n", + "8 3.0 3.333 0.903 59.500 \n", + "9 4.0 0.000 0.873 72.792 \n", + "10 11.0 8.219 0.927 75.068 \n", + "11 4.5 2.703 0.966 69.757 \n", + "12 0.0 11.538 1.027 77.923 \n", + "13 6.0 3.333 1.114 79.100 \n", + "14 0.0 0.000 1.005 78.971 \n", + "15 3.0 6.061 0.897 76.455 \n", + "16 3.0 2.128 0.889 64.064 \n", + "17 9.5 0.000 0.786 55.647 \n", + "18 1.5 12.000 0.948 70.720 \n", + "19 4.0 0.000 0.828 54.875 \n", + "20 5.0 3.125 0.901 69.594 \n", + "21 1.5 0.000 0.872 67.200 \n", + "22 2.0 0.000 0.786 64.150 \n", + "23 8.0 0.000 0.933 62.800 \n", + "24 3.0 10.811 1.086 77.108 \n", + "25 4.0 2.941 0.900 71.206 \n", + "26 10.0 0.000 0.845 69.511 \n", + "27 5.5 0.000 0.946 71.667 \n", + "28 9.0 0.000 0.822 54.545 \n", + "29 -6.0 38.235 1.239 83.559 \n", + ".. ... ... ... ... \n", + "728 1.0 4.167 0.931 67.833 \n", + "729 1.0 7.407 0.930 81.259 \n", + "730 0.0 25.000 1.119 79.667 \n", + "731 -2.0 17.500 1.068 84.100 \n", + "732 1.0 4.545 0.830 85.091 \n", + "733 1.0 11.538 1.050 70.885 \n", + "734 0.0 13.333 0.925 72.533 \n", + "735 0.5 11.111 1.135 80.778 \n", + "736 -0.5 13.333 0.957 75.200 \n", + "737 5.0 10.204 0.947 78.184 \n", + "738 -1.0 19.231 1.065 91.077 \n", + "739 -1.5 17.647 1.119 82.147 \n", + "740 6.5 3.704 0.909 76.111 \n", + "741 5.0 0.000 0.836 80.097 \n", + "742 -3.5 13.333 1.115 75.289 \n", + "743 4.0 8.333 0.928 79.000 \n", + "744 10.5 17.000 1.091 82.160 \n", + "745 5.5 12.821 0.996 67.513 \n", + "746 -2.0 19.048 1.030 85.333 \n", + "747 -2.5 20.513 1.099 82.795 \n", + "748 -2.0 25.000 1.178 86.417 \n", + "749 -4.0 21.875 1.021 66.188 \n", + "750 2.0 0.000 1.054 86.462 \n", + "751 -2.0 14.894 1.042 83.255 \n", + "752 -8.0 28.261 1.221 82.109 \n", + "753 -1.5 16.000 1.100 82.820 \n", + "754 -1.0 18.182 1.085 73.455 \n", + "755 -1.0 19.048 1.108 82.190 \n", + "756 -1.0 7.143 0.955 76.786 \n", + "757 -7.0 17.143 1.078 84.186 \n", + "\n", + " FULL_GEOR030101 FULL_OOBM850104 NT_EFC195 AS_MeanAmphiMoment \\\n", + "0 0.987 -4.833 0 0.382 \n", + "1 0.931 -0.584 0 0.320 \n", + "2 1.039 -5.664 0 0.164 \n", + "3 0.982 -5.423 0 2.010 \n", + "4 0.976 -2.002 0 2.758 \n", + "5 0.950 -1.878 0 3.090 \n", + "6 1.010 -3.225 0 3.172 \n", + "7 0.977 -2.509 0 2.543 \n", + "8 0.963 -1.682 0 2.990 \n", + "9 0.998 -4.943 0 2.985 \n", + "10 0.989 -3.118 0 3.493 \n", + "11 0.972 -3.896 1 3.714 \n", + "12 0.981 -3.954 1 3.679 \n", + "13 1.024 -2.437 0 3.988 \n", + "14 1.102 1.544 0 4.143 \n", + "15 0.955 -4.032 1 4.310 \n", + "16 1.000 0.583 0 4.097 \n", + "17 0.955 -0.577 0 3.816 \n", + "18 0.956 -3.559 1 3.982 \n", + "19 1.048 -2.853 0 4.293 \n", + "20 0.995 -1.677 0 3.876 \n", + "21 0.972 -5.392 0 4.471 \n", + "22 0.969 -4.706 0 3.929 \n", + "23 1.008 -4.170 0 4.104 \n", + "24 1.010 -2.112 0 4.208 \n", + "25 0.967 -3.963 0 4.126 \n", + "26 0.975 -2.049 0 3.977 \n", + "27 1.023 -4.982 0 3.439 \n", + "28 0.993 -3.955 0 3.562 \n", + "29 1.002 0.108 1 3.317 \n", + ".. ... ... ... ... \n", + "728 0.936 -0.775 0 14.993 \n", + "729 0.985 -2.859 0 14.993 \n", + "730 1.023 -0.379 0 14.986 \n", + "731 0.995 -1.328 0 14.943 \n", + "732 0.996 -3.729 0 14.982 \n", + "733 1.015 -2.530 0 14.981 \n", + "734 0.993 -2.093 0 18.279 \n", + "735 1.034 -1.448 0 14.951 \n", + "736 0.969 -1.257 0 17.799 \n", + "737 0.986 -3.313 0 15.300 \n", + "738 1.004 0.520 0 15.214 \n", + "739 1.005 -1.477 0 15.321 \n", + "740 1.009 -2.840 0 15.666 \n", + "741 0.973 -2.795 0 15.110 \n", + "742 1.027 -1.292 0 15.058 \n", + "743 0.960 -3.607 0 15.091 \n", + "744 1.003 -2.414 0 15.270 \n", + "745 0.991 -4.674 0 14.989 \n", + "746 0.969 -1.162 0 15.458 \n", + "747 1.014 -0.965 0 15.715 \n", + "748 1.013 1.322 0 22.989 \n", + "749 0.994 -0.523 0 15.499 \n", + "750 1.051 -0.815 0 20.866 \n", + "751 0.978 -1.303 0 15.260 \n", + "752 1.014 -0.153 0 15.355 \n", + "753 0.991 -1.987 0 15.185 \n", + "754 1.027 -0.745 0 16.550 \n", + "755 1.033 -1.789 0 16.112 \n", + "756 1.023 1.141 0 20.630 \n", + "757 1.009 -0.066 0 17.168 \n", + "\n", + " AS_DAYM780201 AS_FUKS010112 CT_RACS820104 \n", + "0 74.556 7.225 1.234 \n", + "1 56.056 4.942 1.853 \n", + "2 47.000 5.969 1.174 \n", + "3 69.222 5.462 1.138 \n", + "4 66.000 5.582 1.453 \n", + "5 72.000 5.779 1.844 \n", + "6 76.722 5.664 1.215 \n", + "7 72.000 4.251 1.560 \n", + "8 66.000 5.175 1.514 \n", + "9 77.444 5.626 1.621 \n", + "10 76.389 6.047 1.126 \n", + "11 76.444 5.492 1.445 \n", + "12 78.056 7.222 1.054 \n", + "13 75.556 6.667 1.079 \n", + "14 78.556 4.472 1.280 \n", + "15 81.222 6.207 1.506 \n", + "16 74.667 5.097 1.302 \n", + "17 61.667 4.829 2.026 \n", + "18 66.500 7.024 1.050 \n", + "19 54.875 5.229 1.651 \n", + "20 58.500 5.278 1.486 \n", + "21 67.200 6.524 0.986 \n", + "22 63.722 6.941 1.040 \n", + "23 62.667 4.870 1.547 \n", + "24 78.056 5.748 1.249 \n", + "25 72.611 6.828 1.507 \n", + "26 70.722 4.891 1.543 \n", + "27 71.667 5.953 1.108 \n", + "28 55.500 6.086 1.114 \n", + "29 91.500 5.723 1.055 \n", + ".. ... ... ... \n", + "728 68.667 6.047 1.125 \n", + "729 80.778 6.012 1.051 \n", + "730 77.667 6.042 1.137 \n", + "731 90.000 6.081 1.484 \n", + "732 85.833 5.612 1.165 \n", + "733 75.722 5.337 1.327 \n", + "734 72.533 5.525 1.147 \n", + "735 80.778 5.411 1.079 \n", + "736 75.200 5.939 1.150 \n", + "737 77.111 6.239 1.050 \n", + "738 95.611 5.369 1.276 \n", + "739 81.333 5.771 1.016 \n", + "740 79.222 6.023 1.242 \n", + "741 82.611 5.923 1.245 \n", + "742 80.389 5.809 1.300 \n", + "743 80.944 5.417 1.316 \n", + "744 74.944 5.601 1.053 \n", + "745 67.944 6.928 1.166 \n", + "746 86.500 6.284 1.156 \n", + "747 86.333 5.589 1.127 \n", + "748 86.417 5.584 1.228 \n", + "749 71.222 5.939 1.080 \n", + "750 86.462 5.712 1.298 \n", + "751 85.167 5.718 1.164 \n", + "752 81.167 6.904 0.933 \n", + "753 85.333 7.053 1.325 \n", + "754 74.667 6.729 1.132 \n", + "755 79.667 6.036 1.219 \n", + "756 76.786 5.669 1.111 \n", + "757 76.611 6.688 1.305 \n", + "\n", + "[758 rows x 11 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test= pandas.read_csv('../AMP Data Sets/Test.csv') #reading in my test dataset\n", + "test" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspecting my train dataset\n", + "\n", + "
\n", + "The way you are commenting in the code is fine.\n", + " \n", + " It would be better to write shorter explanation there and longer with markdown.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3038, 12)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.shape #a tuple that gives you an indication of the number of dimensions in the array." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FULL_Charge 0\n", + "FULL_AcidicMolPerc 0\n", + "FULL_AURR980107 0\n", + "FULL_DAYM780201 0\n", + "FULL_GEOR030101 0\n", + "FULL_OOBM850104 0\n", + "NT_EFC195 0\n", + "AS_MeanAmphiMoment 0\n", + "AS_DAYM780201 0\n", + "AS_FUKS010112 0\n", + "CT_RACS820104 0\n", + "CLASS 0\n", + "dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.isnull().sum() ###this will show the number of null values in my data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FULL_Charge 3038\n", + "FULL_AcidicMolPerc 3038\n", + "FULL_AURR980107 3038\n", + "FULL_DAYM780201 3038\n", + "FULL_GEOR030101 3038\n", + "FULL_OOBM850104 3038\n", + "NT_EFC195 3038\n", + "AS_MeanAmphiMoment 3038\n", + "AS_DAYM780201 3038\n", + "AS_FUKS010112 3038\n", + "CT_RACS820104 3038\n", + "CLASS 3038\n", + "dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.count() #returns number of non-null values in my data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### It seems i have no missing values in my data\n", + "\n", + "
\n", + "Good\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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", + "
FULL_ChargeFULL_AcidicMolPercFULL_AURR980107FULL_DAYM780201FULL_GEOR030101FULL_OOBM850104NT_EFC195AS_MeanAmphiMomentAS_DAYM780201AS_FUKS010112CT_RACS820104CLASS
count3038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.0000003038.000000
mean2.0602378.5215200.97141073.6687600.994007-2.4329270.08854515.68323373.6508285.9113611.2352550.500000
std3.8199297.5866520.1074138.5274890.0313331.7072230.28413311.5756659.1660920.6936890.2100120.500082
min-16.0000000.0000000.68400042.7500000.866000-10.4320000.0000000.04100042.7780003.5330000.7850000.000000
25%0.0000002.5160000.89500068.2940000.974000-3.6060000.0000005.58750067.5560005.4592501.0820000.000000
50%2.0000007.1430000.96300074.0595000.994000-2.2965000.00000014.98850073.6970005.9255001.1840000.500000
75%4.00000013.1580001.04100079.3437501.011000-1.2832500.00000026.80775079.7780006.3820001.3510001.000000
max30.00000046.6670001.451000101.6820001.1960003.5760001.00000051.280000103.1670008.6620002.1920001.000000
\n", + "
" + ], + "text/plain": [ + " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 FULL_DAYM780201 \\\n", + "count 3038.000000 3038.000000 3038.000000 3038.000000 \n", + "mean 2.060237 8.521520 0.971410 73.668760 \n", + "std 3.819929 7.586652 0.107413 8.527489 \n", + "min -16.000000 0.000000 0.684000 42.750000 \n", + "25% 0.000000 2.516000 0.895000 68.294000 \n", + "50% 2.000000 7.143000 0.963000 74.059500 \n", + "75% 4.000000 13.158000 1.041000 79.343750 \n", + "max 30.000000 46.667000 1.451000 101.682000 \n", + "\n", + " FULL_GEOR030101 FULL_OOBM850104 NT_EFC195 AS_MeanAmphiMoment \\\n", + "count 3038.000000 3038.000000 3038.000000 3038.000000 \n", + "mean 0.994007 -2.432927 0.088545 15.683233 \n", + "std 0.031333 1.707223 0.284133 11.575665 \n", + "min 0.866000 -10.432000 0.000000 0.041000 \n", + "25% 0.974000 -3.606000 0.000000 5.587500 \n", + "50% 0.994000 -2.296500 0.000000 14.988500 \n", + "75% 1.011000 -1.283250 0.000000 26.807750 \n", + "max 1.196000 3.576000 1.000000 51.280000 \n", + "\n", + " AS_DAYM780201 AS_FUKS010112 CT_RACS820104 CLASS \n", + "count 3038.000000 3038.000000 3038.000000 3038.000000 \n", + "mean 73.650828 5.911361 1.235255 0.500000 \n", + "std 9.166092 0.693689 0.210012 0.500082 \n", + "min 42.778000 3.533000 0.785000 0.000000 \n", + "25% 67.556000 5.459250 1.082000 0.000000 \n", + "50% 73.697000 5.925500 1.184000 0.500000 \n", + "75% 79.778000 6.382000 1.351000 1.000000 \n", + "max 103.167000 8.662000 2.192000 1.000000 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.describe() #returns summary of the whole data" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 3038 entries, 0 to 3037\n", + "Data columns (total 12 columns):\n", + "FULL_Charge 3038 non-null float64\n", + "FULL_AcidicMolPerc 3038 non-null float64\n", + "FULL_AURR980107 3038 non-null float64\n", + "FULL_DAYM780201 3038 non-null float64\n", + "FULL_GEOR030101 3038 non-null float64\n", + "FULL_OOBM850104 3038 non-null float64\n", + "NT_EFC195 3038 non-null int64\n", + "AS_MeanAmphiMoment 3038 non-null float64\n", + "AS_DAYM780201 3038 non-null float64\n", + "AS_FUKS010112 3038 non-null float64\n", + "CT_RACS820104 3038 non-null float64\n", + "CLASS 3038 non-null int64\n", + "dtypes: float64(10), int64(2)\n", + "memory usage: 284.9 KB\n" + ] + } + ], + "source": [ + "train.info() #It returns range, column, number of non-null objects of each column, datatype and memory usage" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### This shows that my dataset has 3038 rows (instances) and 12 columns (attributes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### I will also take a look at how many instances i have for each class" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CLASS\n", + "0 1519\n", + "1 1519\n", + "dtype: int64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.groupby('CLASS').size()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pyplot' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'CLASS'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'bar'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#i can also show this in a graph form\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mpyplot\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'pyplot' is not defined" + ] + } + ], + "source": [ + "train.groupby('CLASS').size().plot(kind='bar') #i can also show this in a graph form\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I have two groups of classes, each with 1519 instances" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DATA VISUALISATION\n", + "\n", + "
\n", + "\n", + "## ??\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will start with univariate plots to see each individual variable\n", + "\n", + "
\n", + "\n", + "## ??\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pyplot' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#visualizing using histograms\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m16\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m16\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mpyplot\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'pyplot' is not defined" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#visualizing using histograms\n", + "train.hist(figsize=(16,16))\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### These histograms show that FullAcidicMolPerc is exponentially distributed while the rest are have a Gaussian distribution except for NT_EFC195 and CLASS. Histograms also help us identify outliers. From this output, I can say there are no outliers.\n", + "\n", + "
\n", + "Good observations\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "## ??\n", + "\n", + "What did you find out from the cell below.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FULL_Charge 0.534602\n", + "FULL_AcidicMolPerc -0.598816\n", + "FULL_AURR980107 -0.584111\n", + "FULL_DAYM780201 -0.554838\n", + "FULL_GEOR030101 -0.260470\n", + "FULL_OOBM850104 -0.453287\n", + "NT_EFC195 0.260702\n", + "AS_MeanAmphiMoment 0.693552\n", + "AS_DAYM780201 -0.437168\n", + "AS_FUKS010112 0.033432\n", + "CT_RACS820104 0.267652\n", + "CLASS 1.000000\n", + "Name: CLASS, dtype: float64" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.corr(method='pearson')['CLASS'] #Here I tried to see the correlation of all attributes with the class" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multivariate \n", + "\n", + "
\n", + " \n", + " Please import: `import matplotlib.pyplot as plt`\n", + "\n", + "## ??\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#plotting a heatmap to show correlation of data\n", + "pyplot.figure(figsize=(10,10))\n", + "sns.heatmap(train.corr(method='pearson'))\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### i did this plot in order to see which features are highly correlated as this can be a problem in soome models if some features are used together whereas they are highly correlated." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "## This plot takes a lot of time to draw, is it the best way to do this?\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0msns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpairplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/seaborn/axisgrid.py\u001b[0m in \u001b[0;36mpairplot\u001b[0;34m(data, hue, hue_order, palette, vars, x_vars, y_vars, kind, diag_kind, markers, height, aspect, dropna, plot_kws, diag_kws, grid_kws, size)\u001b[0m\n\u001b[1;32m 2082\u001b[0m \u001b[0mhue_order\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhue_order\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpalette\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpalette\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2083\u001b[0m \u001b[0mdiag_sharey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdiag_sharey\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2084\u001b[0;31m height=height, aspect=aspect, dropna=dropna, **grid_kws)\n\u001b[0m\u001b[1;32m 2085\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2086\u001b[0m \u001b[0;31m# Add the markers here as PairGrid has figured out how many levels of the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/seaborn/axisgrid.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, hue, hue_order, palette, hue_kws, vars, x_vars, y_vars, diag_sharey, height, aspect, despine, dropna, size)\u001b[0m\n\u001b[1;32m 1304\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdespine\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1305\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdespine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfig\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1306\u001b[0;31m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtight_layout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1307\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1308\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py\u001b[0m in \u001b[0;36mtight_layout\u001b[0;34m(self, renderer, pad, h_pad, w_pad, rect)\u001b[0m\n\u001b[1;32m 2473\u001b[0m kwargs = get_tight_layout_figure(\n\u001b[1;32m 2474\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubplotspec_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2475\u001b[0;31m pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)\n\u001b[0m\u001b[1;32m 2476\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2477\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplots_adjust\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/tight_layout.py\u001b[0m in \u001b[0;36mget_tight_layout_figure\u001b[0;34m(fig, axes_list, subplotspec_list, renderer, pad, h_pad, w_pad, rect)\u001b[0m\n\u001b[1;32m 360\u001b[0m \u001b[0msubplot_list\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msubplot_list\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 361\u001b[0m \u001b[0max_bbox_list\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0max_bbox_list\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 362\u001b[0;31m pad=pad, h_pad=h_pad, w_pad=w_pad)\n\u001b[0m\u001b[1;32m 363\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 364\u001b[0m \u001b[0;31m# kwargs can be none if tight_layout fails...\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/tight_layout.py\u001b[0m in \u001b[0;36mauto_adjust_subplotpars\u001b[0;34m(fig, renderer, nrows_ncols, num1num2_list, subplot_list, ax_bbox_list, pad, h_pad, w_pad, rect)\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;32mcontinue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 111\u001b[0;31m tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots\n\u001b[0m\u001b[1;32m 112\u001b[0m if ax.get_visible()])\n\u001b[1;32m 113\u001b[0m tight_bbox = TransformedBbox(tight_bbox_raw,\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/tight_layout.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 111\u001b[0m tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots\n\u001b[0;32m--> 112\u001b[0;31m if ax.get_visible()])\n\u001b[0m\u001b[1;32m 113\u001b[0m tight_bbox = TransformedBbox(tight_bbox_raw,\n\u001b[1;32m 114\u001b[0m fig.transFigure.inverted())\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36mget_tightbbox\u001b[0;34m(self, renderer, call_axes_locator, bbox_extra_artists)\u001b[0m\n\u001b[1;32m 4354\u001b[0m \u001b[0mbb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbb_yaxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4355\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4356\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_title_position\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4357\u001b[0m \u001b[0mbb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_window_extent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4358\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m_update_title_position\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 2545\u001b[0m if (ax.xaxis.get_label_position() == 'top' or\n\u001b[1;32m 2546\u001b[0m ax.xaxis.get_ticks_position() in choices):\n\u001b[0;32m-> 2547\u001b[0;31m \u001b[0mbb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_tightbbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2548\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2549\u001b[0m \u001b[0mbb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_window_extent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36mget_tightbbox\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 1163\u001b[0m \u001b[0mticks_to_draw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1164\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1165\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_label_position\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1166\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1167\u001b[0m \u001b[0;31m# go back to just this axis's tick labels\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_update_label_position\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 1985\u001b[0m \u001b[0;31m# get bounding boxes for this axis and any siblings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1986\u001b[0m \u001b[0;31m# that have been set by `fig.align_xlabels()`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1987\u001b[0;31m \u001b[0mbboxes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbboxes2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick_boxes_siblings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1988\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1989\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_position\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_get_tick_boxes_siblings\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 1969\u001b[0m \u001b[0;31m# if we want to align labels from other axes:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1970\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mnn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_siblings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1971\u001b[0;31m \u001b[0mticks_to_draw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maxx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1972\u001b[0m \u001b[0mtlb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtlb2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maxx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick_bboxes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mticks_to_draw\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1973\u001b[0m \u001b[0mbboxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtlb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_update_ticks\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1078\u001b[0m \u001b[0mthe\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mReturn\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mlist\u001b[0m \u001b[0mof\u001b[0m \u001b[0mticks\u001b[0m \u001b[0mthat\u001b[0m \u001b[0mwill\u001b[0m \u001b[0mbe\u001b[0m \u001b[0mdrawn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1079\u001b[0m \"\"\"\n\u001b[0;32m-> 1080\u001b[0;31m \u001b[0mmajor_locs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_majorticklocs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1081\u001b[0m \u001b[0mmajor_labels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmajor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmajor_locs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1082\u001b[0m \u001b[0mmajor_ticks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_major_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmajor_locs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36mget_majorticklocs\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1323\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_majorticklocs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1324\u001b[0m \u001b[0;34m\"\"\"Get the array of major tick locations in data coordinates.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1325\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmajor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlocator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1326\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1327\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_minorticklocs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/ticker.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2076\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2077\u001b[0m \u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_view_interval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2078\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtick_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2079\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2080\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtick_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/ticker.py\u001b[0m in \u001b[0;36mtick_values\u001b[0;34m(self, vmin, vmax)\u001b[0m\n\u001b[1;32m 2084\u001b[0m vmin, vmax = mtransforms.nonsingular(\n\u001b[1;32m 2085\u001b[0m vmin, vmax, expander=1e-13, tiny=1e-14)\n\u001b[0;32m-> 2086\u001b[0;31m \u001b[0mlocs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_raw_ticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2087\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2088\u001b[0m \u001b[0mprune\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_prune\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/ticker.py\u001b[0m in \u001b[0;36m_raw_ticks\u001b[0;34m(self, vmin, vmax)\u001b[0m\n\u001b[1;32m 2023\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_nbins\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'auto'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2024\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxis\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2025\u001b[0;31m nbins = np.clip(self.axis.get_tick_space(),\n\u001b[0m\u001b[1;32m 2026\u001b[0m max(1, self._min_n_ticks - 1), 9)\n\u001b[1;32m 2027\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36mget_tick_space\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2173\u001b[0m \u001b[0mends\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransAxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2174\u001b[0m \u001b[0mlength\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mends\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mends\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdpi\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m72\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2175\u001b[0;31m \u001b[0mtick\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2176\u001b[0m \u001b[0;31m# There is a heuristic here that the aspect ratio of tick text\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2177\u001b[0m \u001b[0;31m# is no more than 3:1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_get_tick\u001b[0;34m(self, major)\u001b[0m\n\u001b[1;32m 1904\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1905\u001b[0m \u001b[0mtick_kw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_minor_tick_kw\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1906\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mXTick\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmajor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmajor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mtick_kw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1907\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1908\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_get_label\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, axes, loc, label, size, width, color, tickdir, pad, labelsize, labelcolor, zorder, gridOn, tick1On, tick2On, label1On, label2On, major, labelrotation, grid_color, grid_linestyle, grid_linewidth, grid_alpha, **kw)\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtick1line\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick1line\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtick2line\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tick2line\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 160\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgridline\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_gridline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 161\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabel1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_text1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabel2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_text2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_get_gridline\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 491\u001b[0m \u001b[0malpha\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_grid_alpha\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[0mmarkersize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 493\u001b[0;31m **self._grid_kw)\n\u001b[0m\u001b[1;32m 494\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_xaxis_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwhich\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'grid'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 495\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_interpolation_steps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mGRIDLINE_INTERPOLATION_STEPS\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/lines.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, xdata, ydata, linewidth, linestyle, color, marker, markersize, markeredgewidth, markeredgecolor, markerfacecolor, markerfacecoloralt, fillstyle, antialiased, dash_capstyle, solid_capstyle, dash_joinstyle, solid_joinstyle, pickradius, drawstyle, markevery, **kwargs)\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[0mdash_capstyle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'lines.dash_capstyle'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdash_joinstyle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 336\u001b[0;31m \u001b[0mdash_joinstyle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'lines.dash_joinstyle'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 337\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msolid_capstyle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 338\u001b[0m \u001b[0msolid_capstyle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'lines.solid_capstyle'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 820\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mswitch_backend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrcsetup\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_auto_backend_sentinel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 821\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 822\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 823\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 824\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__repr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#scatter plot\n", + "\n", + "import seaborn as sns\n", + "sns.pairplot(train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A scatter plot shows the relationship between two variables as dots in two dimensions. So from this output, i can be able to see the relationship between variables. If they show a good correlation, then they ccan be removed in feature selection." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# EVALUATING ALGORITHMS\n", + "#### I will now evaluate some algorithms and estimate their accuracy on unseen data.\n", + "\n", + "
\n", + "\n", + "## ??\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Building models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will first split my train data into test and train, so that I test the effectiveness of my model using the test data.\n", + "\n", + "\n", + "
\n", + "\n", + "### random seed generator gets you the same numbers each time.\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "array = train.values #first create a variable for extracting the values from the train dataset to be used\n", + "X = array[:,0:11] #selecting which columns to use, in this case all of them\n", + "Y = array[:,11] #selecting the label for our data, which is the last column\n", + "test_size = 0.32 #this is the size of my test data, meaning my train data is 68%\n", + "seed = 3 #this is to initialize the random generator. So everytime i run this with a different seed number, i will get a different output\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## IMPORTING MODELS\n", + "\n", + "#### I will now use the models I imported in the beginning from sklearn to use for my algorithm.\n", + "\n", + "
\n", + "\n", + "## Add more algorithms please: Gradient Boosting\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LR: 0.912356 (0.013890)\n", + "LDA: 0.913808 (0.018930)\n", + "KNN: 0.907040 (0.017335)\n", + "CART: 0.896858 (0.014657)\n", + "NB: 0.913334 (0.016768)\n", + "SVM: 0.890594 (0.022649)\n", + "RTC: 0.933671 (0.015717)\n", + "SGD: 0.877977 (0.024229)\n", + "NC: 0.893481 (0.019393)\n", + "MLPC: 0.918158 (0.017259)\n" + ] + } + ], + "source": [ + "\n", + "\n", + "models = []\n", + "models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))\n", + "models.append(('LDA', LinearDiscriminantAnalysis()))\n", + "models.append(('KNN', KNeighborsClassifier()))\n", + "models.append(('CART', DecisionTreeClassifier()))\n", + "models.append(('NB', GaussianNB()))\n", + "models.append(('SVM', SVC(gamma='auto')))\n", + "models.append(('RTC', RandomForestClassifier()))\n", + "models.append(('SGD',SGDClassifier()))\n", + "models.append(('NC', NearestCentroid()))\n", + "models.append(('MLPC',MLPClassifier()))\n", + "# evaluate each model in turn\n", + "results = []\n", + "names = []\n", + "for name, model in models:\n", + " kfold = StratifiedKFold(n_splits=10)\n", + " cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')\n", + " results.append(cv_results)\n", + " names.append(name)\n", + " print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Compare Algorithms\n", + "pyplot.boxplot(results, labels=names)\n", + "pyplot.title('Algorithm Comparison')\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### from here, RTC is the best performing, followed by NB." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MCC 0.860278994009734\n" + ] + } + ], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(NB)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MCC 0.8788612940586917\n" + ] + } + ], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(RTC)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The MCC gives a score close to 100." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will now test the performance of my model first using all the features, then with some selected ones\n", + "\n", + "
\n", + "\n", + "## Why do you decide to do the feature selection this way, any reason?\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 93.01130524152107\n" + ] + } + ], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import GaussianNB\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9393627954779034\n", + "[[464 25]\n", + " [ 34 450]]\n", + " precision recall f1-score support\n", + "\n", + " 0.0 0.93 0.95 0.94 489\n", + " 1.0 0.95 0.93 0.94 484\n", + "\n", + " accuracy 0.94 973\n", + " macro avg 0.94 0.94 0.94 973\n", + "weighted avg 0.94 0.94 0.94 973\n", + "\n" + ] + } + ], + "source": [ + "# Evaluate predictions\n", + "print(accuracy_score(Y_test, predictions))\n", + "print(confusion_matrix(Y_test, predictions))\n", + "print(classification_report(Y_test, predictions))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gives me a good score of 93.6%. I will now try selecting some features based on feature importance.\n", + "\n", + "
\n", + "\n", + "I think this is a great move to take,but I would like to know why you are doing this this way.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This will be my first submission. It gave me a score of 99%\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'pd' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"CLASS\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mOUTPUT\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mY\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mOUTPUT_1\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mOUTPUT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mOUTPUT_1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"CLASS\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mOUTPUT_1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"Index\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'pd' is not defined" + ] + } + ], + "source": [ + "Y=train.CLASS\n", + "X=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X, Y).predict(test.values)\n", + "OUTPUT_1=pd.DataFrame(OUTPUT)\n", + "OUTPUT_1.columns=[\"CLASS\"]\n", + "OUTPUT_1.index.name=\"Index\"\n", + "OUTPUT_1[\"CLASS\"]=OUTPUT_1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_1.to_csv(\"output\") #converting my output file into a csv\n", + "print(OUTPUT_1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_1[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_1.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_1.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.0920619 0.12139276 0.09773584 0.08602068 0.05565946 0.07725613\n", + " 0.03620132 0.30737167 0.0480203 0.03222133 0.04605861]\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'pd' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfeature_importances_\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#use inbuilt class feature_importances of tree based classifiers\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m#plot graph of feature importances for better visualization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mfeat_importances\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSeries\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfeature_importances_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mfeat_importances\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlargest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'barh'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'pd' is not defined" + ] + } + ], + "source": [ + "#feature selection using feature importance\n", + "X = train.iloc[:,0:11] #independent columns\n", + "y = train.iloc[:,-1] #target column\n", + "from sklearn.ensemble import ExtraTreesClassifier\n", + "import matplotlib.pyplot as plt\n", + "model = ExtraTreesClassifier()\n", + "model.fit(X,y)\n", + "print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers\n", + "#plot graph of feature importances for better visualization\n", + "feat_importances = pd.Series(model.feature_importances_, index=X.columns)\n", + "feat_importances.nlargest(10).plot(kind='barh')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### I will select the features with the highest bars. The number of features selected will depend on the accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "train.columns\n", + "newtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "newtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "array = newtrain.values\n", + "X = array[:,0:5]\n", + "Y = array[:,-1]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new=newtrain.CLASS\n", + "X_new=newtrain.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X_new, Y_new).predict(newtest.values)\n", + "OUTPUT_new=pd.DataFrame(OUTPUT)\n", + "OUTPUT_new.columns=[\"CLASS\"]\n", + "OUTPUT_new.index.name=\"Index\"\n", + "OUTPUT_new[\"CLASS\"]=OUTPUT_new[\"CLASS\"].map({0.0:False,1.0:True})\n", + "OUTPUT_new.to_csv(\"out1\")\n", + "print(OUTPUT_new[\"CLASS\"].unique())\n", + "print(OUTPUT_new[\"CLASS\"].nunique())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### This gave me a score of 85%" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#this is how i checked the accuracy from the features selected\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import GaussianNB\n", + "\n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#i will now select 6 features to see if my score improves\n", + "\n", + "array = train.values\n", + "X = array[:,[0,1,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### the accuracy deacreases. let me try 4 features instead" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "array = train.values\n", + "X = array[:,[1,2,3,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### accuracy deacreases even further. so if i weere to feature select, I would use 5 features because they give me the best accuracy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Let me try the RTC model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### this actually gives me a better score than the one from GaussianNB. Let me submit it" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Evaluate predictions\n", + "print(accuracy_score(Y_test, predictions))\n", + "print(confusion_matrix(Y_test, predictions))\n", + "print(classification_report(Y_test, predictions))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new2=train.CLASS\n", + "X_new2=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT2=model.fit(X_new2, Y_new2).predict(test.values)\n", + "OUTPUT_new1=pd.DataFrame(OUTPUT2)\n", + "OUTPUT_new1.columns=[\"CLASS\"]\n", + "OUTPUT_new1.index.name=\"Index\"\n", + "OUTPUT_new1[\"CLASS\"]=OUTPUT_new1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_new1.to_csv(\"outputRTC\") #converting my output file into a csv\n", + "print(OUTPUT_new1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_new1[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_new1.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new1.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gave me a score of 83%. let me feature select the 5 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### this gives me a lower score than when all features are selected. So i will stop here." + ] + } + ], + "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.4" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Assignment Colab/Fezile Dlamini -Final Submission.ipynb b/Assignment Colab/Fezile Dlamini -Final Submission.ipynb new file mode 100644 index 0000000..a5e2e01 --- /dev/null +++ b/Assignment Colab/Fezile Dlamini -Final Submission.ipynb @@ -0,0 +1 @@ +{"cells":[{"metadata":{},"cell_type":"markdown","source":"## DLAMINI FEZILE SENAMILE\n## 2019/HD07/30568X\n## BIG_BIO DATA ASSIGNMENT 1"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\n#import seaborn as sb\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n for filename in filenames:\n print(os.path.join(dirname, filename))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Importing Libraries"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"#Importing libraries\nimport pandas\nimport scipy\nimport numpy\nimport matplotlib.pyplot as plt\nimport sklearn\nimport seaborn as sns\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Loading some libraries\n### These are some of the libraries I think I will need"},{"metadata":{"trusted":true},"cell_type":"code","source":"from pandas import read_csv #for reading in csv files\nfrom pandas.plotting import scatter_matrix \nfrom matplotlib import pyplot \nfrom sklearn.model_selection import train_test_split \nfrom sklearn.model_selection import cross_val_score \nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.metrics import classification_report \nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.metrics import accuracy_score \nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.neighbors import KNeighborsClassifier \nfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysis \nfrom sklearn.naive_bayes import GaussianNB \nfrom sklearn.svm import SVC \nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.linear_model import SGDClassifier\nfrom sklearn.neighbors import NearestCentroid\nfrom sklearn.neural_network import MLPClassifier","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Brief description of the codes above:\n1. **read_csv**: for reading in csv files\n- **scatter matrix**: for showing how one variable is affected by another\n- **pyplot** : for plotting graphs\n- **train_test_split**: for splitting my data into train and test\n- **cross_val_score**: to estimate the skill of a machine learning model on unseen data\n- **StratifiedKFold**: the folds are selected so that the mean response value is approximately equal in all the folds. In the case of a dichotomous classification, this means that each fold contains roughly the same proportions of the two types of class labels\n- **classification_report**: Visual classification reports are used to compare classification models to select models that are “redder”, e.g. have stronger classification metrics or that are more balanced.\n- **confusion_matrix**: A confusion matrix is a table that is often used to describe the performance of a classification model (or “classifier”) on a set of test data for which the true values are known. It allows the visualization of the performance of an algorithm.\n- **accuracy_score**: It is the ratio of number of correct predictions to the total number of input samples\n- **LogisticRegression**: an algorithm for classification\n- **DecisionTreeClassifier**: create a model that predicts the value of a target variable by learning simple decision rules inferred from the data features.\n- **KNeighborsClassifier**: for classification\n- **LinearDiscriminantAnalysis**: used for modeling differences in groups i.e. separating two or more classes\n- **GaussianNB**: an algorithm that estimates the mean and the standard deviation from your training data,\n- **SVC**: an algorithm that creates a line or a hyperplane which separates the data into classes\n- **RandomForestClassifier**: Random forests creates decision trees on randomly selected data samples, gets prediction from each tree and selects the best solution by means of voting\n- **SGDClassifier**: Stochastic Gradient Descent Classifier (SGDC) is an incremental Gradient Descent method falling under the broad classification of Supervised Learning Model that helps converge faster and is thus very fast as compared to other iterative models capable of delivering similar performance\n- **NearestCentroid**: assigns to observations the label of the class of training samples whose mean (centroid) is closest to the observation\n- **MLPClassifier**: It can distinguish data that is not linearly separable\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"#this suprreses unnecesary warnings from my output\nimport warnings\nwarnings.filterwarnings('ignore')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Loading My Dataset\n\n##### I am going to first use my training dataset, then the test dataset last."},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pandas.read_csv('/kaggle/input/ace-class-assignment/AMP_TrainSet.csv')#reading in my train dataset\ntrain\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test= pandas.read_csv('/kaggle/input/ace-class-assignment/Test.csv') #reading in my test dataset\ntest","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Inspecting my train dataset"},{"metadata":{"trusted":true},"cell_type":"code","source":"train.shape #a tuple that gives you an indication of the number of dimensions in the array.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.isnull().sum() #this will show the number of null values in my data","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.count() #returns number of non-null values in my data","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"##### It seems i have no missing values in my data"},{"metadata":{"trusted":true},"cell_type":"code","source":"train.describe() #returns summary of the whole data","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.info() #It returns range, column, number of non-null objects of each column, datatype and memory usage","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"##### This shows that my dataset has 3038 rows (instances) and 12 columns (attributes)"},{"metadata":{},"cell_type":"markdown","source":"##### I will also take a look at how many instances i have for each class"},{"metadata":{"trusted":true},"cell_type":"code","source":"train.groupby('CLASS').size()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.groupby('CLASS').size().plot(kind='bar') #I can also show this in a graph form\npyplot.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### I have two groups of classes, each with 1519 instances"},{"metadata":{},"cell_type":"markdown","source":"# DATA VISUALISATION"},{"metadata":{},"cell_type":"markdown","source":"#### I will start with univariate plots to see each individual variable"},{"metadata":{},"cell_type":"markdown","source":"## 1. HISTOGRAMS"},{"metadata":{"trusted":true},"cell_type":"code","source":"#visualizing using histograms\ntrain.hist(figsize=(16,16))\npyplot.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### These histograms show that FullAcidicMolPerc is exponentially distributed while the rest are have a Gaussian distribution except for NT_EFC195 and CLASS. Histograms also help us identify outliers. From this output, I can say there are no outliers."},{"metadata":{"trusted":true},"cell_type":"code","source":"train.corr(method='pearson')['CLASS'] #Here I tried to see the correlation of all attributes with the class","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"According to literature,Pearson’s correlation coefficient is the test statistics that measures the statistical relationship, or association, between two continuous variables. It is known as the best method of measuring the association between variables of interest because it is based on the method of covariance. It gives information about the magnitude of the association, or correlation, as well as the direction of the relationship.\n\nSo from the above results, i can see that most attributes have a negative correlation with the class. Only two have a high degree of correlation as they are between +o.5 and +1.0. AS_FUKS010112 has moderate corrlation as the range is between 0.30-0.49"},{"metadata":{},"cell_type":"markdown","source":"## Multivariate "},{"metadata":{"trusted":true},"cell_type":"code","source":"#plotting a heatmap to show correlation of data\npyplot.figure(figsize=(10,10))\nsns.heatmap(train.corr(method='pearson'))\npyplot.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"I did this plot in order to see which features are highly correlated as this can be a problem in soome models if some features are used together whereas they are highly correlated."},{"metadata":{"trusted":true},"cell_type":"code","source":"#scatter plot\n\nimport seaborn as sns\nsns.pairplot(train)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"A scatter plot shows the relationship between two variables as dots in two dimensions. So from this output, i can be able to see the relationship between variables. If they show a good correlation, then they ccan be removed in feature selection."},{"metadata":{},"cell_type":"markdown","source":"# EVALUATING ALGORITHMS\nI will now evaluate some algorithms and estimate their accuracy on unseen data."},{"metadata":{},"cell_type":"markdown","source":"### Building models"},{"metadata":{},"cell_type":"markdown","source":"I will first split my train data into test and train, so that I test the effectiveness of my model using the test data."},{"metadata":{"trusted":true},"cell_type":"code","source":"array = train.values #first create a variable for extracting the values from the train dataset to be used\nX = array[:,0:11] #selecting which columns to use, in this case all of them\nY = array[:,11] #selecting the label for our data, which is the last column\ntest_size = 0.32 #this is the size of my test data, meaning my train data is 68%\nseed = 3 #this is to initialize the random generator, to ensure i get the same numbers each time.\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## IMPORTING MODELS\n\nI will now use the models I imported in the beginning from sklearn to use for my algorithm."},{"metadata":{"trusted":true},"cell_type":"code","source":"\nfrom sklearn.ensemble import GradientBoostingClassifier\nmodels = []\nmodels.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))\nmodels.append(('LDA', LinearDiscriminantAnalysis()))\nmodels.append(('KNN', KNeighborsClassifier()))\nmodels.append(('CART', DecisionTreeClassifier()))\nmodels.append(('NB', GaussianNB()))\nmodels.append(('SVM', SVC(gamma='auto')))\nmodels.append(('RTC', RandomForestClassifier()))\nmodels.append(('SGD',SGDClassifier()))\nmodels.append(('NC', NearestCentroid()))\nmodels.append(('MLPC',MLPClassifier()))\nmodels.append(('GBC', GradientBoostingClassifier()))\n# evaluate each model in turn\nresults = []\nnames = []\nfor name, model in models:\n kfold = StratifiedKFold(n_splits=10) #First, StratifiedKFold shuffles your data, after that splits the data into 10_splits parts and Done. Now, it will use each part as a test set\n cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')\n results.append(cv_results)\n names.append(name)\n print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))\n ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Compare Algorithms using box plot\npyplot.boxplot(results, labels=names)\npyplot.title('Algorithm Comparison')\npyplot.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"from here, RTC is the best performing, followed by gradient boosting then NB.\n\nI recently added Gradient boosting. It relies on the intuition that the best possible next model, when combined with previous models, minimizes the overall prediction error."},{"metadata":{"trusted":true},"cell_type":"code","source":"# Make predictions on validation dataset, using my selected model from above(NB)\nmodel = GaussianNB()\nmodel.fit(X_train, Y_train)\npredictions = model.predict(X_test)\n\nfrom sklearn.metrics import matthews_corrcoef\nprint('MCC', matthews_corrcoef(model.predict(X_test), Y_test))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Make predictions on validation dataset, using my selected model from above(RTC)\nmodel = RandomForestClassifier()\nmodel.fit(X_train, Y_train)\npredictions = model.predict(X_test)\n\nfrom sklearn.metrics import matthews_corrcoef\nprint('MCC', matthews_corrcoef(model.predict(X_test), Y_test))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"The MCC gives a score close to 100."},{"metadata":{"trusted":true},"cell_type":"code","source":"# Make predictions on validation dataset, using my selected model from above(GBC)\nmodel = GradientBoostingClassifier()\nmodel.fit(X_train, Y_train)\npredictions = model.predict(X_test)\n\nfrom sklearn.metrics import matthews_corrcoef\nprint('MCC', matthews_corrcoef(model.predict(X_test), Y_test))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"I will now test the performance of my model first using all the features, then with some selected ones to see if my performance increases or decreases with either the addition of or dropping of some features.\nI started with all features because my features are not that much for me to consider dropping."},{"metadata":{"trusted":true},"cell_type":"code","source":"#with all features\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.naive_bayes import GaussianNB\n\narray = train.values\nX = array[:,0:11]\nY = array[:,11]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)\nmodel = GaussianNB()\nmodel.fit(X_train, Y_train)\nresult = model.score(X_test, Y_test)\nprint(\"Accuracy: \", (result*100.0))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Evaluate predictions\nprint(accuracy_score(Y_test, predictions))\nprint(confusion_matrix(Y_test, predictions))\nprint(classification_report(Y_test, predictions))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"This gives me a good score of 93.6%. I will now try selecting some features based on feature importance."},{"metadata":{},"cell_type":"markdown","source":"This will be my first submission. It gave me a score of 99%"},{"metadata":{"trusted":true},"cell_type":"code","source":"Y=train.CLASS\nX=train.drop(\"CLASS\",axis=1)\nOUTPUT=model.fit(X, Y).predict(test.values)\nOUTPUT_1=pandas.DataFrame(OUTPUT)\nOUTPUT_1.columns=[\"CLASS\"]\nOUTPUT_1.index.name=\"Index\"\nOUTPUT_1[\"CLASS\"]=OUTPUT_1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\nOUTPUT_1.to_csv(\"output\") #converting my output file into a csv\nprint(OUTPUT_1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\nprint(OUTPUT_1[\"CLASS\"].nunique()) #the sum of unique values\nprint(OUTPUT_1.groupby(\"CLASS\").size()[0].sum())\nprint(OUTPUT_1.groupby(\"CLASS\").size()[1].sum())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#feature selection using feature importance\nX = train.iloc[:,0:11] #independent columns\ny = train.iloc[:,-1] #target column\nfrom sklearn.ensemble import ExtraTreesClassifier\nimport matplotlib.pyplot as plt\nmodel = ExtraTreesClassifier()\nmodel.fit(X,y)\nprint(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers\n#plot graph of feature importances for better visualization\nfeat_importances = pd.Series(model.feature_importances_, index=X.columns)\nfeat_importances.nlargest(10).plot(kind='barh')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"I will select the features with the highest bars. The number of features selected will depend on the accuracy."},{"metadata":{"trusted":true},"cell_type":"code","source":"train.columns\nnewtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\nnewtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\narray = newtrain.values\nX = array[:,0:5]\nY = array[:,-1]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y_new=newtrain.CLASS\nX_new=newtrain.drop(\"CLASS\",axis=1)\nOUTPUT=model.fit(X_new, Y_new).predict(newtest.values)\nOUTPUT_new=pd.DataFrame(OUTPUT)\nOUTPUT_new.columns=[\"CLASS\"]\nOUTPUT_new.index.name=\"Index\"\nOUTPUT_new[\"CLASS\"]=OUTPUT_new[\"CLASS\"].map({0.0:False,1.0:True})\nOUTPUT_new.to_csv(\"out1\")\nprint(OUTPUT_new[\"CLASS\"].unique())\nprint(OUTPUT_new[\"CLASS\"].nunique())\nprint(OUTPUT_new.groupby(\"CLASS\").size()[0].sum())\nprint(OUTPUT_new.groupby(\"CLASS\").size()[1].sum())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"This gave me a score of 85%"},{"metadata":{"trusted":true},"cell_type":"code","source":"#this is how i checked the accuracy from the features selected\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.naive_bayes import GaussianNB\n\narray = train.values\nX = array[:,[0,2,3,5,7]]\nY = array[:,11]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)\nmodel = GaussianNB()\nmodel.fit(X_train, Y_train)\nresult = model.score(X_test, Y_test)\nprint(\"Accuracy: \", (result*100.0))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#i will now select 6 features to see if my score improves\n\narray = train.values\nX = array[:,[0,1,2,3,5,7]]\nY = array[:,11]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)\nmodel = GaussianNB()\nmodel.fit(X_train, Y_train)\nresult = model.score(X_test, Y_test)\nprint(\"Accuracy: \", (result*100.0))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"The accuracy deacreases. let me try 4 features instead"},{"metadata":{"trusted":true},"cell_type":"code","source":"array = train.values\nX = array[:,[1,2,3,7]]\nY = array[:,11]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)\nmodel = GaussianNB()\nmodel.fit(X_train, Y_train)\nresult = model.score(X_test, Y_test)\nprint(\"Accuracy: \", (result*100.0))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Accuracy deacreases even further. so if i weere to feature select, I would use 5 features because they give me the best accuracy."},{"metadata":{},"cell_type":"markdown","source":"### Let me try the RTC model"},{"metadata":{"trusted":true},"cell_type":"code","source":"#with all features\nfrom sklearn.model_selection import train_test_split\n\n\narray = train.values\nX = array[:,0:11]\nY = array[:,11]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)\nmodel = RandomForestClassifier()\nmodel.fit(X_train, Y_train)\nresult = model.score(X_test, Y_test)\nprint(\"Accuracy: \", (result*100.0))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"This actually gives me a better score than the one from GaussianNB. Let me submit it"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Evaluate predictions\nprint(accuracy_score(Y_test, predictions))\nprint(confusion_matrix(Y_test, predictions))\nprint(classification_report(Y_test, predictions))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y_new2=train.CLASS\nX_new2=train.drop(\"CLASS\",axis=1)\nOUTPUT2=model.fit(X_new2, Y_new2).predict(test.values)\nOUTPUT_new1=pd.DataFrame(OUTPUT2)\nOUTPUT_new1.columns=[\"CLASS\"]\nOUTPUT_new1.index.name=\"Index\"\nOUTPUT_new1[\"CLASS\"]=OUTPUT_new1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\nOUTPUT_new1.to_csv(\"outputRTC\") #converting my output file into a csv\nprint(OUTPUT_new1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\nprint(OUTPUT_new1[\"CLASS\"].nunique()) #the sum of unique values\nprint(OUTPUT_new1.groupby(\"CLASS\").size()[0].sum())\nprint(OUTPUT_new1.groupby(\"CLASS\").size()[1].sum())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"This gave me a score of 83%. let me feature select the 5 "},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\n\narray = train.values\nX = array[:,[0,2,3,5,7]]\nY = array[:,11]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)\nmodel = RandomForestClassifier()\nmodel.fit(X_train, Y_train)\nresult = model.score(X_test, Y_test)\nprint(\"Accuracy: \", (result*100.0))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"##### this gives me a lower score than when all features are selected. So i will stop here."},{"metadata":{},"cell_type":"markdown","source":"### GBC "},{"metadata":{"trusted":true},"cell_type":"code","source":"#with all features\nfrom sklearn.model_selection import train_test_split\n\n\narray = train.values\nX = array[:,0:11]\nY = array[:,11]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)\nmodel = GradientBoostingClassifier()\nmodel.fit(X_train, Y_train)\nresult = model.score(X_test, Y_test)\nprint(\"Accuracy: \", (result*100.0))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#submission with all features\nY_new4=train.CLASS\nX_new4=train.drop(\"CLASS\",axis=1)\nOUTPUT4=model.fit(X_new4, Y_new4).predict(test.values)\nOUTPUT_new4=pd.DataFrame(OUTPUT4)\nOUTPUT_new4.columns=[\"CLASS\"]\nOUTPUT_new4.index.name=\"Index\"\nOUTPUT_new4[\"CLASS\"]=OUTPUT_new4[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\nOUTPUT_new4.to_csv(\"outputGBC\") #converting my output file into a csv\nprint(OUTPUT_new4[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\nprint(OUTPUT_new4[\"CLASS\"].nunique()) #the sum of unique values\nprint(OUTPUT_new4.groupby(\"CLASS\").size()[0].sum())\nprint(OUTPUT_new4.groupby(\"CLASS\").size()[1].sum())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"This gave me a score of 82%"},{"metadata":{"trusted":true},"cell_type":"code","source":" \narray = train.values\nX = array[:,[0,2,3,5,7]]\nY = array[:,11]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)\nmodel = GradientBoostingClassifier()\nmodel.fit(X_train, Y_train)\nresult = model.score(X_test, Y_test)\nprint(\"Accuracy: \", (result*100.0))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"I get accuracy of 92,4 if i choose 5 features"},{"metadata":{"trusted":true},"cell_type":"code","source":"#submission with dropped\ntrain.columns\nnewtrain2=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\nnewtest2=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\narray2 = newtrain2.values\nX2 = array2[:,0:5]\nY2 = array2[:,-1]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X2, Y2, test_size=test_size,\nrandom_state=seed)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.columns\nnewtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\nnewtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\narray = newtrain.values\nX = array[:,0:5]\nY = array[:,-1]\ntest_size = 0.32\nseed = 3\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\nrandom_state=seed)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"Y_new=newtrain.CLASS\nX_new=newtrain.drop(\"CLASS\",axis=1)\nOUTPUT=model.fit(X_new, Y_new).predict(newtest.values)\nOUTPUT_new=pd.DataFrame(OUTPUT)\nOUTPUT_new.columns=[\"CLASS\"]\nOUTPUT_new.index.name=\"Index\"\nOUTPUT_new[\"CLASS\"]=OUTPUT_new[\"CLASS\"].map({0.0:False,1.0:True})\nOUTPUT_new.to_csv(\"RTC_DROP\")\nprint(OUTPUT_new[\"CLASS\"].unique())\nprint(OUTPUT_new[\"CLASS\"].nunique())\nprint(OUTPUT_new.groupby(\"CLASS\").size()[0].sum())\nprint(OUTPUT_new.groupby(\"CLASS\").size()[1].sum())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### GBC gave me a score of 81%"},{"metadata":{},"cell_type":"markdown","source":"## REFERENCES\n\n1. https://stackabuse.com/gradient-boosting-classifiers-in-python-with-scikit-learn/\n- https://realpython.com/logistic-regression-python\n- https://machinelearningmastery.com/compare-machine-learning-algorithms-python-scikit-learn/\n- https://stackabuse.com/applying-filter-methods-in-python-for-feature-selection/\n- http://www.scipy-lectures.org/\n- http://pandas.pydata.org/pandas-docs/stable/cookbook.html"}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4} \ No newline at end of file diff --git a/Assignment Colab/Fezile Dlamini -corrected.ipynb b/Assignment Colab/Fezile Dlamini -corrected.ipynb new file mode 100644 index 0000000..66d5836 --- /dev/null +++ b/Assignment Colab/Fezile Dlamini -corrected.ipynb @@ -0,0 +1,1058 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Please use this link to learn Markdown\n", + "\n", + "[Link](https://www.earthdatascience.org/courses/intro-to-earth-data-science/file-formats/use-text-files/format-text-with-markdown-jupyter-notebook/)\n", + "\n", + "
\n", + " Please use it to write your report.\n", + " \n", + " So far its easy to follow your thought which is good.\n", + " \n", + " It would be better to explain more on the concepts, you have done it well in some parts ,others neglected.\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", + "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5" + }, + "outputs": [], + "source": [ + "# This Python 3 environment comes with many helpful analytics libraries installed\n", + "# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n", + "# For example, here's several helpful packages to load in \n", + "\n", + "#import seaborn as sb\n", + "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", + "\n", + "# Input data files are available in the \"../input/\" directory.\n", + "# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n", + "\n", + "import os\n", + "for dirname, _, filenames in os.walk('/kaggle/input'):\n", + " for filename in filenames:\n", + " print(os.path.join(dirname, filename))\n", + "\n", + "# Any results you write to the current directory are saved as output." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importing Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0", + "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a" + }, + "outputs": [], + "source": [ + "###Importing libraries\n", + "import pandas\n", + "import scipy\n", + "import numpy\n", + "import matplotlib.pyplot as plt\n", + "import sklearn\n", + "import seaborn as sns\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading some libraries\n", + "### These are some of the libraries I think I will need" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pandas import read_csv #for reading in csv files\n", + "from pandas.plotting import scatter_matrix \n", + "from matplotlib import pyplot \n", + "from sklearn.model_selection import train_test_split \n", + "from sklearn.model_selection import cross_val_score \n", + "from sklearn.model_selection import StratifiedKFold\n", + "from sklearn.metrics import classification_report \n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.metrics import accuracy_score \n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.neighbors import KNeighborsClassifier \n", + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis \n", + "from sklearn.naive_bayes import GaussianNB \n", + "from sklearn.svm import SVC \n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.linear_model import SGDClassifier\n", + "from sklearn.neighbors import NearestCentroid\n", + "from sklearn.neural_network import MLPClassifier" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Brief description of the codes above:\n", + "#### 1.**read_csv**: for reading in csv files\n", + "#### 2.**scatter matrix**: for showing how one variable is affected by another\n", + "#### 3.**pyplot** : for plotting graphs\n", + "#### 4.**train_test_split**: for splitting my data into train and test\n", + "#### 5.**cross_val_score**: to estimate the skill of a machine learning model on unseen data\n", + "#### 6.**StratifiedKFold**: the folds are selected so that the mean response value is approximately equal in all the folds. In the case of a dichotomous classification, this means that each fold contains roughly the same proportions of the two types of class labels\n", + "#### 7.**classification_report**: Visual classification reports are used to compare classification models to select models that are “redder”, e.g. have stronger classification metrics or that are more balanced.\n", + "#### 8.**confusion_matrix**: A confusion matrix is a table that is often used to describe the performance of a classification model (or “classifier”) on a set of test data for which the true values are known. It allows the visualization of the performance of an algorithm.\n", + "#### 9.**accuracy_score**: It is the ratio of number of correct predictions to the total number of input samples\n", + "#### 10.**LogisticRegression**: an algorithm for classification\n", + "#### 11.**DecisionTreeClassifier**: create a model that predicts the value of a target variable by learning simple decision rules inferred from the data features.\n", + "#### 12.**KNeighborsClassifier**: for classification\n", + "#### 13.**LinearDiscriminantAnalysis**: used for modeling differences in groups i.e. separating two or more classes\n", + "#### 14.**GaussianNB**: an algorithm that estimates the mean and the standard deviation from your training data,\n", + "#### 15.**SVC**: an algorithm that creates a line or a hyperplane which separates the data into classes\n", + "#### 16.**RandomForestClassifier**: Random forests creates decision trees on randomly selected data samples, gets prediction from each tree and selects the best solution by means of voting\n", + "#### 17.**SGDClassifier**: Stochastic Gradient Descent Classifier (SGDC) is an incremental Gradient Descent method falling under the broad classification of Supervised Learning Model that helps converge faster and is thus very fast as compared to other iterative models capable of delivering similar performance\n", + "#### 18.**NearestCentroid**: assigns to observations the label of the class of training samples whose mean (centroid) is closest to the observation\n", + "#### 19.**MLPClassifier**: It can distinguish data that is not linearly separable\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#this suprreses unnecesary warnings from my output\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading My Dataset\n", + "\n", + "##### I am going to first use my training dataset, then the test dataset last." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train = pandas.read_csv('/kaggle/input/ace-class-assignment/AMP_TrainSet.csv')#reading in my train dataset\n", + "train\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "test= pandas.read_csv('/kaggle/input/ace-class-assignment/Test.csv') #reading in my test dataset\n", + "test" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspecting my train dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.shape #a tuple that gives you an indication of the number of dimensions in the array." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.isnull().sum() ###this will show the number of null values in my data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.count() #returns number of non-null values in my data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### It seems i have no missing values in my data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.describe() #returns summary of the whole data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.info() #It returns range, column, number of non-null objects of each column, datatype and memory usage" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### This shows that my dataset has 3038 rows (instances) and 12 columns (attributes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### I will also take a look at how many instances i have for each class" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.groupby('CLASS').size()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.groupby('CLASS').size().plot(kind='bar') #i can also show this in a graph form\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I have two groups of classes, each with 1519 instances" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DATA VISUALISATION" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will start with univariate plots to see each individual variable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. HISTOGRAMS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#visualizing using histograms\n", + "train.hist(figsize=(16,16))\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### These histograms show that FullAcidicMolPerc is exponentially distributed while the rest are have a Gaussian distribution except for NT_EFC195 and CLASS. Histograms also help us identify outliers. From this output, I can say there are no outliers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.corr(method='pearson')['CLASS'] #Here I tried to see the correlation of all attributes with the class" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### According to literature,Pearson’s correlation coefficient is the test statistics that measures the statistical relationship, or association, between two continuous variables. It is known as the best method of measuring the association between variables of interest because it is based on the method of covariance. It gives information about the magnitude of the association, or correlation, as well as the direction of the relationship.\n", + "\n", + "### So from the above results, i can see that most attributes have a negative correlation with the class. Only two have a high degree of correlation as they are between +o.5 and +1.0. AS_FUKS010112 has moderate corrlation as the range is between 0.30-0.49" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multivariate " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#plotting a heatmap to show correlation of data\n", + "pyplot.figure(figsize=(10,10))\n", + "sns.heatmap(train.corr(method='pearson'))\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### i did this plot in order to see which features are highly correlated as this can be a problem in soome models if some features are used together whereas they are highly correlated." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#scatter plot\n", + "\n", + "import seaborn as sns\n", + "sns.pairplot(train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A scatter plot shows the relationship between two variables as dots in two dimensions. So from this output, i can be able to see the relationship between variables. If they show a good correlation, then they ccan be removed in feature selection." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# EVALUATING ALGORITHMS\n", + "#### I will now evaluate some algorithms and estimate their accuracy on unseen data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Building models" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will first split my train data into test and train, so that I test the effectiveness of my model using the test data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "array = train.values #first create a variable for extracting the values from the train dataset to be used\n", + "X = array[:,0:11] #selecting which columns to use, in this case all of them\n", + "Y = array[:,11] #selecting the label for our data, which is the last column\n", + "test_size = 0.32 #this is the size of my test data, meaning my train data is 68%\n", + "seed = 3 #this is to initialize the random generator, to ensure i get the same numbers each time.\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## IMPORTING MODELS\n", + "\n", + "#### I will now use the models I imported in the beginning from sklearn to use for my algorithm." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "from sklearn.ensemble import GradientBoostingClassifier\n", + "models = []\n", + "models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))\n", + "models.append(('LDA', LinearDiscriminantAnalysis()))\n", + "models.append(('KNN', KNeighborsClassifier()))\n", + "models.append(('CART', DecisionTreeClassifier()))\n", + "models.append(('NB', GaussianNB()))\n", + "models.append(('SVM', SVC(gamma='auto')))\n", + "models.append(('RTC', RandomForestClassifier()))\n", + "models.append(('SGD',SGDClassifier()))\n", + "models.append(('NC', NearestCentroid()))\n", + "models.append(('MLPC',MLPClassifier()))\n", + "models.append(('GBC', GradientBoostingClassifier()))\n", + "# evaluate each model in turn\n", + "results = []\n", + "names = []\n", + "for name, model in models:\n", + " kfold = StratifiedKFold(n_splits=10)\n", + " cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')\n", + " results.append(cv_results)\n", + " names.append(name)\n", + " print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Compare Algorithms\n", + "pyplot.boxplot(results, labels=names)\n", + "pyplot.title('Algorithm Comparison')\n", + "pyplot.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### from here, RTC is the best performing, followed by gradient boosting then NB.\n", + "\n", + "### Irecently added Gradient boosting. It relies on the intuition that the best possible next model, when combined with previous models, minimizes the overall prediction error." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(NB)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(RTC)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The MCC gives a score close to 100." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Make predictions on validation dataset, using my selected model from above(GBC)\n", + "model = GradientBoostingClassifier()\n", + "model.fit(X_train, Y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "from sklearn.metrics import matthews_corrcoef\n", + "print('MCC', matthews_corrcoef(model.predict(X_test), Y_test))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I will now test the performance of my model first using all the features, then with some selected ones to see if my performance increases or decreases with either the addition of or dropping of some features.\n", + "#### I started with all features because my features are not that much for me to consider dropping." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import GaussianNB\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Evaluate predictions\n", + "print(accuracy_score(Y_test, predictions))\n", + "print(confusion_matrix(Y_test, predictions))\n", + "print(classification_report(Y_test, predictions))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gives me a good score of 93.6%. I will now try selecting some features based on feature importance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This will be my first submission. It gave me a score of 99%" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y=train.CLASS\n", + "X=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X, Y).predict(test.values)\n", + "OUTPUT_1=pandas.DataFrame(OUTPUT)\n", + "OUTPUT_1.columns=[\"CLASS\"]\n", + "OUTPUT_1.index.name=\"Index\"\n", + "OUTPUT_1[\"CLASS\"]=OUTPUT_1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_1.to_csv(\"output\") #converting my output file into a csv\n", + "print(OUTPUT_1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_1[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_1.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_1.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#feature selection using feature importance\n", + "X = train.iloc[:,0:11] #independent columns\n", + "y = train.iloc[:,-1] #target column\n", + "from sklearn.ensemble import ExtraTreesClassifier\n", + "import matplotlib.pyplot as plt\n", + "model = ExtraTreesClassifier()\n", + "model.fit(X,y)\n", + "print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers\n", + "#plot graph of feature importances for better visualization\n", + "feat_importances = pd.Series(model.feature_importances_, index=X.columns)\n", + "feat_importances.nlargest(10).plot(kind='barh')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### I will select the features with the highest bars. The number of features selected will depend on the accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.columns\n", + "newtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "newtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "array = newtrain.values\n", + "X = array[:,0:5]\n", + "Y = array[:,-1]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new=newtrain.CLASS\n", + "X_new=newtrain.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X_new, Y_new).predict(newtest.values)\n", + "OUTPUT_new=pd.DataFrame(OUTPUT)\n", + "OUTPUT_new.columns=[\"CLASS\"]\n", + "OUTPUT_new.index.name=\"Index\"\n", + "OUTPUT_new[\"CLASS\"]=OUTPUT_new[\"CLASS\"].map({0.0:False,1.0:True})\n", + "OUTPUT_new.to_csv(\"out1\")\n", + "print(OUTPUT_new[\"CLASS\"].unique())\n", + "print(OUTPUT_new[\"CLASS\"].nunique())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### This gave me a score of 85%" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#this is how i checked the accuracy from the features selected\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.naive_bayes import GaussianNB\n", + "\n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#i will now select 6 features to see if my score improves\n", + "\n", + "array = train.values\n", + "X = array[:,[0,1,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### the accuracy deacreases. let me try 4 features instead" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "array = train.values\n", + "X = array[:,[1,2,3,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GaussianNB()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### accuracy deacreases even further. so if i weere to feature select, I would use 5 features because they give me the best accuracy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Let me try the RTC model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### this actually gives me a better score than the one from GaussianNB. Let me submit it" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Evaluate predictions\n", + "print(accuracy_score(Y_test, predictions))\n", + "print(confusion_matrix(Y_test, predictions))\n", + "print(classification_report(Y_test, predictions))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new2=train.CLASS\n", + "X_new2=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT2=model.fit(X_new2, Y_new2).predict(test.values)\n", + "OUTPUT_new1=pd.DataFrame(OUTPUT2)\n", + "OUTPUT_new1.columns=[\"CLASS\"]\n", + "OUTPUT_new1.index.name=\"Index\"\n", + "OUTPUT_new1[\"CLASS\"]=OUTPUT_new1[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_new1.to_csv(\"outputRTC\") #converting my output file into a csv\n", + "print(OUTPUT_new1[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_new1[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_new1.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new1.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gave me a score of 83%. let me feature select the 5 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = RandomForestClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### this gives me a lower score than when all features are selected. So i will stop here." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### GBC " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#with all features\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "array = train.values\n", + "X = array[:,0:11]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GradientBoostingClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#submission with all features\n", + "Y_new4=train.CLASS\n", + "X_new4=train.drop(\"CLASS\",axis=1)\n", + "OUTPUT4=model.fit(X_new4, Y_new4).predict(test.values)\n", + "OUTPUT_new4=pd.DataFrame(OUTPUT4)\n", + "OUTPUT_new4.columns=[\"CLASS\"]\n", + "OUTPUT_new4.index.name=\"Index\"\n", + "OUTPUT_new4[\"CLASS\"]=OUTPUT_new4[\"CLASS\"].map({0.0:False,1.0:True}) #changing 0 values to False, 1 to True\n", + "OUTPUT_new4.to_csv(\"outputGBC\") #converting my output file into a csv\n", + "print(OUTPUT_new4[\"CLASS\"].unique()) #printing out the unique values, i expect to get 2\n", + "print(OUTPUT_new4[\"CLASS\"].nunique()) #the sum of unique values\n", + "print(OUTPUT_new4.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new4.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### This gave me a score of 82%" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " \n", + "array = train.values\n", + "X = array[:,[0,2,3,5,7]]\n", + "Y = array[:,11]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)\n", + "model = GradientBoostingClassifier()\n", + "model.fit(X_train, Y_train)\n", + "result = model.score(X_test, Y_test)\n", + "print(\"Accuracy: \", (result*100.0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### i get accuracy of 92,4 if i choose 5 features" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#submission with dropped\n", + "train.columns\n", + "newtrain2=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "newtest2=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "array2 = newtrain2.values\n", + "X2 = array2[:,0:5]\n", + "Y2 = array2[:,-1]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X2, Y2, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train.columns\n", + "newtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "newtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)\n", + "array = newtrain.values\n", + "X = array[:,0:5]\n", + "Y = array[:,-1]\n", + "test_size = 0.32\n", + "seed = 3\n", + "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n", + "random_state=seed)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Y_new=newtrain.CLASS\n", + "X_new=newtrain.drop(\"CLASS\",axis=1)\n", + "OUTPUT=model.fit(X_new, Y_new).predict(newtest.values)\n", + "OUTPUT_new=pd.DataFrame(OUTPUT)\n", + "OUTPUT_new.columns=[\"CLASS\"]\n", + "OUTPUT_new.index.name=\"Index\"\n", + "OUTPUT_new[\"CLASS\"]=OUTPUT_new[\"CLASS\"].map({0.0:False,1.0:True})\n", + "OUTPUT_new.to_csv(\"RTC_DROP\")\n", + "print(OUTPUT_new[\"CLASS\"].unique())\n", + "print(OUTPUT_new[\"CLASS\"].nunique())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[0].sum())\n", + "print(OUTPUT_new.groupby(\"CLASS\").size()[1].sum())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### GBC gave me a score of 81%" + ] + } + ], + "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.4" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Reading Material/Pandas Cookbook/Pandas-Cookbook b/Reading Material/Pandas Cookbook/Pandas-Cookbook new file mode 160000 index 0000000..b45d95c --- /dev/null +++ b/Reading Material/Pandas Cookbook/Pandas-Cookbook @@ -0,0 +1 @@ +Subproject commit b45d95ccef24b020fdf28ecb5a07e3348bee62f1