diff --git a/.Rhistory b/.Rhistory
deleted file mode 100644
index e69de29..0000000
diff --git a/.ipynb_checkpoints/Fezile Dlamini-checkpoint.ipynb b/.ipynb_checkpoints/Fezile Dlamini-checkpoint.ipynb
deleted file mode 100644
index 2dd9fe7..0000000
--- a/.ipynb_checkpoints/Fezile Dlamini-checkpoint.ipynb
+++ /dev/null
@@ -1,778 +0,0 @@
-{
- "cells": [
- {
- "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 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"
- ]
- },
- {
- "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\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"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from pandas import read_csv\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"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "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')\n",
- "train\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "test= pandas.read_csv('/kaggle/input/ace-class-assignment/Test.csv')\n",
- "test"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Inspecting my train dataset"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "train.shape"
- ]
- },
- {
- "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')\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 indiviadual variable"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "train.hist(figsize=(16,16))\n",
- "pyplot.show()"
- ]
- },
- {
- "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": [
- "## Multivariate "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "correlations = train.corr()\n",
- "# plot correlation matrix\n",
- "fig = pyplot.figure()\n",
- "ax = fig.add_subplot(111)\n",
- "cax = ax.matshow(correlations, vmin=-1, vmax=1)\n",
- "fig.colorbar(cax)\n",
- "ticks = np.arange(0,9,1)\n",
- "ax.set_xticks(ticks)\n",
- "ax.set_yticks(ticks)\n",
- "ax.set_xticklabels(train.columns)\n",
- "ax.set_yticklabels(train.columns)\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": [
- "# 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": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "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)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "len(X_test)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "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",
- "# 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()))"
- ]
- },
- {
- "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, NB is the best performing."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Make predictions on validation dataset\n",
- "model = GaussianNB()\n",
- "model.fit(X_train, Y_train)\n",
- "predictions = model.predict(X_test)\n",
- "print(predictions)\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": [
- "#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))"
- ]
- },
- {
- "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": [
- "test"
- ]
- },
- {
- "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=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})\n",
- "OUTPUT_1.to_csv(\"output\")\n",
- "print(OUTPUT_1[\"CLASS\"].unique())\n",
- "print(OUTPUT_1[\"CLASS\"].nunique())\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": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "train.columns"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "newtrain=train.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "newtest=test.drop([ 'FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104'], axis=1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "newtrain"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "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": [
- "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",
- "# evaluate each model in turn\n",
- "results = []\n",
- "names = []\n",
- "for name, model in models:\n",
- " kfold = StratifiedKFold(n_splits=23, shuffle=True)\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()))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "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": [
- "# 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=newtrain.CLASS\n",
- "X=newtrain.drop(\"CLASS\",axis=1)\n",
- "OUTPUT=model.fit(X, Y).predict(newtest.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})\n",
- "OUTPUT_1.to_csv(\"out1\")\n",
- "print(OUTPUT_1[\"CLASS\"].unique())\n",
- "print(OUTPUT_1[\"CLASS\"].nunique())\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": [
- "#checking accuracy using data with selected features from feature importance\n",
- "from sklearn.model_selection import train_test_split\n",
- "from sklearn.naive_bayes import GaussianNB\n",
- "from sklearn.metrics import matthews_corrcoef\n",
- "\n",
- "array = train.values\n",
- "X = array[:,[0,1,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",
- "prediction=model.predict(X_test)\n",
- "matrix=matthews_corrcoef(Y_test,prediction)\n",
- "print(\"Accuracy: \", (result*100.0))\n",
- "print(matrix)\n",
- "\n",
- "# making predictions on the test data\n",
- "\n",
- "#output=model.predict(test.values)\n",
- "#output1=pd.DataFrame(output)\n",
- "#output1.columns=['CLASS']\n",
- "#output1.index.name='Index'\n",
- "#output1['CLASS']=output1['CLASS'].map({0.0:False, 1.0:True})\n",
- "\n",
- "#print(output1['CLASS'].unique())\n",
- "#print(output1['CLASS'].nunique())\n",
- "\n",
- "#print(output1.groupby('CLASS').size()[0].sum())\n",
- "#print(output1.groupby('CLASS').size()[1].sum())\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "array2 = np.array(test)\n",
- "X = array2[:,[0,1,3,5,7]]\n",
- "x_t=array[:,[0,1,3,5,7]]\n",
- "y_t=array[:,11]\n",
- "\n",
- "#array3 = train.values\n",
- "#X_t = array3[:,[0,1,3,5,7]]\n",
- "#Y_t=array3[:,10]\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",
- "test=array3[:,[0,1,3,5,7]]\n",
- "model = GaussianNB()\n",
- "\n",
- "#result = model.score(X_t, Y_t)\n",
- "model.fit(x_t, y_t)\n",
- "prediction=model.predict(X)\n",
- "\n",
- "#matrix=matthews_corrcoef(Y_t,prediction)\n",
- "#print(\"Accuracy: \", (result*100.0))\n",
- "#print(matrix)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## FEATURE SELECTION"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "#feature selection using Logistic regression\n",
- "from sklearn.feature_selection import RFE\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "\n",
- "array_1 = train.values\n",
- "X = array_1[:,0:11]\n",
- "Y = array_1[:,11]\n",
- "# feature extraction\n",
- "model = LogisticRegression()\n",
- "rfe = RFE(model, 5)\n",
- "fit = rfe.fit(X, Y)\n",
- "print(\"Num Features: \", fit.n_features_)\n",
- "print(\"Selected Features:\", fit.support_)\n",
- "print(\"Feature Ranking: \", fit.ranking_)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "#checking accuracy using data with selected features from feature importance\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))\n",
- "\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "#CHECKING ACCURACY WITH ALL FEATURES\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": [
- "train.head(5)"
- ]
- }
- ],
- "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.3"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/.ipynb_checkpoints/KAYAGA NASHIM MILVAT-checkpoint.ipynb b/.ipynb_checkpoints/KAYAGA NASHIM MILVAT-checkpoint.ipynb
deleted file mode 100644
index 60d7103..0000000
--- a/.ipynb_checkpoints/KAYAGA NASHIM MILVAT-checkpoint.ipynb
+++ /dev/null
@@ -1,2767 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19",
- "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5"
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "/kaggle/input/ace-class-assignment/Test.csv\n",
- "/kaggle/input/ace-class-assignment/AMP_TrainSet.csv\n"
- ]
- }
- ],
- "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",
- "import matplotlib.pyplot as plt\n",
- "import seaborn as sns\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": "code",
- "execution_count": 2,
- "metadata": {
- "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0",
- "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a"
- },
- "outputs": [],
- "source": [
- "import warnings\n",
- "warnings.filterwarnings('ignore')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AcidicMolPerc \n",
- " FULL_AURR980107 \n",
- " FULL_DAYM780201 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_DAYM780201 \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 4.0 \n",
- " 3.704 \n",
- " 0.873 \n",
- " 73.519 \n",
- " 0.987 \n",
- " -4.833 \n",
- " 0 \n",
- " 0.382 \n",
- " 74.556 \n",
- " 7.225 \n",
- " 1.234 \n",
- " \n",
- " \n",
- " 1 \n",
- " 4.0 \n",
- " 4.444 \n",
- " 0.892 \n",
- " 62.444 \n",
- " 0.931 \n",
- " -0.584 \n",
- " 0 \n",
- " 0.320 \n",
- " 56.056 \n",
- " 4.942 \n",
- " 1.853 \n",
- " \n",
- " \n",
- " 2 \n",
- " 2.0 \n",
- " 0.000 \n",
- " 0.901 \n",
- " 47.000 \n",
- " 1.039 \n",
- " -5.664 \n",
- " 0 \n",
- " 0.164 \n",
- " 47.000 \n",
- " 5.969 \n",
- " 1.174 \n",
- " \n",
- " \n",
- " 3 \n",
- " 4.5 \n",
- " 0.000 \n",
- " 0.869 \n",
- " 69.222 \n",
- " 0.982 \n",
- " -5.423 \n",
- " 0 \n",
- " 2.010 \n",
- " 69.222 \n",
- " 5.462 \n",
- " 1.138 \n",
- " \n",
- " \n",
- " 4 \n",
- " -4.0 \n",
- " 21.591 \n",
- " 1.061 \n",
- " 71.682 \n",
- " 0.976 \n",
- " -2.002 \n",
- " 0 \n",
- " 2.758 \n",
- " 66.000 \n",
- " 5.582 \n",
- " 1.453 \n",
- " \n",
- " \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " \n",
- " \n",
- " 753 \n",
- " -1.5 \n",
- " 16.000 \n",
- " 1.100 \n",
- " 82.820 \n",
- " 0.991 \n",
- " -1.987 \n",
- " 0 \n",
- " 15.185 \n",
- " 85.333 \n",
- " 7.053 \n",
- " 1.325 \n",
- " \n",
- " \n",
- " 754 \n",
- " -1.0 \n",
- " 18.182 \n",
- " 1.085 \n",
- " 73.455 \n",
- " 1.027 \n",
- " -0.745 \n",
- " 0 \n",
- " 16.550 \n",
- " 74.667 \n",
- " 6.729 \n",
- " 1.132 \n",
- " \n",
- " \n",
- " 755 \n",
- " -1.0 \n",
- " 19.048 \n",
- " 1.108 \n",
- " 82.190 \n",
- " 1.033 \n",
- " -1.789 \n",
- " 0 \n",
- " 16.112 \n",
- " 79.667 \n",
- " 6.036 \n",
- " 1.219 \n",
- " \n",
- " \n",
- " 756 \n",
- " -1.0 \n",
- " 7.143 \n",
- " 0.955 \n",
- " 76.786 \n",
- " 1.023 \n",
- " 1.141 \n",
- " 0 \n",
- " 20.630 \n",
- " 76.786 \n",
- " 5.669 \n",
- " 1.111 \n",
- " \n",
- " \n",
- " 757 \n",
- " -7.0 \n",
- " 17.143 \n",
- " 1.078 \n",
- " 84.186 \n",
- " 1.009 \n",
- " -0.066 \n",
- " 0 \n",
- " 17.168 \n",
- " 76.611 \n",
- " 6.688 \n",
- " 1.305 \n",
- " \n",
- " \n",
- "
\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",
- ".. ... ... ... ... \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",
- ".. ... ... ... ... \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",
- ".. ... ... ... \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": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "test = pd.read_csv(\"../input/ace-class-assignment/Test.csv\")\n",
- "test"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AcidicMolPerc \n",
- " FULL_AURR980107 \n",
- " FULL_DAYM780201 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_DAYM780201 \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " CLASS \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 5.0 \n",
- " 0.000 \n",
- " 0.951 \n",
- " 74.842 \n",
- " 0.975 \n",
- " -3.663 \n",
- " 0 \n",
- " 0.282 \n",
- " 73.444 \n",
- " 5.661 \n",
- " 1.041 \n",
- " 1 \n",
- " \n",
- " \n",
- " 1 \n",
- " 4.0 \n",
- " 5.405 \n",
- " 0.931 \n",
- " 71.595 \n",
- " 0.957 \n",
- " -4.011 \n",
- " 1 \n",
- " 0.600 \n",
- " 68.222 \n",
- " 6.537 \n",
- " 1.453 \n",
- " 1 \n",
- " \n",
- " \n",
- " 2 \n",
- " 5.5 \n",
- " 5.405 \n",
- " 0.873 \n",
- " 73.595 \n",
- " 0.961 \n",
- " -2.512 \n",
- " 0 \n",
- " 0.593 \n",
- " 69.444 \n",
- " 4.934 \n",
- " 1.722 \n",
- " 1 \n",
- " \n",
- " \n",
- " 3 \n",
- " 5.0 \n",
- " 4.167 \n",
- " 0.895 \n",
- " 66.250 \n",
- " 0.999 \n",
- " -1.362 \n",
- " 0 \n",
- " 0.614 \n",
- " 67.222 \n",
- " 4.316 \n",
- " 1.382 \n",
- " 1 \n",
- " \n",
- " \n",
- " 4 \n",
- " 7.5 \n",
- " 8.537 \n",
- " 0.932 \n",
- " 64.720 \n",
- " 0.979 \n",
- " -2.091 \n",
- " 0 \n",
- " 0.616 \n",
- " 72.944 \n",
- " 4.540 \n",
- " 1.539 \n",
- " 1 \n",
- " \n",
- " \n",
- "
\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",
- "\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",
- "\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 "
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#read in the data\n",
- "data = pd.read_csv(\"../input/ace-class-assignment/AMP_TrainSet.csv\")\n",
- "data.head(5)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(3038, 12)"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#Check the dimensions to the number of rows and columns\n",
- "data.shape"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['FULL_Charge', 'FULL_AcidicMolPerc', 'FULL_AURR980107',\n",
- " 'FULL_DAYM780201', 'FULL_GEOR030101', 'FULL_OOBM850104', 'NT_EFC195',\n",
- " 'AS_MeanAmphiMoment', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104',\n",
- " 'CLASS'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "data.columns"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "FULL_Charge float64\n",
- "FULL_AcidicMolPerc float64\n",
- "FULL_AURR980107 float64\n",
- "FULL_DAYM780201 float64\n",
- "FULL_GEOR030101 float64\n",
- "FULL_OOBM850104 float64\n",
- "NT_EFC195 int64\n",
- "AS_MeanAmphiMoment float64\n",
- "AS_DAYM780201 float64\n",
- "AS_FUKS010112 float64\n",
- "CT_RACS820104 float64\n",
- "CLASS int64\n",
- "dtype: object"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "data.dtypes"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AcidicMolPerc \n",
- " FULL_AURR980107 \n",
- " FULL_DAYM780201 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_DAYM780201 \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " CLASS \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " count \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " 3038.000000 \n",
- " \n",
- " \n",
- " mean \n",
- " 2.060237 \n",
- " 8.521520 \n",
- " 0.971410 \n",
- " 73.668760 \n",
- " 0.994007 \n",
- " -2.432927 \n",
- " 0.088545 \n",
- " 15.683233 \n",
- " 73.650828 \n",
- " 5.911361 \n",
- " 1.235255 \n",
- " 0.500000 \n",
- " \n",
- " \n",
- " std \n",
- " 3.819929 \n",
- " 7.586652 \n",
- " 0.107413 \n",
- " 8.527489 \n",
- " 0.031333 \n",
- " 1.707223 \n",
- " 0.284133 \n",
- " 11.575665 \n",
- " 9.166092 \n",
- " 0.693689 \n",
- " 0.210012 \n",
- " 0.500082 \n",
- " \n",
- " \n",
- " min \n",
- " -16.000000 \n",
- " 0.000000 \n",
- " 0.684000 \n",
- " 42.750000 \n",
- " 0.866000 \n",
- " -10.432000 \n",
- " 0.000000 \n",
- " 0.041000 \n",
- " 42.778000 \n",
- " 3.533000 \n",
- " 0.785000 \n",
- " 0.000000 \n",
- " \n",
- " \n",
- " 25% \n",
- " 0.000000 \n",
- " 2.516000 \n",
- " 0.895000 \n",
- " 68.294000 \n",
- " 0.974000 \n",
- " -3.606000 \n",
- " 0.000000 \n",
- " 5.587500 \n",
- " 67.556000 \n",
- " 5.459250 \n",
- " 1.082000 \n",
- " 0.000000 \n",
- " \n",
- " \n",
- " 50% \n",
- " 2.000000 \n",
- " 7.143000 \n",
- " 0.963000 \n",
- " 74.059500 \n",
- " 0.994000 \n",
- " -2.296500 \n",
- " 0.000000 \n",
- " 14.988500 \n",
- " 73.697000 \n",
- " 5.925500 \n",
- " 1.184000 \n",
- " 0.500000 \n",
- " \n",
- " \n",
- " 75% \n",
- " 4.000000 \n",
- " 13.158000 \n",
- " 1.041000 \n",
- " 79.343750 \n",
- " 1.011000 \n",
- " -1.283250 \n",
- " 0.000000 \n",
- " 26.807750 \n",
- " 79.778000 \n",
- " 6.382000 \n",
- " 1.351000 \n",
- " 1.000000 \n",
- " \n",
- " \n",
- " max \n",
- " 30.000000 \n",
- " 46.667000 \n",
- " 1.451000 \n",
- " 101.682000 \n",
- " 1.196000 \n",
- " 3.576000 \n",
- " 1.000000 \n",
- " 51.280000 \n",
- " 103.167000 \n",
- " 8.662000 \n",
- " 2.192000 \n",
- " 1.000000 \n",
- " \n",
- " \n",
- "
\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": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#Generate descriptive statistics that summarize the central tendency, dispersion, and shape of a dataset’s distribution, excluding NaN values\n",
- "data.describe()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "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": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#number of null values in each column\n",
- "data.isnull().sum()\n",
- "#since my data has no null values then its good to go"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "#need to know how balanced the class values are\n",
- "data.groupby('CLASS').size().plot(kind='bar')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AcidicMolPerc \n",
- " FULL_AURR980107 \n",
- " FULL_DAYM780201 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_DAYM780201 \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " CLASS \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " 1.000000 \n",
- " -0.612996 \n",
- " -0.490977 \n",
- " -0.434603 \n",
- " -0.058725 \n",
- " -0.283758 \n",
- " 0.088068 \n",
- " 0.355477 \n",
- " -0.365374 \n",
- " -0.090570 \n",
- " 0.232929 \n",
- " 0.534602 \n",
- " \n",
- " \n",
- " FULL_AcidicMolPerc \n",
- " -0.612996 \n",
- " 1.000000 \n",
- " 0.794796 \n",
- " 0.541481 \n",
- " 0.115201 \n",
- " 0.513344 \n",
- " -0.143168 \n",
- " -0.431590 \n",
- " 0.449621 \n",
- " 0.002334 \n",
- " -0.213543 \n",
- " -0.598816 \n",
- " \n",
- " \n",
- " FULL_AURR980107 \n",
- " -0.490977 \n",
- " 0.794796 \n",
- " 1.000000 \n",
- " 0.548253 \n",
- " 0.346139 \n",
- " 0.462712 \n",
- " -0.169540 \n",
- " -0.426097 \n",
- " 0.456260 \n",
- " 0.032958 \n",
- " -0.403599 \n",
- " -0.584111 \n",
- " \n",
- " \n",
- " FULL_DAYM780201 \n",
- " -0.434603 \n",
- " 0.541481 \n",
- " 0.548253 \n",
- " 1.000000 \n",
- " 0.010118 \n",
- " 0.334778 \n",
- " -0.090058 \n",
- " -0.408793 \n",
- " 0.894191 \n",
- " 0.055915 \n",
- " -0.326792 \n",
- " -0.554838 \n",
- " \n",
- " \n",
- " FULL_GEOR030101 \n",
- " -0.058725 \n",
- " 0.115201 \n",
- " 0.346139 \n",
- " 0.010118 \n",
- " 1.000000 \n",
- " 0.319157 \n",
- " -0.230417 \n",
- " -0.160269 \n",
- " -0.029085 \n",
- " 0.040480 \n",
- " -0.151935 \n",
- " -0.260470 \n",
- " \n",
- " \n",
- " FULL_OOBM850104 \n",
- " -0.283758 \n",
- " 0.513344 \n",
- " 0.462712 \n",
- " 0.334778 \n",
- " 0.319157 \n",
- " 1.000000 \n",
- " -0.230561 \n",
- " -0.336297 \n",
- " 0.275640 \n",
- " -0.452769 \n",
- " 0.155304 \n",
- " -0.453287 \n",
- " \n",
- " \n",
- " NT_EFC195 \n",
- " 0.088068 \n",
- " -0.143168 \n",
- " -0.169540 \n",
- " -0.090058 \n",
- " -0.230417 \n",
- " -0.230561 \n",
- " 1.000000 \n",
- " 0.178683 \n",
- " -0.036844 \n",
- " 0.145924 \n",
- " 0.080898 \n",
- " 0.260702 \n",
- " \n",
- " \n",
- " AS_MeanAmphiMoment \n",
- " 0.355477 \n",
- " -0.431590 \n",
- " -0.426097 \n",
- " -0.408793 \n",
- " -0.160269 \n",
- " -0.336297 \n",
- " 0.178683 \n",
- " 1.000000 \n",
- " -0.322378 \n",
- " 0.025580 \n",
- " 0.171524 \n",
- " 0.693552 \n",
- " \n",
- " \n",
- " AS_DAYM780201 \n",
- " -0.365374 \n",
- " 0.449621 \n",
- " 0.456260 \n",
- " 0.894191 \n",
- " -0.029085 \n",
- " 0.275640 \n",
- " -0.036844 \n",
- " -0.322378 \n",
- " 1.000000 \n",
- " 0.045562 \n",
- " -0.256060 \n",
- " -0.437168 \n",
- " \n",
- " \n",
- " AS_FUKS010112 \n",
- " -0.090570 \n",
- " 0.002334 \n",
- " 0.032958 \n",
- " 0.055915 \n",
- " 0.040480 \n",
- " -0.452769 \n",
- " 0.145924 \n",
- " 0.025580 \n",
- " 0.045562 \n",
- " 1.000000 \n",
- " -0.445284 \n",
- " 0.033432 \n",
- " \n",
- " \n",
- " CT_RACS820104 \n",
- " 0.232929 \n",
- " -0.213543 \n",
- " -0.403599 \n",
- " -0.326792 \n",
- " -0.151935 \n",
- " 0.155304 \n",
- " 0.080898 \n",
- " 0.171524 \n",
- " -0.256060 \n",
- " -0.445284 \n",
- " 1.000000 \n",
- " 0.267652 \n",
- " \n",
- " \n",
- " CLASS \n",
- " 0.534602 \n",
- " -0.598816 \n",
- " -0.584111 \n",
- " -0.554838 \n",
- " -0.260470 \n",
- " -0.453287 \n",
- " 0.260702 \n",
- " 0.693552 \n",
- " -0.437168 \n",
- " 0.033432 \n",
- " 0.267652 \n",
- " 1.000000 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 \\\n",
- "FULL_Charge 1.000000 -0.612996 -0.490977 \n",
- "FULL_AcidicMolPerc -0.612996 1.000000 0.794796 \n",
- "FULL_AURR980107 -0.490977 0.794796 1.000000 \n",
- "FULL_DAYM780201 -0.434603 0.541481 0.548253 \n",
- "FULL_GEOR030101 -0.058725 0.115201 0.346139 \n",
- "FULL_OOBM850104 -0.283758 0.513344 0.462712 \n",
- "NT_EFC195 0.088068 -0.143168 -0.169540 \n",
- "AS_MeanAmphiMoment 0.355477 -0.431590 -0.426097 \n",
- "AS_DAYM780201 -0.365374 0.449621 0.456260 \n",
- "AS_FUKS010112 -0.090570 0.002334 0.032958 \n",
- "CT_RACS820104 0.232929 -0.213543 -0.403599 \n",
- "CLASS 0.534602 -0.598816 -0.584111 \n",
- "\n",
- " FULL_DAYM780201 FULL_GEOR030101 FULL_OOBM850104 \\\n",
- "FULL_Charge -0.434603 -0.058725 -0.283758 \n",
- "FULL_AcidicMolPerc 0.541481 0.115201 0.513344 \n",
- "FULL_AURR980107 0.548253 0.346139 0.462712 \n",
- "FULL_DAYM780201 1.000000 0.010118 0.334778 \n",
- "FULL_GEOR030101 0.010118 1.000000 0.319157 \n",
- "FULL_OOBM850104 0.334778 0.319157 1.000000 \n",
- "NT_EFC195 -0.090058 -0.230417 -0.230561 \n",
- "AS_MeanAmphiMoment -0.408793 -0.160269 -0.336297 \n",
- "AS_DAYM780201 0.894191 -0.029085 0.275640 \n",
- "AS_FUKS010112 0.055915 0.040480 -0.452769 \n",
- "CT_RACS820104 -0.326792 -0.151935 0.155304 \n",
- "CLASS -0.554838 -0.260470 -0.453287 \n",
- "\n",
- " NT_EFC195 AS_MeanAmphiMoment AS_DAYM780201 \\\n",
- "FULL_Charge 0.088068 0.355477 -0.365374 \n",
- "FULL_AcidicMolPerc -0.143168 -0.431590 0.449621 \n",
- "FULL_AURR980107 -0.169540 -0.426097 0.456260 \n",
- "FULL_DAYM780201 -0.090058 -0.408793 0.894191 \n",
- "FULL_GEOR030101 -0.230417 -0.160269 -0.029085 \n",
- "FULL_OOBM850104 -0.230561 -0.336297 0.275640 \n",
- "NT_EFC195 1.000000 0.178683 -0.036844 \n",
- "AS_MeanAmphiMoment 0.178683 1.000000 -0.322378 \n",
- "AS_DAYM780201 -0.036844 -0.322378 1.000000 \n",
- "AS_FUKS010112 0.145924 0.025580 0.045562 \n",
- "CT_RACS820104 0.080898 0.171524 -0.256060 \n",
- "CLASS 0.260702 0.693552 -0.437168 \n",
- "\n",
- " AS_FUKS010112 CT_RACS820104 CLASS \n",
- "FULL_Charge -0.090570 0.232929 0.534602 \n",
- "FULL_AcidicMolPerc 0.002334 -0.213543 -0.598816 \n",
- "FULL_AURR980107 0.032958 -0.403599 -0.584111 \n",
- "FULL_DAYM780201 0.055915 -0.326792 -0.554838 \n",
- "FULL_GEOR030101 0.040480 -0.151935 -0.260470 \n",
- "FULL_OOBM850104 -0.452769 0.155304 -0.453287 \n",
- "NT_EFC195 0.145924 0.080898 0.260702 \n",
- "AS_MeanAmphiMoment 0.025580 0.171524 0.693552 \n",
- "AS_DAYM780201 0.045562 -0.256060 -0.437168 \n",
- "AS_FUKS010112 1.000000 -0.445284 0.033432 \n",
- "CT_RACS820104 -0.445284 1.000000 0.267652 \n",
- "CLASS 0.033432 0.267652 1.000000 "
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#Its a good idea to review all the pairwise correlations of the attributes in the dataset because some machine learning algorithm like linear and logistic regression can suffer poor performance if there are highly c orrelated attributes in the dataset\n",
- "data.corr(method='pearson')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "#plot a heat map to show the correlation of the data\n",
- "plt.figure(figsize=(8,8))\n",
- "sns.heatmap(data.corr(method='pearson'))\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "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": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#also checked the corelation in regards to the class since am trying to build a ML agorithm for that class\n",
- "data.corr(method='pearson')['CLASS']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize=(18,18))\n",
- "data.hist()\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- " data.skew().plot(kind='bar')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## understanding data with visualization"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Histogram\n",
- "### I want to understand each attribute of my dataset independently"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Data pre-processing"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize=(20,20))\n",
- "data.hist()\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Standardize data"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[ 7.69712416e-01 -1.12341031e+00 -1.90047029e-01 1.37605977e-01\n",
- " -6.06718766e-01 -7.20629784e-01 -3.11684110e-01 -1.33070267e+00\n",
- " -2.25681314e-02 -3.60971652e-01 -9.25122883e-01]\n",
- " [ 5.07884366e-01 -4.10857567e-01 -3.76275096e-01 -2.43225309e-01\n",
- " -1.18128598e+00 -9.24503172e-01 3.20837658e+00 -1.30322672e+00\n",
- " -5.92370366e-01 9.02050407e-01 1.03699430e+00]\n",
- " [ 9.00626442e-01 -4.10857567e-01 -9.16336490e-01 -8.65106417e-03\n",
- " -1.05360437e+00 -4.63244125e-02 -3.11684110e-01 -1.30383154e+00\n",
- " -4.59030969e-01 -1.40916462e+00 2.31808537e+00]\n",
- " [ 7.69712416e-01 -5.74065761e-01 -7.11485617e-01 -8.70124978e-01\n",
- " 1.59370848e-01 6.27395116e-01 -3.11684110e-01 -1.30201709e+00\n",
- " -7.01486075e-01 -2.30020073e+00 6.98862456e-01]\n",
- " [ 1.42428254e+00 2.04070778e-03 -3.66963693e-01 -1.04957427e+00\n",
- " -4.79037163e-01 2.00315519e-01 -3.11684110e-01 -1.30184429e+00\n",
- " -7.71259861e-02 -1.97723618e+00 1.44656245e+00]]\n"
- ]
- }
- ],
- "source": [
- "from sklearn.preprocessing import StandardScaler\n",
- "array = data.values\n",
- "#separate array into input and output components\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "scaler = StandardScaler().fit(X)\n",
- "rescaledX = scaler.transform(X)\n",
- "# summarize transformed data\n",
- "#set_printoptions(precision=3)\n",
- "print(rescaledX[0:5,:])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Feature selection\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Chose Recursive Feature Elimination because i dont have the library for my data in this case\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Num Features: 8\n",
- "Selected Features: [ True False True False True True True True False True True]\n",
- "Feature Ranking: [1 3 1 2 1 1 1 1 4 1 1]\n"
- ]
- }
- ],
- "source": [
- "from sklearn.feature_selection import RFE\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "\n",
- "array1 = data.values\n",
- "X = array1[:,0:11]\n",
- "Y = array[:,11]\n",
- "# feature extraction\n",
- "model = LogisticRegression()\n",
- "rfe = RFE(model,8)\n",
- "fit = rfe.fit(X,Y)\n",
- "print(\"Num Features:\", fit.n_features_)\n",
- "print(\"Selected Features:\", fit.support_)\n",
- "print(\"Feature Ranking:\", fit.ranking_)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['FULL_Charge', 'FULL_AcidicMolPerc', 'FULL_AURR980107',\n",
- " 'FULL_DAYM780201', 'FULL_GEOR030101', 'FULL_OOBM850104', 'NT_EFC195',\n",
- " 'AS_MeanAmphiMoment', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104',\n",
- " 'CLASS'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 19,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "data.columns"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AURR980107 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " CLASS \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 5.0 \n",
- " 0.951 \n",
- " 0.975 \n",
- " -3.663 \n",
- " 0 \n",
- " 0.282 \n",
- " 5.661 \n",
- " 1.041 \n",
- " 1 \n",
- " \n",
- " \n",
- " 1 \n",
- " 4.0 \n",
- " 0.931 \n",
- " 0.957 \n",
- " -4.011 \n",
- " 1 \n",
- " 0.600 \n",
- " 6.537 \n",
- " 1.453 \n",
- " 1 \n",
- " \n",
- " \n",
- " 2 \n",
- " 5.5 \n",
- " 0.873 \n",
- " 0.961 \n",
- " -2.512 \n",
- " 0 \n",
- " 0.593 \n",
- " 4.934 \n",
- " 1.722 \n",
- " 1 \n",
- " \n",
- " \n",
- " 3 \n",
- " 5.0 \n",
- " 0.895 \n",
- " 0.999 \n",
- " -1.362 \n",
- " 0 \n",
- " 0.614 \n",
- " 4.316 \n",
- " 1.382 \n",
- " 1 \n",
- " \n",
- " \n",
- " 4 \n",
- " 7.5 \n",
- " 0.932 \n",
- " 0.979 \n",
- " -2.091 \n",
- " 0 \n",
- " 0.616 \n",
- " 4.540 \n",
- " 1.539 \n",
- " 1 \n",
- " \n",
- " \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " \n",
- " \n",
- " 3033 \n",
- " 1.0 \n",
- " 0.945 \n",
- " 1.006 \n",
- " -2.151 \n",
- " 0 \n",
- " 16.706 \n",
- " 5.598 \n",
- " 1.144 \n",
- " 0 \n",
- " \n",
- " \n",
- " 3034 \n",
- " -6.5 \n",
- " 1.133 \n",
- " 1.015 \n",
- " -1.675 \n",
- " 0 \n",
- " 16.897 \n",
- " 6.194 \n",
- " 1.639 \n",
- " 0 \n",
- " \n",
- " \n",
- " 3035 \n",
- " -1.5 \n",
- " 1.091 \n",
- " 0.991 \n",
- " -0.918 \n",
- " 0 \n",
- " 16.918 \n",
- " 5.889 \n",
- " 1.131 \n",
- " 0 \n",
- " \n",
- " \n",
- " 3036 \n",
- " 2.0 \n",
- " 0.849 \n",
- " 1.017 \n",
- " -2.722 \n",
- " 0 \n",
- " 17.131 \n",
- " 6.055 \n",
- " 1.270 \n",
- " 0 \n",
- " \n",
- " \n",
- " 3037 \n",
- " -1.0 \n",
- " 1.066 \n",
- " 0.998 \n",
- " -2.080 \n",
- " 0 \n",
- " 17.151 \n",
- " 5.853 \n",
- " 1.136 \n",
- " 0 \n",
- " \n",
- " \n",
- "
\n",
- "
3038 rows × 9 columns
\n",
- "
"
- ],
- "text/plain": [
- " FULL_Charge FULL_AURR980107 FULL_GEOR030101 FULL_OOBM850104 \\\n",
- "0 5.0 0.951 0.975 -3.663 \n",
- "1 4.0 0.931 0.957 -4.011 \n",
- "2 5.5 0.873 0.961 -2.512 \n",
- "3 5.0 0.895 0.999 -1.362 \n",
- "4 7.5 0.932 0.979 -2.091 \n",
- "... ... ... ... ... \n",
- "3033 1.0 0.945 1.006 -2.151 \n",
- "3034 -6.5 1.133 1.015 -1.675 \n",
- "3035 -1.5 1.091 0.991 -0.918 \n",
- "3036 2.0 0.849 1.017 -2.722 \n",
- "3037 -1.0 1.066 0.998 -2.080 \n",
- "\n",
- " NT_EFC195 AS_MeanAmphiMoment AS_FUKS010112 CT_RACS820104 CLASS \n",
- "0 0 0.282 5.661 1.041 1 \n",
- "1 1 0.600 6.537 1.453 1 \n",
- "2 0 0.593 4.934 1.722 1 \n",
- "3 0 0.614 4.316 1.382 1 \n",
- "4 0 0.616 4.540 1.539 1 \n",
- "... ... ... ... ... ... \n",
- "3033 0 16.706 5.598 1.144 0 \n",
- "3034 0 16.897 6.194 1.639 0 \n",
- "3035 0 16.918 5.889 1.131 0 \n",
- "3036 0 17.131 6.055 1.270 0 \n",
- "3037 0 17.151 5.853 1.136 0 \n",
- "\n",
- "[3038 rows x 9 columns]"
- ]
- },
- "execution_count": 20,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "drop=data.drop(['FULL_AcidicMolPerc', 'FULL_DAYM780201', 'AS_DAYM780201'],axis=1)\n",
- "drop\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AURR980107 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 4.0 \n",
- " 0.873 \n",
- " 0.987 \n",
- " -4.833 \n",
- " 0 \n",
- " 0.382 \n",
- " 7.225 \n",
- " 1.234 \n",
- " \n",
- " \n",
- " 1 \n",
- " 4.0 \n",
- " 0.892 \n",
- " 0.931 \n",
- " -0.584 \n",
- " 0 \n",
- " 0.320 \n",
- " 4.942 \n",
- " 1.853 \n",
- " \n",
- " \n",
- " 2 \n",
- " 2.0 \n",
- " 0.901 \n",
- " 1.039 \n",
- " -5.664 \n",
- " 0 \n",
- " 0.164 \n",
- " 5.969 \n",
- " 1.174 \n",
- " \n",
- " \n",
- " 3 \n",
- " 4.5 \n",
- " 0.869 \n",
- " 0.982 \n",
- " -5.423 \n",
- " 0 \n",
- " 2.010 \n",
- " 5.462 \n",
- " 1.138 \n",
- " \n",
- " \n",
- " 4 \n",
- " -4.0 \n",
- " 1.061 \n",
- " 0.976 \n",
- " -2.002 \n",
- " 0 \n",
- " 2.758 \n",
- " 5.582 \n",
- " 1.453 \n",
- " \n",
- " \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " \n",
- " \n",
- " 753 \n",
- " -1.5 \n",
- " 1.100 \n",
- " 0.991 \n",
- " -1.987 \n",
- " 0 \n",
- " 15.185 \n",
- " 7.053 \n",
- " 1.325 \n",
- " \n",
- " \n",
- " 754 \n",
- " -1.0 \n",
- " 1.085 \n",
- " 1.027 \n",
- " -0.745 \n",
- " 0 \n",
- " 16.550 \n",
- " 6.729 \n",
- " 1.132 \n",
- " \n",
- " \n",
- " 755 \n",
- " -1.0 \n",
- " 1.108 \n",
- " 1.033 \n",
- " -1.789 \n",
- " 0 \n",
- " 16.112 \n",
- " 6.036 \n",
- " 1.219 \n",
- " \n",
- " \n",
- " 756 \n",
- " -1.0 \n",
- " 0.955 \n",
- " 1.023 \n",
- " 1.141 \n",
- " 0 \n",
- " 20.630 \n",
- " 5.669 \n",
- " 1.111 \n",
- " \n",
- " \n",
- " 757 \n",
- " -7.0 \n",
- " 1.078 \n",
- " 1.009 \n",
- " -0.066 \n",
- " 0 \n",
- " 17.168 \n",
- " 6.688 \n",
- " 1.305 \n",
- " \n",
- " \n",
- "
\n",
- "
758 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " FULL_Charge FULL_AURR980107 FULL_GEOR030101 FULL_OOBM850104 \\\n",
- "0 4.0 0.873 0.987 -4.833 \n",
- "1 4.0 0.892 0.931 -0.584 \n",
- "2 2.0 0.901 1.039 -5.664 \n",
- "3 4.5 0.869 0.982 -5.423 \n",
- "4 -4.0 1.061 0.976 -2.002 \n",
- ".. ... ... ... ... \n",
- "753 -1.5 1.100 0.991 -1.987 \n",
- "754 -1.0 1.085 1.027 -0.745 \n",
- "755 -1.0 1.108 1.033 -1.789 \n",
- "756 -1.0 0.955 1.023 1.141 \n",
- "757 -7.0 1.078 1.009 -0.066 \n",
- "\n",
- " NT_EFC195 AS_MeanAmphiMoment AS_FUKS010112 CT_RACS820104 \n",
- "0 0 0.382 7.225 1.234 \n",
- "1 0 0.320 4.942 1.853 \n",
- "2 0 0.164 5.969 1.174 \n",
- "3 0 2.010 5.462 1.138 \n",
- "4 0 2.758 5.582 1.453 \n",
- ".. ... ... ... ... \n",
- "753 0 15.185 7.053 1.325 \n",
- "754 0 16.550 6.729 1.132 \n",
- "755 0 16.112 6.036 1.219 \n",
- "756 0 20.630 5.669 1.111 \n",
- "757 0 17.168 6.688 1.305 \n",
- "\n",
- "[758 rows x 8 columns]"
- ]
- },
- "execution_count": 21,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "drop_test = test.drop(['FULL_AcidicMolPerc', 'FULL_DAYM780201', 'AS_DAYM780201'],axis=1)\n",
- "drop_test"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [],
- "source": [
- "seleceted_train = X[:,fit.support_]\n",
- "selected_test = test.values[:,fit.support_]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Evaluate the Performance of Machine Learning Algorithms with Resampling¶\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Split into Train and Test Sets"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Accuracy: 91.55701754385966\n"
- ]
- }
- ],
- "source": [
- "from sklearn.model_selection import train_test_split\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "test_size = 0.30\n",
- "seed = 7\n",
- "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,\n",
- "random_state=seed)\n",
- "model = LogisticRegression()\n",
- "model.fit(X_train, Y_train)\n",
- "result = model.score(X_test, Y_test)\n",
- "print(\"Accuracy: \", (result*100.0))\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## K-fold Cross Validation"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Accuracy: (83.5359128018065, 27.08521320979506)\n"
- ]
- }
- ],
- "source": [
- "from sklearn.model_selection import KFold\n",
- "from sklearn.model_selection import cross_val_score\n",
- "\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "\n",
- "num_folds = 10 #number of folds to use\n",
- "seed = 7 #reproducibility\n",
- "\n",
- "kfold = KFold(n_splits=num_folds, random_state=seed)\n",
- "model = LogisticRegression()\n",
- "results = cross_val_score(model, X, Y, cv=kfold)\n",
- "\n",
- "print(f\"Accuracy:\", (results.mean()*100.0, results.std()*100.0))\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Leave One Out Cross Validation"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Accuracy: (91.4417379855168, 27.974673416141517)\n"
- ]
- }
- ],
- "source": [
- "from sklearn.model_selection import LeaveOneOut\n",
- "from sklearn.model_selection import cross_val_score\n",
- "\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "num_folds = 10\n",
- "loocv = LeaveOneOut()\n",
- "model = LogisticRegression()\n",
- "results = cross_val_score(model, X, Y, cv=loocv)\n",
- "print(\"Accuracy:\", (results.mean()*100.0, results.std()*100.0))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Repeated Random Test-Train Splits"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Accuracy: (91.30482456140349, 0.5803122202806698)\n"
- ]
- }
- ],
- "source": [
- "from sklearn.model_selection import ShuffleSplit\n",
- "from sklearn.model_selection import cross_val_score\n",
- "\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "n_splits = 10\n",
- "test_size = 0.30\n",
- "seed = 7\n",
- "kfold = ShuffleSplit(n_splits=n_splits, test_size=test_size, random_state=seed)\n",
- "model = LogisticRegression()\n",
- "results = cross_val_score(model, X, Y, cv=kfold)\n",
- "print(\"Accuracy: \" , (results.mean()*100.0, results.std()*100.0))\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Machine Learning Algorithm Performance Metrics"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Algorithms Overview\n",
- "### linear machine learning algorithms:\n",
- "\n",
- " Logistic Regression.\n",
- " Linear Discriminant Analysis.\n",
- "### onlinear machine learning algorithms\n",
- "\n",
- " k-Nearest Neighbors.\n",
- " Naive Bayes.\n",
- " Classication and Regression Trees.\n",
- " Support Vector Machines.\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Linear Machine Learning Algorithms"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Logistic Regression"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.835359128018065\n",
- "MCC: 0.8342865299822478\n",
- "[False True]\n",
- "False: 383\n",
- "True: 375\n"
- ]
- }
- ],
- "source": [
- "# Logistic Regression Classification\n",
- "from pandas import read_csv\n",
- "from sklearn.model_selection import KFold\n",
- "from sklearn.model_selection import cross_val_score\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "num_folds = 10\n",
- "kfold = KFold(n_splits=10, random_state=7)\n",
- "model = LogisticRegression()\n",
- "results = cross_val_score(model, X, Y, cv=kfold)\n",
- "print(results.mean())\n",
- "\n",
- "model.fit(X,Y)\n",
- "output = model.predict(test.values)\n",
- "\n",
- "from sklearn.metrics import matthews_corrcoef\n",
- "mcc = matthews_corrcoef(model.predict(X),Y)\n",
- "print('MCC:',mcc)\n",
- " \n",
- "my_report = pd.DataFrame(output)\n",
- "my_report.columns = ['CLASS']\n",
- "my_report.index.name = \"Index\"\n",
- "my_report['CLASS']=my_report['CLASS'].map({0.0:False, 1.0:True})\n",
- "my_report.to_csv(\"report_XGB.csv\")\n",
- "\n",
- "print(my_report['CLASS'].unique())\n",
- "print('False: ',my_report.groupby('CLASS').size()[0].sum())\n",
- "print('True: ',my_report.groupby('CLASS').size()[1].sum())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AURR980107 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " CLASS \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 5.0 \n",
- " 0.951 \n",
- " 0.975 \n",
- " -3.663 \n",
- " 0 \n",
- " 0.282 \n",
- " 5.661 \n",
- " 1.041 \n",
- " 1 \n",
- " \n",
- " \n",
- " 1 \n",
- " 4.0 \n",
- " 0.931 \n",
- " 0.957 \n",
- " -4.011 \n",
- " 1 \n",
- " 0.600 \n",
- " 6.537 \n",
- " 1.453 \n",
- " 1 \n",
- " \n",
- " \n",
- " 2 \n",
- " 5.5 \n",
- " 0.873 \n",
- " 0.961 \n",
- " -2.512 \n",
- " 0 \n",
- " 0.593 \n",
- " 4.934 \n",
- " 1.722 \n",
- " 1 \n",
- " \n",
- " \n",
- " 3 \n",
- " 5.0 \n",
- " 0.895 \n",
- " 0.999 \n",
- " -1.362 \n",
- " 0 \n",
- " 0.614 \n",
- " 4.316 \n",
- " 1.382 \n",
- " 1 \n",
- " \n",
- " \n",
- " 4 \n",
- " 7.5 \n",
- " 0.932 \n",
- " 0.979 \n",
- " -2.091 \n",
- " 0 \n",
- " 0.616 \n",
- " 4.540 \n",
- " 1.539 \n",
- " 1 \n",
- " \n",
- " \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " \n",
- " \n",
- " 3033 \n",
- " 1.0 \n",
- " 0.945 \n",
- " 1.006 \n",
- " -2.151 \n",
- " 0 \n",
- " 16.706 \n",
- " 5.598 \n",
- " 1.144 \n",
- " 0 \n",
- " \n",
- " \n",
- " 3034 \n",
- " -6.5 \n",
- " 1.133 \n",
- " 1.015 \n",
- " -1.675 \n",
- " 0 \n",
- " 16.897 \n",
- " 6.194 \n",
- " 1.639 \n",
- " 0 \n",
- " \n",
- " \n",
- " 3035 \n",
- " -1.5 \n",
- " 1.091 \n",
- " 0.991 \n",
- " -0.918 \n",
- " 0 \n",
- " 16.918 \n",
- " 5.889 \n",
- " 1.131 \n",
- " 0 \n",
- " \n",
- " \n",
- " 3036 \n",
- " 2.0 \n",
- " 0.849 \n",
- " 1.017 \n",
- " -2.722 \n",
- " 0 \n",
- " 17.131 \n",
- " 6.055 \n",
- " 1.270 \n",
- " 0 \n",
- " \n",
- " \n",
- " 3037 \n",
- " -1.0 \n",
- " 1.066 \n",
- " 0.998 \n",
- " -2.080 \n",
- " 0 \n",
- " 17.151 \n",
- " 5.853 \n",
- " 1.136 \n",
- " 0 \n",
- " \n",
- " \n",
- "
\n",
- "
3038 rows × 9 columns
\n",
- "
"
- ],
- "text/plain": [
- " FULL_Charge FULL_AURR980107 FULL_GEOR030101 FULL_OOBM850104 \\\n",
- "0 5.0 0.951 0.975 -3.663 \n",
- "1 4.0 0.931 0.957 -4.011 \n",
- "2 5.5 0.873 0.961 -2.512 \n",
- "3 5.0 0.895 0.999 -1.362 \n",
- "4 7.5 0.932 0.979 -2.091 \n",
- "... ... ... ... ... \n",
- "3033 1.0 0.945 1.006 -2.151 \n",
- "3034 -6.5 1.133 1.015 -1.675 \n",
- "3035 -1.5 1.091 0.991 -0.918 \n",
- "3036 2.0 0.849 1.017 -2.722 \n",
- "3037 -1.0 1.066 0.998 -2.080 \n",
- "\n",
- " NT_EFC195 AS_MeanAmphiMoment AS_FUKS010112 CT_RACS820104 CLASS \n",
- "0 0 0.282 5.661 1.041 1 \n",
- "1 1 0.600 6.537 1.453 1 \n",
- "2 0 0.593 4.934 1.722 1 \n",
- "3 0 0.614 4.316 1.382 1 \n",
- "4 0 0.616 4.540 1.539 1 \n",
- "... ... ... ... ... ... \n",
- "3033 0 16.706 5.598 1.144 0 \n",
- "3034 0 16.897 6.194 1.639 0 \n",
- "3035 0 16.918 5.889 1.131 0 \n",
- "3036 0 17.131 6.055 1.270 0 \n",
- "3037 0 17.151 5.853 1.136 0 \n",
- "\n",
- "[3038 rows x 9 columns]"
- ]
- },
- "execution_count": 28,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "drop"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 29,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AURR980107 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 4.0 \n",
- " 0.873 \n",
- " 0.987 \n",
- " -4.833 \n",
- " 0 \n",
- " 0.382 \n",
- " 7.225 \n",
- " 1.234 \n",
- " \n",
- " \n",
- " 1 \n",
- " 4.0 \n",
- " 0.892 \n",
- " 0.931 \n",
- " -0.584 \n",
- " 0 \n",
- " 0.320 \n",
- " 4.942 \n",
- " 1.853 \n",
- " \n",
- " \n",
- " 2 \n",
- " 2.0 \n",
- " 0.901 \n",
- " 1.039 \n",
- " -5.664 \n",
- " 0 \n",
- " 0.164 \n",
- " 5.969 \n",
- " 1.174 \n",
- " \n",
- " \n",
- " 3 \n",
- " 4.5 \n",
- " 0.869 \n",
- " 0.982 \n",
- " -5.423 \n",
- " 0 \n",
- " 2.010 \n",
- " 5.462 \n",
- " 1.138 \n",
- " \n",
- " \n",
- " 4 \n",
- " -4.0 \n",
- " 1.061 \n",
- " 0.976 \n",
- " -2.002 \n",
- " 0 \n",
- " 2.758 \n",
- " 5.582 \n",
- " 1.453 \n",
- " \n",
- " \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " \n",
- " \n",
- " 753 \n",
- " -1.5 \n",
- " 1.100 \n",
- " 0.991 \n",
- " -1.987 \n",
- " 0 \n",
- " 15.185 \n",
- " 7.053 \n",
- " 1.325 \n",
- " \n",
- " \n",
- " 754 \n",
- " -1.0 \n",
- " 1.085 \n",
- " 1.027 \n",
- " -0.745 \n",
- " 0 \n",
- " 16.550 \n",
- " 6.729 \n",
- " 1.132 \n",
- " \n",
- " \n",
- " 755 \n",
- " -1.0 \n",
- " 1.108 \n",
- " 1.033 \n",
- " -1.789 \n",
- " 0 \n",
- " 16.112 \n",
- " 6.036 \n",
- " 1.219 \n",
- " \n",
- " \n",
- " 756 \n",
- " -1.0 \n",
- " 0.955 \n",
- " 1.023 \n",
- " 1.141 \n",
- " 0 \n",
- " 20.630 \n",
- " 5.669 \n",
- " 1.111 \n",
- " \n",
- " \n",
- " 757 \n",
- " -7.0 \n",
- " 1.078 \n",
- " 1.009 \n",
- " -0.066 \n",
- " 0 \n",
- " 17.168 \n",
- " 6.688 \n",
- " 1.305 \n",
- " \n",
- " \n",
- "
\n",
- "
758 rows × 8 columns
\n",
- "
"
- ],
- "text/plain": [
- " FULL_Charge FULL_AURR980107 FULL_GEOR030101 FULL_OOBM850104 \\\n",
- "0 4.0 0.873 0.987 -4.833 \n",
- "1 4.0 0.892 0.931 -0.584 \n",
- "2 2.0 0.901 1.039 -5.664 \n",
- "3 4.5 0.869 0.982 -5.423 \n",
- "4 -4.0 1.061 0.976 -2.002 \n",
- ".. ... ... ... ... \n",
- "753 -1.5 1.100 0.991 -1.987 \n",
- "754 -1.0 1.085 1.027 -0.745 \n",
- "755 -1.0 1.108 1.033 -1.789 \n",
- "756 -1.0 0.955 1.023 1.141 \n",
- "757 -7.0 1.078 1.009 -0.066 \n",
- "\n",
- " NT_EFC195 AS_MeanAmphiMoment AS_FUKS010112 CT_RACS820104 \n",
- "0 0 0.382 7.225 1.234 \n",
- "1 0 0.320 4.942 1.853 \n",
- "2 0 0.164 5.969 1.174 \n",
- "3 0 2.010 5.462 1.138 \n",
- "4 0 2.758 5.582 1.453 \n",
- ".. ... ... ... ... \n",
- "753 0 15.185 7.053 1.325 \n",
- "754 0 16.550 6.729 1.132 \n",
- "755 0 16.112 6.036 1.219 \n",
- "756 0 20.630 5.669 1.111 \n",
- "757 0 17.168 6.688 1.305 \n",
- "\n",
- "[758 rows x 8 columns]"
- ]
- },
- "execution_count": 29,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "drop_test"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Linear Discriminant Analysis¶\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
- "\n",
- "\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "num_folds = 10\n",
- "kfold = KFold(n_splits=10, random_state=7)\n",
- "model = LinearDiscriminantAnalysis()\n",
- "results = cross_val_score(model, X, Y, cv=kfold)\n",
- "print(results.mean())\n",
- "\n",
- "\n",
- "model.fit(X,Y)\n",
- "output = model.predict(test.values)\n",
- "\n",
- "from sklearn.metrics import matthews_corrcoef\n",
- "mcc = matthews_corrcoef(model.predict(X),Y)\n",
- "print('MCC:',mcc)\n",
- " \n",
- "lda_report = pd.DataFrame(output)\n",
- "lda_report.columns = ['CLASS']\n",
- "lda_report.index.name = \"Index\"\n",
- "lda_report['CLASS']=lda_report['CLASS'].map({0.0:False, 1.0:True})\n",
- "lda_report.to_csv(\"ldareport.csv\")\n",
- "\n",
- "print(lda_report['CLASS'].unique())\n",
- "print('False: ',lda_report.groupby('CLASS').size()[0].sum())\n",
- "print('True: ',lda_report.groupby('CLASS').size()[1].sum())\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Nonlinear Machine Learning Algorithms"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### k-Nearest Neighbors"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 31,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.8027933385443807\n",
- "MCC: 0.8690586462107053\n",
- "[False True]\n",
- "False: 402\n",
- "True: 356\n"
- ]
- }
- ],
- "source": [
- "from sklearn.neighbors import KNeighborsClassifier\n",
- "\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "num_folds = 10\n",
- "kfold = KFold(n_splits=10, random_state=7)\n",
- "model = KNeighborsClassifier()\n",
- "results = cross_val_score(model, X, Y, cv=kfold)\n",
- "print(results.mean())\n",
- "\n",
- "\n",
- "\n",
- "model.fit(X,Y)\n",
- "output = model.predict(test.values)\n",
- "\n",
- "from sklearn.metrics import matthews_corrcoef\n",
- "mcc = matthews_corrcoef(model.predict(X),Y)\n",
- "print('MCC:',mcc)\n",
- " \n",
- "report_k = pd.DataFrame(output)\n",
- "report_k.columns = ['CLASS']\n",
- "report_k.index.name = \"Index\"\n",
- "report_k['CLASS']=report_k['CLASS'].map({0.0:False, 1.0:True})\n",
- "report_k.to_csv(\"report_k.csv\")\n",
- "\n",
- "\n",
- "print(report_k['CLASS'].unique())\n",
- "print('False: ',report_k.groupby('CLASS').size()[0].sum())\n",
- "print('True: ',report_k.groupby('CLASS').size()[1].sum())"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Naive Bayes"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 32,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.880815746048289\n",
- "MCC: 0.8407203694376205\n",
- "[ True False]\n",
- "False: 370\n",
- "True: 388\n"
- ]
- }
- ],
- "source": [
- "from sklearn.naive_bayes import GaussianNB\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "kfold = KFold(n_splits=10, random_state=7)\n",
- "model = GaussianNB()\n",
- "results = cross_val_score(model, X, Y, cv=kfold)\n",
- "print(results.mean())\n",
- "\n",
- "\n",
- "model.fit(X,Y)\n",
- "output = model.predict(test.values)\n",
- "\n",
- "from sklearn.metrics import matthews_corrcoef\n",
- "mcc = matthews_corrcoef(model.predict(X),Y)\n",
- "print('MCC:',mcc)\n",
- " \n",
- "report_bayes = pd.DataFrame(output)\n",
- "report_bayes.columns = ['CLASS']\n",
- "report_bayes.index.name = \"Index\"\n",
- "report_bayes['CLASS']=report_bayes['CLASS'].map({0.0:False, 1.0:True})\n",
- "report_bayes.to_csv(\"report_bayes.csv\")\n",
- "\n",
- "\n",
- "print(report_bayes['CLASS'].unique())\n",
- "print('False: ',report_bayes.groupby('CLASS').size()[0].sum())\n",
- "print('True: ',report_bayes.groupby('CLASS').size()[1].sum())"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Classiffication and Regression Trees"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sklearn.tree import DecisionTreeClassifier\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "kfold = KFold(n_splits=10, random_state=7)\n",
- "model = DecisionTreeClassifier()\n",
- "results = cross_val_score(model, X, Y, cv=kfold)\n",
- "print(results.mean())\n",
- "\n",
- "\n",
- "model.fit(X,Y)\n",
- "output = model.predict(test.values)\n",
- "\n",
- "from sklearn.metrics import matthews_corrcoef\n",
- "mcc = matthews_corrcoef(model.predict(X),Y)\n",
- "print('MCC:',mcc)\n",
- " \n",
- "report_tree = pd.DataFrame(output)\n",
- "report_tree.columns = ['CLASS']\n",
- "report_tree.index.name = \"Index\"\n",
- "report_tree['CLASS']=report_tree['CLASS'].map({0.0:False, 1.0:True})\n",
- "report_tree.to_csv(\"report_tree.csv\")\n",
- "\n",
- "\n",
- "print(report_tree['CLASS'].unique())\n",
- "print('False: ',report_tree.groupby('CLASS').size()[0].sum())\n",
- "print('True: ',report_tree.groupby('CLASS').size()[1].sum())"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Support Vector Machines "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sklearn.svm import SVC\n",
- "\n",
- "array = data.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "kfold = KFold(n_splits=10, random_state=7)\n",
- "model = SVC()\n",
- "results = cross_val_score(model, X, Y, cv=kfold)\n",
- "print(results.mean())\n"
- ]
- }
- ],
- "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.3"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/Assignment Colab/.ipynb_checkpoints/MARIA MAGDALENE NAMAGANDA-checkpoint.ipynb b/Assignment Colab/.ipynb_checkpoints/MARIA MAGDALENE NAMAGANDA-checkpoint.ipynb
deleted file mode 100644
index 8155bd1..0000000
--- a/Assignment Colab/.ipynb_checkpoints/MARIA MAGDALENE NAMAGANDA-checkpoint.ipynb
+++ /dev/null
@@ -1,1769 +0,0 @@
-{
- "cells": [
- {
- "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": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "#import the necessary libraries you are going to use\n",
- "import warnings\n",
- "warnings.filterwarnings('ignore')\n",
- "\n",
- "# -----> Put your code here below:\n",
- "\n",
- "\n",
- "import pandas as pd\n",
- "import numpy as np\n",
- "import matplotlib.pyplot as plt\n",
- "import seaborn as sns"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Working with AMP_Data_set\n",
- "## `Training and testing data in Machine Learning`\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "_cell_guid": "",
- "_uuid": ""
- },
- "outputs": [],
- "source": [
- "#Load the datasets, there are two i.e the Train and Test datasets\n",
- "\n",
- "Train = pd.read_csv(\"../AMP Data Sets/AMP_TrainSet.csv\")\n",
- "Test = pd.read_csv(\"../AMP Data Sets/Test.csv\")\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- ">Getting to know more about the data\n",
- "\n",
- "(Atwine)\n",
- "\n",
- "When you run the code below, what did you learn?\n",
- "\n",
- "Please document those findings.
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "\n",
- "FULL_Charge float64\n",
- "FULL_AcidicMolPerc float64\n",
- "FULL_AURR980107 float64\n",
- "FULL_DAYM780201 float64\n",
- "FULL_GEOR030101 float64\n",
- "FULL_OOBM850104 float64\n",
- "NT_EFC195 int64\n",
- "AS_MeanAmphiMoment float64\n",
- "AS_DAYM780201 float64\n",
- "AS_FUKS010112 float64\n",
- "CT_RACS820104 float64\n",
- "CLASS int64\n",
- "dtype: object\n",
- "FULL_Charge float64\n",
- "FULL_AcidicMolPerc float64\n",
- "FULL_AURR980107 float64\n",
- "FULL_DAYM780201 float64\n",
- "FULL_GEOR030101 float64\n",
- "FULL_OOBM850104 float64\n",
- "NT_EFC195 int64\n",
- "AS_MeanAmphiMoment float64\n",
- "AS_DAYM780201 float64\n",
- "AS_FUKS010112 float64\n",
- "CT_RACS820104 float64\n",
- "dtype: object\n"
- ]
- }
- ],
- "source": [
- "#here, am trying to find the kind of data am dealing with.\n",
- "print(type(Train))\n",
- "print(type(Test))\n",
- "print(Train.dtypes)\n",
- "print(Test.dtypes)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "((3038, 12), (758, 11))"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# check the dimensions of your data\n",
- "# this retuns the number of rows and columns in the data\n",
- "\n",
- "Train.shape, Test.shape\n",
- "\n",
- "#this helps to know how big the data is in terms of rows and columns.\n",
- "#it also informs one of which data is labeled"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "> The data is pre-prepared so ill just continue to work with it, since the Train dataset is already labeled with a CLASS attribute.\n",
- "\n",
- "\n",
- " This is a good note\n",
- "
Please highlight what you learnt from the describe function below, what does it tell you? \n",
- " What did you notice from the data? Is it perfect?\n",
- "
\n",
- "
Or there are some things that bug you but you are deciding to leave them a lone for some reason?
\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AcidicMolPerc \n",
- " FULL_AURR980107 \n",
- " FULL_DAYM780201 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_DAYM780201 \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " count \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " 758.000000 \n",
- " \n",
- " \n",
- " mean \n",
- " 2.073879 \n",
- " 8.945091 \n",
- " 0.973046 \n",
- " 73.821891 \n",
- " 0.994212 \n",
- " -2.397922 \n",
- " 0.084433 \n",
- " 15.570067 \n",
- " 73.844204 \n",
- " 5.904492 \n",
- " 1.250189 \n",
- " \n",
- " \n",
- " std \n",
- " 4.230615 \n",
- " 7.814449 \n",
- " 0.110676 \n",
- " 8.029524 \n",
- " 0.032370 \n",
- " 1.597138 \n",
- " 0.278219 \n",
- " 11.362589 \n",
- " 8.915193 \n",
- " 0.656911 \n",
- " 0.218102 \n",
- " \n",
- " \n",
- " min \n",
- " -13.000000 \n",
- " 0.000000 \n",
- " 0.699000 \n",
- " 47.000000 \n",
- " 0.889000 \n",
- " -7.844000 \n",
- " 0.000000 \n",
- " 0.060000 \n",
- " 47.000000 \n",
- " 3.843000 \n",
- " 0.841000 \n",
- " \n",
- " \n",
- " 25% \n",
- " -0.500000 \n",
- " 2.721750 \n",
- " 0.894000 \n",
- " 68.740250 \n",
- " 0.973000 \n",
- " -3.457250 \n",
- " 0.000000 \n",
- " 5.709000 \n",
- " 68.346000 \n",
- " 5.471250 \n",
- " 1.096000 \n",
- " \n",
- " \n",
- " 50% \n",
- " 2.000000 \n",
- " 7.500000 \n",
- " 0.965000 \n",
- " 74.069500 \n",
- " 0.994000 \n",
- " -2.238000 \n",
- " 0.000000 \n",
- " 15.057000 \n",
- " 73.646000 \n",
- " 5.935500 \n",
- " 1.188000 \n",
- " \n",
- " \n",
- " 75% \n",
- " 4.000000 \n",
- " 14.230250 \n",
- " 1.053500 \n",
- " 79.284750 \n",
- " 1.013000 \n",
- " -1.306250 \n",
- " 0.000000 \n",
- " 25.290250 \n",
- " 80.069250 \n",
- " 6.375250 \n",
- " 1.378500 \n",
- " \n",
- " \n",
- " max \n",
- " 30.000000 \n",
- " 44.118000 \n",
- " 1.431000 \n",
- " 102.929000 \n",
- " 1.182000 \n",
- " 2.017000 \n",
- " 1.000000 \n",
- " 50.098000 \n",
- " 102.929000 \n",
- " 7.588000 \n",
- " 2.283000 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 FULL_DAYM780201 \\\n",
- "count 758.000000 758.000000 758.000000 758.000000 \n",
- "mean 2.073879 8.945091 0.973046 73.821891 \n",
- "std 4.230615 7.814449 0.110676 8.029524 \n",
- "min -13.000000 0.000000 0.699000 47.000000 \n",
- "25% -0.500000 2.721750 0.894000 68.740250 \n",
- "50% 2.000000 7.500000 0.965000 74.069500 \n",
- "75% 4.000000 14.230250 1.053500 79.284750 \n",
- "max 30.000000 44.118000 1.431000 102.929000 \n",
- "\n",
- " FULL_GEOR030101 FULL_OOBM850104 NT_EFC195 AS_MeanAmphiMoment \\\n",
- "count 758.000000 758.000000 758.000000 758.000000 \n",
- "mean 0.994212 -2.397922 0.084433 15.570067 \n",
- "std 0.032370 1.597138 0.278219 11.362589 \n",
- "min 0.889000 -7.844000 0.000000 0.060000 \n",
- "25% 0.973000 -3.457250 0.000000 5.709000 \n",
- "50% 0.994000 -2.238000 0.000000 15.057000 \n",
- "75% 1.013000 -1.306250 0.000000 25.290250 \n",
- "max 1.182000 2.017000 1.000000 50.098000 \n",
- "\n",
- " AS_DAYM780201 AS_FUKS010112 CT_RACS820104 \n",
- "count 758.000000 758.000000 758.000000 \n",
- "mean 73.844204 5.904492 1.250189 \n",
- "std 8.915193 0.656911 0.218102 \n",
- "min 47.000000 3.843000 0.841000 \n",
- "25% 68.346000 5.471250 1.096000 \n",
- "50% 73.646000 5.935500 1.188000 \n",
- "75% 80.069250 6.375250 1.378500 \n",
- "max 102.929000 7.588000 2.283000 "
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#getting a description of the data\n",
- "#Train.describe, Test.describe\n",
- "Train.describe()\n",
- "Test.describe()\n",
- "#description gives a summary of the data."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AcidicMolPerc \n",
- " FULL_AURR980107 \n",
- " FULL_DAYM780201 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_DAYM780201 \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 4.0 \n",
- " 3.704 \n",
- " 0.873 \n",
- " 73.519 \n",
- " 0.987 \n",
- " -4.833 \n",
- " 0 \n",
- " 0.382 \n",
- " 74.556 \n",
- " 7.225 \n",
- " 1.234 \n",
- " \n",
- " \n",
- " 1 \n",
- " 4.0 \n",
- " 4.444 \n",
- " 0.892 \n",
- " 62.444 \n",
- " 0.931 \n",
- " -0.584 \n",
- " 0 \n",
- " 0.320 \n",
- " 56.056 \n",
- " 4.942 \n",
- " 1.853 \n",
- " \n",
- " \n",
- " 2 \n",
- " 2.0 \n",
- " 0.000 \n",
- " 0.901 \n",
- " 47.000 \n",
- " 1.039 \n",
- " -5.664 \n",
- " 0 \n",
- " 0.164 \n",
- " 47.000 \n",
- " 5.969 \n",
- " 1.174 \n",
- " \n",
- " \n",
- " 3 \n",
- " 4.5 \n",
- " 0.000 \n",
- " 0.869 \n",
- " 69.222 \n",
- " 0.982 \n",
- " -5.423 \n",
- " 0 \n",
- " 2.010 \n",
- " 69.222 \n",
- " 5.462 \n",
- " 1.138 \n",
- " \n",
- " \n",
- " 4 \n",
- " -4.0 \n",
- " 21.591 \n",
- " 1.061 \n",
- " 71.682 \n",
- " 0.976 \n",
- " -2.002 \n",
- " 0 \n",
- " 2.758 \n",
- " 66.000 \n",
- " 5.582 \n",
- " 1.453 \n",
- " \n",
- " \n",
- "
\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",
- "\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",
- "\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 "
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#looking at the first 5 entries of my data\n",
- "Train.head()\n",
- "Test.head()\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- ">Looking at the skewness of the data\n",
- "\n",
- "\n",
- " What did you learn?\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "#knowing data skewness allows one to perform data preparation and improve a model\n",
- "Train.skew().plot(kind='bar')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "> Data correlation."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AcidicMolPerc \n",
- " FULL_AURR980107 \n",
- " FULL_DAYM780201 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_DAYM780201 \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " CLASS \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " 1.000000 \n",
- " -0.612996 \n",
- " -0.490977 \n",
- " -0.434603 \n",
- " -0.058725 \n",
- " -0.283758 \n",
- " 0.088068 \n",
- " 0.355477 \n",
- " -0.365374 \n",
- " -0.090570 \n",
- " 0.232929 \n",
- " 0.534602 \n",
- " \n",
- " \n",
- " FULL_AcidicMolPerc \n",
- " -0.612996 \n",
- " 1.000000 \n",
- " 0.794796 \n",
- " 0.541481 \n",
- " 0.115201 \n",
- " 0.513344 \n",
- " -0.143168 \n",
- " -0.431590 \n",
- " 0.449621 \n",
- " 0.002334 \n",
- " -0.213543 \n",
- " -0.598816 \n",
- " \n",
- " \n",
- " FULL_AURR980107 \n",
- " -0.490977 \n",
- " 0.794796 \n",
- " 1.000000 \n",
- " 0.548253 \n",
- " 0.346139 \n",
- " 0.462712 \n",
- " -0.169540 \n",
- " -0.426097 \n",
- " 0.456260 \n",
- " 0.032958 \n",
- " -0.403599 \n",
- " -0.584111 \n",
- " \n",
- " \n",
- " FULL_DAYM780201 \n",
- " -0.434603 \n",
- " 0.541481 \n",
- " 0.548253 \n",
- " 1.000000 \n",
- " 0.010118 \n",
- " 0.334778 \n",
- " -0.090058 \n",
- " -0.408793 \n",
- " 0.894191 \n",
- " 0.055915 \n",
- " -0.326792 \n",
- " -0.554838 \n",
- " \n",
- " \n",
- " FULL_GEOR030101 \n",
- " -0.058725 \n",
- " 0.115201 \n",
- " 0.346139 \n",
- " 0.010118 \n",
- " 1.000000 \n",
- " 0.319157 \n",
- " -0.230417 \n",
- " -0.160269 \n",
- " -0.029085 \n",
- " 0.040480 \n",
- " -0.151935 \n",
- " -0.260470 \n",
- " \n",
- " \n",
- " FULL_OOBM850104 \n",
- " -0.283758 \n",
- " 0.513344 \n",
- " 0.462712 \n",
- " 0.334778 \n",
- " 0.319157 \n",
- " 1.000000 \n",
- " -0.230561 \n",
- " -0.336297 \n",
- " 0.275640 \n",
- " -0.452769 \n",
- " 0.155304 \n",
- " -0.453287 \n",
- " \n",
- " \n",
- " NT_EFC195 \n",
- " 0.088068 \n",
- " -0.143168 \n",
- " -0.169540 \n",
- " -0.090058 \n",
- " -0.230417 \n",
- " -0.230561 \n",
- " 1.000000 \n",
- " 0.178683 \n",
- " -0.036844 \n",
- " 0.145924 \n",
- " 0.080898 \n",
- " 0.260702 \n",
- " \n",
- " \n",
- " AS_MeanAmphiMoment \n",
- " 0.355477 \n",
- " -0.431590 \n",
- " -0.426097 \n",
- " -0.408793 \n",
- " -0.160269 \n",
- " -0.336297 \n",
- " 0.178683 \n",
- " 1.000000 \n",
- " -0.322378 \n",
- " 0.025580 \n",
- " 0.171524 \n",
- " 0.693552 \n",
- " \n",
- " \n",
- " AS_DAYM780201 \n",
- " -0.365374 \n",
- " 0.449621 \n",
- " 0.456260 \n",
- " 0.894191 \n",
- " -0.029085 \n",
- " 0.275640 \n",
- " -0.036844 \n",
- " -0.322378 \n",
- " 1.000000 \n",
- " 0.045562 \n",
- " -0.256060 \n",
- " -0.437168 \n",
- " \n",
- " \n",
- " AS_FUKS010112 \n",
- " -0.090570 \n",
- " 0.002334 \n",
- " 0.032958 \n",
- " 0.055915 \n",
- " 0.040480 \n",
- " -0.452769 \n",
- " 0.145924 \n",
- " 0.025580 \n",
- " 0.045562 \n",
- " 1.000000 \n",
- " -0.445284 \n",
- " 0.033432 \n",
- " \n",
- " \n",
- " CT_RACS820104 \n",
- " 0.232929 \n",
- " -0.213543 \n",
- " -0.403599 \n",
- " -0.326792 \n",
- " -0.151935 \n",
- " 0.155304 \n",
- " 0.080898 \n",
- " 0.171524 \n",
- " -0.256060 \n",
- " -0.445284 \n",
- " 1.000000 \n",
- " 0.267652 \n",
- " \n",
- " \n",
- " CLASS \n",
- " 0.534602 \n",
- " -0.598816 \n",
- " -0.584111 \n",
- " -0.554838 \n",
- " -0.260470 \n",
- " -0.453287 \n",
- " 0.260702 \n",
- " 0.693552 \n",
- " -0.437168 \n",
- " 0.033432 \n",
- " 0.267652 \n",
- " 1.000000 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " FULL_Charge FULL_AcidicMolPerc FULL_AURR980107 \\\n",
- "FULL_Charge 1.000000 -0.612996 -0.490977 \n",
- "FULL_AcidicMolPerc -0.612996 1.000000 0.794796 \n",
- "FULL_AURR980107 -0.490977 0.794796 1.000000 \n",
- "FULL_DAYM780201 -0.434603 0.541481 0.548253 \n",
- "FULL_GEOR030101 -0.058725 0.115201 0.346139 \n",
- "FULL_OOBM850104 -0.283758 0.513344 0.462712 \n",
- "NT_EFC195 0.088068 -0.143168 -0.169540 \n",
- "AS_MeanAmphiMoment 0.355477 -0.431590 -0.426097 \n",
- "AS_DAYM780201 -0.365374 0.449621 0.456260 \n",
- "AS_FUKS010112 -0.090570 0.002334 0.032958 \n",
- "CT_RACS820104 0.232929 -0.213543 -0.403599 \n",
- "CLASS 0.534602 -0.598816 -0.584111 \n",
- "\n",
- " FULL_DAYM780201 FULL_GEOR030101 FULL_OOBM850104 \\\n",
- "FULL_Charge -0.434603 -0.058725 -0.283758 \n",
- "FULL_AcidicMolPerc 0.541481 0.115201 0.513344 \n",
- "FULL_AURR980107 0.548253 0.346139 0.462712 \n",
- "FULL_DAYM780201 1.000000 0.010118 0.334778 \n",
- "FULL_GEOR030101 0.010118 1.000000 0.319157 \n",
- "FULL_OOBM850104 0.334778 0.319157 1.000000 \n",
- "NT_EFC195 -0.090058 -0.230417 -0.230561 \n",
- "AS_MeanAmphiMoment -0.408793 -0.160269 -0.336297 \n",
- "AS_DAYM780201 0.894191 -0.029085 0.275640 \n",
- "AS_FUKS010112 0.055915 0.040480 -0.452769 \n",
- "CT_RACS820104 -0.326792 -0.151935 0.155304 \n",
- "CLASS -0.554838 -0.260470 -0.453287 \n",
- "\n",
- " NT_EFC195 AS_MeanAmphiMoment AS_DAYM780201 \\\n",
- "FULL_Charge 0.088068 0.355477 -0.365374 \n",
- "FULL_AcidicMolPerc -0.143168 -0.431590 0.449621 \n",
- "FULL_AURR980107 -0.169540 -0.426097 0.456260 \n",
- "FULL_DAYM780201 -0.090058 -0.408793 0.894191 \n",
- "FULL_GEOR030101 -0.230417 -0.160269 -0.029085 \n",
- "FULL_OOBM850104 -0.230561 -0.336297 0.275640 \n",
- "NT_EFC195 1.000000 0.178683 -0.036844 \n",
- "AS_MeanAmphiMoment 0.178683 1.000000 -0.322378 \n",
- "AS_DAYM780201 -0.036844 -0.322378 1.000000 \n",
- "AS_FUKS010112 0.145924 0.025580 0.045562 \n",
- "CT_RACS820104 0.080898 0.171524 -0.256060 \n",
- "CLASS 0.260702 0.693552 -0.437168 \n",
- "\n",
- " AS_FUKS010112 CT_RACS820104 CLASS \n",
- "FULL_Charge -0.090570 0.232929 0.534602 \n",
- "FULL_AcidicMolPerc 0.002334 -0.213543 -0.598816 \n",
- "FULL_AURR980107 0.032958 -0.403599 -0.584111 \n",
- "FULL_DAYM780201 0.055915 -0.326792 -0.554838 \n",
- "FULL_GEOR030101 0.040480 -0.151935 -0.260470 \n",
- "FULL_OOBM850104 -0.452769 0.155304 -0.453287 \n",
- "NT_EFC195 0.145924 0.080898 0.260702 \n",
- "AS_MeanAmphiMoment 0.025580 0.171524 0.693552 \n",
- "AS_DAYM780201 0.045562 -0.256060 -0.437168 \n",
- "AS_FUKS010112 1.000000 -0.445284 0.033432 \n",
- "CT_RACS820104 -0.445284 1.000000 0.267652 \n",
- "CLASS 0.033432 0.267652 1.000000 "
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#first ill review the pairwise correlation of the attributes.\n",
- "Train.corr(method='pearson')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- " What did you learn from the correlation?\n",
- " \n",
- "
What does correlation server, in this instance? Why are we even doing it?\n",
- " \n",
- " Please write your report as if you are explaining to someone who has never done Machine learning\n",
- "
\n",
- " "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- " Please draw better visuals.\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "#Reviewing inter-correlation of attributes using heatmap\n",
- "#graphical representation\n",
- "plt.figure(figsize=(6,6))\n",
- "sns.heatmap(Train.corr(method='pearson'))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "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": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#Ill also check the correlation in regards to the 'CLASS' attribute\n",
- "Train.corr(method='pearson')['CLASS']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "Train['CLASS'].value_counts"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- " What did you learn?\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "AxesSubplot(0.125,0.125;0.775x0.755)\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "#I need to know the distribution of the class attribute of my data.\n",
- "print(Train.groupby('CLASS').size().plot(kind='bar'))\n",
- "#train.CLASS.value_counts().plot(kind='bar')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "### From the above bar graph, the Class distribution is even which means am dealing with balanced data."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Feature selection \n",
- "## Using recursive feature elimination\n",
- "\n",
- "\n",
- "\n",
- " What is Feature Selection?\n",
- " \n",
- " What are you trying to achieve here? Please write your thoughts.\n",
- " \n",
- " How did you arrive at 4 features?\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Num Features: 4\n",
- "Selected Features: [False False True False False True True False False False True]\n",
- "Feature Ranking: [3 7 1 6 2 1 1 4 8 5 1]\n"
- ]
- }
- ],
- "source": [
- "from sklearn.feature_selection import RFE\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "\n",
- "array = Train.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "# feature extraction\n",
- "model = LogisticRegression()\n",
- "rfe = RFE(model, 4)\n",
- "fit = rfe.fit(X, Y)\n",
- "print(\"Num Features: \", fit.n_features_)\n",
- "print(\"Selected Features:\", fit.support_)\n",
- "print(\"Feature Ranking: \", fit.ranking_)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['FULL_Charge', 'FULL_AcidicMolPerc', 'FULL_AURR980107',\n",
- " 'FULL_DAYM780201', 'FULL_GEOR030101', 'FULL_OOBM850104', 'NT_EFC195',\n",
- " 'AS_MeanAmphiMoment', 'AS_DAYM780201', 'AS_FUKS010112', 'CT_RACS820104',\n",
- " 'CLASS'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#Calling out the column names so I can know which features am going to drop from RFE\n",
- "Train.columns"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Using Feature importance\n",
- "\n",
- "\n",
- "\n",
- " When you see \"???\" just know you haven't sufficiently explained your thoughts.\n",
- " \n",
- " ## ??\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[0.08652491 0.1297364 0.09323019 0.09956668 0.05401905 0.07223362\n",
- " 0.03333241 0.30103142 0.05143828 0.03167747 0.04720957]\n"
- ]
- }
- ],
- "source": [
- "from sklearn.ensemble import ExtraTreesClassifier\n",
- "\n",
- "array = Train.values\n",
- "X = array[:,0:11]\n",
- "Y = array[:,11]\n",
- "# feature extraction\n",
- "model = ExtraTreesClassifier()\n",
- "model.fit(X, Y)\n",
- "print(model.feature_importances_)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Am going to use 4 features and drop the rest\n",
- "\n",
- "\n",
- " ## ??\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [],
- "source": [
- "# I will call the new Train data with selected features New_Train.\n",
- "Train\n",
- "New_Train = Train.drop(['FULL_Charge', 'FULL_AcidicMolPerc', 'FULL_DAYM780201', 'FULL_GEOR030101', 'AS_MeanAmphiMoment', 'AS_DAYM780201', 'AS_FUKS010112'], axis =1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [],
- "source": [
- "#dropping the same features in the test dataset\n",
- "New_Test = Test.drop(['FULL_Charge', 'FULL_AcidicMolPerc', 'FULL_DAYM780201', 'FULL_GEOR030101', 'AS_MeanAmphiMoment', 'AS_DAYM780201', 'AS_FUKS010112'], axis =1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Index(['FULL_AURR980107', 'FULL_OOBM850104', 'NT_EFC195', 'CT_RACS820104',\n",
- " 'CLASS'],\n",
- " dtype='object')"
- ]
- },
- "execution_count": 18,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#viewing tselected features\n",
- "New_Train.columns"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Rescaling data\n",
- "\n",
- "\n",
- "\n",
- " ## ??\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[0.348 0.483 0. 0.182]\n",
- " [0.322 0.458 1. 0.475]\n",
- " [0.246 0.565 0. 0.666]\n",
- " [0.275 0.647 0. 0.424]]\n"
- ]
- }
- ],
- "source": [
- "from numpy import set_printoptions\n",
- "from sklearn.preprocessing import MinMaxScaler\n",
- "array = New_Train.values\n",
- "\n",
- "#seperating data into onput and output options\n",
- "X = array[:,0:4]\n",
- "Y = array[:,4]\n",
- "scaler = MinMaxScaler(feature_range = (0,1))\n",
- "rescaledX = scaler.fit_transform(X)\n",
- "\n",
- "#summarising transformed data\n",
- "set_printoptions(precision = 3)\n",
- "print(rescaledX[0:4,:])\n",
- " "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Standardising data\n",
- "\n",
- "\n",
- "\n",
- " ## ??\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sklearn.preprocessing import StandardScaler\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Comparing models to use\n",
- "\n",
- "\n",
- "\n",
- " ## ??\n",
- " You have less than 10 algorithms, why?\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "('LR', 0.798219298245614, 0.04658230982015574)\n",
- "('LDA', 0.7955789473684212, 0.045052023551671226)\n",
- "('KNN', 0.7985438596491228, 0.05940387146136468)\n",
- "('CART', 0.7537807017543859, 0.04398756697084728)\n",
- "('NB', 0.7996228070175438, 0.12333496511360942)\n",
- "('SVM', 0.8071447368421053, 0.07573362330045245)\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "#comparing different models to from which ill choose.\n",
- "from matplotlib import pyplot\n",
- "from sklearn.model_selection import KFold\n",
- "from sklearn.model_selection import cross_val_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",
- "\n",
- "\n",
- "# load dataset\n",
- "\n",
- "array = New_Train.values\n",
- "\n",
- "#split the dataset \n",
- "X = array[:,0:4] #X = Train.drop(columns=['CLASS'])\n",
- "Y = array[:,4] #Y = Train['CLASS']\n",
- "\n",
- "# prepare models and add them to a list\n",
- "models = []\n",
- "models.append(('LR', LogisticRegression()))\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()))\n",
- "\n",
- "# evaluate each model in turn\n",
- "results = []\n",
- "names = []\n",
- "\n",
- "for name, model in models:\n",
- " kfold = KFold(n_splits=40, random_state=10)\n",
- " cv_results = cross_val_score(model, X, Y, cv=kfold, scoring='accuracy')\n",
- " results.append(cv_results)\n",
- " names.append(name)\n",
- " msg = (name, cv_results.mean(), cv_results.std())\n",
- " print(msg)\n",
- "\n",
- "# boxplot algorithm comparison\n",
- "fig = pyplot.figure()\n",
- "fig.suptitle('Algorithm Comparison')\n",
- "ax = fig.add_subplot(111)\n",
- "pyplot.boxplot(results)\n",
- "ax.set_xticklabels(names)\n",
- "pyplot.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [],
- "source": [
- "#now slitting data\n",
- "#array = New_Train.values\n",
- "X = New_Train.values[:,0:4]\n",
- "Y = New_Train.values[:,4]\n",
- "from sklearn.model_selection import train_test_split\n",
- "X_Train, X_Test, Y_Train, Y_Test = train_test_split(X, Y, test_size=0.2, random_state=42)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "The result is: 62.28 Mathew's Coef\n"
- ]
- }
- ],
- "source": [
- "# also train and test the model on Matthews correlation coefficient.\n",
- "from sklearn.metrics import matthews_corrcoef\n",
- "\n",
- "GS = GaussianNB()\n",
- "GS.fit(X_Train,Y_Train)\n",
- "pred = GS.predict(X_Test)\n",
- "\n",
- "print(\"The result is: \",np.round(matthews_corrcoef(Y_Test,pred) *100,2),\" Mathew's Coef\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "LogisticRegression(C=0.05, class_weight=None, dual=False, fit_intercept=True,\n",
- " intercept_scaling=1, l1_ratio=None, max_iter=100,\n",
- " multi_class='ovr', n_jobs=None, penalty='l2',\n",
- " random_state=30, solver='liblinear', tol=0.0001, verbose=0,\n",
- " warm_start=False)"
- ]
- },
- "execution_count": 24,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#now creating a model and training it\n",
- "model = LogisticRegression(solver='liblinear', C=0.05, multi_class='ovr', random_state=30)\n",
- "model.fit(X_Train, Y_Train)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sklearn.model_selection import train_test_split\n",
- "X_Train, X_Test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2,\n",
- "random_state=42)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "The result is: 62.28 Mathew's Coef\n"
- ]
- }
- ],
- "source": [
- "from sklearn.metrics import matthews_corrcoef\n",
- "\n",
- "nv = GaussianNB()\n",
- "nv.fit(X_Train,Y_Train)\n",
- "pred = nv.predict(X_Test)\n",
- "\n",
- "print(\"The result is: \",np.round(matthews_corrcoef(Y_Test,pred) *100,2),\" Mathew's Coef\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {},
- "outputs": [],
- "source": [
- "#model = DecisionTreeClassifier()\n",
- "\n",
- "#model.fit(X_train, y_train)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " FULL_Charge \n",
- " FULL_AcidicMolPerc \n",
- " FULL_AURR980107 \n",
- " FULL_DAYM780201 \n",
- " FULL_GEOR030101 \n",
- " FULL_OOBM850104 \n",
- " NT_EFC195 \n",
- " AS_MeanAmphiMoment \n",
- " AS_DAYM780201 \n",
- " AS_FUKS010112 \n",
- " CT_RACS820104 \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " 4.0 \n",
- " 3.704 \n",
- " 0.873 \n",
- " 73.519 \n",
- " 0.987 \n",
- " -4.833 \n",
- " 0 \n",
- " 0.382 \n",
- " 74.556 \n",
- " 7.225 \n",
- " 1.234 \n",
- " \n",
- " \n",
- " 1 \n",
- " 4.0 \n",
- " 4.444 \n",
- " 0.892 \n",
- " 62.444 \n",
- " 0.931 \n",
- " -0.584 \n",
- " 0 \n",
- " 0.320 \n",
- " 56.056 \n",
- " 4.942 \n",
- " 1.853 \n",
- " \n",
- " \n",
- " 2 \n",
- " 2.0 \n",
- " 0.000 \n",
- " 0.901 \n",
- " 47.000 \n",
- " 1.039 \n",
- " -5.664 \n",
- " 0 \n",
- " 0.164 \n",
- " 47.000 \n",
- " 5.969 \n",
- " 1.174 \n",
- " \n",
- " \n",
- " 3 \n",
- " 4.5 \n",
- " 0.000 \n",
- " 0.869 \n",
- " 69.222 \n",
- " 0.982 \n",
- " -5.423 \n",
- " 0 \n",
- " 2.010 \n",
- " 69.222 \n",
- " 5.462 \n",
- " 1.138 \n",
- " \n",
- " \n",
- " 4 \n",
- " -4.0 \n",
- " 21.591 \n",
- " 1.061 \n",
- " 71.682 \n",
- " 0.976 \n",
- " -2.002 \n",
- " 0 \n",
- " 2.758 \n",
- " 66.000 \n",
- " 5.582 \n",
- " 1.453 \n",
- " \n",
- " \n",
- "
\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",
- "\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",
- "\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 "
- ]
- },
- "execution_count": 28,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "Test.head()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 29,
- "metadata": {},
- "outputs": [],
- "source": [
- "#we now need to predict on the test dataset\n",
- "md = pd.DataFrame((New_Test.index,nv.predict(New_Test))).T\n",
- "md = md.rename(columns={0:\"Index\",1:\"CLASS\"}).set_index('Index')\n",
- "md.to_csv('maria.csv')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "\n",
- " ## ??\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ls: ../../kaggle/working/: No such file or directory\r\n"
- ]
- }
- ],
- "source": [
- "import os\n",
- "os.listdir()\n",
- "!ls ../../kaggle/working/"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.7.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/MARIA MAGDALENE NAMAGANDA FINAL.ipynb b/Assignment Colab/MARIA MAGDALENE NAMAGANDA FINAL.ipynb
deleted file mode 100644
index 64c2fef..0000000
--- a/Assignment Colab/MARIA MAGDALENE NAMAGANDA FINAL.ipynb
+++ /dev/null
@@ -1 +0,0 @@
-{"cells":[{"metadata":{},"cell_type":"markdown","source":"# MARIA MAGDALENE NAMAGANDA\n# 2019/HD07/24853U\n# Ace_class Kaggle 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\nimport numpy as np # linear algebra\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 some of the needed packages and libraries"},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom matplotlib import pyplot\nimport seaborn as sns\n\nfrom sklearn.model_selection import KFold\nfrom pandas import read_csv\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.metrics import classification_report\nfrom sklearn.model_selection import cross_val_score\nfrom sklearn.model_selection import train_test_split\n\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysis\nfrom sklearn.svm import SVC\nfrom sklearn.ensemble import AdaBoostClassifier\nfrom sklearn.ensemble import GradientBoostingClassifier\nfrom sklearn.ensemble import ExtraTreesClassifier\nfrom sklearn.ensemble import RandomForestClassifier\nfrom xgboost import XGBClassifier\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> *Now i need to get rid of some unnecessary warnings by ignoring them*"},{"metadata":{"trusted":true},"cell_type":"code","source":"#To avoid unnecessary warnings, I will ignore them in the code below\nimport warnings\nwarnings.filterwarnings('ignore')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Loading the datasets \n### There are two datasets given; \n1. AMP_TrainSet.csv and \n2. Test.csv "},{"metadata":{"_cell_guid":"","_uuid":"","trusted":true},"cell_type":"code","source":"#Loading the datasets, \n\nTrain = pd.read_csv(\"../input/amp-data-set/AMP_TrainSet.csv\")\nTest = pd.read_csv(\"../input/amp-data-set/Test.csv\")\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### For training the model, I will first use the training set which I will further split into the train and validation set. \n### Then I will test the model on the Test set provided to gauge its performance."},{"metadata":{},"cell_type":"markdown","source":"# Exploring my data\n## Exploring data helps one understand what kind of data is given. That is to say knowing how much data it is, the shape, type, dimensions, missing values, data summary, correlation of attributes among others as am going to do in the following steps."},{"metadata":{"trusted":true},"cell_type":"code","source":"#here, am trying to find the type of data\ntype(Train)\ntype(Test)\nTrain.dtypes, Test.dtypes","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# checking the dimensions of the data\n# this retuns the number of rows and columns in the data\n\nTrain.shape, Test.shape\n\n#this helps to know how big the data is in terms of rows and columns.\n#also from here I can tell which data is labeled","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Data description\n>For now, I will focus more on the train dataset because its what I will use to train the model "},{"metadata":{"trusted":true},"cell_type":"code","source":"#getting a description of the train dataset\n#description gives a summary of the data.\n\nTrain.describe()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#looking at the first 5 entries of my data\nTrain.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Class Distribution\n> From the Train dataset, i see there is an extra 'CLASS' column which will be my validation set.\n### I need to know how this class is distributed to guide me on what to do with it."},{"metadata":{"trusted":true},"cell_type":"code","source":"#to see the class distribution, I will plot a bar graph\nTrain.groupby('CLASS').size().plot(kind='bar')\npyplot.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> I would like to know how many instaces i have for each class"},{"metadata":{"trusted":true},"cell_type":"code","source":"#getting the number of instances in each class\nTrain.groupby('CLASS').size()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### There are 1519 intances for each class which is proof for even distribution.\n### From the above barplot and class instances, I can see that the classes are evenly distributed so no need to use smote."},{"metadata":{},"cell_type":"markdown","source":"# Data Visualisation\n### Data visualization is the technique to present the data in a pictorial or graphical format. It enables one to analyze data visually. The data in a graphical format allows identification of new trends and patterns easily.\n### Visualisation identifies the relationship between data points and variables."},{"metadata":{},"cell_type":"markdown","source":"## Density plots"},{"metadata":{},"cell_type":"markdown","source":"> I chose to use density plots because they are better at determing the distribution shape as they are not affected by the number of bins as is the case with Histograms."},{"metadata":{"trusted":true},"cell_type":"code","source":"#now plotting density subplots\n#setting the figsize to 12 so that my graphs are not congested\nTrain.plot(kind='density', subplots = True, layout=(3,4), sharex= False, sharey= False, figsize=(12,12))\nplt.show()\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> From the above density subpots, I can see that most of the data follows a Gaussian distribution given some of the characteristics such as bell shaped curves and graphs being symmetrical about the mean."},{"metadata":{},"cell_type":"markdown","source":"## Box and whisker plots\n> A box plot is a type of graph that displays a summary of a large amount of data in terms of the median, upper quartile, lower quartile, minimum and maximum data values.\n\n> It handles large data easily, gives a clear summary and displays outliers."},{"metadata":{"trusted":true},"cell_type":"code","source":"#plotting a box and whisker graph\n#setting the figsize to 10 so that the plots are not congested.\nTrain.plot(kind='box', subplots = True, layout=(3,4), sharex= False, sharey= False, figsize=(10,10))\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Looking at the correlation of the data"},{"metadata":{},"cell_type":"markdown","source":"> Correlation is the relationship between two variables. The commonly used method is Pearson's correlation coefficient. It assumes a normal distribution of the attributes involved.\n\n> -1 shows full negative correlation, \n\n> +1 shows full negative correlation and \n\n> 0 shows no correlation at all."},{"metadata":{"trusted":true},"cell_type":"code","source":"#first I will checkfor the pairwise correlation of the attributes.\nTrain.corr(method='pearson')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Then now am reviewing the inter-correlation of attributes using heatmap\n#graphical representation\nplt.figure(figsize=(6,6))\nsns.heatmap(Train.corr(method='pearson'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Ill also check the correlation in regards to the 'CLASS' attribute\nTrain.corr(method='pearson')['CLASS']","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Skewnwess of the data\n> knowing data skewness allows one to perform data preparation and improve a model\n\n> If Skewness value lies above +1 or below -1 then the data is highly skewed. \n\n> If skewness value lies between +0.5 and -0.5 then the data ids moderately skewed.\n\n> If skewness is 0 then data is symmetrical"},{"metadata":{"trusted":true},"cell_type":"code","source":"#Checking out skewness of data\nTrain.skew().plot(kind='bar')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Comparing Machine Learning Algorithms\n> This helps to choose the best model for the problem at hand.\n\n> Using resampling methods like cross validation, gives an estimate for how accurate each model may be on unseen data.\n\n> It is important to ensure that each algorithm is evaluated in the same way on the same data to avoid bias."},{"metadata":{"trusted":true},"cell_type":"code","source":"#comparing different models to from which ill choose.\n\n\n# load dataset\n\narray = Train.values\n\n#split the dataset \nX = array[:,0:11] #X = Train.drop(columns=['CLASS'])\nY = array[:,11] #Y = Train['CLASS']\n\n# preparing models and adding them to a list\nmodels = []\nmodels.append(('LR', LogisticRegression()))\nmodels.append(('LDA', LinearDiscriminantAnalysis()))\nmodels.append(('KNN', KNeighborsClassifier()))\nmodels.append(('CART', DecisionTreeClassifier()))\nmodels.append(('NB', GaussianNB()))\nmodels.append(('SVM', SVC()))\nmodels.append(('AB', AdaBoostClassifier()))\nmodels.append(('GBC', GradientBoostingClassifier()))\nmodels.append(('EXT', ExtraTreesClassifier()))\nmodels.append(('RTC', RandomForestClassifier()))\n#models.append(('XGB', XGBClassifier)) \n#am commenting out XGB it does not seem to be a scikit-learn estimator as it does not implement a 'get_params' methods.\n\n# evaluating each model in turn\nresults = []\nnames = []\n\nfor name, model in models:\n kfold = KFold(n_splits=50, random_state=42)\n cv_results = cross_val_score(model, X, Y, cv=kfold, scoring='accuracy')\n results.append(cv_results)\n names.append(name)\n msg = (name, cv_results.mean(), cv_results.std())\n print(msg)\n\n# boxplot algorithm comparison\nfig = pyplot.figure()\nfig.suptitle('Algorithm Comparison')\nax = fig.add_subplot(111)\npyplot.boxplot(results)\nax.set_xticklabels(names)\npyplot.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> ## From the above algorithm comparison, I can see that Naive Bayes(NB), ExtraTreesClassifiers(EXT) and RandomForestClassifiers(RTC) are some of the best performing algorithms. \n> ## Am yet to find out the overall best valgorithm after prediction on the Test set"},{"metadata":{},"cell_type":"markdown","source":"# Feature selection \n## Using recursive feature elimination\n> Sometimes, you may asses a dataset and find out that you do not need to use all the given features. This can be because some of them are highly correlates or they are not in any way helpful in developing the model.\n* It is therefore important to get rid of some features where applicable.\n\n> For this data, I will use Recursive Feature Elimination(RFE)"},{"metadata":{"trusted":true},"cell_type":"code","source":"#feature selection using RFE\n#first i will start with choosing 4 features\nfrom sklearn.feature_selection import RFE\nfrom sklearn.linear_model import LogisticRegression\n\narray = Train.values\nX = array[:,0:11]\nY = array[:,11]\n# feature extraction\nmodel = LogisticRegression()\nrfe = RFE(model, 4)\nfit = rfe.fit(X, Y)\nprint(\"Num Features: \", fit.n_features_)\nprint(\"Selected Features:\", fit.support_)\nprint(\"Feature Ranking: \", fit.ranking_)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Calling out the column names so I can know which features am going to drop from RFE\nTrain.columns","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Using Feature importance"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import ExtraTreesClassifier\n\narray = Train.values\nX = array[:,0:11]\nY = array[:,11]\n# feature extraction\nmodel = ExtraTreesClassifier()\nmodel.fit(X, Y)\nprint(model.feature_importances_)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## If am to use 4 features and drop the rest\n> I will assign the new dataset a variable 'New_Train4' after choosing the 4 features and dropping the rest."},{"metadata":{"trusted":true},"cell_type":"code","source":"# I will call the new Train data with selected features New_Train4.\nTrain\nNew_Train4 = Train.drop(['FULL_Charge', 'FULL_AcidicMolPerc', 'FULL_DAYM780201', 'FULL_GEOR030101', 'AS_MeanAmphiMoment', 'AS_DAYM780201', 'AS_FUKS010112'], axis =1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#dropping the same features in the test dataset\nNew_Test4 = Test.drop(['FULL_Charge', 'FULL_AcidicMolPerc', 'FULL_DAYM780201', 'FULL_GEOR030101', 'AS_MeanAmphiMoment', 'AS_DAYM780201', 'AS_FUKS010112'], axis =1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#viewing the selected features\nNew_Train4.columns","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#now splitting data\n#array = New_Train.values\nX = New_Train4.values[:,0:4]\nY = New_Train4.values[:,4]\nfrom sklearn.model_selection import train_test_split\nX_Train, X_Test, Y_Train, Y_Test = train_test_split(X, Y, test_size=0.2, random_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# also train and test the model on Matthews correlation coefficient.\nfrom sklearn.metrics import matthews_corrcoef\n\nGS = GaussianNB()\nGS.fit(X_Train,Y_Train)\npred = GS.predict(X_Test)\n\nprint(\"The result is: \",np.round(matthews_corrcoef(Y_Test,pred) *100,2),\" Mathew's Coef\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Using four features gives me a very low MCC and low overall score.\n## I'll therefore consider using 8 features and see what score I get."},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.feature_selection import RFE\nfrom sklearn.linear_model import LogisticRegression\n\narray = Train.values\nX = array[:,0:11]\nY = array[:,11]\n# feature extraction\nmodel = LogisticRegression()\nrfe = RFE(model, 8)\nfit = rfe.fit(X, Y)\nprint(\"Num Features: \", fit.n_features_)\nprint(\"Selected Features:\", fit.support_)\nprint(\"Feature Ranking: \", fit.ranking_)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# I will call the new Train data with selected features New_Train8.\nTrain\nNew_Train8 = Train.drop(['FULL_AcidicMolPerc', 'FULL_DAYM780201', 'AS_DAYM780201'], axis =1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#dropping the same features in the test dataset\nNew_Test8 = Test.drop(['FULL_AcidicMolPerc', 'FULL_DAYM780201', 'AS_DAYM780201'], axis =1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#now splitting data\n#array = New_Train.values\n\n\nX = New_Train8.values[:,0:8]\nY = New_Train8.values[:,8]\nfrom sklearn.model_selection import train_test_split\nX_Train, X_Test, Y_Train, Y_Test = train_test_split(X, Y, test_size=0.2, random_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#now creating a model and training it on 8 features\nmodel = LogisticRegression(solver='liblinear', C=0.05, multi_class='ovr', random_state=30)\nmodel.fit(X_Train, Y_Train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_Train, X_Test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2,\nrandom_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import matthews_corrcoef\n\nnv = GaussianNB()\nnv.fit(X_Train,Y_Train)\npred = nv.predict(X_Test)\n\nprint(\"The result is: \",np.round(matthews_corrcoef(Y_Test,pred) *100,2),\" Mathew's Coef\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Standardising data\n> This is useful to transform attributes with a Gaussian distribution and it workd better with rescaled data(also known as normalistaion where attributes are scaled into a range between 0 and 1)"},{"metadata":{},"cell_type":"markdown","source":"# Below are some of the algorithms I will be using;"},{"metadata":{},"cell_type":"markdown","source":"# LINEAR ALGORITHMS\n1. Linear Regression\n2. Logistic Regression\n3. Linear Discriminant Analysis"},{"metadata":{},"cell_type":"markdown","source":"# Logistic Regression using 8 features"},{"metadata":{"trusted":true},"cell_type":"code","source":"# here am using a dataset 'New_Train8' with 8 selected features\narray = New_Train8.values\nX = array[:,0:8]\nY = array[:,8]\n\nkfold = KFold(n_splits=10, random_state=42) #spliiting my data into 10 folds and random_state of 42 for reproducibility\nmodel = LogisticRegression() #calling out the prediction algorithm\nresults = cross_val_score(model, X, Y, cv=kfold) #estimating the model on new data and assigning it to results variable\nprint(results.mean()) #getting the mean of the accuracy scores from cross validation scores\n\nmodel.fit(X,Y)\noutput = model.predict(New_Test8.values) #testing the model on the test_set (Test.values)\n\nfrom sklearn.metrics import matthews_corrcoef\nmcc = matthews_corrcoef(model.predict(X),Y)\nprint('MCC:',mcc)\n \nmaria_logistic = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria_logistic.columns = ['CLASS'] #renaming the output column to 'CLASS'\nmaria_logistic.index.name = \"Index\" #naming the index column as 'Index'\nmaria_logistic['CLASS']=maria_logistic['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\nmaria_logistic.to_csv(\"maria_logistic.csv\") #changing my output file as a 'csv' file\n\nprint(maria_logistic['CLASS'].unique()) #checking out the unique instances in the 'CLASS' column\nprint('False: ',maria_logistic.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria_logistic.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Applying Linear Dicriminant Analysis (LDA) using all features "},{"metadata":{"trusted":true},"cell_type":"code","source":"array = Train.values\nX = array[:,0:11]\nY = array[:,11]\nnum_folds = 10\nkfold = KFold(n_splits=10, random_state=42) #spliiting my data into 10 folds and random_state of 42 for reproducibility\nmodel = LinearDiscriminantAnalysis() #calling out the prediction algorithm\nresults = cross_val_score(model, X, Y, cv=kfold) #estimating the model on new data and assigning it to results variable\nprint(results.mean()) #getting the mean of the accuracy scores from cross validation scores\n\nmodel.fit(X,Y)\noutput = model.predict(Test.values) #testing the model on the test_set (Test.values)\n\nfrom sklearn.metrics import matthews_corrcoef\nmcc = matthews_corrcoef(model.predict(X),Y)\nprint('MCC:',mcc)\n \nmaria_LDA = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria_LDA.columns = ['CLASS'] #renaming the output column to 'CLASS'\nmaria_LDA.index.name = \"Index\" #naming the index column as 'Index'\nmaria_LDA['CLASS']=maria_LDA['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\nmaria_LDA.to_csv(\"maria_LDA.csv\") #changing my output file as a 'csv' file\n\nprint(maria_LDA['CLASS'].unique()) #checking out the unique instances in the 'CLASS' column\nprint('False: ',maria_LDA.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria_LDA.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# NON LINEAR ALGORITHMS\n1. Naive Bayes\n2. Support Vector Machines\n3. K-Nearest Neighbours\n4. Classification and Regression Trees\n5. Learning Vector Quantization"},{"metadata":{},"cell_type":"markdown","source":"# Using Naive Bayes and all the features"},{"metadata":{"trusted":true},"cell_type":"code","source":"array = Train.values\nX = array[:,0:11]\nY = array[:,11]\ntest_size = 0.35 \n\nkfold = KFold(n_splits=10) #spliiting my data into 10 folds \n\nX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size, random_state=42) #random_state of 42 for reproducibility\n\nmodel = GaussianNB() #calling out the prediction algorithm\nresults = cross_val_score(model, X, Y, cv=kfold) #estimating the model on new data and assigning it to results variable\nprint(results.mean()) #getting the mean of the accuracy scores from cross validation scores\n\n\nmodel.fit(X,Y)\noutput = model.predict(Test.values) #testing the model on the test_set (Test.values)\n\nfrom sklearn.metrics import matthews_corrcoef\nmcc = matthews_corrcoef(model.predict(X),Y)\nprint('MCC:',mcc)\n \nmaria2_bayes = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria2_bayes.columns = ['CLASS'] #renaming the output column to 'CLASS'\nmaria2_bayes.index.name = \"Index\" #naming the index column as 'Index'\nmaria2_bayes['CLASS']=maria2_bayes['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\nmaria2_bayes.to_csv(\"maria2_bayes.csv\") #changing my output file as a 'csv' file\n\n\nprint(maria2_bayes['CLASS'].unique()) #checking out the unique instances in the 'CLASS' column\nprint('False: ',maria2_bayes.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria2_bayes.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Support Vector Machines algorithm using all features"},{"metadata":{"trusted":true},"cell_type":"code","source":"array = Train.values\nX = array[:,0:11]\nY = array[:,11]\nkfold = KFold(n_splits=10) #spliiting my data into 10 folds\n\nmodel = SVC() #calling out the prediction algorithm\nscoring = 'acuracy'\nresults = cross_val_score(model, X, Y, cv=kfold) #estimating the model on new data and assigning it to results variable\nprint(results.mean()) #getting the mean of the accuracy scores from cross validation scores\n\nmodel.fit(X, Y)\noutput = model.predict(Test.values) #testing the model on the test_set (Test.values)\n\nmcc = matthews_corrcoef(model.predict(X), Y)\nprint('MCC: ',mcc)\n\nmaria_svc = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria_svc.columns = ['CLASS'] #renaming the output column to 'CLASS'\nmaria_svc.index.name = 'Index' #naming the index column as 'Index'\nmaria_svc['CLASS'] = maria_svc['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\n\nmaria_svc.to_csv('maria_svc.csv') #changing my output file as a 'csv' file\n\nprint(maria_svc['CLASS'].unique()) #checking out the unique instances in the 'CLASS' column\nprint('False: ',maria_svc.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria_svc.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Applying Classification and Regression Trees"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier\narray = Train.values\nX = array[:,0:11]\nY = array[:,11]\nkfold = KFold(n_splits=10, random_state=42) #spliiting my data into 10 folds and random_state of 42 for reproducibility\nmodel = DecisionTreeClassifier() #calling out the prediction algorithm\nresults = cross_val_score(model, X, Y, cv=kfold) #estimating the model on new data and assigning it to results variable\nprint(results.mean()) #getting the mean of the accuracy scores from cross validation scores\n\n\nmodel.fit(X,Y)\noutput = model.predict(Test.values) #testing the model on the test_set (Test.values)\n\nfrom sklearn.metrics import matthews_corrcoef\nmcc = matthews_corrcoef(model.predict(X),Y)\nprint('MCC:',mcc)\n \nmaria_tree = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria_tree.columns = ['CLASS'] #renaming the output column to 'CLASS'\nmaria_tree.index.name = \"Index\" #naming the index column as 'Index'\nmaria_tree['CLASS']=maria_tree['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\nmaria_tree.to_csv(\"maria_tree.csv\") #changing my output file as a 'csv' file\n\n\nprint(maria_tree['CLASS'].unique()) #checking out the unique instances in the 'CLASS' column\nprint('False: ',maria_tree.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria_tree.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# K-Nearest Neighbours"},{"metadata":{"trusted":true},"cell_type":"code","source":"array = Train.values\nX = array[:,0:11]\nY = array[:,11]\n\nkfold = KFold(n_splits=10, random_state=42) #spliiting my data into 10 folds and random_state of 42 for reproducibility\nmodel = KNeighborsClassifier() #calling out the prediction algorithm\nresults = cross_val_score(model, X, Y, cv=kfold) #estimating the model on new data and assigning it to results variable\nprint(results.mean()) #getting the mean of the accuracy scores from cross validation scores\n\nmodel.fit(X,Y) \noutput = model.predict(Test.values) #testing the model on the test_set (Test.values)\n\nfrom sklearn.metrics import matthews_corrcoef\nmcc = matthews_corrcoef(model.predict(X),Y)\nprint('MCC:',mcc)\n \nmaria_knn = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria_knn.columns = ['CLASS'] #renaming the output column to 'CLASS' \nmaria_knn.index.name = \"Index\" #naming the index column as 'Index'\nmaria_knn['CLASS']=maria_knn['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\nmaria_knn.to_csv(\"maria_knn.csv\") #changing my output file as a 'csv' file\n\n\nprint(maria_knn['CLASS'].unique()) #checking out the unique instances in the 'CLASS' column\nprint('False: ',maria_knn.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria_knn.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Esemble Algorithms\n1. Boosting and Adaboost\n2. Bagging and Random forest"},{"metadata":{},"cell_type":"markdown","source":"# Applying Adaboost "},{"metadata":{"trusted":true},"cell_type":"code","source":"array = Train.values\n\nX = array[:,0:11]\nY = array[:,11]\n\nkfold = KFold(n_splits=10, random_state=42)\n\nmodel = AdaBoostClassifier(n_estimators=200, random_state=42) \nresults = cross_val_score(model, X, Y, cv=kfold)\n\nprint(results.mean())\n\n\ntest_set = Test.values\nmodel.fit(X, Y)\noutput = model.predict(test_set)\n\nmcc = matthews_corrcoef(model.predict(X), Y)\nprint('MCC: ',mcc)\n\nmaria_AB= pd.DataFrame(output)\nmaria_AB.columns = ['CLASS']\nmaria_AB.index.name = 'Index'\nmaria_AB['CLASS'] = maria_AB['CLASS'].map({0.0:False, 1.0:True})\n\nmaria_AB.to_csv('maria_AB.csv')\n\nprint(maria_AB['CLASS'].unique())\nprint('False: ',maria_AB.groupby('CLASS').size()[0].sum())\nprint('True: ',maria_AB.groupby('CLASS').size()[1].sum())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Applying Gradient Boosting Classifier"},{"metadata":{"trusted":true},"cell_type":"code","source":"array = Train.values\n\nX = array[:,0:11]\nY = array[:,11]\n\n#num_trees = 200\n#seed =42\n\nkfold = KFold(n_splits=10, random_state=42)\nmodel = GradientBoostingClassifier(n_estimators=200, random_state=42)\nresults = cross_val_score(model, X, Y, cv=kfold)\nprint(results.mean())\n\nmodel.fit(X,Y) \noutput = model.predict(Test.values) #testing the model on the test_set (Test.values)\n\nfrom sklearn.metrics import matthews_corrcoef\nmcc = matthews_corrcoef(model.predict(X),Y)\nprint('MCC:',mcc)\n \nmaria_GBC = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria_GBC.columns = ['CLASS'] #renaming the output column to 'CLASS' \nmaria_GBC.index.name = \"Index\" #naming the index column as 'Index'\nmaria_GBC['CLASS']=maria_GBC['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\nmaria_GBC.to_csv(\"maria_GBC.csv\") #changing my output file as a 'csv' file\n\n\nprint(maria_GBC['CLASS'].unique()) #checking out the unique instances in the \nprint('False: ',maria_GBC.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria_GBC.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Using Stochastic Gradient Boosting Classification"},{"metadata":{"trusted":true},"cell_type":"code","source":"array = Train.values\nX = array[:,0:11]\nY = array[:,11]\n\nkfold = KFold(n_splits=10, random_state=42)\nmodel = XGBClassifier(n_estimators=200, random_state=42)\nresults = cross_val_score(model, X, Y, cv=kfold)\nprint(results.mean())\n\nmodel.fit(X,Y) \noutput = model.predict(Test.values) #testing the model on the test_set (Test.values)\n\nfrom sklearn.metrics import matthews_corrcoef\nmcc = matthews_corrcoef(model.predict(X),Y)\nprint('MCC:',mcc)\n \nmaria_XGB = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria_XGB.columns = ['CLASS'] #renaming the output column to 'CLASS' \nmaria_XGB.index.name = \"Index\" #naming the index column as 'Index'\nmaria_XGB['CLASS']=maria_XGB['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\nmaria_XGB.to_csv(\"maria_XGB.csv\") #changing my output file as a 'csv' file\n\n\nprint(maria_GBC['CLASS'].unique()) #checking out the unique instances in the \nprint('False: ',maria_XGB.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria_XGB.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Using Extra Trees Classifier"},{"metadata":{"trusted":true},"cell_type":"code","source":"array = Train.values\n\nX = array[:,0:11]\nY = array[:,11]\n\nkfold = KFold(n_splits=10, random_state=42)\nmodel = ExtraTreesClassifier(n_estimators=200) # (max_features=11)\nresults = cross_val_score(model, X, Y, cv=kfold)\nprint(results.mean())\n \nmodel.fit(X,Y) \noutput = model.predict(Test.values) #testing the model on the test_set (Test.values)\n\nfrom sklearn.metrics import matthews_corrcoef\nmcc = matthews_corrcoef(model.predict(X),Y)\nprint('MCC:',mcc)\n \nmaria_ETX = pd.DataFrame(output) #here we are converting the array into a pandas dataframe which will give a single column\nmaria_ETX.columns = ['CLASS'] #renaming the output column to 'CLASS' \nmaria_ETX.index.name = \"Index\" #naming the index column as 'Index'\nmaria_ETX['CLASS']=maria_ETX['CLASS'].map({0.0:False, 1.0:True}) #converting '0.0' to' False' and '1.0' to 'True'\nmaria_ETX.to_csv(\"maria_ETX.csv\") #changing my output file as a 'csv' file\n\n\nprint(maria_ETX['CLASS'].unique()) #checking out the unique instances in the \nprint('False: ',maria_ETX.groupby('CLASS').size()[0].sum()) #summing up the '0' instances in the 'CLASS' column\nprint('True: ',maria_ETX.groupby('CLASS').size()[1].sum()) #summing up the '1' instances in the 'CLASS' column ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# CONCLUSION\n## From the algorithm comparisons and my prediction scores, Naive Bayes algorithm performed the best.\n## I think this is because the data was following a Gaussian distribution(normally distributed) as seen earlier from the density subplots."}],"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/maria.csv b/Assignment Colab/maria.csv
deleted file mode 100644
index 07d74e8..0000000
--- a/Assignment Colab/maria.csv
+++ /dev/null
@@ -1,759 +0,0 @@
-Index,CLASS
-0.0,1.0
-1.0,1.0
-2.0,1.0
-3.0,1.0
-4.0,0.0
-5.0,1.0
-6.0,0.0
-7.0,1.0
-8.0,1.0
-9.0,1.0
-10.0,0.0
-11.0,1.0
-12.0,1.0
-13.0,0.0
-14.0,0.0
-15.0,1.0
-16.0,0.0
-17.0,1.0
-18.0,1.0
-19.0,1.0
-20.0,1.0
-21.0,1.0
-22.0,1.0
-23.0,1.0
-24.0,0.0
-25.0,1.0
-26.0,1.0
-27.0,1.0
-28.0,1.0
-29.0,1.0
-30.0,1.0
-31.0,1.0
-32.0,0.0
-33.0,1.0
-34.0,0.0
-35.0,1.0
-36.0,1.0
-37.0,1.0
-38.0,1.0
-39.0,1.0
-40.0,1.0
-41.0,1.0
-42.0,1.0
-43.0,1.0
-44.0,1.0
-45.0,1.0
-46.0,1.0
-47.0,1.0
-48.0,0.0
-49.0,1.0
-50.0,0.0
-51.0,1.0
-52.0,0.0
-53.0,1.0
-54.0,0.0
-55.0,1.0
-56.0,1.0
-57.0,1.0
-58.0,1.0
-59.0,1.0
-60.0,1.0
-61.0,0.0
-62.0,1.0
-63.0,1.0
-64.0,1.0
-65.0,1.0
-66.0,0.0
-67.0,1.0
-68.0,0.0
-69.0,1.0
-70.0,1.0
-71.0,1.0
-72.0,0.0
-73.0,1.0
-74.0,1.0
-75.0,1.0
-76.0,0.0
-77.0,1.0
-78.0,1.0
-79.0,0.0
-80.0,0.0
-81.0,1.0
-82.0,0.0
-83.0,1.0
-84.0,0.0
-85.0,0.0
-86.0,0.0
-87.0,1.0
-88.0,0.0
-89.0,1.0
-90.0,0.0
-91.0,1.0
-92.0,1.0
-93.0,1.0
-94.0,1.0
-95.0,0.0
-96.0,0.0
-97.0,0.0
-98.0,0.0
-99.0,1.0
-100.0,0.0
-101.0,1.0
-102.0,0.0
-103.0,1.0
-104.0,1.0
-105.0,0.0
-106.0,1.0
-107.0,1.0
-108.0,1.0
-109.0,0.0
-110.0,1.0
-111.0,0.0
-112.0,1.0
-113.0,0.0
-114.0,1.0
-115.0,1.0
-116.0,0.0
-117.0,1.0
-118.0,1.0
-119.0,1.0
-120.0,1.0
-121.0,0.0
-122.0,1.0
-123.0,1.0
-124.0,0.0
-125.0,0.0
-126.0,1.0
-127.0,0.0
-128.0,0.0
-129.0,1.0
-130.0,1.0
-131.0,0.0
-132.0,0.0
-133.0,0.0
-134.0,1.0
-135.0,1.0
-136.0,0.0
-137.0,1.0
-138.0,1.0
-139.0,1.0
-140.0,1.0
-141.0,1.0
-142.0,1.0
-143.0,1.0
-144.0,1.0
-145.0,0.0
-146.0,1.0
-147.0,1.0
-148.0,1.0
-149.0,0.0
-150.0,1.0
-151.0,1.0
-152.0,0.0
-153.0,0.0
-154.0,1.0
-155.0,1.0
-156.0,1.0
-157.0,1.0
-158.0,1.0
-159.0,1.0
-160.0,1.0
-161.0,0.0
-162.0,0.0
-163.0,1.0
-164.0,1.0
-165.0,1.0
-166.0,1.0
-167.0,1.0
-168.0,1.0
-169.0,0.0
-170.0,1.0
-171.0,0.0
-172.0,1.0
-173.0,1.0
-174.0,1.0
-175.0,1.0
-176.0,1.0
-177.0,1.0
-178.0,0.0
-179.0,1.0
-180.0,1.0
-181.0,0.0
-182.0,0.0
-183.0,1.0
-184.0,1.0
-185.0,1.0
-186.0,1.0
-187.0,1.0
-188.0,1.0
-189.0,0.0
-190.0,1.0
-191.0,1.0
-192.0,1.0
-193.0,1.0
-194.0,0.0
-195.0,1.0
-196.0,1.0
-197.0,1.0
-198.0,0.0
-199.0,1.0
-200.0,1.0
-201.0,1.0
-202.0,1.0
-203.0,0.0
-204.0,0.0
-205.0,0.0
-206.0,1.0
-207.0,0.0
-208.0,0.0
-209.0,0.0
-210.0,1.0
-211.0,0.0
-212.0,1.0
-213.0,0.0
-214.0,1.0
-215.0,1.0
-216.0,1.0
-217.0,0.0
-218.0,1.0
-219.0,0.0
-220.0,0.0
-221.0,1.0
-222.0,1.0
-223.0,1.0
-224.0,0.0
-225.0,1.0
-226.0,1.0
-227.0,1.0
-228.0,0.0
-229.0,0.0
-230.0,1.0
-231.0,1.0
-232.0,1.0
-233.0,1.0
-234.0,1.0
-235.0,1.0
-236.0,1.0
-237.0,1.0
-238.0,0.0
-239.0,1.0
-240.0,0.0
-241.0,1.0
-242.0,1.0
-243.0,0.0
-244.0,1.0
-245.0,0.0
-246.0,1.0
-247.0,0.0
-248.0,1.0
-249.0,0.0
-250.0,1.0
-251.0,1.0
-252.0,1.0
-253.0,0.0
-254.0,1.0
-255.0,0.0
-256.0,1.0
-257.0,0.0
-258.0,1.0
-259.0,0.0
-260.0,1.0
-261.0,1.0
-262.0,1.0
-263.0,0.0
-264.0,1.0
-265.0,1.0
-266.0,1.0
-267.0,1.0
-268.0,1.0
-269.0,1.0
-270.0,1.0
-271.0,0.0
-272.0,1.0
-273.0,0.0
-274.0,1.0
-275.0,0.0
-276.0,0.0
-277.0,1.0
-278.0,0.0
-279.0,1.0
-280.0,1.0
-281.0,1.0
-282.0,1.0
-283.0,1.0
-284.0,0.0
-285.0,0.0
-286.0,1.0
-287.0,0.0
-288.0,0.0
-289.0,0.0
-290.0,1.0
-291.0,1.0
-292.0,1.0
-293.0,1.0
-294.0,0.0
-295.0,0.0
-296.0,0.0
-297.0,1.0
-298.0,1.0
-299.0,0.0
-300.0,1.0
-301.0,1.0
-302.0,1.0
-303.0,1.0
-304.0,0.0
-305.0,0.0
-306.0,1.0
-307.0,1.0
-308.0,1.0
-309.0,1.0
-310.0,1.0
-311.0,1.0
-312.0,1.0
-313.0,1.0
-314.0,0.0
-315.0,0.0
-316.0,1.0
-317.0,1.0
-318.0,0.0
-319.0,0.0
-320.0,0.0
-321.0,1.0
-322.0,1.0
-323.0,0.0
-324.0,0.0
-325.0,0.0
-326.0,1.0
-327.0,1.0
-328.0,1.0
-329.0,0.0
-330.0,1.0
-331.0,1.0
-332.0,0.0
-333.0,1.0
-334.0,1.0
-335.0,1.0
-336.0,0.0
-337.0,1.0
-338.0,0.0
-339.0,1.0
-340.0,1.0
-341.0,1.0
-342.0,0.0
-343.0,1.0
-344.0,1.0
-345.0,0.0
-346.0,1.0
-347.0,1.0
-348.0,1.0
-349.0,1.0
-350.0,1.0
-351.0,1.0
-352.0,0.0
-353.0,0.0
-354.0,1.0
-355.0,1.0
-356.0,0.0
-357.0,0.0
-358.0,0.0
-359.0,0.0
-360.0,1.0
-361.0,0.0
-362.0,1.0
-363.0,1.0
-364.0,1.0
-365.0,1.0
-366.0,1.0
-367.0,0.0
-368.0,1.0
-369.0,1.0
-370.0,1.0
-371.0,0.0
-372.0,1.0
-373.0,1.0
-374.0,0.0
-375.0,0.0
-376.0,1.0
-377.0,1.0
-378.0,0.0
-379.0,0.0
-380.0,0.0
-381.0,0.0
-382.0,0.0
-383.0,0.0
-384.0,0.0
-385.0,0.0
-386.0,0.0
-387.0,0.0
-388.0,0.0
-389.0,0.0
-390.0,1.0
-391.0,0.0
-392.0,0.0
-393.0,0.0
-394.0,0.0
-395.0,0.0
-396.0,0.0
-397.0,0.0
-398.0,0.0
-399.0,0.0
-400.0,0.0
-401.0,0.0
-402.0,1.0
-403.0,0.0
-404.0,0.0
-405.0,1.0
-406.0,1.0
-407.0,0.0
-408.0,0.0
-409.0,0.0
-410.0,0.0
-411.0,1.0
-412.0,0.0
-413.0,0.0
-414.0,0.0
-415.0,0.0
-416.0,0.0
-417.0,0.0
-418.0,0.0
-419.0,0.0
-420.0,1.0
-421.0,0.0
-422.0,0.0
-423.0,1.0
-424.0,0.0
-425.0,0.0
-426.0,0.0
-427.0,0.0
-428.0,0.0
-429.0,0.0
-430.0,0.0
-431.0,0.0
-432.0,0.0
-433.0,0.0
-434.0,0.0
-435.0,0.0
-436.0,0.0
-437.0,0.0
-438.0,0.0
-439.0,0.0
-440.0,0.0
-441.0,0.0
-442.0,0.0
-443.0,0.0
-444.0,0.0
-445.0,0.0
-446.0,0.0
-447.0,0.0
-448.0,0.0
-449.0,0.0
-450.0,0.0
-451.0,0.0
-452.0,0.0
-453.0,0.0
-454.0,0.0
-455.0,0.0
-456.0,0.0
-457.0,0.0
-458.0,0.0
-459.0,0.0
-460.0,0.0
-461.0,0.0
-462.0,0.0
-463.0,0.0
-464.0,0.0
-465.0,1.0
-466.0,0.0
-467.0,0.0
-468.0,0.0
-469.0,0.0
-470.0,1.0
-471.0,0.0
-472.0,0.0
-473.0,0.0
-474.0,0.0
-475.0,0.0
-476.0,0.0
-477.0,0.0
-478.0,0.0
-479.0,0.0
-480.0,0.0
-481.0,0.0
-482.0,0.0
-483.0,0.0
-484.0,0.0
-485.0,0.0
-486.0,0.0
-487.0,0.0
-488.0,0.0
-489.0,0.0
-490.0,0.0
-491.0,0.0
-492.0,0.0
-493.0,0.0
-494.0,1.0
-495.0,1.0
-496.0,0.0
-497.0,0.0
-498.0,0.0
-499.0,0.0
-500.0,0.0
-501.0,0.0
-502.0,0.0
-503.0,0.0
-504.0,0.0
-505.0,0.0
-506.0,0.0
-507.0,0.0
-508.0,1.0
-509.0,0.0
-510.0,0.0
-511.0,0.0
-512.0,0.0
-513.0,1.0
-514.0,0.0
-515.0,0.0
-516.0,0.0
-517.0,0.0
-518.0,0.0
-519.0,0.0
-520.0,1.0
-521.0,0.0
-522.0,0.0
-523.0,0.0
-524.0,0.0
-525.0,0.0
-526.0,0.0
-527.0,1.0
-528.0,0.0
-529.0,0.0
-530.0,0.0
-531.0,0.0
-532.0,0.0
-533.0,0.0
-534.0,1.0
-535.0,0.0
-536.0,0.0
-537.0,0.0
-538.0,0.0
-539.0,0.0
-540.0,0.0
-541.0,0.0
-542.0,0.0
-543.0,1.0
-544.0,1.0
-545.0,0.0
-546.0,0.0
-547.0,0.0
-548.0,0.0
-549.0,0.0
-550.0,1.0
-551.0,0.0
-552.0,0.0
-553.0,0.0
-554.0,0.0
-555.0,1.0
-556.0,0.0
-557.0,1.0
-558.0,0.0
-559.0,1.0
-560.0,0.0
-561.0,0.0
-562.0,1.0
-563.0,0.0
-564.0,0.0
-565.0,1.0
-566.0,0.0
-567.0,0.0
-568.0,0.0
-569.0,0.0
-570.0,0.0
-571.0,0.0
-572.0,0.0
-573.0,0.0
-574.0,0.0
-575.0,0.0
-576.0,0.0
-577.0,0.0
-578.0,0.0
-579.0,0.0
-580.0,0.0
-581.0,0.0
-582.0,0.0
-583.0,0.0
-584.0,0.0
-585.0,0.0
-586.0,0.0
-587.0,1.0
-588.0,0.0
-589.0,0.0
-590.0,0.0
-591.0,1.0
-592.0,0.0
-593.0,0.0
-594.0,0.0
-595.0,0.0
-596.0,0.0
-597.0,0.0
-598.0,0.0
-599.0,0.0
-600.0,0.0
-601.0,0.0
-602.0,0.0
-603.0,0.0
-604.0,0.0
-605.0,0.0
-606.0,0.0
-607.0,0.0
-608.0,1.0
-609.0,0.0
-610.0,0.0
-611.0,0.0
-612.0,0.0
-613.0,0.0
-614.0,0.0
-615.0,0.0
-616.0,0.0
-617.0,0.0
-618.0,0.0
-619.0,0.0
-620.0,0.0
-621.0,0.0
-622.0,0.0
-623.0,0.0
-624.0,0.0
-625.0,0.0
-626.0,0.0
-627.0,0.0
-628.0,1.0
-629.0,0.0
-630.0,0.0
-631.0,0.0
-632.0,0.0
-633.0,0.0
-634.0,1.0
-635.0,0.0
-636.0,0.0
-637.0,1.0
-638.0,0.0
-639.0,0.0
-640.0,0.0
-641.0,0.0
-642.0,0.0
-643.0,0.0
-644.0,0.0
-645.0,1.0
-646.0,0.0
-647.0,0.0
-648.0,0.0
-649.0,0.0
-650.0,0.0
-651.0,0.0
-652.0,0.0
-653.0,0.0
-654.0,0.0
-655.0,0.0
-656.0,0.0
-657.0,0.0
-658.0,0.0
-659.0,0.0
-660.0,0.0
-661.0,0.0
-662.0,0.0
-663.0,0.0
-664.0,0.0
-665.0,0.0
-666.0,0.0
-667.0,0.0
-668.0,0.0
-669.0,0.0
-670.0,1.0
-671.0,0.0
-672.0,0.0
-673.0,0.0
-674.0,0.0
-675.0,0.0
-676.0,0.0
-677.0,1.0
-678.0,0.0
-679.0,0.0
-680.0,0.0
-681.0,0.0
-682.0,0.0
-683.0,0.0
-684.0,0.0
-685.0,0.0
-686.0,0.0
-687.0,1.0
-688.0,0.0
-689.0,0.0
-690.0,0.0
-691.0,0.0
-692.0,0.0
-693.0,0.0
-694.0,0.0
-695.0,0.0
-696.0,0.0
-697.0,0.0
-698.0,0.0
-699.0,0.0
-700.0,0.0
-701.0,0.0
-702.0,0.0
-703.0,1.0
-704.0,0.0
-705.0,0.0
-706.0,0.0
-707.0,0.0
-708.0,1.0
-709.0,0.0
-710.0,0.0
-711.0,0.0
-712.0,0.0
-713.0,0.0
-714.0,0.0
-715.0,0.0
-716.0,0.0
-717.0,1.0
-718.0,0.0
-719.0,1.0
-720.0,0.0
-721.0,0.0
-722.0,0.0
-723.0,0.0
-724.0,0.0
-725.0,0.0
-726.0,0.0
-727.0,0.0
-728.0,0.0
-729.0,0.0
-730.0,0.0
-731.0,0.0
-732.0,1.0
-733.0,0.0
-734.0,0.0
-735.0,0.0
-736.0,0.0
-737.0,0.0
-738.0,0.0
-739.0,0.0
-740.0,0.0
-741.0,1.0
-742.0,0.0
-743.0,1.0
-744.0,0.0
-745.0,0.0
-746.0,0.0
-747.0,0.0
-748.0,0.0
-749.0,0.0
-750.0,0.0
-751.0,0.0
-752.0,0.0
-753.0,0.0
-754.0,0.0
-755.0,0.0
-756.0,0.0
-757.0,0.0
diff --git a/Thur 20 Feb/ACE_ClassML Pipeline.ipynb b/Thur 20 Feb/ACE_ClassML Pipeline.ipynb
index bb4dd52..e55fe6d 100644
--- a/Thur 20 Feb/ACE_ClassML Pipeline.ipynb
+++ b/Thur 20 Feb/ACE_ClassML Pipeline.ipynb
@@ -24,15 +24,14 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"#import the necessary libraries\n",
"import pandas as pd\n",
"import numpy as np\n",
- "import matplotlib.pyplot as plt # like this\n",
- "# from matplotlib import pyplot, plt.plot.scatter(x,y)\n",
+ "import matplotlib.pyplot as plt\n",
"import seaborn as sns \n",
"\n",
"#let's remove the annoying warnings from our cells.\n",
@@ -42,7 +41,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 3,
"metadata": {},
"outputs": [
{
@@ -59,7 +58,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
@@ -78,7 +77,16 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pd.read"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -194,7 +202,7 @@
"4 2.288 33 1 "
]
},
- "execution_count": 7,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
@@ -202,7 +210,7 @@
"source": [
"#let's read in the data\n",
"data = pd.read_csv('diabetes.csv')\n",
- "data.head(5)\n"
+ "data.head(5)"
]
},
{
@@ -220,7 +228,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 7,
"metadata": {},
"outputs": [
{
@@ -229,7 +237,7 @@
"(768, 9)"
]
},
- "execution_count": 8,
+ "execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
@@ -244,7 +252,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -255,7 +263,7 @@
" dtype='object')"
]
},
- "execution_count": 9,
+ "execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
@@ -278,7 +286,7 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 9,
"metadata": {},
"outputs": [
{
@@ -296,7 +304,7 @@
"dtype: object"
]
},
- "execution_count": 10,
+ "execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
@@ -3857,7 +3865,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.3"
+ "version": "3.7.4"
},
"varInspector": {
"cols": {