{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Feature Selection Demo using Scikit -- PIMA Indians Diabetes Dataset\n", "\n", "In this tutorial, I will use the \"PIMA Indians Diabetes\" dataset, where all patients are females at least 21 years old of Pima Indian heritage.\n", "\n", "The classification task is to predict whether an individual has diabetes from the following features:\n", "1. Pregnancies: Number of times pregnant \n", "2. Glucose: Plasma glucose concentration a 2 hours in an oral glucose tolerance test \n", "3. BloodPressure: Diastolic blood pressure (mm Hg) \n", "4. SkinThickness: Triceps skin fold thickness (mm) \n", "5. Insulin: 2-Hour serum insulin (mu U/ml) \n", "6. BMI: Body mass index (weight in kg/(height in m)^2) \n", "7. DiabetesPedigreeFunction: Diabetes pedigree function \n", "8. Age: (years) \n", "9. Outcome: Class variable (0 or 1) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Utility Functions & Imports" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "%matplotlib inline\n", "%load_ext autoreload\n", "%autoreload 2\n", "#See bmes.ahmet/README.TXT for setting up BMESAHMETDIR environment variable.\n", "import sys,os; sys.path.append(os.environ['BMESAHMETDIR']); import bmes\n", "\n", "def printfileheadtruncated(file, N):\n", " from itertools import islice\n", " with open(file) as f:\n", " for line in islice(f, 3):\n", " if len(line)>80: print(line[0:80]+' ...')\n", " else: print(line.rstrip())\n", "\n", "\n", "#perform four-fold cross-validation of the method\n", "def crossvalidate(classifier,X,T):\n", " from sklearn.model_selection import cross_val_score\n", " scores = cross_val_score(classifier, X, T, cv=4)\n", " print('--- 4-fold cross-validation accuracy: %%%.1f (+/-%.1f)' % (scores.mean()*100,scores.std()*100))\n", "\n", "\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis\n", "#classifier = DecisionTreeClassifier();\n", "\n", "from sklearn.svm import SVC\n", "classifier = SVC(kernel='linear')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Download data file(s)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- First 5 lines of data file:\n", "6,148,72,35,0,33.6,0.627,50,1\n", "1,85,66,29,0,26.6,0.351,31,0\n", "8,183,64,0,0,23.3,0.672,32,1\n" ] } ], "source": [ "datafile = bmes.datadir() + '/pima-indians-diabetes.data';\n", "bmes.downloadurl('https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv',datafile);\n", "print('--- First 5 lines of data file:')\n", "printfileheadtruncated( datafile, 5 )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load data" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- First 5 rows of data:\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
numpregnanciesglucosediastolictricepskininsulinbmipedigreeagehasdiabetes
061487235033.60.627501
11856629026.60.351310
28183640023.30.672321
318966239428.10.167210
40137403516843.12.288331
\n", "
" ], "text/plain": [ " numpregnancies glucose diastolic tricepskin insulin bmi pedigree \\\n", "0 6 148 72 35 0 33.6 0.627 \n", "1 1 85 66 29 0 26.6 0.351 \n", "2 8 183 64 0 0 23.3 0.672 \n", "3 1 89 66 23 94 28.1 0.167 \n", "4 0 137 40 35 168 43.1 2.288 \n", "\n", " age hasdiabetes \n", "0 50 1 \n", "1 31 0 \n", "2 32 1 \n", "3 21 0 \n", "4 33 1 " ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas, numpy\n", "names = ['numpregnancies', 'glucose', 'diastolic', 'tricepskin', 'insulin', 'bmi', 'pedigree', 'age', 'hasdiabetes'];\n", "data = pandas.read_csv(datafile, names=names);\n", "print('--- First 5 rows of data:')\n", "data.head(5)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "X = data.values[:,:-1];\n", "T = data.values[:,-1];\n", "names=names[:-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Perform Classification using all features" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- 4-fold cross-validation accuracy: %76.3 (+/-1.7)\n" ] } ], "source": [ "crossvalidate(classifier, X, T)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Select Features using Filters\n", "\n", "For the list of available filters, see:\n", "http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- Scores of the features:\n", "insulin : 2175.6\n", "glucose : 1411.9\n", "age : 181.3\n", "bmi : 127.7\n", "numpregnancies: 111.5\n", "tricepskin : 53.1\n", "diastolic : 17.6\n", "pedigree : 5.4\n" ] } ], "source": [ "from sklearn.feature_selection import (SelectKBest, chi2)\n", "\n", "# Select top 3 features.\n", "selector = SelectKBest(chi2, k=3)\n", "selector.fit(X, T)\n", "\n", "print('--- Scores of the features:')\n", "sortedscores,sortednames = zip(*sorted(zip(selector.scores_,names), reverse=True))\n", "for name, score in zip(sortednames,sortedscores):\n", " print('{:<14}'.format(name) + ': ' + str(round(score,1)));\n" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- Data with only the top k features:\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
glucoseinsulinage
0148.00.050.0
185.00.031.0
2183.00.032.0
389.094.021.0
4137.0168.033.0
\n", "
" ], "text/plain": [ " glucose insulin age\n", "0 148.0 0.0 50.0\n", "1 85.0 0.0 31.0\n", "2 183.0 0.0 32.0\n", "3 89.0 94.0 21.0\n", "4 137.0 168.0 33.0" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print('--- Data with only the top k features:')\n", "subX = selector.transform(X)\n", "subnames = selector.transform([names])[0]\n", "pandas.DataFrame(data=subX, columns=subnames).head(5)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- 4-fold cross-validation accuracy: %73.7 (+/-3.3)\n" ] } ], "source": [ "# Perform classification with the selected features:\n", "crossvalidate(classifier, subX, T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Select Features using Recursive Elimination" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- Selected Features (5):\n" ] }, { "data": { "text/plain": [ "['numpregnancies', 'glucose', 'diastolic', 'bmi', 'pedigree']" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.feature_selection import (RFECV)\n", "\n", "# RFECV using the SVM classifier would take forever; let's use a faster method.\n", "#quickclassifier = DecisionTreeClassifier()\n", "from sklearn.linear_model import LogisticRegression\n", "quickclassifier = LogisticRegression(solver='liblinear')\n", "selector = RFECV(quickclassifier,cv=4,scoring='accuracy')\n", "\n", "selector.fit(X, T)\n", "\n", "print('--- Selected Features (%d):' % (selector.n_features_))\n", "[names[i] for i in range(len(names)) if selector.get_support()[i]]" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from pylab import *\n", "xlabel(\"Number of features removed\")\n", "ylabel(\"Cross validation accuracy\")\n", "plot(range(0, len(selector.grid_scores_)), selector.grid_scores_)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- 4-fold cross-validation accuracy: %76.7 (+/-1.3)\n" ] } ], "source": [ "crossvalidate(classifier, selector.transform(X), T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sequential Forward Selection" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- Selected Features (8):\n", "(0, 1, 2, 3, 4, 5, 6, 7)\n" ] }, { "data": { "text/plain": [ "['numpregnancies',\n", " 'glucose',\n", " 'diastolic',\n", " 'tricepskin',\n", " 'insulin',\n", " 'bmi',\n", " 'pedigree',\n", " 'age']" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# mlxtend.feature_selection is an alternative library that can do forward/backward/floating selection.\n", "bmes.pipinstall('mlxtend')\n", "\n", "from mlxtend.feature_selection import SequentialFeatureSelector as SFS\n", "from sklearn.linear_model import LinearRegression\n", "# Sequential Forward Selection(sfs)\n", "\n", "from sklearn.feature_selection import (RFECV)\n", "\n", "#quickclassifier = DecisionTreeClassifier()\n", "from sklearn.linear_model import LogisticRegression\n", "quickclassifier = LogisticRegression(solver='liblinear')\n", "# I am using k_features to select all the way to the end, so I can manually visualize/decide how many features works best.\n", "# You may want to avoid that if it takes too much time.\n", "selector = SFS(quickclassifier,cv=4,scoring='accuracy',k_features=X.shape[1],forward=True)\n", "\n", "selector.fit(X, T)\n", "\n", "#features shown here are NOT ordered by their performance.\n", "print('--- Selected Features (%d):' % (len(selector.k_feature_idx_)))\n", "print(selector.k_feature_idx_)\n", "[names[i] for i in selector.k_feature_idx_]" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "# get each added attribute and the resulting score\n", "selectnames=[];\n", "selectscores=[];\n", "for x in selector.get_metric_dict().values():\n", " newnames=set([names[i] for i in x['feature_idx']]).difference(selectnames);\n", " selectnames.append(','.join(newnames));\n", " names = names + list(newnames);\n", " selectscores.append(x['avg_score'])" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "xlabel(\"Added Feature\")\n", "ylabel(\"Cross validation accuracy\")\n", "plot(range(1, len(selectscores)+1), selectscores)\n", "import matplotlib.pyplot as plt\n", "plt.xticks(range(1, len(selectscores)+1),selectnames,rotation=60);\n", "\n", "#also see: mlxtend.plotting.plot_sequential_feature_selection() for extra plotting functionalities (stdev, etc)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" } }, "nbformat": 4, "nbformat_minor": 2 }