Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save RandomForestGump/c048851e28a1d14a6822f94d4823d7f1 to your computer and use it in GitHub Desktop.
Save RandomForestGump/c048851e28a1d14a6822f94d4823d7f1 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"## Importing relevant Libraries\n",
"%matplotlib inline\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.model_selection import cross_val_score\n",
"from sklearn.svm import SVC\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import f1_score,confusion_matrix,accuracy_score\n",
"from sklearn.decomposition import PCA\n",
"from sklearn.linear_model import ElasticNet\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.linear_model import SGDClassifier\n",
"from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.model_selection import GridSearchCV"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Understanding the Dataset"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- The objective of the data collection is to organize the data regarding human movements and to get get it into machine readable format to apply Machine learning algorithms so as to classify our samples in line with mentioned target variables. This can also be used for open source projects"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- The six selected ADL were standing, sitting, laying down, walking, walking downstairs and upstairs. A group of 30 volunteers\n",
" with ages ranging from 19 to 48 years were selected for this task"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- The training set of the data has 7352 instances (70% of dataset) and 561 feature vectors. Also provided are class labels and the subject number. The test set has the same number of features except having 2947 samples.\n",
"- From each sampled window described above a vector of features was obtained. Standard measures such as the mean, correlation,\n",
" signal magnitude area (SMA), energy, skewness and autoregression coefficients were employed for the feature mapping. A total of 561 features were extracted to describe each activity window"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Support Vector Machine, which are generalized to the multiclass case through a One-Vs-All (OVA) approach is used here. The SVM hyperparameters are selected through a 10-fold Cross Validation procedure and Gaussian kernels are used for experiments\n",
"- Maximum accuracy achieved was 96%"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>tBodyAcc-mean()-X</th>\n",
" <th>tBodyAcc-mean()-Y</th>\n",
" <th>tBodyAcc-mean()-Z</th>\n",
" <th>tBodyAcc-std()-X</th>\n",
" <th>tBodyAcc-std()-Y</th>\n",
" <th>tBodyAcc-std()-Z</th>\n",
" <th>tBodyAcc-mad()-X</th>\n",
" <th>tBodyAcc-mad()-Y</th>\n",
" <th>tBodyAcc-mad()-Z</th>\n",
" <th>tBodyAcc-max()-X</th>\n",
" <th>...</th>\n",
" <th>fBodyBodyGyroJerkMag-kurtosis()</th>\n",
" <th>angle(tBodyAccMean,gravity)</th>\n",
" <th>angle(tBodyAccJerkMean),gravityMean)</th>\n",
" <th>angle(tBodyGyroMean,gravityMean)</th>\n",
" <th>angle(tBodyGyroJerkMean,gravityMean)</th>\n",
" <th>angle(X,gravityMean)</th>\n",
" <th>angle(Y,gravityMean)</th>\n",
" <th>angle(Z,gravityMean)</th>\n",
" <th>subject</th>\n",
" <th>Activity</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.288585</td>\n",
" <td>-0.020294</td>\n",
" <td>-0.132905</td>\n",
" <td>-0.995279</td>\n",
" <td>-0.983111</td>\n",
" <td>-0.913526</td>\n",
" <td>-0.995112</td>\n",
" <td>-0.983185</td>\n",
" <td>-0.923527</td>\n",
" <td>-0.934724</td>\n",
" <td>...</td>\n",
" <td>-0.710304</td>\n",
" <td>-0.112754</td>\n",
" <td>0.030400</td>\n",
" <td>-0.464761</td>\n",
" <td>-0.018446</td>\n",
" <td>-0.841247</td>\n",
" <td>0.179941</td>\n",
" <td>-0.058627</td>\n",
" <td>1</td>\n",
" <td>STANDING</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.278419</td>\n",
" <td>-0.016411</td>\n",
" <td>-0.123520</td>\n",
" <td>-0.998245</td>\n",
" <td>-0.975300</td>\n",
" <td>-0.960322</td>\n",
" <td>-0.998807</td>\n",
" <td>-0.974914</td>\n",
" <td>-0.957686</td>\n",
" <td>-0.943068</td>\n",
" <td>...</td>\n",
" <td>-0.861499</td>\n",
" <td>0.053477</td>\n",
" <td>-0.007435</td>\n",
" <td>-0.732626</td>\n",
" <td>0.703511</td>\n",
" <td>-0.844788</td>\n",
" <td>0.180289</td>\n",
" <td>-0.054317</td>\n",
" <td>1</td>\n",
" <td>STANDING</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.279653</td>\n",
" <td>-0.019467</td>\n",
" <td>-0.113462</td>\n",
" <td>-0.995380</td>\n",
" <td>-0.967187</td>\n",
" <td>-0.978944</td>\n",
" <td>-0.996520</td>\n",
" <td>-0.963668</td>\n",
" <td>-0.977469</td>\n",
" <td>-0.938692</td>\n",
" <td>...</td>\n",
" <td>-0.760104</td>\n",
" <td>-0.118559</td>\n",
" <td>0.177899</td>\n",
" <td>0.100699</td>\n",
" <td>0.808529</td>\n",
" <td>-0.848933</td>\n",
" <td>0.180637</td>\n",
" <td>-0.049118</td>\n",
" <td>1</td>\n",
" <td>STANDING</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.279174</td>\n",
" <td>-0.026201</td>\n",
" <td>-0.123283</td>\n",
" <td>-0.996091</td>\n",
" <td>-0.983403</td>\n",
" <td>-0.990675</td>\n",
" <td>-0.997099</td>\n",
" <td>-0.982750</td>\n",
" <td>-0.989302</td>\n",
" <td>-0.938692</td>\n",
" <td>...</td>\n",
" <td>-0.482845</td>\n",
" <td>-0.036788</td>\n",
" <td>-0.012892</td>\n",
" <td>0.640011</td>\n",
" <td>-0.485366</td>\n",
" <td>-0.848649</td>\n",
" <td>0.181935</td>\n",
" <td>-0.047663</td>\n",
" <td>1</td>\n",
" <td>STANDING</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.276629</td>\n",
" <td>-0.016570</td>\n",
" <td>-0.115362</td>\n",
" <td>-0.998139</td>\n",
" <td>-0.980817</td>\n",
" <td>-0.990482</td>\n",
" <td>-0.998321</td>\n",
" <td>-0.979672</td>\n",
" <td>-0.990441</td>\n",
" <td>-0.942469</td>\n",
" <td>...</td>\n",
" <td>-0.699205</td>\n",
" <td>0.123320</td>\n",
" <td>0.122542</td>\n",
" <td>0.693578</td>\n",
" <td>-0.615971</td>\n",
" <td>-0.847865</td>\n",
" <td>0.185151</td>\n",
" <td>-0.043892</td>\n",
" <td>1</td>\n",
" <td>STANDING</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 563 columns</p>\n",
"</div>"
],
"text/plain": [
" tBodyAcc-mean()-X tBodyAcc-mean()-Y tBodyAcc-mean()-Z tBodyAcc-std()-X \\\n",
"0 0.288585 -0.020294 -0.132905 -0.995279 \n",
"1 0.278419 -0.016411 -0.123520 -0.998245 \n",
"2 0.279653 -0.019467 -0.113462 -0.995380 \n",
"3 0.279174 -0.026201 -0.123283 -0.996091 \n",
"4 0.276629 -0.016570 -0.115362 -0.998139 \n",
"\n",
" tBodyAcc-std()-Y tBodyAcc-std()-Z tBodyAcc-mad()-X tBodyAcc-mad()-Y \\\n",
"0 -0.983111 -0.913526 -0.995112 -0.983185 \n",
"1 -0.975300 -0.960322 -0.998807 -0.974914 \n",
"2 -0.967187 -0.978944 -0.996520 -0.963668 \n",
"3 -0.983403 -0.990675 -0.997099 -0.982750 \n",
"4 -0.980817 -0.990482 -0.998321 -0.979672 \n",
"\n",
" tBodyAcc-mad()-Z tBodyAcc-max()-X ... \\\n",
"0 -0.923527 -0.934724 ... \n",
"1 -0.957686 -0.943068 ... \n",
"2 -0.977469 -0.938692 ... \n",
"3 -0.989302 -0.938692 ... \n",
"4 -0.990441 -0.942469 ... \n",
"\n",
" fBodyBodyGyroJerkMag-kurtosis() angle(tBodyAccMean,gravity) \\\n",
"0 -0.710304 -0.112754 \n",
"1 -0.861499 0.053477 \n",
"2 -0.760104 -0.118559 \n",
"3 -0.482845 -0.036788 \n",
"4 -0.699205 0.123320 \n",
"\n",
" angle(tBodyAccJerkMean),gravityMean) angle(tBodyGyroMean,gravityMean) \\\n",
"0 0.030400 -0.464761 \n",
"1 -0.007435 -0.732626 \n",
"2 0.177899 0.100699 \n",
"3 -0.012892 0.640011 \n",
"4 0.122542 0.693578 \n",
"\n",
" angle(tBodyGyroJerkMean,gravityMean) angle(X,gravityMean) \\\n",
"0 -0.018446 -0.841247 \n",
"1 0.703511 -0.844788 \n",
"2 0.808529 -0.848933 \n",
"3 -0.485366 -0.848649 \n",
"4 -0.615971 -0.847865 \n",
"\n",
" angle(Y,gravityMean) angle(Z,gravityMean) subject Activity \n",
"0 0.179941 -0.058627 1 STANDING \n",
"1 0.180289 -0.054317 1 STANDING \n",
"2 0.180637 -0.049118 1 STANDING \n",
"3 0.181935 -0.047663 1 STANDING \n",
"4 0.185151 -0.043892 1 STANDING \n",
"\n",
"[5 rows x 563 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"### Loading Preprocessed Dataset\n",
"train=pd.read_csv(\"train.csv\")\n",
"test=pd.read_csv(\"test.csv\")\n",
"train.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### The data has been preprocessed initially, has 561 feature vectors 1, column for subject number and another for label: Activity"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Building a Model oriented dataset"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"y_train=train.Activity\n",
"y_test=test.Activity\n",
"train.drop(['Activity','subject'],1,inplace=True)\n",
"test.drop(['Activity','subject'],1,inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>tBodyAcc-mean()-X</th>\n",
" <th>tBodyAcc-mean()-Y</th>\n",
" <th>tBodyAcc-mean()-Z</th>\n",
" <th>tBodyAcc-std()-X</th>\n",
" <th>tBodyAcc-std()-Y</th>\n",
" <th>tBodyAcc-std()-Z</th>\n",
" <th>tBodyAcc-mad()-X</th>\n",
" <th>tBodyAcc-mad()-Y</th>\n",
" <th>tBodyAcc-mad()-Z</th>\n",
" <th>tBodyAcc-max()-X</th>\n",
" <th>...</th>\n",
" <th>fBodyBodyGyroJerkMag-meanFreq()</th>\n",
" <th>fBodyBodyGyroJerkMag-skewness()</th>\n",
" <th>fBodyBodyGyroJerkMag-kurtosis()</th>\n",
" <th>angle(tBodyAccMean,gravity)</th>\n",
" <th>angle(tBodyAccJerkMean),gravityMean)</th>\n",
" <th>angle(tBodyGyroMean,gravityMean)</th>\n",
" <th>angle(tBodyGyroJerkMean,gravityMean)</th>\n",
" <th>angle(X,gravityMean)</th>\n",
" <th>angle(Y,gravityMean)</th>\n",
" <th>angle(Z,gravityMean)</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.288585</td>\n",
" <td>-0.020294</td>\n",
" <td>-0.132905</td>\n",
" <td>-0.995279</td>\n",
" <td>-0.983111</td>\n",
" <td>-0.913526</td>\n",
" <td>-0.995112</td>\n",
" <td>-0.983185</td>\n",
" <td>-0.923527</td>\n",
" <td>-0.934724</td>\n",
" <td>...</td>\n",
" <td>-0.074323</td>\n",
" <td>-0.298676</td>\n",
" <td>-0.710304</td>\n",
" <td>-0.112754</td>\n",
" <td>0.030400</td>\n",
" <td>-0.464761</td>\n",
" <td>-0.018446</td>\n",
" <td>-0.841247</td>\n",
" <td>0.179941</td>\n",
" <td>-0.058627</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.278419</td>\n",
" <td>-0.016411</td>\n",
" <td>-0.123520</td>\n",
" <td>-0.998245</td>\n",
" <td>-0.975300</td>\n",
" <td>-0.960322</td>\n",
" <td>-0.998807</td>\n",
" <td>-0.974914</td>\n",
" <td>-0.957686</td>\n",
" <td>-0.943068</td>\n",
" <td>...</td>\n",
" <td>0.158075</td>\n",
" <td>-0.595051</td>\n",
" <td>-0.861499</td>\n",
" <td>0.053477</td>\n",
" <td>-0.007435</td>\n",
" <td>-0.732626</td>\n",
" <td>0.703511</td>\n",
" <td>-0.844788</td>\n",
" <td>0.180289</td>\n",
" <td>-0.054317</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.279653</td>\n",
" <td>-0.019467</td>\n",
" <td>-0.113462</td>\n",
" <td>-0.995380</td>\n",
" <td>-0.967187</td>\n",
" <td>-0.978944</td>\n",
" <td>-0.996520</td>\n",
" <td>-0.963668</td>\n",
" <td>-0.977469</td>\n",
" <td>-0.938692</td>\n",
" <td>...</td>\n",
" <td>0.414503</td>\n",
" <td>-0.390748</td>\n",
" <td>-0.760104</td>\n",
" <td>-0.118559</td>\n",
" <td>0.177899</td>\n",
" <td>0.100699</td>\n",
" <td>0.808529</td>\n",
" <td>-0.848933</td>\n",
" <td>0.180637</td>\n",
" <td>-0.049118</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.279174</td>\n",
" <td>-0.026201</td>\n",
" <td>-0.123283</td>\n",
" <td>-0.996091</td>\n",
" <td>-0.983403</td>\n",
" <td>-0.990675</td>\n",
" <td>-0.997099</td>\n",
" <td>-0.982750</td>\n",
" <td>-0.989302</td>\n",
" <td>-0.938692</td>\n",
" <td>...</td>\n",
" <td>0.404573</td>\n",
" <td>-0.117290</td>\n",
" <td>-0.482845</td>\n",
" <td>-0.036788</td>\n",
" <td>-0.012892</td>\n",
" <td>0.640011</td>\n",
" <td>-0.485366</td>\n",
" <td>-0.848649</td>\n",
" <td>0.181935</td>\n",
" <td>-0.047663</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.276629</td>\n",
" <td>-0.016570</td>\n",
" <td>-0.115362</td>\n",
" <td>-0.998139</td>\n",
" <td>-0.980817</td>\n",
" <td>-0.990482</td>\n",
" <td>-0.998321</td>\n",
" <td>-0.979672</td>\n",
" <td>-0.990441</td>\n",
" <td>-0.942469</td>\n",
" <td>...</td>\n",
" <td>0.087753</td>\n",
" <td>-0.351471</td>\n",
" <td>-0.699205</td>\n",
" <td>0.123320</td>\n",
" <td>0.122542</td>\n",
" <td>0.693578</td>\n",
" <td>-0.615971</td>\n",
" <td>-0.847865</td>\n",
" <td>0.185151</td>\n",
" <td>-0.043892</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 561 columns</p>\n",
"</div>"
],
"text/plain": [
" tBodyAcc-mean()-X tBodyAcc-mean()-Y tBodyAcc-mean()-Z tBodyAcc-std()-X \\\n",
"0 0.288585 -0.020294 -0.132905 -0.995279 \n",
"1 0.278419 -0.016411 -0.123520 -0.998245 \n",
"2 0.279653 -0.019467 -0.113462 -0.995380 \n",
"3 0.279174 -0.026201 -0.123283 -0.996091 \n",
"4 0.276629 -0.016570 -0.115362 -0.998139 \n",
"\n",
" tBodyAcc-std()-Y tBodyAcc-std()-Z tBodyAcc-mad()-X tBodyAcc-mad()-Y \\\n",
"0 -0.983111 -0.913526 -0.995112 -0.983185 \n",
"1 -0.975300 -0.960322 -0.998807 -0.974914 \n",
"2 -0.967187 -0.978944 -0.996520 -0.963668 \n",
"3 -0.983403 -0.990675 -0.997099 -0.982750 \n",
"4 -0.980817 -0.990482 -0.998321 -0.979672 \n",
"\n",
" tBodyAcc-mad()-Z tBodyAcc-max()-X ... \\\n",
"0 -0.923527 -0.934724 ... \n",
"1 -0.957686 -0.943068 ... \n",
"2 -0.977469 -0.938692 ... \n",
"3 -0.989302 -0.938692 ... \n",
"4 -0.990441 -0.942469 ... \n",
"\n",
" fBodyBodyGyroJerkMag-meanFreq() fBodyBodyGyroJerkMag-skewness() \\\n",
"0 -0.074323 -0.298676 \n",
"1 0.158075 -0.595051 \n",
"2 0.414503 -0.390748 \n",
"3 0.404573 -0.117290 \n",
"4 0.087753 -0.351471 \n",
"\n",
" fBodyBodyGyroJerkMag-kurtosis() angle(tBodyAccMean,gravity) \\\n",
"0 -0.710304 -0.112754 \n",
"1 -0.861499 0.053477 \n",
"2 -0.760104 -0.118559 \n",
"3 -0.482845 -0.036788 \n",
"4 -0.699205 0.123320 \n",
"\n",
" angle(tBodyAccJerkMean),gravityMean) angle(tBodyGyroMean,gravityMean) \\\n",
"0 0.030400 -0.464761 \n",
"1 -0.007435 -0.732626 \n",
"2 0.177899 0.100699 \n",
"3 -0.012892 0.640011 \n",
"4 0.122542 0.693578 \n",
"\n",
" angle(tBodyGyroJerkMean,gravityMean) angle(X,gravityMean) \\\n",
"0 -0.018446 -0.841247 \n",
"1 0.703511 -0.844788 \n",
"2 0.808529 -0.848933 \n",
"3 -0.485366 -0.848649 \n",
"4 -0.615971 -0.847865 \n",
"\n",
" angle(Y,gravityMean) angle(Z,gravityMean) \n",
"0 0.179941 -0.058627 \n",
"1 0.180289 -0.054317 \n",
"2 0.180637 -0.049118 \n",
"3 0.181935 -0.047663 \n",
"4 0.185151 -0.043892 \n",
"\n",
"[5 rows x 561 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# KNN\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0.8910396563053089,\n",
" 0.88337595250526046,\n",
" 0.90221298809279404,\n",
" 0.901872572673456,\n",
" 0.90646567013302959,\n",
" 0.90467760505673422,\n",
" 0.90713549042070962,\n",
" 0.90872708131438107,\n",
" 0.90627582899154668,\n",
" 0.90944245328981987,\n",
" 0.9083062480465095,\n",
" 0.90872251185903752,\n",
" 0.90635489239624933,\n",
" 0.90904204389045629,\n",
" 0.90786069996791985,\n",
" 0.90659164193251807,\n",
" 0.90603258535104358,\n",
" 0.90794399941533865,\n",
" 0.90700753605055406,\n",
" 0.90802554004385638,\n",
" 0.90561596202461581,\n",
" 0.90537879114987307,\n",
" 0.905202675803916,\n",
" 0.90441147565994573,\n",
" 0.90477432971767624,\n",
" 0.90401113919901976,\n",
" 0.90426446782696834,\n",
" 0.90344551211602886,\n",
" 0.90136904376974736,\n",
" 0.90235709448519508,\n",
" 0.90221388112608381,\n",
" 0.90303464806089961,\n",
" 0.90259065675922989,\n",
" 0.90232039018244792,\n",
" 0.90181756394087542,\n",
" 0.90180749848994757,\n",
" 0.90178726853534352,\n",
" 0.90261483796025832,\n",
" 0.90215755061668457,\n",
" 0.90196349664963404,\n",
" 0.90020343576440998,\n",
" 0.901803777087961,\n",
" 0.9001641388637488,\n",
" 0.90076958517088968,\n",
" 0.90045336914191942,\n",
" 0.90053464333780475,\n",
" 0.89815821498747861,\n",
" 0.89945053363772975,\n",
" 0.89864398057401407,\n",
" 0.89806986512567266]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"F1=[]\n",
"for k in range(1,51): \n",
" neigh = KNeighborsClassifier(n_neighbors=k)\n",
" neigh.fit(train, y_train)\n",
" scores = cross_val_score(neigh, train, y_train, cv=10,scoring='f1_weighted')\n",
" F1.append(scores.mean())\n",
"F1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Plot b/w features and averaged f-1 score"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0xdc907181d0>]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAoKIiADw/yK/IygSf2C4AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xdc8a697978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(np.linspace(1,50,num=50),F1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Weighted F1 score maximum for k=10 (90.94%)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[534 2 1 0 0 0]\n",
" [ 0 409 78 0 0 4]\n",
" [ 0 47 485 0 0 0]\n",
" [ 0 0 0 486 10 0]\n",
" [ 0 0 0 51 331 38]\n",
" [ 0 0 0 36 8 427]]\n",
"The accuracy score on test by KNN:0.9066847641669494\n",
"The f1-score on test by KNN:0.9060128891364533\n"
]
}
],
"source": [
"neigh = KNeighborsClassifier(n_neighbors=10)\n",
"neigh.fit(train, y_train)\n",
"y_pred=neigh.predict(test)\n",
"print(confusion_matrix(y_test,y_pred))\n",
"print('The accuracy score on test by KNN:{}'.format(accuracy_score(y_test,y_pred)))\n",
"print('The f1-score on test by KNN:{}'.format(f1_score(y_test,y_pred,average='weighted')))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### The metric statistics obtained for a 10- nearest neighbour classifier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Elastic Net"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### The regularizer is a penalty added to the loss function that shrinks model parameters towards the zero vector using either the squared euclidean norm L2 or the absolute norm L1 or a combination of both (Elastic Net). If the parameter update crosses the 0.0 value because of the regularizer, the update is truncated to 0.0 to allow for learning sparse models and achieve online feature selection."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best parameters set found on development set:\n",
"\n",
"{'alpha': 0.0001, 'l1_ratio': 0.15}\n"
]
}
],
"source": [
"alpha=[1e-4,3e-4,1e-3,3e-3, 1e-2,3e-2]\n",
"l1R=[0,0.15,0.5,0.7,1]\n",
"tuned_parameters = [{'alpha': alpha,\n",
" 'l1_ratio':l1R}]\n",
"regr = SGDClassifier()\n",
"clf = GridSearchCV(regr, tuned_parameters, cv=10,scoring='f1_weighted')\n",
"clf.fit(train, y_train)\n",
"print(\"Best parameters set found on development set:\")\n",
"print()\n",
"print(clf.best_params_)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a94062ee10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"scores = [x[1] for x in clf.grid_scores_]\n",
"scores = np.array(scores).reshape(len(alpha), len(l1R))\n",
"\n",
"for ind, i in enumerate(alpha):\n",
" plt.plot(l1R, scores[ind], label='alpha: ' + str(i))\n",
"plt.legend()\n",
"plt.xlabel('l1R')\n",
"plt.ylabel('Mean score')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Best params : Alpha= .0001 and l1_ratio= 0.15"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[537 0 0 0 0 0]\n",
" [ 39 351 82 10 4 5]\n",
" [ 0 5 512 10 3 2]\n",
" [ 0 0 0 493 2 1]\n",
" [ 0 0 0 5 395 20]\n",
" [ 0 0 0 24 1 446]]\n",
"The accuracy score on test by ElasticnetSGD:0.9277231082456736\n",
"The f1-score on test by ElasticNetSGD:0.9252983135140076\n"
]
}
],
"source": [
"clf = SGDClassifier(alpha= 0.0001, l1_ratio= 1)\n",
"clf.fit(train, y_train)\n",
"y_pred=clf.predict(test)\n",
"print(confusion_matrix(y_test,y_pred))\n",
"print('The accuracy score on test by ElasticnetSGD:{}'.format(accuracy_score(y_test,y_pred)))\n",
"print('The f1-score on test by ElasticNetSGD:{}'.format(f1_score(y_test,y_pred,average='weighted')))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### The metric statistics obtained for a elastic net linear solver"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# SVM"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best parameters set found on development set:\n",
"\n",
"{'C': 1000, 'gamma': 0.001}\n"
]
}
],
"source": [
"gamma=[1e-3, 1e-4]\n",
"C=[1, 10, 100, 1000]\n",
"tuned_parameters = [{'gamma': gamma,'C':C}] \n",
"svm = SVC()\n",
"clf = GridSearchCV(svm, tuned_parameters, cv=10,scoring='f1_weighted')\n",
"clf.fit(train, y_train)\n",
"print(\"Best parameters set found on development set:\")\n",
"print()\n",
"print(clf.best_params_)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n9Kc/DcD111/P008/3eO4F154gauuuori4mImTZrEVVddxfPPP9/v+ZMnT2b58uXDGuk0HDZKKkHi\nk962jrcxPd3zzC52H+51aZohWzhtAn/z8fP63L9582aefPJJtm/fTmtrK0uXLuWiiy4C4JOf/CRf\n+MIXALj77rt5+OGHueOOOwA4fvw4r732Ghs3bmTt2rX87ne/46GHHmL58uVs27aNJUuWEIvF+PCH\nP8zf//3f84lPfIK7776bl156id27d3P99dezdu1aJk+ezEsvvUReXh779u3juuuuY8uWLQAsWbKE\nbdu2dStvQ0MDEydOJBRyvl4rKio4dCh5ZQc4dOgQ06d3rQARP87r+elggZEgcT2MzhFSFhjGpNXv\nfvc71q1bR15eHnl5eXz84x/v3Ldz507uvvtuTpw4QWNjI6tXr+7c9/GPfxwRYdGiRUyZMoVFixYB\ncN5551FbW8uSJUvIyclhzZo1ACxatIjc3FzC4TCLFi2itrYWcJ5Duf3229m2bRvBYJB33nmn8zOS\nwyLTWWAkSFwPIxKNEQwI0yfZOhjGxPVXE0iHG264gaeffprFixfzwx/+kFdeeaVzX25uLgCBQKDz\ndfx9W5vzvFU4HO4cPZR4XOIx//iP/8iUKVPYvn07HR0d5OXl9VumkpISTpw4QVtbG6FQiLq6OsrL\nk1enhvLy8m7lraur4/LLL/d8fjpYH0aCxPUwItEY0yeNIydkvyJj0umyyy7jmWeeobm5mcbGRp59\n9tnOfadPn2bq1Km0trby05/+1JfPP3nyJFOnTiUQCPDjH/+Y9vb2fo8XEa644gqeeOIJwBkJtW7d\nuh7HrV69mhdffJHjx49z/PhxXnzxRVavXu35/HTw9dtQRNaIyNsiUi0id/Wyv0hEnhGR7SKyS0Ru\n9HquHxLXw4jYkFpjRoXly5ezdu1aLrjgAq6++moWLVpEUVER4HSGX3zxxVx22WXMnz/fl8//sz/7\nMx599FEWL17M3r17KSjo+l5YsmRJr+d85zvf4b777mPOnDk0NDRw8803A7BlyxZuueUWwBnx9K1v\nfYvly5ezfPly/vqv/5ri4uJ+z3/vvfeoqKjgvvvu42//9m+pqKjg1KmR7VPql6r68gMEgf3ALCAH\n2A4sTDrmm8B33NdlwDH32AHP7e3noosu0uH4++f3atVdz2pHR4fOv/s5/Z8bdw7resZkgt27d6e7\nCHr69GlVVY3FYnrRRRfp1q1b01yisam3P0tgi3r8XvezD2MFUK2qNQAi8jiwDtidmFfAeHcN70I3\nMNqAiz2cO+JCQaFD4cjJZs60ttuQWmNGiVtvvZXdu3fT3NzM9ddfz9KlS9NdpKzkZ2CUAwcT3tfh\nBEGiB4CNwGFgPPAZVe0QES/njrhw0Gmhqz7aCNg63saMFj/72c/SXQRD+ju9VwPbgGnAEuABEZkw\nmAuIyK0iskVEttTX1w+rMKGAM1rinfdPA1BZaiOkjDEmzs/AOARMT3hf4W5LdCPwlNuUVg1EgPke\nzwVAVTeo6jJVXVZWVjasAofcGsa+9xvJCQWYVjRuWNczxphM4mdgbAbmikiViOQA1+I0PyU6AFwJ\nICJTgHlAjcdzR1w46NQw9h09TVVJAYGAzdBpjDFxvvVhqGqbiNwOvIAz6ukRVd0lIre5+9cD3wZ+\nKCI7AAG+rqpRgN7O9auscUE3IPa938ilc0r8/jhjjBlTfO3DUNVNqnquqs5W1f/lblvvhgWqelhV\nP6qqi1T1fFX9SX/n+i0ccH4dp8+2WYe3MWbI/JreXFX58pe/zJw5c7jgggt48803O8+56aabmDx5\nMueff75v95XuTu9RJRTsaoKyIbXGmKHya3rz5557jn379rFv3z42bNjAF7/4xc7r3XDDDTz//PO+\n3pcFRoJ4pzfYpIPGjCY2vblz/i9/+Us+//nPIyKsXLmSEydOcOTIEQBWrVrV+aS4X2zywQThhE5u\nmxbEmF48dxe8t2Nkr3nOIrj63j532/TmXef3dc7UqVMH9zsfIguMBPEaxvjcEKWFOWkujTEGbHrz\n0cQCI0G8D6OytMAWvTemN/3UBNIh26Y3Ly8v5+DBg93OSeXU59aHkSA+Ssqao4wZPWx6867z165d\ny49+9CNUld///vcUFRWlrDkKLDC6idcwLDCMGT1sevOu86+55hpmzZrFnDlz+MIXvsA///M/d37m\nddddxyWXXMLbb79NRUVFryOzhkuc2W0zw7JlyzTeGTUUW989zqf+5VX+6TNL+OMLR8cKV8ak2549\ne1iwYEFay9DY2EhhYSFNTU2sWrWKDRs22Iy1Q9Dbn6WIbFXVZV7Otz6MBOeXT+ALH6ziivmT010U\nY0wCm958dLDASJAbCvJXH1uY7mIYY5LY9Oajg/VhGGOM8cQCwxgzoEzq68xWI/FnaIFhjOlXXl4e\nDQ0NFhpjmKrS0NAw4DMkA7E+DGNMvyoqKqirq2O4K1qa9MrLy6OiomJY17DAMMb0KxwOU1VVle5i\nmFHAmqSMMcZ4YoFhjDHGEwsMY4wxnmTU1CAiUg+8O4RTS4HoCBdntLN7zg52z9lhOPc8U1XLvByY\nUYExVCKyxetcKpnC7jk72D1nh1TdszVJGWOM8cQCwxhjjCcWGI4N6S5AGtg9Zwe75+yQknu2Pgxj\njDGeWA3DGGOMJ1kfGCKyRkTeFpFqEbkr3eUZKSIyXUR+LSK7RWSXiNzpbi8WkZdEZJ/730kJ53zD\n/T28LSKr01f6oRORoIi8JSLPuu8z/X4nisgTIrJXRPaIyCVZcM9fdf9O7xSRx0QkLxPvWUQeEZGj\nIrIzYdug71NELhKRHe6+74mIDLlQqpq1P0AQ2A/MAnKA7cDCdJdrhO5tKrDUfT0eeAdYCPwf4C53\n+13Ad9zXC937zwWq3N9LMN33MYT7/nPgZ8Cz7vtMv99HgVvc1znAxEy+Z6AciADj3Pc/B27IxHsG\nVgFLgZ0J2wZ9n8AbwEpAgOeAq4dapmyvYawAqlW1RlVbgMeBdWku04hQ1SOq+qb7+jSwB+d/tnU4\nXzK4//1j9/U64HFVPauqEaAa5/czZohIBfAx4KGEzZl8v0U4XyoPA6hqi6qeIIPv2RUCxolICMgH\nDpOB96yqvwWOJW0e1H2KyFRggqr+Xp30+FHCOYOW7YFRDhxMeF/nbssoIlIJXAi8DkxR1SPurveA\nKe7rTPhd/BPwl0BHwrZMvt8qoB74gdsM95CIFJDB96yqh4DvAgeAI8BJVX2RDL7nJIO9z3L3dfL2\nIcn2wMh4IlIIPAl8RVVPJe5z/8WREcPkROSPgKOqurWvYzLpfl0hnCaLf1HVC4EYTjNFp0y7Z7fN\nfh1OWE4DCkTks4nHZNo99yUd95ntgXEImJ7wvsLdlhFEJIwTFj9V1afcze+71VTc/x51t4/138Vl\nwFoRqcVpWvywiPyEzL1fcP61WKeqr7vvn8AJkEy+548AEVWtV9VW4CngUjL7nhMN9j4Pua+Ttw9J\ntgfGZmCuiFSJSA5wLbAxzWUaEe5IiIeBPap6X8KujcD17uvrgV8mbL9WRHJFpAqYi9NZNiao6jdU\ntUJVK3H+HF9W1c+SofcLoKrvAQdFZJ676UpgNxl8zzhNUStFJN/9O34lTv9cJt9zokHdp9t8dUpE\nVrq/r88nnDN46R4JkO4f4BqcEUT7gb9Kd3lG8L4+gFNd/QOwzf25BigBfgXsA/4DKE4456/c38Pb\nDGMkRbp/gMvpGiWV0fcLLAG2uH/OTwOTsuCe7wH2AjuBH+OMDMq4ewYew+mnacWpTd48lPsElrm/\nq/3AA7gPbA/lx570NsYY40m2N0kZY4zxyALDGGOMJxYYxhhjPLHAMMYY44kFhjHGGE8sMIzxkYic\nIyKPi8h+EdkqIptE5Nx0l8uYoQiluwDGZCr3QalfAI+q6rXutsU48/+8k86yGTMUFhjG+OcKoFVV\n18c3qOr2NJbHmGGxJilj/HM+0OdkiMaMNRYYxhhjPLHAMMY/u4CL0l0IY0aKBYYx/nkZyBWRW+Mb\nROQCEflgGstkzJBZYBjjE3Vm9vwE8BF3WO0u4O9wVkozZsyx2WqNMcZ4YjUMY4wxnlhgGGOM8cQC\nwxhjjCcWGMYYYzyxwDDGGOOJBYYxxhhPLDCMMcZ4YoFhjDHGk/8PmTih6Vrkln4AAAAASUVORK5C\nYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a9407fa1d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"scores = [x[1] for x in clf.grid_scores_]\n",
"scores = np.array(scores).reshape(len(gamma), len(C))\n",
"for ind, i in enumerate(gamma):\n",
" plt.plot(C, scores[ind], label='gamma: ' + str(i))\n",
"plt.legend()\n",
"plt.xlabel('C')\n",
"plt.ylabel('Mean score')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Best fit params Gamma = .001 and C=1000"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[537 0 0 0 0 0]\n",
" [ 0 436 53 0 0 2]\n",
" [ 0 12 520 0 0 0]\n",
" [ 0 0 0 493 3 0]\n",
" [ 0 0 0 4 406 10]\n",
" [ 0 0 0 17 0 454]]\n",
"The accuracy score on test by SVC:0.9657278588394977\n",
"The f1-score on test by SVC:0.9656245347276229\n"
]
}
],
"source": [
"clf = SVC(gamma=.001,C=1000)\n",
"clf.fit(train, y_train)\n",
"y_pred=clf.predict(test)\n",
"print(confusion_matrix(y_test,y_pred))\n",
"print('The accuracy score on test by SVC:{}'.format(accuracy_score(y_test,y_pred)))\n",
"print('The f1-score on test by SVC:{}'.format(f1_score(y_test,y_pred,average='weighted')))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Impressive performance by SVC. Over 96% accuuracy and f-1 score"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Random Forest"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best parameters set found on development set:\n",
"\n",
"{'max_depth': 600, 'n_estimators': 500}\n"
]
}
],
"source": [
"Depth=[300,500,600]\n",
"Trees=[200,500,700]\n",
"tuned_parameters = [{'n_estimators': Trees,'max_depth':Depth}] \n",
"RFM = RandomForestClassifier()\n",
"clf = GridSearchCV(RFM, tuned_parameters, cv=10,scoring='f1_weighted')\n",
"clf.fit(train, y_train)\n",
"print(\"Best parameters set found on development set:\")\n",
"print()\n",
"print(clf.best_params_)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a940870160>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"scores = [x[1] for x in clf.grid_scores_]\n",
"scores = np.array(scores).reshape(len(Depth), len(Trees))\n",
"for ind, i in enumerate(Depth):\n",
" plt.plot(Trees, scores[ind], label='max_depth: ' + str(i))\n",
"plt.legend()\n",
"plt.xlabel('n_estimators')\n",
"plt.ylabel('Mean score')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[537 0 0 0 0 0]\n",
" [ 0 441 50 0 0 0]\n",
" [ 0 43 489 0 0 0]\n",
" [ 0 0 0 481 10 5]\n",
" [ 0 0 0 20 354 46]\n",
" [ 0 0 0 32 7 432]]\n",
"\n",
"\n",
"The accuracy score on test by Random Forest:0.9277231082456736\n",
"\n",
"The f1-score on test by Random Forest:0.927441426614101\n"
]
}
],
"source": [
"clf = RandomForestClassifier(n_estimators= clf.best_params_['n_estimators'],max_depth=clf.best_params_['max_depth'])\n",
"clf.fit(train, y_train)\n",
"y_pred=clf.predict(test)\n",
"print(confusion_matrix(y_test,y_pred))\n",
"print()\n",
"print()\n",
"print('The accuracy score on test by Random Forest:{}'.format(accuracy_score(y_test,y_pred)))\n",
"print()\n",
"print('The f1-score on test by Random Forest:{}'.format(f1_score(y_test,y_pred,average='weighted')))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## End Notes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- In the studies conducted SVM achieved the highest accuracy of 96.57% and f-1 score of 96.56\n",
"- Contrastingly KNN performed the worst with an accuracy of 90.66% and f-1 score of 90.6\n",
"- Random Forests generally needs larger number of instances to work its randomization concept well and generalize to the novel data. In addition, in one way or another, random forests works with combination of some kind of soft linear boundaries at the decision surface thus I believe that this is still below the success of max margin SVM non linear boundaries.Thus if we have small amount of data compared to possible variations of the instances than SVM is better choice. That is the case for Computer Vision generally."
]
}
],
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment