From 5b031ca2a3fcd189843792603f7bea6358b49c03 Mon Sep 17 00:00:00 2001
From: AarnaSinghal <106300517+AarnaSinghal@users.noreply.github.com>
Date: Sat, 17 Dec 2022 21:21:33 +0530
Subject: [PATCH] Created using Colaboratory
---
ai_ml_mini_project.ipynb | 476 +++++++++++++++++++++++++++++++++++++++
1 file changed, 476 insertions(+)
create mode 100644 ai_ml_mini_project.ipynb
diff --git a/ai_ml_mini_project.ipynb b/ai_ml_mini_project.ipynb
new file mode 100644
index 0000000..eba2d33
--- /dev/null
+++ b/ai_ml_mini_project.ipynb
@@ -0,0 +1,476 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "authorship_tag": "ABX9TyOsIBqPY574Irau9j4aBh4S",
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "id": "LPyjxY3droJI"
+ },
+ "outputs": [],
+ "source": [
+ "import pandas\n",
+ "import matplotlib.pyplot as plt\n",
+ "from sklearn import model_selection\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"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "url = \"https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv\"\n"
+ ],
+ "metadata": {
+ "id": "jOmqxNqjspKO"
+ },
+ "execution_count": 2,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']"
+ ],
+ "metadata": {
+ "id": "zOxW_efmswiU"
+ },
+ "execution_count": 3,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "dataframe = pandas.read_csv(url, names=names)"
+ ],
+ "metadata": {
+ "id": "exUy6Sf7swrc"
+ },
+ "execution_count": 4,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "array = dataframe.values\n",
+ "X = array[:,0:8]\n",
+ "Y = array[:,8]"
+ ],
+ "metadata": {
+ "id": "oYI0GBjms3-p"
+ },
+ "execution_count": 5,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# prepare configuration for cross validation test harness"
+ ],
+ "metadata": {
+ "id": "YUe8Ku8Gs8PK"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "seed = 7"
+ ],
+ "metadata": {
+ "id": "E7AOW75us_W2"
+ },
+ "execution_count": 6,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# prepare models"
+ ],
+ "metadata": {
+ "id": "dthjdw7ntIez"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "models = []"
+ ],
+ "metadata": {
+ "id": "ANUmx7iKtJZ6"
+ },
+ "execution_count": 7,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "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()))"
+ ],
+ "metadata": {
+ "id": "_e3R8d6ttNC-"
+ },
+ "execution_count": 8,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# evaluate each model in turn"
+ ],
+ "metadata": {
+ "id": "idDIGbGKtU7J"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "results = []"
+ ],
+ "metadata": {
+ "id": "8ll37pintVuW"
+ },
+ "execution_count": 9,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "names = []"
+ ],
+ "metadata": {
+ "id": "n9oEMfaxtZsj"
+ },
+ "execution_count": 10,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "scoring = 'accuracy'"
+ ],
+ "metadata": {
+ "id": "D4r3MD06tce9"
+ },
+ "execution_count": 11,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "for name, model in models:\n",
+ " kfold = model_selection.KFold(n_splits=10, random_state=None)\n",
+ " cv_results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)\n",
+ " results.append(cv_results)\n",
+ " names.append(name)\n",
+ " msg = \"%s: %f (%f)\" % (name, cv_results.mean(), cv_results.std())\n",
+ " print(msg)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "qulmMGoAtxEY",
+ "outputId": "01537c56-ef59-4252-f848-d0c7409c4134"
+ },
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "LR: 0.773428 (0.053375)\n",
+ "LDA: 0.773462 (0.051592)\n",
+ "KNN: 0.726555 (0.061821)\n",
+ "CART: 0.693917 (0.059537)\n",
+ "NB: 0.755178 (0.042766)\n",
+ "SVM: 0.760424 (0.052931)\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "for name, model in models:\n",
+ " kfold = model_selection.KFold(n_splits=10, random_state=None)\n",
+ " cv_results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)\n",
+ " results.append(cv_results)\n",
+ " names.append(name)\n",
+ " msg = \"%s: %f (%f)\" % (name, cv_results.mean(), cv_results.std())\n",
+ " print(msg)"
+ ],
+ "metadata": {
+ "id": "xeC9IFa9uRPY",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "4d5f84c5-aea6-4745-c6e9-c62d4dd24c84"
+ },
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n",
+ "/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "LR: 0.773428 (0.053375)\n",
+ "LDA: 0.773462 (0.051592)\n",
+ "KNN: 0.726555 (0.061821)\n",
+ "CART: 0.691353 (0.062828)\n",
+ "NB: 0.755178 (0.042766)\n",
+ "SVM: 0.760424 (0.052931)\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# boxplot algorithm comparison"
+ ],
+ "metadata": {
+ "id": "WEQhVHYaua3E"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "fig = plt.figure()\n",
+ "fig.suptitle('Algorithm Comparison')\n",
+ "ax = fig.add_subplot(111)\n",
+ "plt.boxplot(results)\n",
+ "ax.set_xticklabels(names)\n",
+ "plt.show()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 294
+ },
+ "id": "A60Gzm41ubwL",
+ "outputId": "e635078a-590c-4346-b1f4-d4a8a03777bd"
+ },
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file