{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Iris Feature Selection" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": true } }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "from sklearn_genetic import GAFeatureSelectionCV\n", "from sklearn_genetic.plots import plot_fitness_evolution\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.svm import SVC\n", "from sklearn.datasets import load_iris\n", "from sklearn.metrics import accuracy_score\n", "import numpy as np\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import the data and split it in train and test sets\n", "Random noise is added to simulate useless variables\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(150, 14)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = load_iris()\n", "X, y = data[\"data\"], data[\"target\"]\n", "\n", "noise = np.random.uniform(0, 10, size=(X.shape[0], 10))\n", "\n", "X = np.hstack((X, noise))\n", "X.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Split the training and test data" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define the GAFeatureSelectionCV options\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "clf = SVC(gamma='auto')\n", "\n", "evolved_estimator = GAFeatureSelectionCV(\n", " estimator=clf,\n", " cv=3,\n", " scoring=\"accuracy\",\n", " population_size=30,\n", " generations=20,\n", " n_jobs=-1,\n", " verbose=True,\n", " keep_top_k=2,\n", " elitism=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fit the model and see some results" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gen\tnevals\tfitness \tfitness_std\tfitness_max\tfitness_min\n", "0 \t30 \t0.550444\t0.153446 \t0.86 \t0.293333 \n", "1 \t60 \t0.636889\t0.119365 \t0.86 \t0.473333 \n", "2 \t60 \t0.698667\t0.11242 \t0.873333 \t0.46 \n", "3 \t60 \t0.707556\t0.103876 \t0.873333 \t0.486667 \n", "4 \t60 \t0.723556\t0.144086 \t0.9 \t0.366667 \n", "5 \t60 \t0.745556\t0.152637 \t0.913333 \t0.366667 \n", "6 \t60 \t0.792889\t0.108402 \t0.873333 \t0.513333 \n", "7 \t60 \t0.749111\t0.16456 \t0.873333 \t0.413333 \n", "8 \t60 \t0.728889\t0.179747 \t0.966667 \t0.373333 \n", "9 \t60 \t0.728222\t0.158994 \t0.893333 \t0.42 \n", "10 \t60 \t0.785556\t0.134892 \t0.94 \t0.48 \n", "11 \t60 \t0.733556\t0.175942 \t0.94 \t0.44 \n", "12 \t60 \t0.784889\t0.150554 \t0.94 \t0.413333 \n", "13 \t60 \t0.818444\t0.148101 \t0.966667 \t0.413333 \n", "14 \t60 \t0.871778\t0.116272 \t0.966667 \t0.453333 \n", "15 \t60 \t0.801556\t0.184163 \t0.966667 \t0.386667 \n", "16 \t60 \t0.810222\t0.163994 \t0.966667 \t0.393333 \n", "17 \t60 \t0.814222\t0.148949 \t0.966667 \t0.44 \n", "18 \t60 \t0.72 \t0.182525 \t0.966667 \t0.366667 \n", "19 \t60 \t0.783556\t0.156269 \t0.966667 \t0.42 \n", "20 \t60 \t0.803778\t0.146694 \t0.966667 \t0.486667 \n" ] } ], "source": [ "evolved_estimator.fit(X, y)\n", "features = evolved_estimator.support_\n", "\n", "# Predict only with the subset of selected features\n", "y_predict_ga = evolved_estimator.predict(X_test)\n", "accuracy = accuracy_score(y_test, y_predict_ga)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[False False True True False False False False False False False False\n", " False False]\n", "accuracy score: 0.96\n" ] } ], "source": [ "#Best features found\n", "print(evolved_estimator.support_)\n", "print(\"accuracy score: \", \"{:.2f}\".format(accuracy))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot = plot_fitness_evolution(evolved_estimator, metric=\"fitness\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[5.1, 2.4],\n", " [4. , 1. ],\n", " [1.4, 0.2],\n", " [6.3, 1.8],\n", " [1.5, 0.2],\n", " [6. , 2.5],\n", " [1.3, 0.3],\n", " [4.7, 1.5],\n", " [4.8, 1.4],\n", " [4. , 1.3],\n", " [5.6, 1.4],\n", " [4.5, 1.5],\n", " [4.7, 1.2],\n", " [4.6, 1.5],\n", " [4.7, 1.4],\n", " [1.4, 0.1],\n", " [4.5, 1.5],\n", " [4.4, 1.2],\n", " [1.4, 0.3],\n", " [1.3, 0.4],\n", " [4.9, 2. ],\n", " [4.5, 1.5],\n", " [1.9, 0.2],\n", " [1.4, 0.2],\n", " [4.8, 1.8],\n", " [1. , 0.2],\n", " [1.9, 0.4],\n", " [4.3, 1.3],\n", " [3.3, 1. ],\n", " [1.6, 0.4],\n", " [5.5, 1.8],\n", " [4.5, 1.5],\n", " [1.5, 0.2],\n", " [4.9, 1.8],\n", " [5.6, 2.2],\n", " [3.9, 1.4],\n", " [1.7, 0.3],\n", " [5.1, 1.6],\n", " [4.2, 1.5],\n", " [4. , 1.2],\n", " [5.5, 2.1],\n", " [1.3, 0.2],\n", " [5.1, 2.3],\n", " [1.6, 0.6],\n", " [1.5, 0.2],\n", " [3.5, 1. ],\n", " [5.5, 1.8],\n", " [5.7, 2.5],\n", " [5. , 1.5],\n", " [5.8, 1.8]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Convert the original input to the selected input\n", "evolved_estimator.transform(X_test)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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": 1 }