diff --git a/11___House_price_prediction_using_Linear_Regression.ipynb b/11___House_price_prediction_using_Linear_Regression.ipynb new file mode 100644 index 0000000..31acfce --- /dev/null +++ b/11___House_price_prediction_using_Linear_Regression.ipynb @@ -0,0 +1,1508 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I1VRs4tZkbvW" + }, + "source": [ + "# **Day-11 | House price prediction using Linear Regression-SingleVariable**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SAFLqwkKk8rK" + }, + "source": [ + "### *Import Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "EgF2lvr_jzVL" + }, + "source": [ + "import pandas as pd\n", + "from sklearn.linear_model import LinearRegression\n", + "import matplotlib.pyplot as plt" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XWe_7j6UjxRj" + }, + "source": [ + "### *Load Dataset from Local Directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vKrHCJk_jwfJ", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "715c67be-afd2-4b0d-c041-a7d3888a5095" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset.csv to dataset.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6gXowmSom462" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6JLDHSdym6wP" + }, + "source": [ + "dataset = pd.read_csv('dataset.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-DdkIy1ZnDfA" + }, + "source": [ + "### *Load Summarize*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OlElQViRnGFp", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "d47549da-8c94-4e4b-ef5c-d76fae7a04d8" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(1460, 2)\n", + " area price\n", + "0 8450 208500\n", + "1 9600 181500\n", + "2 11250 223500\n", + "3 9550 140000\n", + "4 14260 250000\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p5yk_BN4nMtD" + }, + "source": [ + "### *Visualize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "a8Mi5nkFnOTQ", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 466 + }, + "outputId": "cb410515-c01a-4870-f356-77eef2cedaa8" + }, + "source": [ + "plt.xlabel('Area')\n", + "plt.ylabel('Price')\n", + "plt.scatter(dataset.area,dataset.price,color='red',marker='*')" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 5 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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6mc2qxl+v/894OenlqepyccHGDZMlVeoaybglS7ETERE5OY4+8+JPG72H2A9A7AhERHAmTNqtKrm4swLFwImExAWBsyerfYxB4uIiDyAvd/fDKqcyCODKgD47jsgJQU4erTuNtHRwN69QEyM2q6vHIPZXJ2DpQVhREREboolFchxjh5VD6PR9nGjEfjww+qACmi4HENTFmImIiJyYwyqyJoIkJmpnjUvvaSey8psn1NWpvKtatLKMQQHW+8PDlavYRmEEREReTiWVCBr6emqoOe0aeqWHqACI03btsCFC2qEqagI6N5drQ+4bh2QmFj7enUtzrx/v+32REREHopBFVnTZue99pp15XTNhQvquaoKeP114JprgNxcoEsX29ezXJz5t78FJk1S23UFYURERB6KQVVLV3OWnhZU2QqoLPn7A3ff3XBO1MiRQP/+wLhxwIMPqn233qr2ExEReREGVS1dcTEwf771LD3AetHkmm64AZgxA2jduv5rm80qGb2gAHjuueqA7eBBlVOVmcmyCkRE5DVYUsGJ3LakQm6uGknKyrJOUK/L888DTzwBbNoEDB9edzuWVSAiIi/glJIK5eXlyMnJQWVl5ZVchlytrll6tmb0AdWzARuqjs6yCkRE1II06fbf5cuX8ac//QnvvPMOAODEiRPo1q0b/vSnP6FTp0544oknHNpJcgJbs/S0YHnUKGDAAOCjj4D//hc4d07tX7lSjUQZDHXfxtMCtogI6+trZRX8/Zvn9yEiInKyJo1UzZ07F1999RUyMzMRGBio709KSsJHH33ksM6RE1nO0jt5UgVSAHDHHcC77wJLlqiAylJxMTBvHvDkkyovq2ZQpqmvrAIREZGXaFJQ9cknn+Dll1/GjTfeCIPBoO/v06cPvv32W4d1jpxo5Ejggw+Ajz8GrroKWLtWbc+ZA7z3HjBxohp1sqVbN+DLL+u+jVdXwLZuncN/DSIiIldp0u2/H3/8ER06dKi1v7i42CrIIg+SmGhdN8pgAO65Ry2CnJKiks7r8sMPwJtvApGRtm8BWpZVMBhUwLZiRd21rYiIiDxQk0aqBg0ahA0bNujbWiD1xhtvICEhwTE9I/ewe7cKqK6+uu42paXA3/5W9y3AxEQVoGkBtxaweUvxT1tL+xARUYvTpJGq5557DiNGjMCxY8dQWVmJl156CceOHcOePXuw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QAYPHix79+51dZe8wtixY6Vjx44SEBAgnTp1krFjx8rJkyf14yUlJTJt2jRp06aNBAcHy5133innzp2zusaZM2dkxIgREhQUJO3atZNZs2ZJRUWFVZvt27fLgAEDJCAgQLp16yZvv/12rb7wPa62fft2AVDrMWHCBBFR0+TnzZsnkZGRYjQa5bbbbpOcnByra1y4cEHGjRsnrVu3ltDQUHnggQekqKjIqs1XX30lN954oxiNRunUqZM8//zztfqyatUqufrqqyUgIED69OkjGzZssDpuT1+8UX3v0eXLl2XYsGHSvn178ff3ly5dushDDz1U6x8JfI+al633B4DV5487fcbZ0xd3YxARcfboGBEREZG3YU4VERERkQMwqCIiIiJyAAZVRERERA7AoIqIiIjIARhUERERETkAgyoiIiIiB2BQRUREROQADKqIiIiIHIBBFREREZEDMKgiIrIhKysLvr6+SElJcXVXiMhDcJkaIiIbHnzwQbRu3RpvvvkmcnJyEB0dbbOdiKCqqgp+fn5O7iERuRuOVBER1XDp0iV89NFHmDp1KlJSUrB8+XL9WGZmJgwGAzZt2oSBAwfCaDRi165dMJvNSEtLQ1xcHIKCgtC/f3+sWbNGP6+qqgqTJk3Sj/fs2RMvvfSSC347Imou/KcVEVENq1atQq9evdCzZ0/88Y9/xPTp0zF37lwYDAa9zRNPPIFFixahW7duaNOmDdLS0vD+++/j1VdfRY8ePbBz50788Y9/RPv27XHLLbfAbDajc+fOWL16Ndq2bYs9e/Zg8uTJ6NixI+666y4X/rZE5Ci8/UdEVENiYiLuuusuPProo6isrETHjh2xevVq3HrrrcjMzMTQoUPxySefYNSoUQCAsrIyREREYOvWrUhISNCv8+CDD+Ly5cv48MMPbb7OI488gry8PKsRLSLyXBypIiKykJOTg/3792Pt2rUAAD8/P4wdOxZvvvkmbr31Vr3doEGD9J9PnjyJy5cv4ze/+Y3VtcrLy3Hdddfp20uXLsVbb72F3NxclJSUoLy8HAMGDGjW34eInIdBFRGRhTfffBOVlZVWiekiAqPRiJdfflnf16pVK/3nS5cuAQA2bNiATp06WV3PaDQCAFauXInHHnsM//jHP5CQkICQkBC88MIL2LdvX3P+OkTkRAyqiIh+UVlZiXfffRf/+Mc/MGzYMKtjo0ePxooVK9CrV69a5/Xu3RtGoxG5ubm45ZZbbF579+7dGDJkCKZNm6bv+/bbbx37CxCRSzGoIiL6xfr16/Hzzz9j0qRJCAsLszo2ZswYvPnmm3jhhRdqnRcSEoLHHnsMM2bMgNlsxo033ojCwkLs3r0boaGhmDBhAnr06IF3330XmzdvRlxcHN577z188cUXiIuLc9avR0TNjCUViIh+8eabbyIpKalWQAWooOrAgQP4+uuvbZ77t7/9DfPmzUNaWhquueYaDB8+HBs2bNCDpocffhi/+93vMHbsWMTHx+PChQtWo1ZE5Pk4+4+IiIjIAThSRUREROQADKqIiIiIHIBBFREREZEDMKgiIiIicgAGVUREREQOwKCKiIiIyAEYVBERERE5AIMqIiIiIgdgUEVERETkAAyqiIiIiByAQRURERGRA/x/bOrYdVKUcBIAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JRyfB6prpJDP" + }, + "source": [ + "### *Segregate Dataset into Input X & Output Y*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "x9dQcTohpK1X", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 424 + }, + "outputId": "f42cd163-c1ad-4279-da9b-845cd0644611" + }, + "source": [ + "X = dataset.drop('price',axis='columns')\n", + "X" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " area\n", + "0 8450\n", + "1 9600\n", + "2 11250\n", + "3 9550\n", + "4 14260\n", + "... ...\n", + "1455 7917\n", + "1456 13175\n", + "1457 9042\n", + "1458 9717\n", + "1459 9937\n", + "\n", + "[1460 rows x 1 columns]" + ], + "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", + "
area
08450
19600
211250
39550
414260
......
14557917
145613175
14579042
14589717
14599937
\n", + "

1460 rows × 1 columns

\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" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "X", + "summary": "{\n \"name\": \"X\",\n \"rows\": 1460,\n \"fields\": [\n {\n \"column\": \"area\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 9981,\n \"min\": 1300,\n \"max\": 215245,\n \"num_unique_values\": 1073,\n \"samples\": [\n 10186,\n 8163,\n 8854\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SqxVaBO0pf1W", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 458 + }, + "outputId": "dfdcb6a7-44fb-4805-bb42-0085a18e0e45" + }, + "source": [ + "Y = dataset.price\n", + "Y" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 208500\n", + "1 181500\n", + "2 223500\n", + "3 140000\n", + "4 250000\n", + " ... \n", + "1455 175000\n", + "1456 210000\n", + "1457 266500\n", + "1458 142125\n", + "1459 147500\n", + "Name: price, Length: 1460, dtype: int64" + ], + "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", + "
price
0208500
1181500
2223500
3140000
4250000
......
1455175000
1456210000
1457266500
1458142125
1459147500
\n", + "

1460 rows × 1 columns

\n", + "

" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KsDoGjjbpmjk" + }, + "source": [ + "### *Training Dataset using Linear Regression*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nKmEySI1poV_", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "e8b7d151-62fe-414c-b8c4-381bad76b2a6" + }, + "source": [ + "model = LinearRegression()\n", + "model.fit(X,Y)" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "LinearRegression()" + ], + "text/html": [ + "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "n-UeFqpGpw9p" + }, + "source": [ + "### *Predicted Price for Land sq.Feet of custom values*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Ollo3wTcpyKQ", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "365ec852-2686-4b53-85ec-56783730f77f" + }, + "source": [ + "x=2400\n", + "LandAreainSqFt=[[x]]\n", + "PredictedmodelResult = model.predict(LandAreainSqFt)\n", + "print(PredictedmodelResult)" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[163876.08458098]\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py:2739: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", + " warnings.warn(\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1PbTSCtSp3lC" + }, + "source": [ + "### Let's check is our model is Right ?\n", + "### Theory Calculation\n", + "### Y = m * X + b (m is coefficient and b is intercept)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "T5eVVDPvp8Hc" + }, + "source": [ + "*Coefficient - m*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1SvYtiI2p4ZB", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "d9726623-f842-4474-e680-d61ca7cefa09" + }, + "source": [ + "m=model.coef_\n", + "print(m)" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2.09997195]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nSXLgArvqBu2" + }, + "source": [ + "*Intercept - b*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "mxyroJ6uqCet", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "f8bfef10-61d7-456b-e860-0eb4bf5a047a" + }, + "source": [ + "b=model.intercept_\n", + "print(b)" + ], + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "158836.1518968766\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VCLG6YIOqEaX" + }, + "source": [ + "### Y=mx+b\n", + "*x is Independant variable - Input - area*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "kRHG8tUFqO1i", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "83287893-80dc-4c5c-d20b-595ac364519b" + }, + "source": [ + "y = m*x + b\n", + "print(\"The Price of {0} Square feet Land is: {1}\".format(x,y[0]))" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "The Price of 2400 Square feet Land is: 163876.08458097503\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/12___Exam_mark_prediction_using_Linear_Regression.ipynb b/12___Exam_mark_prediction_using_Linear_Regression.ipynb new file mode 100644 index 0000000..df8a32d --- /dev/null +++ b/12___Exam_mark_prediction_using_Linear_Regression.ipynb @@ -0,0 +1,1174 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I1VRs4tZkbvW" + }, + "source": [ + "# **Day-12 | Exam mark prediction using Linear Regression-multipleVariable**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SAFLqwkKk8rK" + }, + "source": [ + "### *Import Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "EgF2lvr_jzVL" + }, + "source": [ + "import pandas as pd\n", + "from sklearn.linear_model import LinearRegression" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XWe_7j6UjxRj" + }, + "source": [ + "### *Load Dataset from Local Directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vKrHCJk_jwfJ", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "110e0b18-ab68-4ac6-9e32-733af1698dcc" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving data.csv to data.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6gXowmSom462" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6JLDHSdym6wP" + }, + "source": [ + "dataset = pd.read_csv('data.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-DdkIy1ZnDfA" + }, + "source": [ + "### *Load Summarize*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OlElQViRnGFp", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "cfb430ee-c9d1-4ae7-b909-7eaf0fb9f3c5" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(201, 4)\n", + " hours age internet marks\n", + "0 6.83 15 1 78.50\n", + "1 6.56 16 0 76.74\n", + "2 NaN 17 1 78.68\n", + "3 5.67 18 0 71.82\n", + "4 8.67 19 1 84.19\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-Zb9xIa-kOx5" + }, + "source": [ + "### *Finding & Removing NA values from our Features X*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "UwyBQ5nZkTpf", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "fbdf10d5-f2b7-4942-a800-d47f2c78eb8a" + }, + "source": [ + "dataset.columns[dataset.isna().any()]" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index(['hours'], dtype='object')" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8LxSw9aHlJTC" + }, + "source": [ + "dataset.hours = dataset.hours.fillna(dataset.hours.mean())" + ], + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JRyfB6prpJDP" + }, + "source": [ + "### *Segregate Dataset into Input X & Output Y*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "x9dQcTohpK1X", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "64f7c047-e8c2-4395-d502-e16b8526f1da" + }, + "source": [ + "X = dataset.iloc[:, :-1].values\n", + "print(X.shape)\n", + "X" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(201, 3)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 6.83 , 15. , 1. ],\n", + " [ 6.56 , 16. , 0. ],\n", + " [ 6.98142857, 17. , 1. ],\n", + " [ 5.67 , 18. , 0. ],\n", + " [ 8.67 , 19. , 1. ],\n", + " [ 7.55 , 20. , 0. ],\n", + " [ 6.67 , 15. , 0. ],\n", + " [ 8.99 , 16. , 0. ],\n", + " [ 5.19 , 17. , 1. ],\n", + " [ 6.75 , 18. , 0. ],\n", + " [ 6.59 , 19. , 0. ],\n", + " [ 8.56 , 20. , 1. ],\n", + " [ 7.75 , 15. , 0. ],\n", + " [ 7.9 , 16. , 1. ],\n", + " [ 8.19 , 17. , 0. ],\n", + " [ 6.55 , 18. , 1. ],\n", + " [ 6.36 , 19. , 0. ],\n", + " [ 8.44 , 20. , 1. ],\n", + " [ 8.41 , 15. , 0. ],\n", + " [ 7.67 , 16. , 1. ],\n", + " [ 7.42 , 17. , 1. ],\n", + " [ 8.16 , 18. , 1. ],\n", + " [ 5.05 , 19. , 1. ],\n", + " [ 5.85 , 20. , 1. ],\n", + " [ 5.45 , 15. , 0. ],\n", + " [ 7.96 , 16. , 0. ],\n", + " [ 6.51 , 17. , 0. ],\n", + " [ 6.73 , 18. , 0. ],\n", + " [ 5.94 , 19. , 1. ],\n", + " [ 7.48 , 20. , 0. ],\n", + " [ 8.13 , 15. , 1. ],\n", + " [ 6.98142857, 16. , 1. ],\n", + " [ 5.4 , 17. , 1. ],\n", + " [ 8.78 , 18. , 0. ],\n", + " [ 8.72 , 19. , 1. ],\n", + " [ 7.1 , 20. , 0. ],\n", + " [ 7.86 , 15. , 1. ],\n", + " [ 7.19 , 16. , 0. ],\n", + " [ 5.62 , 17. , 1. ],\n", + " [ 7.88 , 18. , 0. ],\n", + " [ 5.28 , 19. , 1. ],\n", + " [ 8.92 , 20. , 1. ],\n", + " [ 5.46 , 15. , 0. ],\n", + " [ 8.3 , 16. , 1. ],\n", + " [ 8.09 , 17. , 0. ],\n", + " [ 6.18 , 18. , 1. ],\n", + " [ 7.01 , 19. , 1. ],\n", + " [ 5.01 , 20. , 0. ],\n", + " [ 5.54 , 15. , 1. ],\n", + " [ 5.09 , 16. , 1. ],\n", + " [ 5.09 , 17. , 0. ],\n", + " [ 7.31 , 18. , 1. ],\n", + " [ 8.71 , 19. , 0. ],\n", + " [ 5.52 , 20. , 1. ],\n", + " [ 8.76 , 15. , 0. ],\n", + " [ 8.69 , 16. , 1. ],\n", + " [ 5.75 , 17. , 1. ],\n", + " [ 8.93 , 18. , 1. ],\n", + " [ 5.39 , 19. , 1. ],\n", + " [ 5.65 , 20. , 0. ],\n", + " [ 5.49 , 15. , 1. ],\n", + " [ 7.26 , 16. , 1. ],\n", + " [ 6.35 , 17. , 0. ],\n", + " [ 7.72 , 18. , 1. ],\n", + " [ 8.88 , 19. , 0. ],\n", + " [ 5.45 , 20. , 1. ],\n", + " [ 7.86 , 15. , 1. ],\n", + " [ 8.26 , 16. , 0. ],\n", + " [ 5.07 , 17. , 1. ],\n", + " [ 8.25 , 18. , 0. ],\n", + " [ 5.37 , 19. , 1. ],\n", + " [ 5.11 , 20. , 1. ],\n", + " [ 6.35 , 15. , 0. ],\n", + " [ 7.41 , 16. , 1. ],\n", + " [ 7.31 , 17. , 0. ],\n", + " [ 6.04 , 18. , 1. ],\n", + " [ 5.11 , 19. , 1. ],\n", + " [ 6.56 , 20. , 0. ],\n", + " [ 5.09 , 15. , 1. ],\n", + " [ 5.88 , 16. , 0. ],\n", + " [ 8.34 , 17. , 1. ],\n", + " [ 7.94 , 18. , 0. ],\n", + " [ 6.66 , 19. , 1. ],\n", + " [ 6.01 , 20. , 1. ],\n", + " [ 6.88 , 15. , 0. ],\n", + " [ 5.63 , 16. , 1. ],\n", + " [ 5.88 , 17. , 0. ],\n", + " [ 8.05 , 18. , 1. ],\n", + " [ 5.33 , 19. , 0. ],\n", + " [ 8.79 , 20. , 0. ],\n", + " [ 7.52 , 15. , 1. ],\n", + " [ 8.2 , 16. , 0. ],\n", + " [ 5.44 , 17. , 1. ],\n", + " [ 7.9 , 18. , 0. ],\n", + " [ 7.69 , 19. , 1. ],\n", + " [ 6.09 , 20. , 0. ],\n", + " [ 6.98142857, 15. , 1. ],\n", + " [ 5.2 , 16. , 1. ],\n", + " [ 8.88 , 17. , 0. ],\n", + " [ 8.07 , 18. , 1. ],\n", + " [ 6.24 , 19. , 1. ],\n", + " [ 7.95 , 20. , 0. ],\n", + " [ 8.26 , 15. , 0. ],\n", + " [ 7.31 , 16. , 1. ],\n", + " [ 7.23 , 17. , 1. ],\n", + " [ 6.46 , 18. , 1. ],\n", + " [ 5.34 , 19. , 1. ],\n", + " [ 5.72 , 20. , 1. ],\n", + " [ 5.84 , 15. , 0. ],\n", + " [ 5.02 , 16. , 1. ],\n", + " [ 7.98 , 17. , 0. ],\n", + " [ 6.37 , 18. , 1. ],\n", + " [ 6.92 , 19. , 0. ],\n", + " [ 7.95 , 20. , 1. ],\n", + " [ 7.12 , 15. , 0. ],\n", + " [ 5.79 , 16. , 1. ],\n", + " [ 5.4 , 17. , 0. ],\n", + " [ 8.83 , 18. , 1. ],\n", + " [ 5.69 , 19. , 0. ],\n", + " [ 6.6 , 20. , 1. ],\n", + " [ 6.52 , 15. , 0. ],\n", + " [ 8.31 , 16. , 0. ],\n", + " [ 6.98142857, 17. , 1. ],\n", + " [ 7.62 , 18. , 0. ],\n", + " [ 8.69 , 19. , 1. ],\n", + " [ 8.75 , 20. , 0. ],\n", + " [ 6.46 , 15. , 1. ],\n", + " [ 7.14 , 16. , 1. ],\n", + " [ 6.38 , 17. , 0. ],\n", + " [ 6.33 , 18. , 1. ],\n", + " [ 5.64 , 19. , 0. ],\n", + " [ 5.26 , 20. , 1. ],\n", + " [ 6.83 , 15. , 1. ],\n", + " [ 5.76 , 16. , 0. ],\n", + " [ 6.51 , 17. , 1. ],\n", + " [ 8.33 , 18. , 0. ],\n", + " [ 8.16 , 19. , 1. ],\n", + " [ 5.14 , 20. , 0. ],\n", + " [ 8.71 , 15. , 0. ],\n", + " [ 8.6 , 16. , 1. ],\n", + " [ 8.6 , 17. , 0. ],\n", + " [ 7.43 , 18. , 1. ],\n", + " [ 7.81 , 19. , 1. ],\n", + " [ 6.51 , 20. , 0. ],\n", + " [ 8.11 , 15. , 1. ],\n", + " [ 8.95 , 16. , 0. ],\n", + " [ 7.99 , 17. , 1. ],\n", + " [ 5.92 , 18. , 0. ],\n", + " [ 8.3 , 19. , 1. ],\n", + " [ 8.97 , 20. , 0. ],\n", + " [ 5.39 , 15. , 0. ],\n", + " [ 6.77 , 16. , 0. ],\n", + " [ 8.08 , 17. , 1. ],\n", + " [ 5.24 , 18. , 0. ],\n", + " [ 6.93 , 19. , 1. ],\n", + " [ 5.14 , 20. , 0. ],\n", + " [ 8.39 , 15. , 1. ],\n", + " [ 6.18 , 16. , 0. ],\n", + " [ 7.53 , 17. , 1. ],\n", + " [ 7.86 , 18. , 0. ],\n", + " [ 7.7 , 19. , 1. ],\n", + " [ 7.3 , 20. , 0. ],\n", + " [ 7.79 , 15. , 1. ],\n", + " [ 6.75 , 16. , 0. ],\n", + " [ 7.87 , 17. , 1. ],\n", + " [ 5.38 , 18. , 0. ],\n", + " [ 7.8 , 19. , 1. ],\n", + " [ 5.07 , 20. , 0. ],\n", + " [ 7.95 , 15. , 1. ],\n", + " [ 8.35 , 16. , 0. ],\n", + " [ 5.19 , 17. , 0. ],\n", + " [ 7.19 , 18. , 0. ],\n", + " [ 7.35 , 19. , 1. ],\n", + " [ 5.22 , 20. , 1. ],\n", + " [ 5.39 , 15. , 1. ],\n", + " [ 5.39 , 16. , 1. ],\n", + " [ 8.93 , 17. , 1. ],\n", + " [ 5.79 , 18. , 0. ],\n", + " [ 8.42 , 19. , 1. ],\n", + " [ 7.26 , 20. , 0. ],\n", + " [ 6.97 , 15. , 1. ],\n", + " [ 5.55 , 16. , 1. ],\n", + " [ 8.66 , 17. , 0. ],\n", + " [ 8.61 , 18. , 1. ],\n", + " [ 5.22 , 19. , 1. ],\n", + " [ 8.05 , 20. , 0. ],\n", + " [ 8.87 , 15. , 1. ],\n", + " [ 5.54 , 16. , 0. ],\n", + " [ 6.98142857, 17. , 0. ],\n", + " [ 7.26 , 18. , 1. ],\n", + " [ 5.79 , 19. , 0. ],\n", + " [ 5.22 , 20. , 0. ],\n", + " [ 8.71 , 15. , 1. ],\n", + " [ 7.55 , 16. , 1. ],\n", + " [ 6.35 , 17. , 1. ],\n", + " [ 7.53 , 18. , 0. ],\n", + " [ 8.56 , 19. , 1. ],\n", + " [ 8.94 , 20. , 1. ],\n", + " [ 6.6 , 15. , 1. ],\n", + " [ 8.35 , 16. , 1. ],\n", + " [ 4.15 , 15. , 0. ]])" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SqxVaBO0pf1W", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "5793f7be-3c73-48d1-ac38-11179a8161fe" + }, + "source": [ + "Y = dataset.iloc[:, -1].values\n", + "Y" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([78.5 , 76.74, 78.68, 71.82, 84.19, 81.18, 76.99, 85.46, 70.66,\n", + " 77.82, 75.37, 83.88, 79.5 , 80.76, 83.08, 76.03, 76.04, 85.11,\n", + " 82.5 , 80.58, 82.18, 83.36, 70.67, 75.02, 70.96, 83.33, 74.75,\n", + " 75.65, 74.15, 80.17, 82.27, 76.14, 71.1 , 84.35, 83.08, 76.76,\n", + " 81.24, 78.21, 73.08, 83.23, 70.27, 86.41, 71.1 , 82.84, 82.38,\n", + " 72.96, 77.46, 70.11, 72.38, 71.41, 72.22, 77.77, 84.44, 71.45,\n", + " 82.21, 85.48, 75.03, 86.65, 70.9 , 71.7 , 73.61, 79.41, 76.19,\n", + " 80.43, 85.78, 70.06, 81.25, 81.7 , 69.27, 82.79, 71.8 , 71.79,\n", + " 74.97, 78.61, 77.59, 72.33, 72.08, 77.33, 70.05, 73.34, 84. ,\n", + " 82.93, 76.63, 75.36, 77.29, 72.87, 73.4 , 81.74, 71.85, 84.6 ,\n", + " 79.56, 82.1 , 72.08, 79.1 , 81.01, 76.48, 75.39, 68.57, 83.64,\n", + " 82.3 , 75.18, 82.03, 82.99, 79.26, 77.55, 77.07, 72.1 , 73.25,\n", + " 74.25, 70.58, 81.08, 75.04, 76.38, 80.86, 78.42, 74.44, 70.34,\n", + " 85.04, 73.61, 75.55, 76.2 , 82.69, 76.83, 79.53, 83.57, 85.95,\n", + " 76.02, 77.65, 77.01, 74.49, 73.19, 71.86, 75.8 , 72.46, 78.39,\n", + " 83.48, 83.15, 71.22, 85.98, 83.91, 84.58, 80.31, 82.55, 75.52,\n", + " 83.82, 85.15, 82.75, 74.34, 82.02, 86.12, 71.87, 76.7 , 81.7 ,\n", + " 70.78, 78.45, 70.2 , 83.37, 75.52, 81.57, 80.72, 80.81, 79.49,\n", + " 79.17, 77.07, 82.04, 71.94, 81.6 , 70.79, 82.68, 83.08, 71.18,\n", + " 77.63, 77.78, 70.4 , 73.02, 71.11, 85.96, 73.64, 84.24, 78.17,\n", + " 77.19, 71.83, 86.99, 83.87, 71.5 , 79.63, 85.1 , 72.01, 77.27,\n", + " 79.87, 73.14, 70.51, 84.03, 79.64, 74.24, 81.67, 84.68, 86.75,\n", + " 78.05, 83.5 , 81.45])" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KsDoGjjbpmjk" + }, + "source": [ + "### *Training Dataset using Linear Regression*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nKmEySI1poV_", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "875ea4c7-b893-4617-bce9-011f7fe33c6d" + }, + "source": [ + "model = LinearRegression()\n", + "model.fit(X,Y)" + ], + "execution_count": 15, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "LinearRegression()" + ], + "text/html": [ + "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "n-UeFqpGpw9p" + }, + "source": [ + "### *Predicted Price for Land sq.Feet of custom values*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Ollo3wTcpyKQ", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "c88cfbbe-6fa4-4be4-e1bc-747df623e40a" + }, + "source": [ + "a=[[9.2,20,0]]\n", + "PredictedmodelResult = model.predict(a)\n", + "print(PredictedmodelResult)" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[86.26599847]\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/13_Salary_prediction_using_POLYNOMIAL_REGRESSION.ipynb b/13_Salary_prediction_using_POLYNOMIAL_REGRESSION.ipynb new file mode 100644 index 0000000..e5c7acb --- /dev/null +++ b/13_Salary_prediction_using_POLYNOMIAL_REGRESSION.ipynb @@ -0,0 +1,1484 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NdHIE4CSDCp3" + }, + "source": [ + "# **Day-13 | Salary prediction using POLYNOMIAL REGRESSION**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1NTrKL3eIgZ8" + }, + "source": [ + "### *Importing Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ae6Pxuc-CNeu" + }, + "source": [ + "import pandas as pd" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6oo4HsbHInXM" + }, + "source": [ + "### *Load Dataset from Local directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "w0WCVounIsJ5", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "9bc9721c-cb3d-4eb4-9980-bc718843ae51" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset.csv to dataset.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NHijCKx7I0k8" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zxBak91bI2yh" + }, + "source": [ + "dataset = pd.read_csv('dataset.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5XKSRUPWI5Q-" + }, + "source": [ + "### *Summarize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "63BR2xiKI7oZ", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "8825f8c4-be20-46df-a04b-30805d3c2006" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(10, 2)\n", + " Level Salary\n", + "0 1 45000\n", + "1 2 50000\n", + "2 3 60000\n", + "3 4 80000\n", + "4 5 110000\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Zv8cn1g8Jix-" + }, + "source": [ + "### *Segregate Dataset into Input X & Output Y*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "iR3g4pDjJoj9", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "3ed244e4-9388-44eb-ca55-a8f6390ce4f0" + }, + "source": [ + "X = dataset.iloc[:, :-1].values\n", + "X" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 1],\n", + " [ 2],\n", + " [ 3],\n", + " [ 4],\n", + " [ 5],\n", + " [ 6],\n", + " [ 7],\n", + " [ 8],\n", + " [ 9],\n", + " [10]])" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LyJ8ghMFKcMe", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "ffd6526c-59be-44ed-dfb5-70cfd8aa55d5" + }, + "source": [ + "Y = dataset.iloc[:, -1].values\n", + "Y" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([ 45000, 50000, 60000, 80000, 110000, 150000, 200000,\n", + " 300000, 500000, 1000000])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XP-L6ZRyL30I" + }, + "source": [ + "### *Training Dataset using Linear Regression*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "c4x1C89ZVjr9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "5b5e0c7c-79ca-41aa-ca77-f21d0add3ac7" + }, + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "modelLR = LinearRegression()\n", + "modelLR.fit(X,Y)" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "LinearRegression()" + ], + "text/html": [ + "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1QIRCVJDYPcx" + }, + "source": [ + "### *Visualizing Linear Regression results*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OX7tg4mZVori", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "outputId": "e7ab1f34-cb26-40eb-a15d-f9e7f32093f4" + }, + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.scatter(X,Y, color=\"red\")\n", + "plt.plot(X, modelLR.predict(X))\n", + "plt.title(\"Linear Regression\")\n", + "plt.xlabel(\"Level\")\n", + "plt.ylabel(\"Salary\")\n", + "plt.show()" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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5pwt0aVLF5577jlSU1Np0aIFrVu35tZbb2XVqlU8++yzdOnShYMHD5KZmUnHjh255pprcDgcXHrppfj5+TF9+nQcDgdjxowhICCAzz//3OSzE5H/FRYWxh133EFcXBy7du1i9uzZlJWV8d1335GYmGh2eSJSi5p0uFm6dCmpqamntY8YMYL58+dTUVHB3//+d1577TUKCgoICgqiZ8+eTJkyhQ4dOgCwd+9exo4dy+eff46vry8DBw7k2WefpUWLFvV9OiLyK0aOHEl2djb79+/HZrPRq1cvnnzyyTPey0lEGq8mHW5ERETE9WidGxEREXEpCjciIiLiUprcbCmHw8HevXvx9/fHYrGYXY6IiIicBcMwKCkpITw8HDe3X++baXLhZu/evURFRZldhoiIiJyH3bt3ExkZ+avbNLlwc+qGc7t37yYgIMDkakRERORsFBcXExUVVe3GsWfS5MLNqUtRAQEBCjciIiKNzNkMKdGAYhEREXEpCjciIiLiUhRuRERExKUo3IiIiIhLUbgRERERl6JwIyIiIi5F4UZERERcisKNiIiIuBSFGxEREXEpTW6FYhEREakjdjusWAH79kFYGCQng9Va72WY2nOzfPlyBg0aRHh4OBaLhcWLF//mPkuXLqVr167YbDYSEhKYP39+ndcpIiIiv2HRIoiJgdRUuOWWqv/GxFS11zNTw01paSmdOnVi5syZZ7V9Xl4e11xzDampqWzYsIH777+fu+++m88++6yOKxUREZEzWrQIhg6FPXuqtxcUVLXXc8CxGIZh1OsRz8BisfD+++8zePDgM27z0EMP8fHHH7N582Zn27Bhwzh69ChLliw5q+MUFxcTGBhIUVGRbpwpIiJyoez2qh6aXwabUywWiIyEvLwLukR1Lp/fjWpA8erVq+nfv3+1tgEDBrB69eoz7lNWVkZxcXG1LxEREaklK1acOdgAGAbs3l21XT1pVOFm//79hISEVGsLCQmhuLiYEydO1LjP1KlTCQwMdH5FRUXVR6kiIiJNw759tbtdLWhU4eZ8TJo0iaKiIufX7t27zS5JRETEdYSF1e52taBRTQUPDQ2lsLCwWlthYSEBAQF4e3vXuI/NZsNms9VHeSIiIk1PcnLVmJqCgqpLUL90asxNcnK9ldSoem569epFZmZmtbYvvviCXr16mVSRiIhIE2e1wvPPV/2/xVL9uVOPp0+v1/VuTA03x44dY8OGDWzYsAGomuq9YcMG8vPzgapLSrfffrtz+3vvvZfc3FwefPBBtm7dyqxZs3jnnXeYMGGCGeWLiIgIwJAhsHAhRERUb4+MrGofMqReyzF1KvjSpUtJTU09rX3EiBHMnz+fO+64g507d7J06dJq+0yYMIEff/yRyMhIHnnkEe64446zPqamgouIiNSROlyh+Fw+vxvMOjf1ReFGRESk8XHZdW5EREREfovCjYiIiLgUhRsRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrCjYiIiLgUhRsRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrCjYiIiLgUhRsRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrCjYiIiLgUhRsRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrCjYiIiLgUhRsRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrCjYiIiLgUhRsRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrp4WbmzJnExMTg5eVFUlISa9eu/dXtp0+fzsUXX4y3tzdRUVFMmDCBkydP1lO1IiIi0tCZGm7efvttJk6cyOTJk1m/fj2dOnViwIABHDhwoMbtFyxYwMMPP8zkyZPZsmULr7zyCm+//TZ//vOf67lyERERaahMDTfPPfcc99xzDyNHjqRt27bMmTMHHx8f5s2bV+P2X331FX369OGWW24hJiaGK6+8kptvvvk3e3tERESk6TAt3JSXl7Nu3Tr69+//32Lc3Ojfvz+rV6+ucZ/evXuzbt06Z5jJzc3lk08+4eqrrz7jccrKyiguLq72JSIiIq7L3awDHzp0CLvdTkhISLX2kJAQtm7dWuM+t9xyC4cOHeKyyy7DMAwqKyu59957f/Wy1NSpU5kyZUqt1i4iIiINl+kDis/F0qVLefLJJ5k1axbr169n0aJFfPzxxzz++ONn3GfSpEkUFRU5v3bv3l2PFYuIiEh9M63nJigoCKvVSmFhYbX2wsJCQkNDa9znkUce4bbbbuPuu+8GoEOHDpSWlvKHP/yBv/zlL7i5nZ7VbDYbNput9k9AREREGiTTem48PT3p1q0bmZmZzjaHw0FmZia9evWqcZ/jx4+fFmCsVisAhmHUXbEiIiLSaJjWcwMwceJERowYQffu3enRowfTp0+ntLSUkSNHAnD77bcTERHB1KlTARg0aBDPPfccXbp0ISkpiZycHB555BEGDRrkDDkiIiLStJkabm666SYOHjzIo48+yv79++ncuTNLlixxDjLOz8+v1lPz17/+FYvFwl//+lcKCgpo1aoVgwYN4oknnjDrFERERKSBsRhN7HpOcXExgYGBFBUVERAQYHY5IiIichbO5fO7Uc2WEhEREfktCjciIiLiUhRuRERExKUo3IiIiIhLUbgRERERl6JwIyIiIi5F4UZERERcisKNiIiIuBSFGxEREXEpCjciIiLiUhRuRERExKUo3IiIiIhLUbgRERERl6JwIyIiIi5F4UZERERcisKNiIiIuBSFGxEREXEpCjciIiLiUhRuRERExKUo3IiIiIhLUbgRERERl6JwIyIiIi5F4UZERERcisKNiIiIuBSFGxEREXEpCjciIiLiUhRuRERExKUo3IiIiIhLUbgRERERl6JwIyIiIi5F4UZERERcisKNiIiIuBSFGxEREXEpCjciIiLiUhRuRERExKUo3IiIiIhLUbgRERERl6JwIyIiIi5F4UZERERcisKNiIiIuBSFGxEREXEpCjciIiLiUhRuRERExKUo3IiIiIhLUbgRERERl6JwIyIiIi5F4UZERERcisKNiIiIuBSFGxEREakVe34+zl8Xb2LBmnxT6zA93MycOZOYmBi8vLxISkpi7dq1v7r90aNHGTNmDGFhYdhsNi666CI++eSTeqpWREREfmnnoVIeXLiRfk8v5V9f5zMjazvllQ7T6nE37cjA22+/zcSJE5kzZw5JSUlMnz6dAQMGsG3bNoKDg0/bvry8nCuuuILg4GAWLlxIREQEu3btolmzZvVfvIiISBOXc6CEjKwc/r1xLw6jqq1PQkvSUxPxsFpMq8tiGIZh1sGTkpK49NJLycjIAMDhcBAVFcXYsWN5+OGHT9t+zpw5PP3002zduhUPD4/zOmZxcTGBgYEUFRUREBBwQfWLiIg0RT/uLSYjezufbt7PqRSR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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5uGPFul3meTJ" + }, + "source": [ + "### *fit() - Training Model - Calculating the initial parameters*\n", + "\n", + "### *transform() - After Training we gonna transform Data by using above calculated values*\n", + "\n", + "### *fit_transform() - First fit & Transform*\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hZsunqlaYh94" + }, + "source": [ + "###*Convert X to Polynomial Format (X^n)*\n", + "###*n-degree*\n", + "###*n=2 consist x & x^2*\n", + "###*n=3 consist x & x^2 & x^3*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7jalKVwtL5Gq" + }, + "source": [ + "from sklearn.preprocessing import PolynomialFeatures\n", + "modelPR = PolynomialFeatures(degree = 4)\n", + "xPoly = modelPR.fit_transform(X)" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0bDl6FGFb0tP" + }, + "source": [ + "###*Train same Linear Regression with X-Polynomial instead of X*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "rET2XIDYWbb7", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "8640b7af-4a88-4fbb-a95c-00c855573652" + }, + "source": [ + "modelPLR = LinearRegression()\n", + "modelPLR.fit(xPoly,Y)" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "LinearRegression()" + ], + "text/html": [ + "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WHkfO4LChDBl" + }, + "source": [ + "### *Visualizing Polynomial Regression results*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "JZZOZyQ6We2w", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "outputId": "46259691-7131-47e2-a5ef-5030b9dff7aa" + }, + "source": [ + "plt.scatter(X,Y, color=\"red\")\n", + "plt.plot(X, modelPLR.predict(modelPR.fit_transform(X)))\n", + "plt.title(\"Polynomial Regression\")\n", + "plt.xlabel(\"Level\")\n", + "plt.ylabel(\"Salary\")\n", + "plt.show()" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4YOj1wVjerek" + }, + "source": [ + "### *Prediction using Polynomial Regression*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "mt_Z7EDqWhdB", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "d9f465b4-8c40-4849-8334-9131da26b2ca" + }, + "source": [ + "x=5\n", + "salaryPred = modelPLR.predict(modelPR.fit_transform([[x]]))\n", + "print('Salary of a person with Level {0} is {1}'.format(x,salaryPred))" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Salary of a person with Level 5 is [121724.94172495]\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/14_Stock_prediction_using_SVM_REGRESSION.ipynb b/14_Stock_prediction_using_SVM_REGRESSION.ipynb new file mode 100644 index 0000000..3212dbe --- /dev/null +++ b/14_Stock_prediction_using_SVM_REGRESSION.ipynb @@ -0,0 +1,1045 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NdHIE4CSDCp3" + }, + "source": [ + "# **Day-14 | Stock Prediction using SUPPORT VECTOR REGRESSION**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1NTrKL3eIgZ8" + }, + "source": [ + "### *Importing Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ae6Pxuc-CNeu" + }, + "source": [ + "import pandas as pd\n", + "import numpy as np" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6oo4HsbHInXM" + }, + "source": [ + "### *Load Dataset from Local directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "w0WCVounIsJ5", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "72f5c938-c267-41f9-ee2a-6d6563b5664f" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving data.csv to data.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NHijCKx7I0k8" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zxBak91bI2yh" + }, + "source": [ + "dataset = pd.read_csv('data.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5XKSRUPWI5Q-" + }, + "source": [ + "### *Summarize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "63BR2xiKI7oZ", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "7bcfc903-7216-4aa7-c079-b13837f2fb72" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(94, 2)\n", + " x y\n", + "0 168.181818 160.840244\n", + "1 187.878788 159.413657\n", + "2 207.575758 157.136809\n", + "3 227.272727 159.357847\n", + "4 246.969697 157.542862\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Zv8cn1g8Jix-" + }, + "source": [ + "### *Segregate Dataset into Input X & Output Y*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "iR3g4pDjJoj9", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a0374808-f07f-487b-d913-fa21394a2d3d" + }, + "source": [ + "X = dataset.iloc[:, :-1].values\n", + "X" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 168.18181818],\n", + " [ 187.87878788],\n", + " [ 207.57575758],\n", + " [ 227.27272727],\n", + " [ 246.96969697],\n", + " [ 266.66666667],\n", + " [ 286.36363636],\n", + " [ 306.06060606],\n", + " [ 325.75757576],\n", + " [ 345.45454545],\n", + " [ 365.15151515],\n", + " [ 384.84848485],\n", + " [ 404.54545455],\n", + " [ 424.24242424],\n", + " [ 443.93939394],\n", + " [ 463.63636364],\n", + " [ 483.33333333],\n", + " [ 503.03030303],\n", + " [ 522.72727273],\n", + " [ 542.42424242],\n", + " [ 562.12121212],\n", + " [ 581.81818182],\n", + " [ 601.51515152],\n", + " [ 621.21212121],\n", + " [ 640.90909091],\n", + " [ 660.60606061],\n", + " [ 680.3030303 ],\n", + " [ 700. ],\n", + " [ 719.6969697 ],\n", + " [ 739.39393939],\n", + " [ 759.09090909],\n", + " [ 778.78787879],\n", + " [ 798.48484848],\n", + " [ 818.18181818],\n", + " [ 837.87878788],\n", + " [ 857.57575758],\n", + " [ 877.27272727],\n", + " [ 896.96969697],\n", + " [ 916.66666667],\n", + " [ 936.36363636],\n", + " [ 956.06060606],\n", + " [ 975.75757576],\n", + " [ 995.45454545],\n", + " [1015.15151515],\n", + " [1034.84848485],\n", + " [1054.54545455],\n", + " [1074.24242424],\n", + " [1093.93939394],\n", + " [1113.63636364],\n", + " [1133.33333333],\n", + " [1153.03030303],\n", + " [1172.72727273],\n", + " [1192.42424242],\n", + " [1212.12121212],\n", + " [1231.81818182],\n", + " [1251.51515152],\n", + " [1271.21212121],\n", + " [1290.90909091],\n", + " [1310.60606061],\n", + " [1330.3030303 ],\n", + " [1350. ],\n", + " [1369.6969697 ],\n", + " [1389.39393939],\n", + " [1409.09090909],\n", + " [1428.78787879],\n", + " [1448.48484848],\n", + " [1468.18181818],\n", + " [1487.87878788],\n", + " [1507.57575758],\n", + " [1527.27272727],\n", + " [1546.96969697],\n", + " [1566.66666667],\n", + " [1586.36363636],\n", + " [1606.06060606],\n", + " [1625.75757576],\n", + " [1645.45454545],\n", + " [1665.15151515],\n", + " [1684.84848485],\n", + " [1704.54545455],\n", + " [1724.24242424],\n", + " [1743.93939394],\n", + " [1763.63636364],\n", + " [1783.33333333],\n", + " [1803.03030303],\n", + " [1822.72727273],\n", + " [1842.42424242],\n", + " [1862.12121212],\n", + " [1881.81818182],\n", + " [1901.51515152],\n", + " [1921.21212121],\n", + " [1940.90909091],\n", + " [1960.60606061],\n", + " [1980.3030303 ],\n", + " [2000. ]])" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LyJ8ghMFKcMe", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "1ffa4118-7ce7-47fe-c462-1b63f2830057" + }, + "source": [ + "Y = dataset.iloc[:, -1].values\n", + "Y" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([160.84024381, 159.41365734, 157.1368088 , 159.35784736,\n", + " 157.54286158, 157.73520716, 159.34756091, 155.23404557,\n", + " 155.80774009, 158.3299704 , 157.62585291, 160.47697951,\n", + " 158.22940639, 157.41781684, 163.37069148, 160.18481104,\n", + " 160.96838974, 158.18080666, 160.13850728, 161.6460876 ,\n", + " 159.31922497, 162.56957785, 160.81387414, 161.62873371,\n", + " 161.20567768, 166.31061698, 162.77603585, 160.88457814,\n", + " 164.84205952, 160.95225209, 164.00863628, 159.86853854,\n", + " 161.32847639, 164.57554065, 165.85572104, 164.91849414,\n", + " 164.54143071, 164.36748958, 162.20962269, 163.92394795,\n", + " 164.63932852, 167.87182021, 166.64178203, 162.62543484,\n", + " 166.99665279, 165.77528998, 165.38858024, 168.16274652,\n", + " 169.19836268, 169.19589357, 165.85186798, 167.10884798,\n", + " 168.58676929, 170.07230238, 167.35983334, 168.14383356,\n", + " 166.49945126, 166.51667766, 170.73111225, 172.01551036,\n", + " 169.35597976, 171.70403549, 170.61721144, 168.80066958,\n", + " 171.01067 , 173.56092162, 170.6101661 , 174.00807519,\n", + " 165.83626737, 172.91653228, 171.64379111, 171.06865197,\n", + " 172.04715792, 168.08546823, 171.81823198, 173.1687706 ,\n", + " 175.60730324, 171.81194441, 171.42846734, 172.23891016,\n", + " 175.27019817, 174.29386586, 172.77381293, 175.0568379 ,\n", + " 174.42142783, 176.36153241, 173.21710593, 174.16285752,\n", + " 174.23093521, 172.28509132, 176.00133146, 176.12817115,\n", + " 175.81325722, 175.53082573])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z5kccmBcw1PQ" + }, + "source": [ + "### *Splitting Dataset for Testing our Model*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Pc4kGEuDw36Q" + }, + "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.20,random_state=0)" + ], + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XP-L6ZRyL30I" + }, + "source": [ + "### *Training Dataset using Support Vector Regression*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "c4x1C89ZVjr9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "7713001d-363a-449f-8ccb-b224e7435310" + }, + "source": [ + "from sklearn.svm import SVR\n", + "model = SVR()\n", + "model.fit(x_train,y_train)" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "SVR()" + ], + "text/html": [ + "
SVR()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4YOj1wVjerek" + }, + "source": [ + "### *Prediction for all test data for validation*\n", + "### *SSres is the sum of squares of the residual errors.*\n", + "### *SStot is the total sum of the errors.*\n", + "# ![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "mt_Z7EDqWhdB", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "869e495f-65a3-43e1-c195-e201aad9217f" + }, + "source": [ + "ypred = model.predict(x_test)\n", + "\n", + "from sklearn.metrics import r2_score,mean_squared_error\n", + "mse = mean_squared_error(y_test,ypred)\n", + "rmse=np.sqrt(mse)\n", + "print(\"Root Mean Square Error:\",rmse)\n", + "r2score = r2_score(y_test,ypred)\n", + "print(\"R2Score\",r2score*100)" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Root Mean Square Error: 2.3594718844452056\n", + "R2Score 86.64242653738367\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/17_EvaluatingRegressionModelUsingRSquaredAdjustedRSquared.ipynb b/17_EvaluatingRegressionModelUsingRSquaredAdjustedRSquared.ipynb new file mode 100644 index 0000000..fb9cfe5 --- /dev/null +++ b/17_EvaluatingRegressionModelUsingRSquaredAdjustedRSquared.ipynb @@ -0,0 +1,1943 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I1VRs4tZkbvW" + }, + "source": [ + "# **Day-17 Evaluating Regression ModelUsing RSquared & Adjusted R Squared**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SAFLqwkKk8rK" + }, + "source": [ + "### *Import Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "EgF2lvr_jzVL" + }, + "source": [ + "import pandas as pd\n", + "from sklearn.linear_model import LinearRegression\n", + "import matplotlib.pyplot as plt" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XWe_7j6UjxRj" + }, + "source": [ + "### *Load Dataset from Local Directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vKrHCJk_jwfJ", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "f83991a7-4656-4ef5-d91b-b4040836e959" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset2.csv to dataset2.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6gXowmSom462" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6JLDHSdym6wP" + }, + "source": [ + "dataset = pd.read_csv('dataset2.csv')" + ], + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-DdkIy1ZnDfA" + }, + "source": [ + "### *Load Summarize*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OlElQViRnGFp", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "47fe7368-7bcd-4192-f97e-ab3f8a7e9ca9" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(1460, 2)\n", + " area price\n", + "0 8450 208500\n", + "1 9600 181500\n", + "2 11250 223500\n", + "3 9550 140000\n", + "4 14260 250000\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p5yk_BN4nMtD" + }, + "source": [ + "### *Visualize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "a8Mi5nkFnOTQ", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + }, + "outputId": "25c3c112-0fd4-4df5-dd8b-0969d42ad9ac" + }, + "source": [ + "plt.xlabel('area')\n", + "plt.ylabel('price')\n", + "plt.scatter(dataset.area,dataset.price,color='red',marker='*')" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 84 + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JRyfB6prpJDP" + }, + "source": [ + "### *Segregate Dataset into Input X & Output Y*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "x9dQcTohpK1X", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 423 + }, + "outputId": "015c4e7f-6fca-4c7f-e55f-b6b6579c32b2" + }, + "source": [ + "X = dataset.drop('price',axis='columns')\n", + "X" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " area\n", + "0 8450\n", + "1 9600\n", + "2 11250\n", + "3 9550\n", + "4 14260\n", + "... ...\n", + "1455 7917\n", + "1456 13175\n", + "1457 9042\n", + "1458 9717\n", + "1459 9937\n", + "\n", + "[1460 rows x 1 columns]" + ], + "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", + "
area
08450
19600
211250
39550
414260
......
14557917
145613175
14579042
14589717
14599937
\n", + "

1460 rows × 1 columns

\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" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "X", + "summary": "{\n \"name\": \"X\",\n \"rows\": 1460,\n \"fields\": [\n {\n \"column\": \"area\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 9981,\n \"min\": 1300,\n \"max\": 215245,\n \"num_unique_values\": 1073,\n \"samples\": [\n 10186,\n 8163,\n 8854\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "bNdWVV8BWrUa" + }, + "execution_count": null, + "outputs": [] + }, + { + "source": [ + "X = dataset.drop('price',axis='columns')\n", + "X" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 423 + }, + "id": "xdFdtYHjW3wX", + "outputId": "4bb0bb16-82d8-4d91-90b3-aa740cb93f80" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " area\n", + "0 8450\n", + "1 9600\n", + "2 11250\n", + "3 9550\n", + "4 14260\n", + "... ...\n", + "1455 7917\n", + "1456 13175\n", + "1457 9042\n", + "1458 9717\n", + "1459 9937\n", + "\n", + "[1460 rows x 1 columns]" + ], + "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", + "
area
08450
19600
211250
39550
414260
......
14557917
145613175
14579042
14589717
14599937
\n", + "

1460 rows × 1 columns

\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" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "X", + "summary": "{\n \"name\": \"X\",\n \"rows\": 1460,\n \"fields\": [\n {\n \"column\": \"area\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 9981,\n \"min\": 1300,\n \"max\": 215245,\n \"num_unique_values\": 1073,\n \"samples\": [\n 10186,\n 8163,\n 8854\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SqxVaBO0pf1W", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 458 + }, + "outputId": "bcf7ef7e-01d8-43c1-92d0-49c7820b5a38" + }, + "source": [ + "Y = dataset.price\n", + "Y" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 208500\n", + "1 181500\n", + "2 223500\n", + "3 140000\n", + "4 250000\n", + " ... \n", + "1455 175000\n", + "1456 210000\n", + "1457 266500\n", + "1458 142125\n", + "1459 147500\n", + "Name: price, Length: 1460, dtype: int64" + ], + "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", + "
price
0208500
1181500
2223500
3140000
4250000
......
1455175000
1456210000
1457266500
1458142125
1459147500
\n", + "

1460 rows × 1 columns

\n", + "

" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NshR5GFxetKm" + }, + "source": [ + "### *Splitting Dataset for Testing our Model*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "dT6utuqCeu1t" + }, + "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.20,random_state=0)" + ], + "execution_count": 16, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KsDoGjjbpmjk" + }, + "source": [ + "### *Training Dataset using Linear Regression*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nKmEySI1poV_", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "b7c49320-c5d1-4507-981f-eef176ab1f5f" + }, + "source": [ + "model = LinearRegression()\n", + "model.fit(x_train,y_train)" + ], + "execution_count": 17, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "LinearRegression()" + ], + "text/html": [ + "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SU6VFaOpcIX3" + }, + "source": [ + "### *Visualizing Linear Regression results*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "U-3oeqm8cKy_", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "outputId": "ff4185eb-e340-4dd1-cb0e-28ae50ae76b9" + }, + "source": [ + "plt.scatter(X,Y, color=\"red\",marker='*')\n", + "plt.plot(X, model.predict(X))\n", + "plt.title(\"Linear Regression\")\n", + "plt.xlabel(\"Area\")\n", + "plt.ylabel(\"Price\")\n", + "plt.show()" + ], + "execution_count": 18, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1PbTSCtSp3lC" + }, + "source": [ + "![image.png](data:image/png;base64,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)\n", + "![image.png](data:image/png;base64,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)\n", + "R Squared = 1- (SSR/SST)\n", + "\n", + "where,\n", + "SSR = Sum of Squared Residuals\n", + "\n", + "SST = Sum of Squared Total\n", + "\n", + "Adjusted R Squared= 1 — [(1 — R Squared) * ((n-1) / (n-p-1))]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "T5eVVDPvp8Hc" + }, + "source": [ + "### *R-Squared Score*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1SvYtiI2p4ZB", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "77ebb001-7d5a-4ff3-cca7-d1b056a5c1b8" + }, + "source": [ + "rsquared = model.score(x_test, y_test)\n", + "print(rsquared)" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0.08557014199167645\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Bi-ZZRlTgeDu" + }, + "source": [ + "### *Adjusted R Squared of the Model*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pHBIIF6cgYSw", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "483be049-7759-431b-ed6a-a134551cf66e" + }, + "source": [ + "n=len(dataset) #Length of Total dataset\n", + "p=len(dataset.columns)-1 #length of Features\n", + "adjr= 1-(1-rsquared)*(n-1)/(n-p-1)\n", + "print(adjr)" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0.08494296101910559\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JNMw25wulk02" + }, + "source": [ + "### *Prediction*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "RTyc02CLlZuD", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "b48a1b26-d0c2-4591-a85c-e172c587fb17" + }, + "source": [ + "x=6500\n", + "LandAreainSqFt=[[x]]\n", + "PredictedmodelResult = model.predict(LandAreainSqFt)\n", + "print(PredictedmodelResult)" + ], + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[173227.94685863]\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py:2739: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", + " warnings.warn(\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/18_RegressionModelSelection.ipynb b/18_RegressionModelSelection.ipynb new file mode 100644 index 0000000..e18bc03 --- /dev/null +++ b/18_RegressionModelSelection.ipynb @@ -0,0 +1,922 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "r3cas2_1T98w" + }, + "source": [ + "# Regression Model Selection" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IODliia6U1xO" + }, + "source": [ + "## Importing the basic libraries" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "y98nA5UdU6Hf" + }, + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2hRC6YEod9_8" + }, + "source": [ + "### Load Dataset from Local Directory" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "tZBTr4JHeAzb", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "c5931337-dd18-4b92-f759-1b45c2bf1a32" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset.csv to dataset.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jpjZ43YlU8eI" + }, + "source": [ + "## Importing the dataset" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pLVaXoYVU_Uy" + }, + "source": [ + "dataset = pd.read_csv('dataset.csv')\n", + "X = dataset.iloc[:, :-1].values\n", + "y = dataset.iloc[:, -1].values\n", + "ysvm = y.reshape(len(y),1)" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tPJXMyyUJbWn" + }, + "source": [ + "## Splitting the dataset into the Training set and Test set" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "rFOzpjaiJd5B" + }, + "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, random_state = 0)\n", + "X_trainsvm, X_testsvm, y_trainsvm, y_testsvm = train_test_split(X, ysvm, test_size = 0.2, random_state = 0)" + ], + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5bU75GVthaOj" + }, + "source": [ + "### Importing Machine Learning Algorithms" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YF8HkKVYhag7" + }, + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.tree import DecisionTreeRegressor\n", + "from sklearn.svm import SVR" + ], + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "g16qFkFQVC35" + }, + "source": [ + "## Initializing different Regression algorithms" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SLDKyv1SVUqS" + }, + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "modelLR = LinearRegression()\n", + "\n", + "poly_reg = PolynomialFeatures(degree = 4)\n", + "X_poly = poly_reg.fit_transform(X_train)\n", + "modelPLR = LinearRegression()\n", + "\n", + "modelRFR = RandomForestRegressor(n_estimators = 10, random_state = 0)\n", + "\n", + "modelDTR = DecisionTreeRegressor(random_state = 0)\n", + "\n", + "modelSVR = SVR(kernel = 'rbf')\n", + "\n", + "sc_X = StandardScaler()\n", + "sc_y = StandardScaler()\n", + "X_trainsvm = sc_X.fit_transform(X_trainsvm)\n", + "y_trainsvm = sc_y.fit_transform(y_trainsvm)" + ], + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ePPz0Lu6fXfN" + }, + "source": [ + "### Training Regression algorithm" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "oHhA2uoyfEK2", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 137 + }, + "outputId": "62527e59-2484-46c1-8dde-85d85e397f94" + }, + "source": [ + "modelLR.fit(X_train, y_train)\n", + "modelPLR.fit(X_poly, y_train)\n", + "modelRFR.fit(X_train, y_train)\n", + "modelDTR.fit(X_train, y_train)\n", + "modelSVR.fit(X_trainsvm, y_trainsvm)" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py:1408: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "SVR()" + ], + "text/html": [ + "
SVR()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Nao9cdO6IgNb" + }, + "source": [ + "## Predicting the Test set for Validation" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "EebHA3EOIkQK" + }, + "source": [ + "modelLRy_pred = modelLR.predict(X_test)\n", + "modelPLRy_pred = modelPLR.predict(poly_reg.transform(X_test))\n", + "modelRFRy_pred = modelRFR.predict(X_test)\n", + "modelDTRy_pred = modelDTR.predict(X_test)\n", + "modelSVRy_pred = sc_y.inverse_transform(modelSVR.predict(sc_X.transform(X_test)).reshape(-1, 1))" + ], + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "V4nELFnnIod1" + }, + "source": [ + "## Evaluating the Model Performance" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_G2QS1UoIsTZ", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "8c51ca4f-7b43-4d4f-a32b-b2b7bc1f8fe4" + }, + "source": [ + "from sklearn.metrics import r2_score\n", + "print(\"Linear Regression Accuracy: {}\".format(r2_score(y_test, modelLRy_pred)))\n", + "print(\"Polynomial Regression Accuracy: {}\".format(r2_score(y_test, modelPLRy_pred)))\n", + "print(\"Random Forest Regression Accuracy: {}\".format(r2_score(y_test, modelRFRy_pred)))\n", + "print(\"Decision Treee Regression Accuracy: {}\".format(r2_score(y_test, modelDTRy_pred)))\n", + "print(\"Support Vector Regression Accuracy: {}\".format(r2_score(y_test, modelSVRy_pred)))" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Linear Regression Accuracy: 0.9325315554761303\n", + "Polynomial Regression Accuracy: 0.9455261540927579\n", + "Random Forest Regression Accuracy: 0.9615908334363876\n", + "Decision Treee Regression Accuracy: 0.922905874177941\n", + "Support Vector Regression Accuracy: 0.9480784049986258\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/19_ClusterringUsingIncomeSpent.ipynb b/19_ClusterringUsingIncomeSpent.ipynb new file mode 100644 index 0000000..e4151f1 --- /dev/null +++ b/19_ClusterringUsingIncomeSpent.ipynb @@ -0,0 +1,814 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "r3cas2_1T98w" + }, + "source": [ + "#19 Clusterring Using Income Spent" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IODliia6U1xO" + }, + "source": [ + "## Importing the basic libraries" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "y98nA5UdU6Hf" + }, + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2hRC6YEod9_8" + }, + "source": [ + "### Load Dataset from Local Directory" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "tZBTr4JHeAzb", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "c555accb-3850-4138-88b9-f770a9cfc1e7" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset.csv to dataset.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jpjZ43YlU8eI" + }, + "source": [ + "## Importing the dataset" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pLVaXoYVU_Uy" + }, + "source": [ + "dataset = pd.read_csv('dataset.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "INGdqI-BQpbL" + }, + "source": [ + "### Summarize Dataset" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "q4vNcNRIQtjr", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a94606a7-9b1e-48a5-ca40-662efa1f8d58" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.describe())\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(303, 2)\n", + " INCOME SPEND\n", + "count 303.000000 303.000000\n", + "mean 245.273927 149.646865\n", + "std 48.499412 22.905161\n", + "min 126.000000 71.000000\n", + "25% 211.000000 133.500000\n", + "50% 240.000000 153.000000\n", + "75% 274.000000 166.000000\n", + "max 417.000000 202.000000\n", + " INCOME SPEND\n", + "0 233 150\n", + "1 250 187\n", + "2 204 172\n", + "3 236 178\n", + "4 354 163\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zoIEOorVTzD9" + }, + "source": [ + "### Segregate & Zipping Dataset" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wOuthXLlT0GI", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "fc5c0fe3-9a05-4c9a-9a5d-197e213866fc" + }, + "source": [ + "Income = dataset['INCOME'].values\n", + "Spend = dataset['SPEND'].values\n", + "X = np.array(list(zip(Income, Spend)))\n", + "X" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[233, 150],\n", + " [250, 187],\n", + " [204, 172],\n", + " [236, 178],\n", + " [354, 163],\n", + " [192, 148],\n", + " [294, 153],\n", + " [263, 173],\n", + " [199, 162],\n", + " [168, 174],\n", + " [239, 160],\n", + " [275, 139],\n", + " [266, 171],\n", + " [211, 144],\n", + " [283, 162],\n", + " [219, 158],\n", + " [340, 172],\n", + " [226, 114],\n", + " [247, 171],\n", + " [239, 151],\n", + " [234, 161],\n", + " [233, 179],\n", + " [226, 178],\n", + " [243, 137],\n", + " [199, 178],\n", + " [302, 162],\n", + " [212, 157],\n", + " [175, 123],\n", + " [417, 157],\n", + " [197, 152],\n", + " [198, 168],\n", + " [177, 140],\n", + " [219, 188],\n", + " [273, 152],\n", + " [213, 125],\n", + " [177, 160],\n", + " [304, 170],\n", + " [232, 165],\n", + " [269, 148],\n", + " [360, 151],\n", + " [308, 142],\n", + " [245, 180],\n", + " [208, 148],\n", + " [264, 143],\n", + " [321, 182],\n", + " [325, 172],\n", + " [235, 180],\n", + " [257, 156],\n", + " [216, 115],\n", + " [234, 160],\n", + " [256, 149],\n", + " [302, 151],\n", + " [231, 146],\n", + " [141, 175],\n", + " [252, 172],\n", + " [201, 158],\n", + " [222, 186],\n", + " [260, 185],\n", + " [182, 174],\n", + " [303, 159],\n", + " [265, 130],\n", + " [309, 156],\n", + " [186, 190],\n", + " [203, 132],\n", + " [211, 165],\n", + " [183, 182],\n", + " [222, 143],\n", + " [234, 175],\n", + " [220, 170],\n", + " [209, 163],\n", + " [258, 147],\n", + " [227, 154],\n", + " [204, 202],\n", + " [261, 186],\n", + " [213, 165],\n", + " [250, 161],\n", + " [245, 166],\n", + " [221, 164],\n", + " [205, 184],\n", + " [240, 154],\n", + " [250, 179],\n", + " [308, 170],\n", + " [318, 160],\n", + " [298, 178],\n", + " [265, 122],\n", + " [264, 160],\n", + " [277, 151],\n", + " [197, 156],\n", + " [214, 158],\n", + " [248, 122],\n", + " [255, 175],\n", + " [207, 168],\n", + " [223, 169],\n", + " [288, 159],\n", + " [160, 138],\n", + " [226, 111],\n", + " [394, 157],\n", + " [233, 147],\n", + " [315, 162],\n", + " [246, 173],\n", + " [244, 178],\n", + " [270, 145],\n", + " [195, 179],\n", + " [240, 194],\n", + " [196, 163],\n", + " [211, 115],\n", + " [234, 131],\n", + " [236, 152],\n", + " [244, 162],\n", + " [254, 159],\n", + " [325, 154],\n", + " [126, 173],\n", + " [313, 133],\n", + " [211, 161],\n", + " [262, 155],\n", + " [215, 170],\n", + " [214, 168],\n", + " [193, 162],\n", + " [204, 172],\n", + " [243, 152],\n", + " [303, 122],\n", + " [271, 182],\n", + " [268, 172],\n", + " [267, 167],\n", + " [199, 179],\n", + " [210, 192],\n", + " [204, 143],\n", + " [277, 172],\n", + " [196, 169],\n", + " [269, 121],\n", + " [201, 163],\n", + " [271, 162],\n", + " [295, 162],\n", + " [235, 153],\n", + " [306, 163],\n", + " [269, 163],\n", + " [178, 96],\n", + " [208, 140],\n", + " [201, 126],\n", + " [263, 105],\n", + " [295, 157],\n", + " [303, 181],\n", + " [209, 173],\n", + " [223, 142],\n", + " [197, 116],\n", + " [245, 143],\n", + " [242, 149],\n", + " [240, 171],\n", + " [226, 169],\n", + " [180, 150],\n", + " [228, 138],\n", + " [149, 125],\n", + " [227, 155],\n", + " [278, 152],\n", + " [220, 152],\n", + " [197, 131],\n", + " [253, 179],\n", + " [192, 174],\n", + " [220, 144],\n", + " [221, 163],\n", + " [240, 169],\n", + " [342, 166],\n", + " [157, 182],\n", + " [175, 173],\n", + " [175, 173],\n", + " [286, 108],\n", + " [229, 129],\n", + " [268, 160],\n", + " [254, 147],\n", + " [203, 155],\n", + " [256, 142],\n", + " [229, 168],\n", + " [284, 160],\n", + " [224, 173],\n", + " [206, 132],\n", + " [167, 114],\n", + " [230, 160],\n", + " [335, 158],\n", + " [177, 120],\n", + " [276, 112],\n", + " [353, 132],\n", + " [225, 114],\n", + " [330, 169],\n", + " [230, 165],\n", + " [243, 128],\n", + " [290, 153],\n", + " [253, 144],\n", + " [266, 109],\n", + " [233, 163],\n", + " [172, 158],\n", + " [305, 142],\n", + " [216, 131],\n", + " [188, 113],\n", + " [282, 142],\n", + " [185, 155],\n", + " [326, 140],\n", + " [231, 147],\n", + " [254, 163],\n", + " [267, 99],\n", + " [248, 158],\n", + " [197, 177],\n", + " [258, 141],\n", + " [270, 111],\n", + " [274, 150],\n", + " [164, 145],\n", + " [255, 161],\n", + " [239, 142],\n", + " [258, 157],\n", + " [188, 139],\n", + " [177, 162],\n", + " [229, 150],\n", + " [260, 140],\n", + " [219, 140],\n", + " [307, 146],\n", + " [249, 144],\n", + " [341, 136],\n", + " [263, 97],\n", + " [330, 132],\n", + " [254, 127],\n", + " [256, 150],\n", + " [407, 154],\n", + " [217, 111],\n", + " [282, 174],\n", + " [288, 133],\n", + " [239, 126],\n", + " [174, 125],\n", + " [281, 103],\n", + " [198, 130],\n", + " [288, 159],\n", + " [309, 131],\n", + " [243, 152],\n", + " [289, 124],\n", + " [289, 145],\n", + " [246, 96],\n", + " [322, 109],\n", + " [299, 173],\n", + " [300, 171],\n", + " [293, 170],\n", + " [304, 162],\n", + " [282, 156],\n", + " [269, 112],\n", + " [249, 143],\n", + " [212, 132],\n", + " [274, 88],\n", + " [184, 105],\n", + " [274, 166],\n", + " [409, 150],\n", + " [246, 120],\n", + " [283, 195],\n", + " [254, 146],\n", + " [298, 122],\n", + " [247, 143],\n", + " [294, 106],\n", + " [299, 125],\n", + " [273, 125],\n", + " [309, 147],\n", + " [259, 130],\n", + " [200, 126],\n", + " [244, 154],\n", + " [231, 182],\n", + " [228, 165],\n", + " [230, 160],\n", + " [282, 95],\n", + " [269, 169],\n", + " [206, 108],\n", + " [212, 132],\n", + " [327, 117],\n", + " [149, 126],\n", + " [286, 116],\n", + " [283, 103],\n", + " [249, 144],\n", + " [234, 145],\n", + " [237, 71],\n", + " [234, 156],\n", + " [275, 118],\n", + " [212, 168],\n", + " [218, 105],\n", + " [261, 141],\n", + " [319, 152],\n", + " [166, 125],\n", + " [315, 125],\n", + " [204, 156],\n", + " [218, 134],\n", + " [223, 181],\n", + " [207, 138],\n", + " [311, 120],\n", + " [204, 162],\n", + " [232, 164],\n", + " [335, 143],\n", + " [205, 130],\n", + " [203, 161],\n", + " [318, 140],\n", + " [225, 146],\n", + " [212, 150],\n", + " [169, 144],\n", + " [187, 144],\n", + " [197, 136],\n", + " [176, 90],\n", + " [241, 123],\n", + " [264, 132],\n", + " [193, 141],\n", + " [131, 115],\n", + " [236, 174]])" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uz5ynI4FR734" + }, + "source": [ + "### Finding the Optimized K Value" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2PuOMjABSCXw", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "outputId": "824965c1-908e-40cb-f7f5-7b03e4ac6bbd" + }, + "source": [ + "from sklearn.cluster import KMeans\n", + "wcss = []\n", + "for i in range(1,11):\n", + " km=KMeans(n_clusters=i, random_state=0)\n", + " km.fit(X)\n", + " wcss.append(km.inertia_)\n", + "plt.plot(range(1,11),wcss,color=\"red\", marker =\"8\")\n", + "plt.title('Optimal K Value')\n", + "plt.xlabel('Number of clusters')\n", + "plt.ylabel('WCSS')\n", + "plt.show()" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58ZB1rCZUVfH" + }, + "source": [ + "### Fitting the k-means to the dataset with k=4" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0K7mijvHUW6Z" + }, + "source": [ + "model=KMeans(n_clusters=4, random_state=0)\n", + "y_means = model.fit_predict(X)" + ], + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rTMd_brsUctX" + }, + "source": [ + "### Visualizing the clusters for k=4\n", + "\n", + "Cluster 1: Customers with medium income and low spend\n", + "\n", + "Cluster 2: Customers with high income and medium to high spend\n", + "\n", + "Cluster 3: Customers with low income\n", + "\n", + "Cluster 4: Customers with medium income but high spend" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "PXDHbM4aUdvc", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "outputId": "1e9f9004-c071-45e1-e289-347053165a82" + }, + "source": [ + "plt.scatter(X[y_means==0,0],X[y_means==0,1],s=50, c='brown',label='1')\n", + "plt.scatter(X[y_means==1,0],X[y_means==1,1],s=50, c='blue',label='2')\n", + "plt.scatter(X[y_means==2,0],X[y_means==2,1],s=50, c='green',label='3')\n", + "plt.scatter(X[y_means==3,0],X[y_means==3,1],s=50, c='cyan',label='4')\n", + "plt.scatter(model.cluster_centers_[:,0], model.cluster_centers_[:,1],s=100,marker='s', c='red', label='Centroids')\n", + "plt.title('Income Spent Analysis')\n", + "plt.xlabel('Income')\n", + "plt.ylabel('Spent')\n", + "plt.legend()\n", + "plt.show()" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAnSxJREFUeJzt3Xl8VPX1+P/XLIEEQsAgIeQHCCqLFEQIVNOwKKCASIHQKooGrdUiQYHghh9xg35xqSAqBGutSIsFRQFxQdkhCBSCuCBLsCgCBlSEEEgwydzfHzczzExmuXfmzprzfDzywMzcmfuemzFz8n6f9zkmRVEUhBBCCCHilDnSAxBCCCGECCUJdoQQQggR1yTYEUIIIURck2BHCCGEEHFNgh0hhBBCxDUJdoQQQggR1yTYEUIIIURck2BHCCGEEHFNgh0hhBBCxDUJdoQQIo488cQTmEymkDz3+vXrMZlMrF+/PiTPL0SoSLAjRJjNnz8fk8nEjh07Ij2UiCsrK+Pxxx+nc+fONGzYkKZNm3LFFVcwYcIEjh49GunhAfD111/zxBNP8O233+p+7IMPPojJZOKmm24yfmBCCM2skR6AEKJuqqyspE+fPuzdu5cxY8Zw7733UlZWxu7du3nzzTcZMWIEGRkZkR4mX3/9NU8++SRXX301bdq00fw4RVH4z3/+Q5s2bVixYgWnT5+mUaNGoRtoGPTp04fy8nLq1asX6aEIoYsEO0KIiFi2bBmfffYZCxcu5JZbbnG5r6Kigl9//TVCIzPG+vXrOXz4MGvXrmXgwIG8++67jBkzJtLDCorZbCYxMTHSwxBCN1nGEiIK3H777SQnJ3PkyBGGDx9OcnIyzZo14/7776e6utrlWJvNxuzZs+nSpQuJiYk0a9aMQYMGuSyLVVVVMW3aNC655BLq169PmzZteOSRRzh37pzLc7Vp04YbbriB9evX06NHD5KSkujSpYsjJ+Pdd991nCczM5PPPvus1tj37t3LH/7wB1JTU0lMTKRHjx689957fl/zN998A0B2dnat+xITE0lJSal1ff73v/8xcOBAGjZsSEZGBk899RSKotS6Pi+88AK/+c1vSExMpHnz5vzlL3/hl19+8fjaCwsL+e1vf0tiYiIXX3wxCxYscBwzf/58/vjHPwJwzTXXYDKZNOesLFy4kE6dOnHNNdcwYMAAFi5cWOsYew7MW2+9xV//+ldatmxJYmIi/fv358CBAy7Hbtq0iT/+8Y+0bt2a+vXr06pVKyZNmkR5ebnPcfTt25euXbt6vK9Dhw4MHDjQ8f2iRYvIzMykUaNGpKSk0KVLF2bPnl1rvM6vv7i4mJEjR5Kenk5iYiItW7Zk1KhRnDp1yu81EiJcJNgRIkpUV1czcOBAmjZtyt/+9jf69u3L888/z9///neX4+68804mTpxIq1ateOaZZ3j44YdJTExk69atjmP+/Oc/89hjj9G9e3dmzZpF3759mTFjBqNGjap13gMHDnDLLbcwdOhQZsyYwS+//MLQoUNZuHAhkyZN4tZbb+XJJ5/km2++4cYbb8Rmszkeu3v3bq666ir27NnDww8/zPPPP0/Dhg0ZPnw4S5cu9fl6L7roIgAWLFhQK2Dxdn0GDRpE8+bNefbZZ8nMzOTxxx/n8ccfdznuL3/5Cw888ADZ2dnMnj2bO+64g4ULFzJw4EAqKytrvfY//OEPXHvttTz//PNccMEF3H777ezevRtQl23uu+8+AB555BH+9a9/8a9//YvLLrvM51jPnTvHO++8w8033wzAzTffzNq1aykpKfF4/NNPP83SpUu5//77mTJlClu3bmX06NEux7z99tucPXuWe+65h5deeomBAwfy0ksvkZub63Mst912G1988QVfffWVy+3bt29n//793HrrrQCsWrWKm2++mQsuuIBnnnmGp59+mquvvprNmzd7fe5ff/2VgQMHsnXrVu69917mzJnD3Xffzf/+9z9Onjzpc1xChJUihAir119/XQGU7du3O24bM2aMAihPPfWUy7HdunVTMjMzHd+vXbtWAZT77ruv1vPabDZFURRl165dCqD8+c9/drn//vvvVwBl7dq1jtsuuugiBVA+/fRTx20ff/yxAihJSUnKd99957j9lVdeUQBl3bp1jtv69++vdOnSRamoqHAZx+9+9zulXbt2Pq/D2bNnlQ4dOiiActFFFym333678tprrynHjh2rdaz9+tx7770u5xkyZIhSr1495ccff1QURVE2bdqkAMrChQtdHr9y5cpat9tf+8aNGx23HT9+XKlfv74yefJkx21vv/12rdftz5IlSxRAKS4uVhRFUUpLS5XExERl1qxZLsetW7dOAZTLLrtMOXfunOP22bNnK4Dy5ZdfulwvdzNmzFBMJpPLz+nxxx9XnH+1nzx5UklMTFQeeughl8fed999SsOGDZWysjJFURRlwoQJSkpKilJVVeX1ddnHa78Wn332mQIob7/9tp8rIkRkycyOEFFk7NixLt/37t2b//3vf47v33nnHUwmU63ZDMCx3fjDDz8EID8/3+X+yZMnA/DBBx+43N6pUyeysrIc31955ZUA9OvXj9atW9e63T6eEydOsHbtWm688UZOnz7NTz/9xE8//cTPP//MwIEDKS4u5siRI15fa1JSEtu2beOBBx4A1CWjO++8kxYtWnDvvffWWnIDGD9+vMvrHT9+PL/++iurV68G1NmPxo0bc+211zrG89NPP5GZmUlycjLr1q2r9dp79+7t+L5Zs2Z06NDB5ZoHYuHChfTo0YNLL70UgEaNGjFkyBCPS1kAd9xxh0vSr31MzuNISkpy/PeZM2f46aef+N3vfoeiKB6XF+0aN27MsGHD+M9//uOYQauurmbx4sUMHz6chg0bAtCkSRPOnDnDqlWrNL/Oxo0bA/Dxxx9z9uxZzY8TItwk2BEiStjzb5xdcMEFLrkm33zzDRkZGaSmpnp9nu+++w6z2ez4oLVLT0+nSZMmfPfddy63Owc0cP4DrFWrVh5vt4/nwIEDKIrC1KlTadasmcuXPRg7fvy4z9fcuHFjnn32Wb799lu+/fZbXnvtNTp06MDLL7/MtGnTXI41m81cfPHFLre1b98ewLEtvLi4mFOnTpGWllZrTGVlZbXG4/7aofY11+vkyZN8+OGH9O3blwMHDji+srOz2bFjB/v376/1GPdxXHDBBQAu4zh06BC33347qampjpyuvn37AvjNj8nNzeXQoUNs2rQJgNWrV3Ps2DFuu+02xzHjxo2jffv2DB48mJYtW/KnP/2JlStX+nzetm3bkp+fzz/+8Q8uvPBCBg4cyJw5cyRfR0Qd2Y0lRJSwWCyGPp/WwnLezuvtdvvsgD135/7773dJcnXmHnD5ctFFF/GnP/2JESNGcPHFF7Nw4UKmT5+u+fH2MaWlpXmdQXEPJv29xkC8/fbbnDt3jueff57nn3++1v0LFy7kySef1DWO6upqrr32Wk6cOMFDDz1Ex44dadiwIUeOHOH22293yaPyZODAgTRv3px///vf9OnTh3//+9+kp6czYMAAxzFpaWns2rWLjz/+mI8++oiPPvqI119/ndzcXN544w2vz/38889z++23s3z5cj755BPuu+8+ZsyYwdatW2nZsqXPcQkRLhLsCBFDLrnkEj7++GNOnDjhdXbnoosuwmazUVxc7JJIe+zYMU6ePOlIDA6WfZYlISHB5UMzWBdccAGXXHJJrYRam83G//73P8dsDuCYJbHXv7nkkktYvXo12dnZLss+wdBbjXjhwoV07tzZ41LjK6+8wptvvlkr2PHnyy+/ZP/+/bzxxhsuCclal5wsFgu33HIL8+fP55lnnmHZsmXcddddtYKsevXqMXToUIYOHYrNZmPcuHG88sorTJ061Wfg2qVLF7p06cKjjz7Kp59+SnZ2NvPmzdMdrAoRKrKMJUQMGTlyJIqiePywtM8CXH/99QC88MILLvfPnDkTgCFDhhgylrS0NK6++mpeeeUVfvjhh1r3//jjjz4f//nnn/PTTz/Vuv27777j66+/pkOHDrXue/nllx3/rSgKL7/8MgkJCfTv3x+AG2+8kerq6lpLYKBuxw9kh5A9p0XLY7///ns2btzIjTfeyB/+8IdaX3fccQcHDhxg27ZtusZgD0qcZ5wURXHZFu7Pbbfdxi+//MJf/vIXysrKHLuw7H7++WeX781mM5dffjmAx/wpgNLSUqqqqlxu69KlC2az2etjhIgEmdkRIoZcc8013Hbbbbz44osUFxczaNAgbDYbmzZt4pprrmH8+PF07dqVMWPG8Pe//52TJ0/St29f/vvf//LGG28wfPhwrrnmGsPGM2fOHHr16kWXLl246667uPjiizl27Bhbtmzh8OHDfP75514fu2rVKh5//HF+//vfc9VVVznq6Pzzn//k3LlzPPHEEy7HJyYmsnLlSsaMGcOVV17JRx99xAcffMAjjzziWJ7q27cvf/nLX5gxYwa7du3iuuuuIyEhgeLiYt5++21mz57NH/7wB12v8YorrsBisfDMM89w6tQp6tevT79+/UhLS6t17JtvvomiKPz+97/3+FzXX389VquVhQsXOhK+tejYsSOXXHIJ999/P0eOHCElJYV33nlHV25Rt27d6Ny5M2+//TaXXXYZ3bt3d7n/z3/+MydOnKBfv360bNmS7777jpdeeokrrrjC61b7tWvXMn78eP74xz/Svn17qqqq+Ne//oXFYmHkyJGaxyZEqEmwI0SMef3117n88st57bXXeOCBB2jcuDE9evTg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zJnDmTNnat1/8uRJunfvTklJCVarlUsvvdTl68ILL9R8rnr16lGtYRvgJZdcQr169djsFHFWVlayfft2OnXq5PExl112Gdu2bXO5zZ5c7ax9+/ZMmjSJTz75hJycHF5//XXN49dLgh1Rpzk3xNQSTLg32kxKSOLqNlcbOiZP5/h9x997bWSq97kHXzrY6/3+dlg5c89NtTcKdd/mbTS9zTydRWrMRiTfenuOSCX2Glknx1/FaS3b2OPFnDlzqK6u5re//S3vvPMOxcXF7NmzhxdffJGsrCwGDBhAVlYWw4cP55NPPuHbb7/l008/5f/+7/907WZq06YN27Zt49tvv+Wnn37yOuvTsGFD7rnnHh544AFWrlzJ119/zV133cXZs2e58847PT7mvvvuY+XKlfztb3+juLiYl19+mZUrVzruLy8vZ/z48axfv57vvvuOzZs3s337di677DJ9F0sHCXZEnWdviNnnoj5+j/XUaHN0l9GGjsdbM09PjTtNmMholKF5qavKVsUHxR/4rL3ja4dVH/wvc3na5m0kvc08ryLyY45XRtXJmTlT3abui5Zt7PHg4osvZufOnVxzzTVMnjyZzp07c+2117JmzRoKCgowmUx8+OGH9OnThzvuuIP27dszatQovvvuO5rbt8ppcP/992OxWOjUqRPNmjXj0KFDXo99+umnGTlyJLfddhvdu3fnwIEDfPzxx1xwwQUej7/qqqt49dVXmT17Nl27duWTTz7h0UfPN362WCz8/PPP5Obm0r59e2688UYGDx7Mk08+qf1C6STtIghduwgRe17c9iITVk7w2cSzVqPNnTshMzPgc3a/Gz7LUJeXFEXx2szTufUE4NKGYvbW2Uz6eJK6Lq9xh5mW5qHlnG+CCfqbaIZiskFP2whTzVekx1wXlJeru6609MZyf5yRTUEDahcR5P/DFBVB9+6BP174JO0ihDDYfVfeR+EdhQzvONwxW2LvN7Xpjk0h7VhvU2zMuX5OrXMUHiokZ3EOyTOSHRWRR787mgMnDpCUkEThoUImfaw2GNWzlV5L7R3nHVaBbk03mp5E6uuJjjHXBYEup8k2dhEO0vVcCDfZrbPJbp0d9kauVrOVNQfXuHR6L9heQN6HeVjMllr9r5btXcbcIXP55JtPsJgtAffbMplMzNo6y2/jUPvWdK2zJKGcI80Hlvk5prrm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S5cuZe3atbRt29bl/szMTBISElizZo3jtn379nHo0CFH3kBWVhZffvmlS6C4atUqUlJSHNPt8cTfNfNk165dAC7vtbp0zbyx2WycO3dO3mc62K+ZJ/I+g/79+/Pll1+ya9cux1ePHj0YPXq047/r7Hst0hnSwhinT59WPvvsM+Wzzz5TAGXmzJnKZ599pnz33XfK6dOnlfvvv1/ZsmWLcvDgQWX16tVK9+7dlXbt2ikVFRWO5xg0aJDSrVs3Zdu2bUphYaHSrl075eabb47gqwqte+65R2ncuLGyfv165YcffnB8nT171nHM2LFjldatWytr165VduzYoWRlZSlZWVmO+6uqqpTOnTsr1113nbJr1y5l5cqVSrNmzZQpU6ZE4iWFnL9rduDAAeWpp55SduzYoRw8eFBZvny5cvHFFyt9+vRxPEddu2aKoigPP/ywsmHDBuXgwYPKF198oTz88MOKyWRSPvnkE0VR5H3mia9rJu8z7dx3rdXV95oEO3Fi3bp1ClDra8yYMcrZs2eV6667TmnWrJmSkJCgXHTRRcpdd93lsrVQURTl559/Vm6++WYlOTlZSUlJUe644w7l9OnTEXpFoefpegHK66+/7jimvLxcGTdunHLBBRcoDRo0UEaMGKH88MMPLs/z7bffKoMHD1aSkpKUCy+8UJk8ebJSWVkZ5lcTHv6u2aFDh5Q+ffooqampSv369ZVLL71UeeCBB5RTp065PE9dumaKoih/+tOflIsuukipV6+e0qxZM6V///6OQEdR5H3mia9rJu8z7dyDnbr6XjMpiqKEezZJCCGEECJcJGdHCCGEEHFNgh0hhBBCxDUJdoQQQggR1yTYEUIIIURck2BHCCGEEHFNgh0hhBBCxDUJdoQQQggR1yTYEUIIIURck2BHCBFxt99+O8OHD4/0MIQQcUqCHSGEEELENQl2hBBR5eqrr+a+++7jwQcfJDU1lfT0dJ544gmXY06ePMlf/vIXmjdvTmJiIp07d+b999933P/OO+/wm9/8hvr169OmTRuef/55l8e3adOG6dOnk5ubS3JyMhdddBHvvfceP/74I8OGDSM5OZnLL7+cHTt2uDyusLCQ3r17k5SURKtWrbjvvvs4c+ZMyK6FEMIYEuwIIaLOG2+8QcOGDdm2bRvPPvssTz31FKtWrQLAZrMxePBgNm/ezL///W++/vprnn76aSwWCwBFRUXceOONjBo1ii+//JInnniCqVOnMn/+fJdzzJo1i+zsbD777DOGDBnCbbfdRm5uLrfeeis7d+7kkksuITc3F3v7wG+++YZBgwYxcuRIvvjiCxYvXkxhYSHjx48P67URQugnjUCFEBF3++23c/LkSZYtW8bVV19NdXU1mzZtctz/29/+ln79+vH000/zySefMHjwYPbs2UP79u1rPdfo0aP58ccf+eSTTxy3Pfjgg3zwwQfs3r0bUGd2evfuzb/+9S8ASkpKaNGiBVOnTuWpp54CYOvWrWRlZfHDDz+Qnp7On//8ZywWC6+88orjeQsLC+nbty9nzpwhMTExJNdGCBE8mdkRQkSdyy+/3OX7Fi1acPz4cQB27dpFy5YtPQY6AHv27CE7O9vltuzsbIqLi6murvZ4jubNmwPQpUuXWrfZz/v5558zf/58kpOTHV8DBw7EZrNx8ODBQF+qECIMrJEegBBCuEtISHD53mQyYbPZAEhKSjL8HCaTyett9vOWlZXxl7/8hfvuu6/Wc7Vu3dqQMQkhQkOCHSFETLn88ss5fPgw+/fv9zi7c9lll7F582aX2zZv3kz79u0deT2B6N69O19//TWXXnppwM8hhIgMWcYSQsSUvn370qdPH0aOHMmqVas4ePAgH330EStXrgRg8uTJrFmzhmnTprF//37eeOMNXn75Ze6///6gzvvQQw/x6aefMn78eHbt2kVxcTHLly+XBGUhYoAEO0KImPPOO+/Qs2dPbr75Zjp16sSDDz7oyMfp3r07b731FosWLaJz58489thjPPXUU9x+++1BnfPyyy9nw4YN7N+/n969e9OtWzcee+wxMjIyDHhFQohQkt1YQgghhIhrMrMjhBBCiLgmwY4QQggh4poEO0IIIYSIaxLsCCGEECKuSbAjhBBCiLgmwY4QQggh4poEO0IIIYSIaxLsCCGEECKuSbAjhBBCiLgmwY4QQggh4poEO0IIIYSIaxLsCCGEECKu/f/x0op7nMcbogAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/24_MarketBasketAnalysisusingECLAT.ipynb b/24_MarketBasketAnalysisusingECLAT.ipynb new file mode 100644 index 0000000..071bb19 --- /dev/null +++ b/24_MarketBasketAnalysisusingECLAT.ipynb @@ -0,0 +1,2944 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "include_colab_link": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "r3cas2_1T98w" + }, + "source": [ + "#24_MarketBasketAnalysisusingECLAT" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IODliia6U1xO" + }, + "source": [ + "### Importing the basic libraries" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "y98nA5UdU6Hf" + }, + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jpjZ43YlU8eI" + }, + "source": [ + "### Load Dataset from Local Directory" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pLVaXoYVU_Uy", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "f4f73900-25f5-457e-e238-8d490bcb8c44" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset1.csv to dataset1.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fLBaNX8cVymm" + }, + "source": [ + "### Importing the dataset" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "lBgHJ6c7gDn2", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "9b87e3b7-d998-44a7-cc8d-12cc04817aad" + }, + "source": [ + "dataset = pd.read_csv('dataset1.csv')\n", + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(7500, 20)\n", + " shrimp almonds avocado vegetables mix green grapes \\\n", + "0 burgers meatballs eggs NaN NaN \n", + "1 chutney NaN NaN NaN NaN \n", + "2 turkey avocado NaN NaN NaN \n", + "3 mineral water milk energy bar whole wheat rice green tea \n", + "4 low fat yogurt NaN NaN NaN NaN \n", + "\n", + " whole weat flour yams cottage cheese energy drink tomato juice \\\n", + "0 NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN \n", + "\n", + " low fat yogurt green tea honey salad mineral water salmon antioxydant juice \\\n", + "0 NaN NaN NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN NaN NaN \n", + "\n", + " frozen smoothie spinach olive oil \n", + "0 NaN NaN NaN \n", + "1 NaN NaN NaN \n", + "2 NaN NaN NaN \n", + "3 NaN NaN NaN \n", + "4 NaN NaN NaN \n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "n90Tb_w9V-vn" + }, + "source": [ + "### Data Pre-Processing" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pm6q3gWXgG_1", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "31f87c1e-a18d-4f45-967c-a52cb8ac3b2e" + }, + "source": [ + "transactions = []\n", + "for i in range(0, 70):\n", + " transactions.append([str(dataset.values[i,j]) for j in range(0, 20)])\n", + "transactions" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[['burgers',\n", + " 'meatballs',\n", + " 'eggs',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['chutney',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['turkey',\n", + " 'avocado',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['mineral water',\n", + " 'milk',\n", + " 'energy bar',\n", + " 'whole wheat rice',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['low fat yogurt',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['whole wheat pasta',\n", + " 'french fries',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['soup',\n", + " 'light cream',\n", + " 'shallot',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['frozen vegetables',\n", + " 'spaghetti',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['french fries',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['eggs',\n", + " 'pet food',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['cookies',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['turkey',\n", + " 'burgers',\n", + " 'mineral water',\n", + " 'eggs',\n", + " 'cooking oil',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['spaghetti',\n", + " 'champagne',\n", + " 'cookies',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['mineral water',\n", + " 'salmon',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['mineral water',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['shrimp',\n", + " 'chocolate',\n", + " 'chicken',\n", + " 'honey',\n", + " 'oil',\n", + " 'cooking oil',\n", + " 'low fat yogurt',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['turkey',\n", + " 'eggs',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['turkey',\n", + " 'fresh tuna',\n", + " 'tomatoes',\n", + " 'spaghetti',\n", + " 'mineral water',\n", + " 'black tea',\n", + " 'salmon',\n", + " 'eggs',\n", + " 'chicken',\n", + " 'extra dark chocolate',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['meatballs',\n", + " 'milk',\n", + " 'honey',\n", + " 'french fries',\n", + " 'protein bar',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['red wine',\n", + " 'shrimp',\n", + " 'pasta',\n", + " 'pepper',\n", + " 'eggs',\n", + " 'chocolate',\n", + " 'shampoo',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['rice',\n", + " 'sparkling water',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['spaghetti',\n", + " 'mineral water',\n", + " 'ham',\n", + " 'body spray',\n", + " 'pancakes',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['burgers',\n", + " 'grated cheese',\n", + " 'shrimp',\n", + " 'pasta',\n", + " 'avocado',\n", + " 'honey',\n", + " 'white wine',\n", + " 'toothpaste',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['eggs',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['parmesan cheese',\n", + " 'spaghetti',\n", + " 'soup',\n", + " 'avocado',\n", + " 'milk',\n", + " 'fresh bread',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['ground beef',\n", + " 'spaghetti',\n", + " 'mineral water',\n", + " 'milk',\n", + " 'energy bar',\n", + " 'black tea',\n", + " 'salmon',\n", + " 'frozen smoothie',\n", + " 'escalope',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['sparkling water',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['mineral water',\n", + " 'eggs',\n", + " 'chicken',\n", + " 'chocolate',\n", + " 'french fries',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['frozen vegetables',\n", + " 'spaghetti',\n", + " 'yams',\n", + " 'mineral water',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['herb & pepper',\n", + " 'tomato sauce',\n", + " 'light cream',\n", + " 'magazines',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['mineral water',\n", + " 'chocolate',\n", + " 'avocado',\n", + " 'eggs',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['turkey',\n", + " 'french fries',\n", + " 'strawberries',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['frozen vegetables',\n", + " 'strong cheese',\n", + " 'chocolate',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['cookies',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['pickles',\n", + " 'spaghetti',\n", + " 'salmon',\n", + " 'escalope',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['energy bar',\n", + " 'french fries',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['red wine',\n", + " 'ground beef',\n", + " 'mineral water',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['mineral water',\n", + " 'cake',\n", + " 'cottage cheese',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['pickles',\n", + " 'champagne',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['spaghetti',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['fresh tuna',\n", + " 'frozen vegetables',\n", + " 'spaghetti',\n", + " 'mineral water',\n", + " 'honey',\n", + " 'whole wheat rice',\n", + " 'frozen smoothie',\n", + " 'escalope',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['spaghetti',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['soup',\n", + " 'meatballs',\n", + " 'hot dogs',\n", + " 'sparkling water',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['escalope',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['soup',\n", + " 'avocado',\n", + " 'french fries',\n", + " 'hot dogs',\n", + " 'brownies',\n", + " 'body spray',\n", + " 'pancakes',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['mineral water',\n", + " 'chicken',\n", + " 'cereals',\n", + " 'clothes accessories',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['mineral water',\n", + " 'bug spray',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['avocado',\n", + " 'muffins',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['burgers',\n", + " 'black tea',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['spaghetti',\n", + " 'chocolate',\n", + " 'brownies',\n", + " 'white wine',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['fresh tuna',\n", + " 'mineral water',\n", + " 'eggs',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['spaghetti',\n", + " 'muffins',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['spaghetti',\n", + " 'chocolate',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['french fries',\n", + " 'escalope',\n", + " 'champagne',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['tomato sauce',\n", + " 'light mayo',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['turkey',\n", + " 'fresh tuna',\n", + " 'frozen vegetables',\n", + " 'tomatoes',\n", + " 'ground beef',\n", + " 'spaghetti',\n", + " 'mineral water',\n", + " 'chocolate',\n", + " 'soup',\n", + " 'milk',\n", + " 'olive oil',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['eggs',\n", + " 'cookies',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['soup',\n", + " 'chicken',\n", + " 'gums',\n", + " 'soda',\n", + " 'body spray',\n", + " 'energy drink',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['turkey',\n", + " 'frozen vegetables',\n", + " 'mineral water',\n", + " 'cider',\n", + " 'cooking oil',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['spaghetti',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['clothes accessories',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['energy drink',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['soup',\n", + " 'bug spray',\n", + " 'shallot',\n", + " 'protein bar',\n", + " 'green tea',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['turkey',\n", + " 'eggs',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['french fries',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['chocolate',\n", + " 'milk',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['herb & pepper',\n", + " 'whole wheat pasta',\n", + " 'ground beef',\n", + " 'mineral water',\n", + " 'avocado',\n", + " 'cider',\n", + " 'whole wheat rice',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['cookies',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['shrimp',\n", + " 'pasta',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan'],\n", + " ['grated cheese',\n", + " 'herb & pepper',\n", + " 'tomatoes',\n", + " 'tomato sauce',\n", + " 'corn',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan',\n", + " 'nan']]" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zoIEOorVTzD9" + }, + "source": [ + "### Training APRIORI" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wOuthXLlT0GI", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "207d4ae9-248d-4e13-b3a6-1c061d4ccc15" + }, + "source": [ + "!pip install apyori\n", + "from apyori import apriori\n", + "rules = apriori(transactions = transactions, min_support = 0.003, min_confidence = 0.2, min_lift = 3, min_length = 2, max_length = 2)" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting apyori\n", + " Downloading apyori-1.1.2.tar.gz (8.6 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Building wheels for collected packages: apyori\n", + " Building wheel for apyori (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for apyori: filename=apyori-1.1.2-py3-none-any.whl size=5954 sha256=55ec0c92367d3e82c46a3d1256bc867f880c7f0e067c254b50b826d7e430cbc5\n", + " Stored in directory: /root/.cache/pip/wheels/77/3d/a6/d317a6fb32be58a602b1e8c6b5d6f31f79322da554cad2a5ea\n", + "Successfully built apyori\n", + "Installing collected packages: apyori\n", + "Successfully installed apyori-1.1.2\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "58ZB1rCZUVfH" + }, + "source": [ + "### Result" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0K7mijvHUW6Z", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "855f4740-c6ae-4e3c-dc7e-2fb14392dc12" + }, + "source": [ + "results = list(rules)\n", + "results" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[RelationRecord(items=frozenset({'body spray', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'avocado'}), confidence=0.3333333333333333, lift=3.333333333333333)]),\n", + " RelationRecord(items=frozenset({'brownies', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'avocado'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'cider', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'avocado'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'fresh bread', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh bread'}), items_add=frozenset({'avocado'}), confidence=1.0, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'grated cheese', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'avocado'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'herb & pepper', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'avocado'}), confidence=0.3333333333333333, lift=3.333333333333333)]),\n", + " RelationRecord(items=frozenset({'hot dogs', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'avocado'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'muffins', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'muffins'}), items_add=frozenset({'avocado'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'pancakes', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pancakes'}), items_add=frozenset({'avocado'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'parmesan cheese', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'parmesan cheese'}), items_add=frozenset({'avocado'}), confidence=1.0, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'pasta', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'avocado'}), confidence=0.3333333333333333, lift=3.333333333333333)]),\n", + " RelationRecord(items=frozenset({'avocado', 'toothpaste'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'toothpaste'}), items_add=frozenset({'avocado'}), confidence=1.0, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'white wine', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'avocado'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'whole wheat pasta', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat pasta'}), items_add=frozenset({'avocado'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'avocado'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'avocado'}), confidence=0.3333333333333333, lift=3.333333333333333)]),\n", + " RelationRecord(items=frozenset({'black tea', 'burgers'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'burgers'}), confidence=0.3333333333333333, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'black tea'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'black tea', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'chicken'}), confidence=0.3333333333333333, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'black tea'}), confidence=0.2, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'black tea', 'energy bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'energy bar'}), confidence=0.3333333333333333, lift=7.777777777777778), OrderedStatistic(items_base=frozenset({'energy bar'}), items_add=frozenset({'black tea'}), confidence=0.3333333333333333, lift=7.777777777777778)]),\n", + " RelationRecord(items=frozenset({'black tea', 'escalope'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'escalope'}), confidence=0.3333333333333333, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'black tea'}), confidence=0.2, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'black tea', 'extra dark chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'extra dark chocolate'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'black tea'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'black tea'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'fresh tuna'}), confidence=0.3333333333333333, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'black tea'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'black tea', 'frozen smoothie'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'frozen smoothie'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'black tea'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'black tea', 'ground beef'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'ground beef'}), confidence=0.3333333333333333, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'black tea'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'black tea', 'milk'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'milk'}), confidence=0.3333333333333333, lift=3.888888888888889)]),\n", + " RelationRecord(items=frozenset({'black tea', 'salmon'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'salmon'}), confidence=0.6666666666666666, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'black tea'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'black tea', 'tomatoes'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'black tea'}), items_add=frozenset({'tomatoes'}), confidence=0.3333333333333333, lift=7.777777777777778), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'black tea'}), confidence=0.3333333333333333, lift=7.777777777777778)]),\n", + " RelationRecord(items=frozenset({'body spray', 'brownies'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'brownies'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'body spray'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'body spray', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'chicken'}), confidence=0.3333333333333333, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'body spray'}), confidence=0.2, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'body spray', 'energy drink'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'energy drink'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'energy drink'}), items_add=frozenset({'body spray'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'body spray', 'green tea'}), support=0.04285714285714286, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'green tea'}), confidence=1.0, lift=7.0), OrderedStatistic(items_base=frozenset({'green tea'}), items_add=frozenset({'body spray'}), confidence=0.30000000000000004, lift=7.000000000000001)]),\n", + " RelationRecord(items=frozenset({'body spray', 'gums'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'gums'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'gums'}), items_add=frozenset({'body spray'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'body spray', 'ham'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'ham'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'ham'}), items_add=frozenset({'body spray'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'body spray', 'hot dogs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'hot dogs'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'body spray'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'body spray', 'pancakes'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'pancakes'}), confidence=0.6666666666666666, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'pancakes'}), items_add=frozenset({'body spray'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'body spray', 'soda'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'soda'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'soda'}), items_add=frozenset({'body spray'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'body spray', 'soup'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'body spray'}), items_add=frozenset({'soup'}), confidence=0.6666666666666666, lift=6.666666666666666), OrderedStatistic(items_base=frozenset({'soup'}), items_add=frozenset({'body spray'}), confidence=0.2857142857142857, lift=6.666666666666666)]),\n", + " RelationRecord(items=frozenset({'brownies', 'chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'chocolate'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'french fries', 'brownies'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'french fries'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'green tea', 'brownies'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'green tea'}), confidence=1.0, lift=7.0), OrderedStatistic(items_base=frozenset({'green tea'}), items_add=frozenset({'brownies'}), confidence=0.2, lift=7.000000000000001)]),\n", + " RelationRecord(items=frozenset({'hot dogs', 'brownies'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'hot dogs'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'brownies'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'pancakes', 'brownies'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'pancakes'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'pancakes'}), items_add=frozenset({'brownies'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'soup', 'brownies'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'soup'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'white wine', 'brownies'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'brownies'}), items_add=frozenset({'white wine'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'brownies'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'bug spray', 'green tea'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'bug spray'}), items_add=frozenset({'green tea'}), confidence=0.5, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'bug spray', 'protein bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'bug spray'}), items_add=frozenset({'protein bar'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'protein bar'}), items_add=frozenset({'bug spray'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'bug spray', 'shallot'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'bug spray'}), items_add=frozenset({'shallot'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'shallot'}), items_add=frozenset({'bug spray'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'bug spray', 'soup'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'bug spray'}), items_add=frozenset({'soup'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'burgers', 'cooking oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'cooking oil'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'burgers'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'grated cheese', 'burgers'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'grated cheese'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'burgers'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'honey', 'burgers'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'honey'}), confidence=0.25, lift=4.375), OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'burgers'}), confidence=0.25, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'meatballs', 'burgers'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'meatballs'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'meatballs'}), items_add=frozenset({'burgers'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'pasta', 'burgers'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'pasta'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'burgers'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'burgers', 'shrimp'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'shrimp'}), confidence=0.25, lift=4.375), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'burgers'}), confidence=0.25, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'burgers', 'toothpaste'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'toothpaste'}), confidence=0.25, lift=17.5), OrderedStatistic(items_base=frozenset({'toothpaste'}), items_add=frozenset({'burgers'}), confidence=1.0, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'white wine', 'burgers'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'burgers'}), items_add=frozenset({'white wine'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'burgers'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'cottage cheese', 'cake'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cake'}), items_add=frozenset({'cottage cheese'}), confidence=1.0, lift=70.0), OrderedStatistic(items_base=frozenset({'cottage cheese'}), items_add=frozenset({'cake'}), confidence=1.0, lift=70.0)]),\n", + " RelationRecord(items=frozenset({'mineral water', 'cake'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cake'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'cereals', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cereals'}), items_add=frozenset({'chicken'}), confidence=1.0, lift=14.0), OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'cereals'}), confidence=0.2, lift=14.000000000000002)]),\n", + " RelationRecord(items=frozenset({'clothes accessories', 'cereals'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cereals'}), items_add=frozenset({'clothes accessories'}), confidence=1.0, lift=35.0), OrderedStatistic(items_base=frozenset({'clothes accessories'}), items_add=frozenset({'cereals'}), confidence=0.5, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'cereals', 'mineral water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cereals'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'champagne', 'cookies'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'champagne'}), items_add=frozenset({'cookies'}), confidence=0.3333333333333333, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'cookies'}), items_add=frozenset({'champagne'}), confidence=0.2, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'champagne', 'escalope'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'champagne'}), items_add=frozenset({'escalope'}), confidence=0.3333333333333333, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'champagne'}), confidence=0.2, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'champagne', 'pickles'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'champagne'}), items_add=frozenset({'pickles'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'pickles'}), items_add=frozenset({'champagne'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'chocolate', 'chicken'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'chocolate'}), confidence=0.4, lift=3.1111111111111116), OrderedStatistic(items_base=frozenset({'chocolate'}), items_add=frozenset({'chicken'}), confidence=0.22222222222222224, lift=3.1111111111111116)]),\n", + " RelationRecord(items=frozenset({'clothes accessories', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'clothes accessories'}), confidence=0.2, lift=7.000000000000001), OrderedStatistic(items_base=frozenset({'clothes accessories'}), items_add=frozenset({'chicken'}), confidence=0.5, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'cooking oil', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'cooking oil'}), confidence=0.2, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'chicken'}), confidence=0.3333333333333333, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'energy drink', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'energy drink'}), confidence=0.2, lift=7.000000000000001), OrderedStatistic(items_base=frozenset({'energy drink'}), items_add=frozenset({'chicken'}), confidence=0.5, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'extra dark chocolate', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'extra dark chocolate'}), confidence=0.2, lift=14.000000000000002), OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'chicken'}), confidence=1.0, lift=14.0)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'fresh tuna'}), confidence=0.2, lift=3.5000000000000004), OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'chicken'}), confidence=0.25, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'gums', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'gums'}), confidence=0.2, lift=14.000000000000002), OrderedStatistic(items_base=frozenset({'gums'}), items_add=frozenset({'chicken'}), confidence=1.0, lift=14.0)]),\n", + " RelationRecord(items=frozenset({'honey', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'honey'}), confidence=0.2, lift=3.5000000000000004), OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'chicken'}), confidence=0.25, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'low fat yogurt', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'low fat yogurt'}), confidence=0.2, lift=7.000000000000001), OrderedStatistic(items_base=frozenset({'low fat yogurt'}), items_add=frozenset({'chicken'}), confidence=0.5, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'oil', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'oil'}), confidence=0.2, lift=14.000000000000002), OrderedStatistic(items_base=frozenset({'oil'}), items_add=frozenset({'chicken'}), confidence=1.0, lift=14.0)]),\n", + " RelationRecord(items=frozenset({'salmon', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'salmon'}), confidence=0.2, lift=3.5000000000000004), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'chicken'}), confidence=0.25, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'shrimp', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'shrimp'}), confidence=0.2, lift=3.5000000000000004), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'chicken'}), confidence=0.25, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'soda', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'soda'}), confidence=0.2, lift=14.000000000000002), OrderedStatistic(items_base=frozenset({'soda'}), items_add=frozenset({'chicken'}), confidence=1.0, lift=14.0)]),\n", + " RelationRecord(items=frozenset({'tomatoes', 'chicken'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chicken'}), items_add=frozenset({'tomatoes'}), confidence=0.2, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'chicken'}), confidence=0.3333333333333333, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'low fat yogurt', 'chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'low fat yogurt'}), items_add=frozenset({'chocolate'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'oil', 'chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'oil'}), items_add=frozenset({'chocolate'}), confidence=1.0, lift=7.777777777777779)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'chocolate'}), confidence=1.0, lift=7.777777777777779)]),\n", + " RelationRecord(items=frozenset({'pepper', 'chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pepper'}), items_add=frozenset({'chocolate'}), confidence=1.0, lift=7.777777777777779)]),\n", + " RelationRecord(items=frozenset({'chocolate', 'red wine'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'red wine'}), items_add=frozenset({'chocolate'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'shampoo', 'chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'shampoo'}), items_add=frozenset({'chocolate'}), confidence=1.0, lift=7.777777777777779)]),\n", + " RelationRecord(items=frozenset({'shrimp', 'chocolate'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'chocolate'}), items_add=frozenset({'shrimp'}), confidence=0.22222222222222224, lift=3.8888888888888893), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'chocolate'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'strong cheese', 'chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'strong cheese'}), items_add=frozenset({'chocolate'}), confidence=1.0, lift=7.777777777777779)]),\n", + " RelationRecord(items=frozenset({'white wine', 'chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'chocolate'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'cider', 'cooking oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'cooking oil'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'cider'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'cider', 'frozen vegetables'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'frozen vegetables'}), confidence=0.5, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'green tea', 'cider'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'green tea'}), confidence=0.5, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'cider', 'ground beef'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'ground beef'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'cider'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'cider', 'herb & pepper'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'herb & pepper'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'cider'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'cider', 'mineral water'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'cider', 'turkey'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'turkey'}), confidence=0.5, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'whole wheat pasta', 'cider'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'whole wheat pasta'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'whole wheat pasta'}), items_add=frozenset({'cider'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'cider'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cider'}), items_add=frozenset({'whole wheat rice'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'cider'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'cooking oil', 'frozen vegetables'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'frozen vegetables'}), confidence=0.3333333333333333, lift=3.888888888888889)]),\n", + " RelationRecord(items=frozenset({'honey', 'cooking oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'honey'}), confidence=0.3333333333333333, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'cooking oil'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'low fat yogurt', 'cooking oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'low fat yogurt'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'low fat yogurt'}), items_add=frozenset({'cooking oil'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'oil', 'cooking oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'oil'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'oil'}), items_add=frozenset({'cooking oil'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'shrimp', 'cooking oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'shrimp'}), confidence=0.3333333333333333, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'cooking oil'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'turkey', 'cooking oil'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cooking oil'}), items_add=frozenset({'turkey'}), confidence=0.6666666666666666, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'turkey'}), items_add=frozenset({'cooking oil'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'grated cheese', 'corn'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'corn'}), items_add=frozenset({'grated cheese'}), confidence=1.0, lift=35.0), OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'corn'}), confidence=0.5, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'herb & pepper', 'corn'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'corn'}), items_add=frozenset({'herb & pepper'}), confidence=1.0, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'corn'}), confidence=0.3333333333333333, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'tomato sauce', 'corn'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'corn'}), items_add=frozenset({'tomato sauce'}), confidence=1.0, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'corn'}), confidence=0.3333333333333333, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'tomatoes', 'corn'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'corn'}), items_add=frozenset({'tomatoes'}), confidence=1.0, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'corn'}), confidence=0.3333333333333333, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'cottage cheese', 'mineral water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'cottage cheese'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'extra dark chocolate', 'eggs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'eggs'}), confidence=1.0, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'pepper', 'eggs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pepper'}), items_add=frozenset({'eggs'}), confidence=1.0, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'pet food', 'eggs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pet food'}), items_add=frozenset({'eggs'}), confidence=1.0, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'shampoo', 'eggs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'shampoo'}), items_add=frozenset({'eggs'}), confidence=1.0, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'energy bar', 'escalope'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy bar'}), items_add=frozenset({'escalope'}), confidence=0.3333333333333333, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'energy bar'}), confidence=0.2, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'energy bar', 'frozen smoothie'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy bar'}), items_add=frozenset({'frozen smoothie'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'energy bar'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'ground beef', 'energy bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy bar'}), items_add=frozenset({'ground beef'}), confidence=0.3333333333333333, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'energy bar'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'milk', 'energy bar'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy bar'}), items_add=frozenset({'milk'}), confidence=0.6666666666666666, lift=7.777777777777778), OrderedStatistic(items_base=frozenset({'milk'}), items_add=frozenset({'energy bar'}), confidence=0.3333333333333333, lift=7.777777777777778)]),\n", + " RelationRecord(items=frozenset({'energy bar', 'salmon'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy bar'}), items_add=frozenset({'salmon'}), confidence=0.3333333333333333, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'energy bar'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'energy bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy bar'}), items_add=frozenset({'whole wheat rice'}), confidence=0.3333333333333333, lift=7.777777777777778), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'energy bar'}), confidence=0.3333333333333333, lift=7.777777777777778)]),\n", + " RelationRecord(items=frozenset({'green tea', 'energy drink'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy drink'}), items_add=frozenset({'green tea'}), confidence=0.5, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'gums', 'energy drink'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy drink'}), items_add=frozenset({'gums'}), confidence=0.5, lift=35.0), OrderedStatistic(items_base=frozenset({'gums'}), items_add=frozenset({'energy drink'}), confidence=1.0, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'soda', 'energy drink'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy drink'}), items_add=frozenset({'soda'}), confidence=0.5, lift=35.0), OrderedStatistic(items_base=frozenset({'soda'}), items_add=frozenset({'energy drink'}), confidence=1.0, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'soup', 'energy drink'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'energy drink'}), items_add=frozenset({'soup'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'escalope'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'fresh tuna'}), confidence=0.2, lift=3.5000000000000004), OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'escalope'}), confidence=0.25, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'escalope', 'frozen smoothie'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'frozen smoothie'}), confidence=0.4, lift=14.000000000000002), OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'escalope'}), confidence=1.0, lift=14.0)]),\n", + " RelationRecord(items=frozenset({'ground beef', 'escalope'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'ground beef'}), confidence=0.2, lift=3.5000000000000004), OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'escalope'}), confidence=0.25, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'honey', 'escalope'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'honey'}), confidence=0.2, lift=3.5000000000000004), OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'escalope'}), confidence=0.25, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'escalope', 'pickles'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'pickles'}), confidence=0.2, lift=7.000000000000001), OrderedStatistic(items_base=frozenset({'pickles'}), items_add=frozenset({'escalope'}), confidence=0.5, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'escalope', 'salmon'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'salmon'}), confidence=0.4, lift=7.000000000000001), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'escalope'}), confidence=0.5, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'escalope'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'escalope'}), items_add=frozenset({'whole wheat rice'}), confidence=0.2, lift=4.666666666666667), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'escalope'}), confidence=0.3333333333333333, lift=4.666666666666667)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'extra dark chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'fresh tuna'}), confidence=1.0, lift=17.5), OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'extra dark chocolate'}), confidence=0.25, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'extra dark chocolate', 'mineral water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'extra dark chocolate', 'salmon'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'salmon'}), confidence=1.0, lift=17.5), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'extra dark chocolate'}), confidence=0.25, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'spaghetti', 'extra dark chocolate'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'spaghetti'}), confidence=1.0, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'extra dark chocolate', 'tomatoes'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'tomatoes'}), confidence=1.0, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'extra dark chocolate'}), confidence=0.3333333333333333, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'extra dark chocolate', 'turkey'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'extra dark chocolate'}), items_add=frozenset({'turkey'}), confidence=1.0, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'french fries', 'hot dogs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'french fries'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'pancakes', 'french fries'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pancakes'}), items_add=frozenset({'french fries'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'french fries', 'protein bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'protein bar'}), items_add=frozenset({'french fries'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'french fries', 'strawberries'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'strawberries'}), items_add=frozenset({'french fries'}), confidence=1.0, lift=7.777777777777779)]),\n", + " RelationRecord(items=frozenset({'french fries', 'whole wheat pasta'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat pasta'}), items_add=frozenset({'french fries'}), confidence=0.5, lift=3.8888888888888893)]),\n", + " RelationRecord(items=frozenset({'fresh bread', 'milk'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh bread'}), items_add=frozenset({'milk'}), confidence=1.0, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'fresh bread', 'parmesan cheese'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh bread'}), items_add=frozenset({'parmesan cheese'}), confidence=1.0, lift=70.0), OrderedStatistic(items_base=frozenset({'parmesan cheese'}), items_add=frozenset({'fresh bread'}), confidence=1.0, lift=70.0)]),\n", + " RelationRecord(items=frozenset({'fresh bread', 'soup'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh bread'}), items_add=frozenset({'soup'}), confidence=1.0, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'fresh bread', 'spaghetti'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh bread'}), items_add=frozenset({'spaghetti'}), confidence=1.0, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'frozen smoothie'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'frozen smoothie'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'fresh tuna'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'frozen vegetables'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'frozen vegetables'}), confidence=0.5, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'frozen vegetables'}), items_add=frozenset({'fresh tuna'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'ground beef'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'ground beef'}), confidence=0.25, lift=4.375), OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'fresh tuna'}), confidence=0.25, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'honey'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'honey'}), confidence=0.25, lift=4.375), OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'fresh tuna'}), confidence=0.25, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'mineral water'}), support=0.05714285714285714, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579), OrderedStatistic(items_base=frozenset({'mineral water'}), items_add=frozenset({'fresh tuna'}), confidence=0.2105263157894737, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'olive oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'olive oil'}), confidence=0.25, lift=17.5), OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'fresh tuna'}), confidence=1.0, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'salmon'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'salmon'}), confidence=0.25, lift=4.375), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'fresh tuna'}), confidence=0.25, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'spaghetti'}), support=0.04285714285714286, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'spaghetti'}), confidence=0.75, lift=3.28125)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'tomatoes'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'tomatoes'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'fresh tuna'}), confidence=0.6666666666666666, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'turkey'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'turkey'}), confidence=0.5, lift=4.375), OrderedStatistic(items_base=frozenset({'turkey'}), items_add=frozenset({'fresh tuna'}), confidence=0.25, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'fresh tuna', 'whole wheat rice'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fresh tuna'}), items_add=frozenset({'whole wheat rice'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'fresh tuna'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'frozen smoothie', 'frozen vegetables'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'frozen vegetables'}), confidence=0.5, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'ground beef', 'frozen smoothie'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'ground beef'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'frozen smoothie'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'honey', 'frozen smoothie'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'honey'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'frozen smoothie'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'milk', 'frozen smoothie'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'milk'}), confidence=0.5, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'frozen smoothie', 'mineral water'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'frozen smoothie', 'salmon'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'salmon'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'frozen smoothie'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'spaghetti', 'frozen smoothie'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'spaghetti'}), confidence=1.0, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'frozen smoothie'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'frozen smoothie'}), items_add=frozenset({'whole wheat rice'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'frozen smoothie'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'frozen vegetables'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'frozen vegetables'}), confidence=1.0, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'strong cheese', 'frozen vegetables'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'strong cheese'}), items_add=frozenset({'frozen vegetables'}), confidence=1.0, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'tomatoes', 'frozen vegetables'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'frozen vegetables'}), confidence=0.3333333333333333, lift=3.888888888888889)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'frozen vegetables'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'frozen vegetables'}), confidence=0.3333333333333333, lift=3.888888888888889)]),\n", + " RelationRecord(items=frozenset({'yams', 'frozen vegetables'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'yams'}), items_add=frozenset({'frozen vegetables'}), confidence=1.0, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'grated cheese', 'herb & pepper'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'herb & pepper'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'grated cheese'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'honey', 'grated cheese'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'honey'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'grated cheese'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'pasta', 'grated cheese'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'pasta'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'grated cheese'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'grated cheese', 'shrimp'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'shrimp'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'grated cheese'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'tomato sauce', 'grated cheese'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'tomato sauce'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'grated cheese'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'grated cheese', 'tomatoes'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'tomatoes'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'grated cheese'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'grated cheese', 'toothpaste'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'toothpaste'}), confidence=0.5, lift=35.0), OrderedStatistic(items_base=frozenset({'toothpaste'}), items_add=frozenset({'grated cheese'}), confidence=1.0, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'white wine', 'grated cheese'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'grated cheese'}), items_add=frozenset({'white wine'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'grated cheese'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'green tea', 'gums'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'gums'}), items_add=frozenset({'green tea'}), confidence=1.0, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'green tea', 'ham'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ham'}), items_add=frozenset({'green tea'}), confidence=1.0, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'green tea', 'hot dogs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'green tea'}), confidence=0.5, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'pancakes', 'green tea'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'green tea'}), items_add=frozenset({'pancakes'}), confidence=0.2, lift=7.000000000000001), OrderedStatistic(items_base=frozenset({'pancakes'}), items_add=frozenset({'green tea'}), confidence=1.0, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'green tea', 'pickles'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pickles'}), items_add=frozenset({'green tea'}), confidence=0.5, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'green tea', 'protein bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'protein bar'}), items_add=frozenset({'green tea'}), confidence=0.5, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'shallot', 'green tea'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'shallot'}), items_add=frozenset({'green tea'}), confidence=0.5, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'green tea', 'soda'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'soda'}), items_add=frozenset({'green tea'}), confidence=1.0, lift=7.0)]),\n", + " RelationRecord(items=frozenset({'soup', 'green tea'}), support=0.04285714285714286, ordered_statistics=[OrderedStatistic(items_base=frozenset({'green tea'}), items_add=frozenset({'soup'}), confidence=0.30000000000000004, lift=3.0000000000000004), OrderedStatistic(items_base=frozenset({'soup'}), items_add=frozenset({'green tea'}), confidence=0.42857142857142855, lift=3.0)]),\n", + " RelationRecord(items=frozenset({'green tea', 'white wine'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'green tea'}), confidence=0.5, lift=3.5)]),\n", + " RelationRecord(items=frozenset({'herb & pepper', 'ground beef'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'herb & pepper'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'ground beef'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'milk', 'ground beef'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'milk'}), confidence=0.5, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'milk'}), items_add=frozenset({'ground beef'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'ground beef', 'mineral water'}), support=0.05714285714285714, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579), OrderedStatistic(items_base=frozenset({'mineral water'}), items_add=frozenset({'ground beef'}), confidence=0.2105263157894737, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'ground beef'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'olive oil'}), confidence=0.25, lift=17.5), OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'ground beef'}), confidence=1.0, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'ground beef', 'red wine'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'red wine'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'red wine'}), items_add=frozenset({'ground beef'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'ground beef', 'salmon'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'salmon'}), confidence=0.25, lift=4.375), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'ground beef'}), confidence=0.25, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'tomatoes', 'ground beef'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'tomatoes'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'ground beef'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'whole wheat pasta', 'ground beef'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'whole wheat pasta'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'whole wheat pasta'}), items_add=frozenset({'ground beef'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'ground beef'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ground beef'}), items_add=frozenset({'whole wheat rice'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'ground beef'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'gums', 'soda'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'gums'}), items_add=frozenset({'soda'}), confidence=1.0, lift=70.0), OrderedStatistic(items_base=frozenset({'soda'}), items_add=frozenset({'gums'}), confidence=1.0, lift=70.0)]),\n", + " RelationRecord(items=frozenset({'soup', 'gums'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'gums'}), items_add=frozenset({'soup'}), confidence=1.0, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'ham', 'mineral water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ham'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'pancakes', 'ham'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ham'}), items_add=frozenset({'pancakes'}), confidence=1.0, lift=35.0), OrderedStatistic(items_base=frozenset({'pancakes'}), items_add=frozenset({'ham'}), confidence=0.5, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'spaghetti', 'ham'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'ham'}), items_add=frozenset({'spaghetti'}), confidence=1.0, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'herb & pepper', 'light cream'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'light cream'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'herb & pepper'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'magazines', 'herb & pepper'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'magazines'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'magazines'}), items_add=frozenset({'herb & pepper'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'tomato sauce', 'herb & pepper'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'tomato sauce'}), confidence=0.6666666666666666, lift=15.555555555555555), OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'herb & pepper'}), confidence=0.6666666666666666, lift=15.555555555555555)]),\n", + " RelationRecord(items=frozenset({'herb & pepper', 'tomatoes'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'tomatoes'}), confidence=0.3333333333333333, lift=7.777777777777778), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'herb & pepper'}), confidence=0.3333333333333333, lift=7.777777777777778)]),\n", + " RelationRecord(items=frozenset({'whole wheat pasta', 'herb & pepper'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'whole wheat pasta'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'whole wheat pasta'}), items_add=frozenset({'herb & pepper'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'herb & pepper'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'whole wheat rice'}), confidence=0.3333333333333333, lift=7.777777777777778), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'herb & pepper'}), confidence=0.3333333333333333, lift=7.777777777777778)]),\n", + " RelationRecord(items=frozenset({'low fat yogurt', 'honey'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'low fat yogurt'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'low fat yogurt'}), items_add=frozenset({'honey'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'meatballs', 'honey'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'meatballs'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'meatballs'}), items_add=frozenset({'honey'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'honey', 'oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'oil'}), confidence=0.25, lift=17.5), OrderedStatistic(items_base=frozenset({'oil'}), items_add=frozenset({'honey'}), confidence=1.0, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'honey', 'pasta'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'pasta'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'honey'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'honey', 'protein bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'protein bar'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'protein bar'}), items_add=frozenset({'honey'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'honey', 'shrimp'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'shrimp'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'honey'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'honey', 'toothpaste'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'toothpaste'}), confidence=0.25, lift=17.5), OrderedStatistic(items_base=frozenset({'toothpaste'}), items_add=frozenset({'honey'}), confidence=1.0, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'honey', 'white wine'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'white wine'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'honey'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'honey', 'whole wheat rice'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'honey'}), items_add=frozenset({'whole wheat rice'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'honey'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'meatballs', 'hot dogs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'meatballs'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'meatballs'}), items_add=frozenset({'hot dogs'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'pancakes', 'hot dogs'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'pancakes'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'pancakes'}), items_add=frozenset({'hot dogs'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'soup', 'hot dogs'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'soup'}), confidence=1.0, lift=10.0), OrderedStatistic(items_base=frozenset({'soup'}), items_add=frozenset({'hot dogs'}), confidence=0.2857142857142857, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'hot dogs', 'sparkling water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'hot dogs'}), items_add=frozenset({'sparkling water'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'sparkling water'}), items_add=frozenset({'hot dogs'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'magazines', 'light cream'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'magazines'}), confidence=0.5, lift=35.0), OrderedStatistic(items_base=frozenset({'magazines'}), items_add=frozenset({'light cream'}), confidence=1.0, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'shallot', 'light cream'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'shallot'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'shallot'}), items_add=frozenset({'light cream'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'soup', 'light cream'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'soup'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'tomato sauce', 'light cream'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'tomato sauce'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'light cream'}), confidence=0.3333333333333333, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'light mayo', 'tomato sauce'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light mayo'}), items_add=frozenset({'tomato sauce'}), confidence=1.0, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'light mayo'}), confidence=0.3333333333333333, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'low fat yogurt', 'oil'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'low fat yogurt'}), items_add=frozenset({'oil'}), confidence=0.5, lift=35.0), OrderedStatistic(items_base=frozenset({'oil'}), items_add=frozenset({'low fat yogurt'}), confidence=1.0, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'low fat yogurt', 'shrimp'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'low fat yogurt'}), items_add=frozenset({'shrimp'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'low fat yogurt'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'magazines', 'tomato sauce'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'magazines'}), items_add=frozenset({'tomato sauce'}), confidence=1.0, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'magazines'}), confidence=0.3333333333333333, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'meatballs', 'milk'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'meatballs'}), items_add=frozenset({'milk'}), confidence=0.3333333333333333, lift=3.888888888888889)]),\n", + " RelationRecord(items=frozenset({'meatballs', 'protein bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'meatballs'}), items_add=frozenset({'protein bar'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'protein bar'}), items_add=frozenset({'meatballs'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'meatballs', 'soup'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'meatballs'}), items_add=frozenset({'soup'}), confidence=0.3333333333333333, lift=3.333333333333333)]),\n", + " RelationRecord(items=frozenset({'meatballs', 'sparkling water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'meatballs'}), items_add=frozenset({'sparkling water'}), confidence=0.3333333333333333, lift=7.777777777777778), OrderedStatistic(items_base=frozenset({'sparkling water'}), items_add=frozenset({'meatballs'}), confidence=0.3333333333333333, lift=7.777777777777778)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'milk'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'milk'}), confidence=1.0, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'parmesan cheese', 'milk'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'parmesan cheese'}), items_add=frozenset({'milk'}), confidence=1.0, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'milk', 'protein bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'protein bar'}), items_add=frozenset({'milk'}), confidence=0.5, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'soup', 'milk'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'milk'}), items_add=frozenset({'soup'}), confidence=0.3333333333333333, lift=3.333333333333333), OrderedStatistic(items_base=frozenset({'soup'}), items_add=frozenset({'milk'}), confidence=0.2857142857142857, lift=3.333333333333333)]),\n", + " RelationRecord(items=frozenset({'milk', 'tomatoes'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'milk'}), confidence=0.3333333333333333, lift=3.888888888888889)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'milk'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'milk'}), confidence=0.3333333333333333, lift=3.888888888888889)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'mineral water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'whole wheat rice', 'mineral water'}), support=0.04285714285714286, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'yams', 'mineral water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'yams'}), items_add=frozenset({'mineral water'}), confidence=1.0, lift=3.68421052631579)]),\n", + " RelationRecord(items=frozenset({'oil', 'shrimp'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'oil'}), items_add=frozenset({'shrimp'}), confidence=1.0, lift=17.5), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'oil'}), confidence=0.25, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'soup'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'soup'}), confidence=1.0, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'spaghetti'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'spaghetti'}), confidence=1.0, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'tomatoes'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'tomatoes'}), confidence=1.0, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'olive oil'}), confidence=0.3333333333333333, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'olive oil', 'turkey'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'olive oil'}), items_add=frozenset({'turkey'}), confidence=1.0, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'pancakes', 'soup'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pancakes'}), items_add=frozenset({'soup'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'soup', 'parmesan cheese'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'parmesan cheese'}), items_add=frozenset({'soup'}), confidence=1.0, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'spaghetti', 'parmesan cheese'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'parmesan cheese'}), items_add=frozenset({'spaghetti'}), confidence=1.0, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'pepper', 'pasta'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'pepper'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'pepper'}), items_add=frozenset({'pasta'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'pasta', 'red wine'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'red wine'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'red wine'}), items_add=frozenset({'pasta'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'pasta', 'shampoo'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'shampoo'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'shampoo'}), items_add=frozenset({'pasta'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'pasta', 'shrimp'}), support=0.04285714285714286, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'shrimp'}), confidence=1.0, lift=17.5), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'pasta'}), confidence=0.75, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'pasta', 'toothpaste'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'toothpaste'}), confidence=0.3333333333333333, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'toothpaste'}), items_add=frozenset({'pasta'}), confidence=1.0, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'white wine', 'pasta'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'white wine'}), confidence=0.3333333333333333, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'pasta'}), confidence=0.5, lift=11.666666666666666)]),\n", + " RelationRecord(items=frozenset({'pepper', 'red wine'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pepper'}), items_add=frozenset({'red wine'}), confidence=1.0, lift=35.0), OrderedStatistic(items_base=frozenset({'red wine'}), items_add=frozenset({'pepper'}), confidence=0.5, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'pepper', 'shampoo'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pepper'}), items_add=frozenset({'shampoo'}), confidence=1.0, lift=70.0), OrderedStatistic(items_base=frozenset({'shampoo'}), items_add=frozenset({'pepper'}), confidence=1.0, lift=70.0)]),\n", + " RelationRecord(items=frozenset({'pepper', 'shrimp'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pepper'}), items_add=frozenset({'shrimp'}), confidence=1.0, lift=17.5), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'pepper'}), confidence=0.25, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'pickles', 'salmon'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pickles'}), items_add=frozenset({'salmon'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'pickles'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'shallot', 'protein bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'protein bar'}), items_add=frozenset({'shallot'}), confidence=0.5, lift=17.5), OrderedStatistic(items_base=frozenset({'shallot'}), items_add=frozenset({'protein bar'}), confidence=0.5, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'soup', 'protein bar'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'protein bar'}), items_add=frozenset({'soup'}), confidence=0.5, lift=5.0)]),\n", + " RelationRecord(items=frozenset({'shampoo', 'red wine'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'red wine'}), items_add=frozenset({'shampoo'}), confidence=0.5, lift=35.0), OrderedStatistic(items_base=frozenset({'shampoo'}), items_add=frozenset({'red wine'}), confidence=1.0, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'shrimp', 'red wine'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'red wine'}), items_add=frozenset({'shrimp'}), confidence=0.5, lift=8.75), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'red wine'}), confidence=0.25, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'sparkling water', 'rice'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'rice'}), items_add=frozenset({'sparkling water'}), confidence=1.0, lift=23.333333333333332), OrderedStatistic(items_base=frozenset({'sparkling water'}), items_add=frozenset({'rice'}), confidence=0.3333333333333333, lift=23.333333333333332)]),\n", + " RelationRecord(items=frozenset({'spaghetti', 'salmon'}), support=0.04285714285714286, ordered_statistics=[OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'spaghetti'}), confidence=0.75, lift=3.28125)]),\n", + " RelationRecord(items=frozenset({'tomatoes', 'salmon'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'salmon'}), items_add=frozenset({'tomatoes'}), confidence=0.25, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'salmon'}), confidence=0.3333333333333333, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'shallot', 'soup'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'shallot'}), items_add=frozenset({'soup'}), confidence=1.0, lift=10.0), OrderedStatistic(items_base=frozenset({'soup'}), items_add=frozenset({'shallot'}), confidence=0.2857142857142857, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'shampoo', 'shrimp'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'shampoo'}), items_add=frozenset({'shrimp'}), confidence=1.0, lift=17.5), OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'shampoo'}), confidence=0.25, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'shrimp', 'toothpaste'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'toothpaste'}), confidence=0.25, lift=17.5), OrderedStatistic(items_base=frozenset({'toothpaste'}), items_add=frozenset({'shrimp'}), confidence=1.0, lift=17.5)]),\n", + " RelationRecord(items=frozenset({'white wine', 'shrimp'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'shrimp'}), items_add=frozenset({'white wine'}), confidence=0.25, lift=8.75), OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'shrimp'}), confidence=0.5, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'soup', 'soda'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'soda'}), items_add=frozenset({'soup'}), confidence=1.0, lift=10.0)]),\n", + " RelationRecord(items=frozenset({'soup', 'sparkling water'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'sparkling water'}), items_add=frozenset({'soup'}), confidence=0.3333333333333333, lift=3.333333333333333)]),\n", + " RelationRecord(items=frozenset({'soup', 'tomatoes'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'soup'}), confidence=0.3333333333333333, lift=3.333333333333333)]),\n", + " RelationRecord(items=frozenset({'spaghetti', 'yams'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'yams'}), items_add=frozenset({'spaghetti'}), confidence=1.0, lift=4.375)]),\n", + " RelationRecord(items=frozenset({'strawberries', 'turkey'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'strawberries'}), items_add=frozenset({'turkey'}), confidence=1.0, lift=8.75)]),\n", + " RelationRecord(items=frozenset({'tomato sauce', 'tomatoes'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'tomatoes'}), confidence=0.3333333333333333, lift=7.777777777777778), OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'tomato sauce'}), confidence=0.3333333333333333, lift=7.777777777777778)]),\n", + " RelationRecord(items=frozenset({'turkey', 'tomatoes'}), support=0.02857142857142857, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tomatoes'}), items_add=frozenset({'turkey'}), confidence=0.6666666666666666, lift=5.833333333333333), OrderedStatistic(items_base=frozenset({'turkey'}), items_add=frozenset({'tomatoes'}), confidence=0.25, lift=5.833333333333333)]),\n", + " RelationRecord(items=frozenset({'white wine', 'toothpaste'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'toothpaste'}), items_add=frozenset({'white wine'}), confidence=1.0, lift=35.0), OrderedStatistic(items_base=frozenset({'white wine'}), items_add=frozenset({'toothpaste'}), confidence=0.5, lift=35.0)]),\n", + " RelationRecord(items=frozenset({'whole wheat pasta', 'whole wheat rice'}), support=0.014285714285714285, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat pasta'}), items_add=frozenset({'whole wheat rice'}), confidence=0.5, lift=11.666666666666666), OrderedStatistic(items_base=frozenset({'whole wheat rice'}), items_add=frozenset({'whole wheat pasta'}), confidence=0.3333333333333333, lift=11.666666666666666)])]" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rTMd_brsUctX" + }, + "source": [ + "### Results in Dataframe" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "PXDHbM4aUdvc", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 691 + }, + "outputId": "9a2dd7f7-dda9-4d9b-bd8c-b3541374c580" + }, + "source": [ + "lhs = [tuple(result[2][0][0])[0] for result in results]\n", + "rhs = [tuple(result[2][0][1])[0] for result in results]\n", + "supports = [result[1] for result in results]\n", + "resultsinDataFrame = pd.DataFrame(zip(lhs, rhs, supports), columns = ['Left Hand Side', 'Right Hand Side', 'Support'])\n", + "resultsinDataFrame" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Left Hand Side Right Hand Side Support\n", + "0 body spray avocado 0.014286\n", + "1 brownies avocado 0.014286\n", + "2 cider avocado 0.014286\n", + "3 fresh bread avocado 0.014286\n", + "4 grated cheese avocado 0.014286\n", + ".. ... ... ...\n", + "271 strawberries turkey 0.014286\n", + "272 tomato sauce tomatoes 0.014286\n", + "273 tomatoes turkey 0.028571\n", + "274 toothpaste white wine 0.014286\n", + "275 whole wheat pasta whole wheat rice 0.014286\n", + "\n", + "[276 rows x 3 columns]" + ], + "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", + " \n", + " \n", + "
Left Hand SideRight Hand SideSupport
0body sprayavocado0.014286
1browniesavocado0.014286
2cideravocado0.014286
3fresh breadavocado0.014286
4grated cheeseavocado0.014286
............
271strawberriesturkey0.014286
272tomato saucetomatoes0.014286
273tomatoesturkey0.028571
274toothpastewhite wine0.014286
275whole wheat pastawhole wheat rice0.014286
\n", + "

276 rows × 3 columns

\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" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "resultsinDataFrame", + "summary": "{\n \"name\": \"resultsinDataFrame\",\n \"rows\": 276,\n \"fields\": [\n {\n \"column\": \"Left Hand Side\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 62,\n \"samples\": [\n \"ground beef\",\n \"milk\",\n \"body spray\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Right Hand Side\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 56,\n \"samples\": [\n \"avocado\",\n \"extra dark chocolate\",\n \"cottage cheese\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Support\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.006651053212295191,\n \"min\": 0.014285714285714285,\n \"max\": 0.05714285714285714,\n \"num_unique_values\": 4,\n \"samples\": [\n 0.02857142857142857,\n 0.05714285714285714,\n 0.014285714285714285\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "iyGa_C_jFz1U" + }, + "execution_count": 9, + "outputs": [] + }, + { + "source": [ + "from google.colab import sheets\n", + "sheet = sheets.InteractiveSheet(df=resultsinDataFrame)" + ], + "cell_type": "code", + "execution_count": 11, + "outputs": [ + { + "output_type": "error", + "ename": "MessageError", + "evalue": "Error: credential propagation was unsuccessful", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mMessageError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mgoogle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolab\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msheets\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0msheet\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msheets\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInteractiveSheet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mresultsinDataFrame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/google/colab/sheets.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, title, url, sheet_id, df, worksheet_id, worksheet_name, credentials, include_column_headers, display)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0murl\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34mf'https://docs.google.com/spreadsheets/d/{sheet_id}'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_credentials\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcredentials\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 112\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_ensure_gspread_client\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 113\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msheet\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_load_or_create_sheet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtitle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/google/colab/sheets.py\u001b[0m in \u001b[0;36m_ensure_gspread_client\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 166\u001b[0m \u001b[0;32mglobal\u001b[0m \u001b[0m_gspread_client\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 167\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0m_gspread_client\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 168\u001b[0;31m \u001b[0mcreds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mInteractiveSheet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_creds\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_credentials\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 169\u001b[0m \u001b[0m_gspread_client\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgspread\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauthorize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcreds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 170\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/google/colab/sheets.py\u001b[0m in \u001b[0;36mgenerate_creds\u001b[0;34m(cls, credentials)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mclassmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mgenerate_creds\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcredentials\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_generate_creds\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcredentials\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mas_df\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/google/colab/sheets.py\u001b[0m in \u001b[0;36m_generate_creds\u001b[0;34m(unused_credentials)\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_generate_creds\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munused_credentials\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 35\u001b[0;31m \u001b[0mauth\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauthenticate_user\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 36\u001b[0m scopes = (\n\u001b[1;32m 37\u001b[0m \u001b[0;34m'https://www.googleapis.com/auth/drive'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/google/colab/auth.py\u001b[0m in \u001b[0;36mauthenticate_user\u001b[0;34m(clear_output, project_id)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0m_check_adc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_CredentialType\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mUSER\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 259\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0muse_auth_ephem\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 260\u001b[0;31m _message.blocking_request(\n\u001b[0m\u001b[1;32m 261\u001b[0m \u001b[0;34m'request_auth'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 262\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'authType'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'auth_user_ephemeral'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/google/colab/_message.py\u001b[0m in \u001b[0;36mblocking_request\u001b[0;34m(request_type, request, timeout_sec, parent)\u001b[0m\n\u001b[1;32m 174\u001b[0m \u001b[0mrequest_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexpect_reply\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m )\n\u001b[0;32m--> 176\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mread_reply_from_input\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout_sec\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/google/colab/_message.py\u001b[0m in \u001b[0;36mread_reply_from_input\u001b[0;34m(message_id, timeout_sec)\u001b[0m\n\u001b[1;32m 101\u001b[0m ):\n\u001b[1;32m 102\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'error'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mreply\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 103\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mMessageError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreply\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'error'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 104\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mreply\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'data'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 105\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mMessageError\u001b[0m: Error: credential propagation was unsuccessful" + ] + } + ], + "metadata": { + "cellView": "form", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 319 + }, + "id": "JjDYBl2dFtHq", + "outputId": "1cbba724-5869-4103-ee61-e32bb80cea0c" + } + }, + { + "cell_type": "code", + "metadata": { + "id": "yQfSAap7SwQq", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 363 + }, + "outputId": "fba5e6a7-e48f-4fdc-abc1-cc1349ccf9bc" + }, + "source": [ + "resultsinDataFrame.nlargest(n = 10, columns = 'Support')" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Left Hand Side Right Hand Side Support\n", + "146 fresh tuna mineral water 0.057143\n", + "186 ground beef mineral water 0.057143\n", + "29 body spray green tea 0.042857\n", + "149 fresh tuna spaghetti 0.042857\n", + "182 green tea soup 0.042857\n", + "236 whole wheat rice mineral water 0.042857\n", + "249 pasta shrimp 0.042857\n", + "261 salmon spaghetti 0.042857\n", + "24 black tea salmon 0.028571\n", + "33 body spray pancakes 0.028571" + ], + "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", + "
Left Hand SideRight Hand SideSupport
146fresh tunamineral water0.057143
186ground beefmineral water0.057143
29body spraygreen tea0.042857
149fresh tunaspaghetti0.042857
182green teasoup0.042857
236whole wheat ricemineral water0.042857
249pastashrimp0.042857
261salmonspaghetti0.042857
24black teasalmon0.028571
33body spraypancakes0.028571
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"resultsinDataFrame\",\n \"rows\": 10,\n \"fields\": [\n {\n \"column\": \"Left Hand Side\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"ground beef\",\n \"pasta\",\n \"fresh tuna\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Right Hand Side\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 7,\n \"samples\": [\n \"mineral water\",\n \"green tea\",\n \"salmon\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Support\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.009523809523809525,\n \"min\": 0.02857142857142857,\n \"max\": 0.05714285714285714,\n \"num_unique_values\": 3,\n \"samples\": [\n 0.05714285714285714,\n 0.04285714285714286,\n 0.02857142857142857\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 10 + } + ] + } + ] +} \ No newline at end of file diff --git a/25_WebAdOptimization_UpperConfidenceBound_ReinforcementLearning.ipynb b/25_WebAdOptimization_UpperConfidenceBound_ReinforcementLearning.ipynb new file mode 100644 index 0000000..55a0735 --- /dev/null +++ b/25_WebAdOptimization_UpperConfidenceBound_ReinforcementLearning.ipynb @@ -0,0 +1,427 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "include_colab_link": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "r3cas2_1T98w" + }, + "source": [ + "#25_WebAdOptimization_UpperConfidenceBound_ReinforcementLearning" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IODliia6U1xO" + }, + "source": [ + "### Importing the basic libraries" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "y98nA5UdU6Hf" + }, + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jpjZ43YlU8eI" + }, + "source": [ + "### Load Dataset from Local Directory" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pLVaXoYVU_Uy", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "1e35d194-6168-4329-e254-b70e50cca5c6" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset.csv to dataset.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fLBaNX8cVymm" + }, + "source": [ + "### Importing the dataset" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "lBgHJ6c7gDn2", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "7de7c448-9083-4ffd-c6dc-85cde4949680" + }, + "source": [ + "dataset = pd.read_csv('dataset.csv')\n", + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(10000, 10)\n", + " Ad 1 Ad 2 Ad 3 Ad 4 Ad 5 Ad 6 Ad 7 Ad 8 Ad 9 Ad 10\n", + "0 1 0 0 0 1 0 0 0 1 0\n", + "1 0 0 0 0 0 0 0 0 1 0\n", + "2 0 0 0 0 0 0 0 0 0 0\n", + "3 0 1 0 0 0 0 0 1 0 0\n", + "4 0 0 0 0 0 0 0 0 0 0\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "n90Tb_w9V-vn" + }, + "source": [ + "### Upper Confidence Bound" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pm6q3gWXgG_1", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "315c1f75-e02a-408b-9422-d4b15f1c12f5" + }, + "source": [ + "import math\n", + "observations = 10000\n", + "no_of_Ads = 10\n", + "ads_selected = []\n", + "numbers_of_selections_of_each_ads = [0] * no_of_Ads\n", + "sums_of_rewards_of_each_ads = [0] * no_of_Ads\n", + "total_reward = 0\n", + "for n in range(0, observations):\n", + " ad = 0\n", + " max_upper_bound = 0\n", + " for i in range(0, no_of_Ads):\n", + " if (numbers_of_selections_of_each_ads[i] > 0):\n", + " average_reward = sums_of_rewards_of_each_ads[i] / numbers_of_selections_of_each_ads[i]\n", + " delta_i = math.sqrt(3/2 * math.log(n + 1) / numbers_of_selections_of_each_ads[i])\n", + " upper_bound = average_reward + delta_i\n", + " else:\n", + " upper_bound = 1e400\n", + " if upper_bound > max_upper_bound:\n", + " max_upper_bound = upper_bound\n", + " ad = i\n", + " ads_selected.append(ad)\n", + " numbers_of_selections_of_each_ads[ad] = numbers_of_selections_of_each_ads[ad] + 1\n", + " reward = dataset.values[n, ad]\n", + " sums_of_rewards_of_each_ads[ad] = sums_of_rewards_of_each_ads[ad] + reward\n", + " total_reward = total_reward + reward\n", + "\n", + "print(\"Rewards by Ads = \",sums_of_rewards_of_each_ads)\n", + "print(\"Total Rewards by UCB = \",total_reward)\n", + "print(\"Ads selected at each round:\",ads_selected)" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Rewards by Ads = [120, 47, 7, 38, 1675, 1, 27, 236, 20, 7]\n", + "Total Rewards by UCB = 2178\n", + "Ads selected at each round: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 0, 8, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 9, 7, 0, 6, 8, 1, 2, 3, 4, 4, 4, 4, 4, 5, 9, 7, 0, 0, 6, 8, 4, 0, 7, 1, 1, 2, 3, 5, 9, 4, 1, 6, 8, 0, 7, 2, 3, 5, 9, 4, 1, 6, 8, 0, 7, 7, 7, 7, 7, 7, 4, 2, 3, 5, 9, 1, 6, 8, 0, 0, 7, 0, 4, 1, 6, 8, 2, 3, 5, 9, 7, 0, 4, 4, 4, 7, 7, 7, 7, 1, 6, 8, 2, 3, 5, 9, 0, 7, 7, 4, 7, 7, 7, 1, 6, 8, 0, 4, 4, 2, 3, 5, 9, 4, 7, 0, 7, 1, 1, 1, 6, 6, 6, 6, 6, 8, 4, 2, 3, 5, 9, 7, 7, 7, 0, 6, 4, 1, 1, 1, 8, 7, 2, 3, 5, 9, 4, 0, 1, 1, 1, 6, 7, 8, 4, 1, 2, 3, 5, 9, 0, 6, 7, 8, 4, 7, 1, 0, 6, 2, 3, 5, 9, 7, 7, 7, 7, 4, 4, 4, 4, 4, 7, 8, 1, 0, 6, 6, 6, 7, 4, 2, 3, 5, 9, 1, 6, 8, 7, 0, 4, 4, 4, 4, 4, 2, 3, 5, 9, 1, 6, 7, 4, 8, 0, 7, 4, 4, 4, 1, 6, 2, 3, 5, 9, 0, 0, 0, 7, 8, 4, 0, 0, 0, 1, 6, 7, 4, 2, 3, 5, 9, 0, 8, 7, 1, 6, 4, 0, 7, 7, 7, 7, 7, 2, 3, 5, 9, 8, 4, 1, 6, 6, 6, 7, 7, 7, 0, 6, 7, 4, 1, 1, 1, 2, 2, 2, 3, 5, 9, 2, 8, 7, 0, 1, 6, 4, 7, 2, 8, 3, 5, 9, 9, 9, 9, 4, 0, 1, 6, 7, 4, 7, 0, 1, 6, 2, 8, 9, 3, 5, 4, 7, 0, 0, 0, 1, 6, 2, 8, 9, 4, 0, 3, 5, 7, 1, 6, 7, 4, 0, 2, 8, 9, 3, 5, 7, 4, 4, 4, 4, 4, 1, 6, 4, 0, 7, 2, 8, 9, 4, 3, 5, 1, 6, 6, 6, 0, 6, 7, 4, 4, 4, 2, 8, 8, 8, 8, 9, 4, 1, 7, 0, 6, 3, 5, 7, 7, 7, 4, 8, 1, 2, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 5, 4, 4, 4, 7, 4, 4, 4, 0, 1, 1, 1, 8, 8, 8, 8, 1, 6, 4, 2, 9, 7, 3, 3, 3, 3, 5, 0, 4, 4, 4, 8, 1, 6, 4, 7, 2, 3, 9, 0, 5, 4, 7, 1, 6, 8, 0, 2, 3, 9, 4, 7, 7, 7, 7, 1, 6, 8, 5, 0, 4, 7, 2, 3, 9, 1, 6, 4, 0, 8, 7, 5, 4, 1, 6, 6, 6, 6, 2, 3, 3, 3, 3, 9, 7, 0, 8, 4, 4, 4, 4, 4, 4, 3, 5, 7, 6, 1, 1, 1, 1, 0, 4, 2, 9, 8, 8, 8, 8, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 1, 6, 4, 4, 4, 0, 5, 4, 4, 4, 8, 7, 7, 7, 2, 9, 4, 7, 0, 1, 6, 3, 4, 5, 5, 5, 5, 7, 8, 2, 5, 9, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 1, 6, 4, 7, 7, 7, 3, 7, 8, 4, 0, 1, 6, 2, 5, 9, 9, 9, 9, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 9, 4, 8, 0, 0, 0, 0, 0, 0, 0, 7, 1, 6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 2, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 9, 4, 0, 8, 6, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 2, 5, 7, 7, 7, 0, 0, 0, 0, 4, 7, 6, 3, 9, 8, 1, 1, 1, 1, 4, 7, 0, 4, 4, 4, 2, 5, 1, 6, 4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 4, 3, 9, 0, 4, 7, 1, 6, 6, 6, 6, 2, 5, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 0, 3, 3, 3, 3, 9, 7, 4, 6, 3, 1, 7, 4, 0, 2, 5, 8, 9, 4, 4, 4, 4, 4, 4, 6, 7, 1, 3, 4, 4, 4, 0, 4, 8, 7, 2, 5, 6, 6, 6, 6, 4, 9, 1, 0, 4, 3, 7, 6, 4, 8, 0, 2, 5, 7, 1, 9, 9, 9, 9, 4, 6, 3, 3, 3, 3, 9, 4, 4, 4, 7, 4, 0, 0, 0, 0, 3, 8, 1, 2, 5, 4, 7, 7, 7, 6, 7, 0, 9, 4, 3, 8, 1, 7, 7, 7, 7, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 4, 9, 7, 0, 1, 4, 3, 8, 6, 7, 4, 0, 2, 5, 9, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 6, 3, 8, 4, 0, 4, 7, 2, 5, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 6, 4, 4, 4, 4, 4, 4, 0, 3, 3, 3, 3, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 4, 1, 6, 2, 5, 0, 9, 4, 4, 4, 7, 4, 8, 4, 3, 7, 0, 1, 6, 4, 2, 5, 9, 4, 7, 8, 8, 8, 8, 0, 3, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 6, 4, 7, 9, 0, 4, 2, 5, 7, 4, 3, 3, 3, 3, 8, 6, 1, 3, 4, 0, 7, 7, 7, 7, 4, 4, 4, 9, 9, 9, 9, 4, 9, 2, 5, 6, 1, 1, 1, 1, 8, 0, 4, 4, 4, 4, 4, 4, 7, 3, 4, 1, 4, 6, 7, 9, 0, 2, 5, 8, 4, 3, 1, 4, 4, 4, 7, 4, 6, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 4, 8, 7, 2, 5, 1, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 0, 3, 7, 4, 9, 8, 1, 4, 2, 5, 7, 6, 0, 4, 3, 4, 9, 9, 9, 9, 1, 7, 8, 9, 4, 0, 6, 2, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 7, 4, 1, 0, 4, 8, 9, 6, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 5, 4, 3, 0, 1, 4, 7, 8, 9, 6, 4, 4, 4, 4, 0, 4, 3, 7, 2, 5, 1, 4, 6, 6, 6, 6, 4, 8, 9, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 6, 4, 4, 4, 3, 4, 7, 7, 7, 7, 7, 7, 7, 0, 1, 4, 2, 5, 7, 4, 8, 9, 6, 0, 4, 3, 7, 1, 4, 4, 2, 5, 6, 6, 6, 6, 6, 6, 6, 6, 0, 7, 8, 9, 4, 3, 1, 4, 6, 7, 7, 7, 7, 0, 4, 4, 4, 4, 4, 4, 4, 7, 8, 9, 2, 5, 4, 3, 1, 6, 4, 0, 7, 4, 4, 8, 8, 8, 8, 8, 9, 3, 0, 6, 6, 6, 6, 7, 2, 5, 1, 4, 6, 4, 7, 4, 0, 8, 8, 8, 8, 8, 3, 9, 4, 4, 4, 4, 4, 4, 1, 4, 6, 2, 5, 7, 4, 0, 4, 8, 3, 7, 7, 7, 7, 1, 4, 6, 6, 6, 6, 9, 0, 6, 4, 7, 2, 5, 4, 3, 8, 8, 8, 8, 8, 4, 1, 7, 0, 9, 6, 4, 4, 4, 4, 4, 4, 4, 4, 7, 2, 5, 0, 4, 3, 8, 1, 6, 9, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 2, 5, 6, 3, 8, 8, 8, 8, 1, 8, 7, 4, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 0, 6, 4, 1, 8, 3, 2, 5, 4, 4, 4, 4, 4, 4, 4, 7, 9, 0, 4, 6, 4, 1, 8, 7, 7, 7, 7, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 4, 9, 6, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 8, 4, 3, 7, 4, 6, 4, 2, 5, 9, 0, 7, 4, 1, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 7, 7, 7, 7, 6, 4, 0, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 2, 5, 7, 4, 1, 1, 1, 1, 1, 8, 3, 0, 4, 6, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 5, 7, 4, 0, 3, 6, 4, 4, 4, 4, 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 9, 8, 6, 3, 4, 4, 4, 4, 7, 2, 5, 0, 4, 4, 7, 1, 6, 4, 8, 9, 0, 3, 4, 7, 4, 2, 5, 4, 0, 6, 1, 4, 7, 8, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 0, 4, 7, 7, 7, 7, 6, 2, 2, 2, 2, 2, 5, 4, 1, 3, 7, 2, 8, 4, 0, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 6, 1, 3, 4, 0, 5, 8, 7, 7, 7, 7, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 9, 4, 4, 4, 4, 4, 4, 4, 6, 0, 4, 1, 3, 7, 4, 4, 4, 4, 8, 5, 4, 0, 2, 6, 7, 4, 9, 4, 1, 1, 1, 1, 1, 3, 7, 4, 0, 8, 4, 6, 5, 4, 7, 2, 9, 1, 0, 4, 3, 3, 3, 3, 3, 4, 4, 4, 4, 8, 7, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 9, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 6, 4, 0, 7, 4, 1, 3, 4, 7, 9, 5, 0, 2, 4, 6, 8, 4, 7, 4, 1, 3, 3, 3, 3, 3, 0, 7, 7, 7, 7, 4, 6, 9, 7, 4, 8, 5, 2, 4, 3, 0, 7, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 9, 8, 4, 4, 4, 4, 5, 7, 7, 7, 7, 2, 0, 0, 0, 0, 3, 4, 0, 1, 7, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 7, 9, 0, 8, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 2, 4, 1, 7, 7, 7, 7, 3, 6, 4, 7, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 9, 4, 7, 7, 7, 7, 4, 1, 3, 7, 0, 2, 2, 2, 2, 2, 6, 5, 4, 2, 4, 7, 7, 7, 7, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 0, 7, 3, 4, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 7, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 6, 3, 4, 7, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 7, 1, 1, 1, 1, 1, 4, 2, 5, 6, 4, 0, 3, 8, 7, 4, 4, 4, 4, 9, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 3, 4, 4, 4, 4, 2, 8, 5, 4, 7, 1, 4, 0, 9, 4, 7, 6, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 4, 2, 1, 4, 4, 4, 4, 5, 0, 4, 9, 6, 7, 7, 7, 7, 4, 3, 3, 3, 3, 3, 7, 4, 0, 4, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 4, 2, 3, 6, 4, 5, 1, 0, 4, 4, 4, 4, 9, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 7, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 7, 4, 5, 9, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 1, 8, 4, 6, 6, 6, 6, 6, 7, 4, 4, 0, 2, 7, 4, 3, 9, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 5, 4, 8, 1, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 0, 0, 0, 0, 4, 3, 6, 0, 4, 2, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 9, 4, 5, 8, 4, 0, 7, 4, 3, 6, 4, 1, 4, 7, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 9, 8, 4, 7, 3, 6, 5, 4, 1, 0, 4, 7, 4, 4, 3, 6, 0, 2, 4, 9, 7, 8, 8, 8, 8, 8, 1, 4, 4, 8, 5, 7, 4, 0, 4, 4, 4, 4, 3, 6, 1, 4, 7, 7, 7, 7, 4, 9, 7, 2, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 7, 3, 3, 3, 3, 3, 6, 4, 0, 4, 4, 7, 9, 2, 4, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 0, 4, 6, 7, 4, 8, 5, 4, 4, 4, 4, 4, 4, 4, 4, 7, 1, 1, 1, 1, 1, 0, 3, 4, 9, 4, 6, 2, 4, 7, 8, 4, 0, 1, 4, 4, 4, 4, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 4, 6, 7, 4, 0, 4, 9, 1, 2, 4, 8, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 7, 5, 4, 4, 4, 4, 1, 3, 6, 4, 4, 4, 4, 9, 4, 8, 7, 0, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 7, 4, 3, 6, 0, 4, 5, 8, 8, 8, 8, 8, 7, 4, 4, 4, 4, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, 2, 4, 8, 0, 7, 3, 3, 3, 3, 3, 6, 4, 4, 4, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 8, 0, 6, 2, 4, 4, 7, 1, 4, 4, 0, 3, 7, 4, 6, 9, 5, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 1, 0, 2, 4, 3, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 6, 0, 8, 8, 8, 8, 8, 4, 1, 9, 7, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 8, 8, 8, 8, 8, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 0, 7, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 1, 4, 7, 4, 0, 3, 9, 4, 4, 4, 4, 7, 4, 5, 6, 4, 1, 1, 1, 1, 1, 2, 8, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 6, 4, 7, 0, 4, 5, 8, 8, 8, 8, 8, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 7, 4, 1, 8, 4, 0, 6, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 4, 4, 7, 3, 3, 3, 3, 3, 0, 1, 5, 4, 2, 8, 4, 6, 7, 4, 3, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 7, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 6, 6, 6, 6, 6, 7, 0, 4, 5, 3, 2, 4, 4, 4, 4, 4, 1, 7, 6, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 8, 7, 7, 7, 7, 4, 3, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 4, 0, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 9, 3, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 7, 2, 5, 4, 0, 4, 3, 8, 7, 1, 4, 9, 4, 6, 4, 7, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 8, 2, 7, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 5, 4, 0, 4, 6, 7, 9, 4, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 3, 0, 8, 8, 8, 8, 8, 7, 4, 4, 4, 4, 4, 6, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 8, 1, 4, 7, 0, 4, 9, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 2, 4, 4, 4, 4, 4, 5, 8, 1, 7, 4, 0, 4, 9, 3, 4, 7, 4, 4, 4, 4, 4, 4, 6, 0, 4, 1, 1, 1, 1, 1, 7, 8, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 4, 7, 5, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 4, 6, 4, 7, 4, 8, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 4, 4, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 7, 4, 0, 4, 6, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 7, 4, 5, 9, 4, 8, 1, 4, 0, 4, 7, 4, 4, 4, 6, 3, 7, 4, 4, 0, 0, 0, 0, 0, 1, 4, 2, 2, 2, 2, 2, 2, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 7, 9, 4, 5, 4, 0, 3, 4, 6, 7, 7, 7, 7, 4, 7, 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 4, 6, 5, 4, 1, 7, 4, 0, 4, 2, 4, 8, 4, 7, 4, 3, 4, 0, 4, 1, 6, 6, 6, 6, 6, 7, 4, 4, 4, 4, 4, 4, 4, 4, 9, 4, 4, 6, 7, 5, 4, 8, 0, 3, 4, 2, 4, 1, 4, 7, 4, 4, 0, 4, 7, 4, 6, 3, 4, 9, 8, 4, 1, 4, 4, 4, 4, 7, 4, 0, 0, 0, 0, 0, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 7, 4, 6, 3, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 4, 8, 7, 4, 9, 4, 4, 4, 4, 4, 4, 1, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 3, 5, 4, 6, 2, 4, 4, 7, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 1, 1, 1, 1, 4, 7, 7, 7, 7, 9, 4, 4, 4, 4, 4, 4, 4, 3, 7, 7, 7, 7, 4, 7, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 1, 0, 4, 4, 7, 5, 2, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 6, 4, 7, 0, 4, 1, 4, 4, 4, 4, 9, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 8, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 2, 9, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 4, 4, 4, 4, 8, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 7, 7, 7, 7, 4, 5, 7, 4, 4, 4, 3, 4, 7, 0, 4, 8, 2, 9, 1, 1, 1, 1, 1, 6, 4, 4, 7, 4, 4, 4, 4, 4, 4, 1, 0, 0, 0, 0, 0, 4, 7, 3, 4, 4, 5, 4, 4, 4, 4, 4, 8, 6, 7, 4, 0, 4, 2, 9, 9, 9, 9, 9, 9, 1, 4, 4, 7, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 4, 4, 7, 6, 9, 4, 8, 4, 1, 1, 1, 1, 1, 4, 5, 0, 4, 7, 3, 3, 3, 3, 3, 4, 2, 4, 1, 4, 7, 4, 3, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 9, 4, 7, 4, 1, 4, 4, 0, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 7, 2, 6, 4, 4, 8, 4, 7, 4, 4, 4, 4, 1, 0, 4, 4, 9, 4, 7, 7, 7, 7, 7, 7, 7, 7, 3, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 4, 0, 4, 5, 7, 1, 4, 2, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 4, 0, 4, 6, 4, 9, 4, 7, 1, 4, 4, 0, 4, 8, 7, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 5, 4, 4, 4, 4, 4, 6, 7, 4, 1, 4, 0, 4, 4, 9, 7, 4, 3, 8, 4, 4, 0, 4, 7, 1, 4, 6, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 7, 4, 3, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 7, 7, 7, 7, 1, 1, 1, 1, 1, 4, 7, 7, 7, 7, 7, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 4, 0, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 3, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 9, 4, 7, 1, 4, 3, 4, 4, 7, 7, 7, 7, 4, 7, 0, 4, 4, 2, 4, 8, 8, 8, 8, 8, 8, 7, 1, 4, 4, 4, 4, 6, 4, 3, 5, 4, 0, 4, 9, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 0, 8, 4, 4, 4, 4, 4, 4, 4, 3, 4, 2, 4, 4, 4, 4, 4, 6, 7, 4, 4, 4, 4, 4, 4, 5, 0, 9, 4, 7, 1, 4, 4, 4, 4, 4, 3, 4, 4, 7, 8, 0, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 4, 8, 4, 6, 4, 0, 0, 0, 0, 0, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 7, 0, 4, 4, 4, 9, 4, 7, 5, 6, 8, 8, 8, 8, 8, 8, 4, 1, 0, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 0, 0, 0, 0, 0, 4, 4, 6, 4, 7, 7, 7, 7, 1, 7, 8, 4, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 0, 4, 3, 4, 7, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 4, 0, 7, 1, 4, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 8, 7, 7, 7, 7, 3, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 4, 4, 4, 7, 7, 7, 7, 5, 4, 7, 1, 4, 4, 4, 4, 4, 6, 0, 2, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 8, 4, 4, 4, 7, 0, 0, 0, 0, 0, 4, 1, 4, 9, 4, 7, 4, 4, 4, 4, 6, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 5, 7, 4, 4, 4, 4, 2, 8, 4, 4, 4, 7, 1, 1, 1, 1, 1, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 7, 6, 4, 3, 9, 4, 0, 4, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 8, 4, 4, 2, 5, 4, 4, 4, 4, 4, 7, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 6, 4, 7, 4, 4, 4, 4, 4, 4, 9, 0, 4, 7, 7, 7, 7, 8, 4, 7, 4, 1, 4, 4, 7, 3, 2, 4, 4, 4, 4, 0, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 8, 1, 1, 1, 1, 1, 9, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 3, 4, 1, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 7, 4, 0, 4, 5, 4, 4, 7, 4, 8, 4, 4, 0, 0, 0, 0, 0, 3, 7, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 6, 4, 4, 7, 4, 0, 4, 4, 2, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 1, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 7, 7, 7, 7, 7, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 9, 7, 4, 4, 4, 4, 4, 4, 0, 1, 4, 3, 7, 4, 4, 4, 4, 4, 2, 8, 4, 4, 7, 4, 6, 0, 4, 4, 4, 7, 5, 4, 1, 4, 3, 4, 0, 7, 7, 7, 7, 4, 4, 4, 4, 9, 7, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 7, 2, 4, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 7, 7, 7, 7, 7, 7, 7, 7, 4, 3, 7, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 9, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 1, 6, 4, 4, 7, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 0, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 5, 4, 7, 0, 8, 4, 6, 4, 9, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 0, 4, 3, 7, 4, 1, 4, 4, 4, 4, 4, 4, 4, 7, 4, 6, 0, 8, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 9, 9, 9, 9, 9, 9, 3, 4, 1, 0, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 6, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 4, 1, 1, 1, 1, 1, 4, 4, 4, 7, 0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 9, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 0, 4, 4, 7, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 0, 4, 4, 4, 1, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 5, 4, 4, 3, 4, 2, 9, 8, 4, 4, 1, 4, 4, 0, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 4, 6, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 4, 1, 1, 1, 1, 1, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 2, 9, 3, 3, 3, 3, 3, 4, 1, 0, 7, 7, 7, 7, 4, 7, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 6, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zoIEOorVTzD9" + }, + "source": [ + "### Visualizing Result" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wOuthXLlT0GI", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "outputId": "2e3d05d6-f6a1-4b22-888b-3dff0e483130" + }, + "source": [ + "plt.hist(ads_selected)\n", + "plt.title('Histogram of ads selections')\n", + "plt.xlabel('Ads')\n", + "plt.ylabel('Number of times each ad was selected')\n", + "plt.show()" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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yZfd9+jRA/fu3YNSqUSdOnXE9nHjxqFmzZoaLY6IiIhIF17qPkTGxsZqYQgA3NzcNFEPERERkc5JPmVGREREVN0wEBEREZHBYyAiIiIig6eRQJSXl6eJzRARERHpxUtddr99+3bx/eDBg2Fra4s33ngDp0+f1mhxRERERLogORCtW7cOzs7OAACFQgGFQoG4uDj06dMH06ZN03iBRERERNom+bL7rKwsMRDFxMRg8ODB6N27N9zc3ODt7a3xAomIiIi0TfIIUZ06dXDr1i0AQHx8PHx9fQEAgiCgrKxMs9URERER6YDkEaKBAwfio48+QqNGjXD//n306dMHAHDq1Cl4eHhovEAiIiIibZMciJYvXw43NzfcunULS5YsQe3atQEAd+7cwaeffqrxAomIiIi0TXIgMjExwdSpUyu0h4aGaqQgIiIiIl17qWeZAcD58+dx8+ZNPHnyRK39vffee+WiiIiIiHRJciC6du0aBgwYgPT0dMhkMgiCAACQyWQAwInVREREVOVIvsps8uTJcHd3R05ODmrWrIlz587h8OHDaNeuHQ4ePKiFEomIiIi0S/IIUVJSEg4cOIC6devCyMgIRkZG6NKlC6KiojBp0iScOnVKG3USERERaY3kEaKysjJYWloCAOrWrYvMzEwAgKurKzIyMjRbHREREZEOSB4hat68OU6fPg13d3d4e3tjyZIlMDU1xfr169GgQQNt1EhERESkVZID0axZs1BYWAgAmD9/Pvr164euXbvC1tZW7aGvRERERFWF5EDk5+cnfu3h4YGLFy8iNzcXderUEa80IyIiIqpKJM8hOnDgAIqKitTabGxsGIaIiIioypI8QvTee++htLQU7du3R48ePdC9e3d07twZFhYW2qiPiIiISOskjxA9ePAAiYmJ6NOnD1JSUjBgwABYW1ujc+fOmDVrljZqJCIiItIqmVB+q+mXdO7cOXz55ZfYtm0bVCpVtbxTtVKphJWVFfLz8yGXy/VdDtFrzS08Vt8lSHZjkb++SyAiLZDy91vyKbNLly7h4MGDOHjwIA4dOoTi4mJ07doVX331FXr06PGyNRMRERHpjeRA1KRJE9jZ2WHy5MkIDw+Hl5cXJ1QTERFRlSZ5DtGkSZPwxhtvYP78+Rg/fjxmzpyJffv24dGjR9qoj4iIiEjrJAeiFStW4OTJk8jKykJERASePHmCmTNnom7duujcubM2aiQiIiLSKsmBqFxZWRlKSkpQXFyMoqIiFBcX81lmREREVCW91CmzFi1awMHBAZ988gkyMzMxduxYnDp1Cnfv3tVGjURERERaJXlS9Z07dzBu3Dj06NEDzZs310ZNRERERDolORDt3LlTG3UQERER6c1LzyEiIiIiqi4YiIiIiMjgvTaBaNGiRZDJZAgJCRHbioqKEBwcDFtbW9SuXRsBAQHIzs5WW+/mzZvw9/dHzZo1YW9vj2nTpqG0tFStz8GDB9GmTRuYmZnBw8MD0dHROjgiIiIiqipei0B0/PhxfPvtt2jRooVae2hoKPbu3YudO3fi0KFDyMzMxMCBA8XlZWVl8Pf3x5MnT3D06FFs2bIF0dHRmDNnjtjn+vXr8Pf3R8+ePZGWloaQkBCMGTMGCQkJOjs+IiIier3pPRAVFBRg2LBh+O6771CnTh2xPT8/Hxs3bsSyZcvw1ltvoW3btti8eTOOHj2KY8eOAQD27duH8+fP4z//+Q9atWqFPn364PPPP8eaNWvw5MkTAMC6devg7u6OpUuXomnTppg4cSIGDRqE5cuX6+V4iYiI6PVTqUBUp04d2NjYVOolVXBwMPz9/eHr66vWnpqaipKSErX2Jk2awMXFBUlJSQCApKQkeHl5wcHBQezj5+cHpVKJc+fOiX3+vm0/Pz9xG89SXFwMpVKp9iIiIqLqq1KX3a9YsUL8+v79+1iwYAH8/Pzg4+MD4GnoSEhIwOzZsyXt/IcffsDJkydx/PjxCsuysrJgamoKa2trtXYHBwdkZWWJff4ahsqXly/7pz5KpRKPHz+GhYVFhX1HRUUhMjJS0rEQERFR1VWpQBQYGCh+HRAQgPnz52PixIli26RJk7B69Wrs378foaGhldrxrVu3MHnyZCgUCpibm0ssW7siIiIQFhYmvlcqlXB2dtZjRURERKRNkucQJSQk4J133qnQ/s4772D//v2V3k5qaipycnLQpk0b1KhRAzVq1MChQ4ewatUq1KhRAw4ODnjy5Any8vLU1svOzoajoyMAwNHRscJVZ+XvX9RHLpc/c3QIAMzMzCCXy9VeREREVH1JDkS2trb4+eefK7T//PPPsLW1rfR2evXqhfT0dKSlpYmvdu3aYdiwYeLXJiYmSExMFNfJyMjAzZs3xVN1Pj4+SE9PR05OjthHoVBALpfD09NT7PPXbZT3Kd8GERERkeRHd0RGRmLMmDE4ePAgvL29AQDJycmIj4/Hd999V+ntWFpaVngWWq1atWBrayu2BwUFISwsDDY2NpDL5fjss8/g4+ODjh07AgB69+4NT09PfPzxx1iyZAmysrIwa9YsBAcHw8zMDAAwfvx4rF69GtOnT8fo0aNx4MAB7NixA7GxsVIPnYiIiKopyYFo5MiRaNq0KVatWoU9e/YAAJo2bYrff/9dDEiasnz5chgZGSEgIADFxcXw8/PDN998Iy43NjZGTEwMJkyYAB8fH9SqVQuBgYGYP3++2Mfd3R2xsbEIDQ3FypUrUb9+fWzYsAF+fn4arZWIiIiqLpkgCIK+i3jdKZVKWFlZIT8/n/OJiF7ALbzqjb7eWOSv7xKISAuk/P2WPEL0V0VFReINEMsxMBAREVFVI3lS9aNHjzBx4kTY29ujVq1aqFOnjtqLiIiIqKqRHIimTZuGAwcOYO3atTAzM8OGDRsQGRkJJycnbN26VRs1EhEREWmV5FNme/fuxdatW9GjRw+MGjUKXbt2hYeHB1xdXbFt2zYMGzZMG3USERERaY3kEaLc3Fw0aNAAwNP5Qrm5uQCALl264PDhw5qtjoiIiEgHJAeiBg0a4Pr16wCePmx1x44dAJ6OHP39uWNEREREVYHkQDRq1CicPn0aABAeHo41a9bA3NwcoaGhmDZtmsYLJCIiItI2yXOI/vrwVl9fX1y8eBGpqanw8PBAixYtNFocERERkS680n2IAMDV1RWurq6aqIWIiIhILySfMiMiIiKqbhiIiIiIyOAxEBEREZHBYyAiIiIig/dSk6pVKhWuXLmCnJwcqFQqtWXdunXTSGFEREREuiI5EB07dgwfffQR/vjjDwiCoLZMJpOhrKxMY8URERER6YLkQDR+/Hi0a9cOsbGxqFevHmQymTbqIiIiItIZyYHo8uXL2LVrFzw8PLRRDxEREZHOSZ5U7e3tjStXrmijFiIiIiK9qNQI0ZkzZ8SvP/vsM0yZMgVZWVnw8vKCiYmJWl8+voOIiIiqmkoFolatWkEmk6lNoh49erT4dfkyTqomIiKiqqhSgej69evaroOIiIhIbyoViPjwViIiIqrOJE+qjoqKwqZNmyq0b9q0CYsXL9ZIUURERES6JDkQffvtt2jSpEmF9mbNmmHdunUaKYqIiIhIlyQHoqysLNSrV69Cu52dHe7cuaORooiIiIh0SXIgcnZ2xpEjRyq0HzlyBE5OThopioiIiEiXJN+peuzYsQgJCUFJSQneeustAEBiYiKmT5+OKVOmaLxAIiIiIm2THIimTZuG+/fv49NPP8WTJ08AAObm5pgxYwYiIiI0XiARERGRtkkORDKZDIsXL8bs2bNx4cIFWFhYoFGjRjAzM9NGfURERERaJzkQlatduzbat2+vyVqIiIiI9OKlAtGJEyewY8cO3Lx5UzxtVm7Pnj0aKYyIiIhIVyRfZfbDDz+gU6dOuHDhAn788UeUlJTg3LlzOHDgAKysrLRRIxEREZFWSQ5ECxcuxPLly7F3716Ymppi5cqVuHjxIgYPHgwXFxdt1EhERESkVZID0dWrV+Hv7w8AMDU1RWFhIWQyGUJDQ7F+/XqNF0hERESkbZIDUZ06dfDw4UMAwBtvvIGzZ88CAPLy8vDo0SPNVkdERESkA5InVXfr1g0KhQJeXl744IMPMHnyZBw4cAAKhQK9evXSRo1EREREWiU5EK1evRpFRUUAgJkzZ8LExARHjx5FQEAAZs2apfECiYiIiLRNciCysbERvzYyMkJ4eLhGCyIiIiLSNclziICnE6tnzZqFoUOHIicnBwAQFxeHc+fOabQ4IiIiIl2QHIgOHToELy8vJCcnY8+ePSgoKAAAnD59GnPnztV4gURERETaJjkQhYeHY8GCBVAoFDA1NRXb33rrLRw7dkyjxRERERHpguRAlJ6ejgEDBlRot7e3x7179zRSFBEREZEuSQ5E1tbWuHPnToX2U6dO4Y033tBIUURERES6JDkQDRkyBDNmzEBWVhZkMhlUKhWOHDmCqVOnYsSIEdqokYiIiEirXupZZk2aNIGzszMKCgrg6emJbt26oVOnTpLvQ7R27Vq0aNECcrkccrkcPj4+iIuLE5cXFRUhODgYtra2qF27NgICApCdna22jZs3b8Lf3x81a9aEvb09pk2bhtLSUrU+Bw8eRJs2bWBmZgYPDw9ER0dLPWwiIiKqxiQHIlNTU3z33Xe4du0aYmJi8J///AcXL17Ev//9bxgbG0vaVv369bFo0SKkpqbixIkTeOutt/D++++Ll++HhoZi79692LlzJw4dOoTMzEwMHDhQXL+srAz+/v548uQJjh49ii1btiA6Ohpz5swR+1y/fh3+/v7o2bMn0tLSEBISgjFjxiAhIUHqoRMREVE1JRMEQdB3EX9lY2ODL7/8EoMGDYKdnR2+//57DBo0CABw8eJFNG3aFElJSejYsSPi4uLQr18/ZGZmwsHBAQCwbt06zJgxA3fv3oWpqSlmzJiB2NhY8ZlrwNPTfnl5eYiPj69UTUqlElZWVsjPz4dcLtf8QRNVI27hsfouQbIbi/z1XQIRaYGUv98vdWNGbSgrK8MPP/yAwsJC+Pj4IDU1FSUlJfD19RX7NGnSBC4uLkhKSgIAJCUlwcvLSwxDAODn5welUimOMiUlJalto7xP+TaIiIiIJD+6Q9PS09Ph4+ODoqIi1K5dGz/++CM8PT2RlpYGU1NTWFtbq/V3cHBAVlYWACArK0stDJUvL1/2T32USiUeP34MCwuLCjUVFxejuLhYfK9UKl/5OImIiOj1pfcRosaNGyMtLQ3JycmYMGECAgMDcf78eb3WFBUVBSsrK/Hl7Oys13qIiIhIu/QeiExNTeHh4YG2bdsiKioKLVu2xMqVK+Ho6IgnT54gLy9PrX92djYcHR0BAI6OjhWuOit//6I+crn8maNDABAREYH8/HzxdevWLU0cKhEREb2mJAei+Ph4/P777+L7NWvWoFWrVvjoo4/w4MGDVy5IpVKhuLgYbdu2hYmJCRITE8VlGRkZuHnzJnx8fAAAPj4+SE9PFx8wCwAKhQJyuRyenp5in79uo7xP+TaexczMTLwVQPmLiIiIqi/JgWjatGninJr09HRMmTIFffv2xfXr1xEWFiZpWxERETh8+DBu3LiB9PR0RERE4ODBgxg2bBisrKwQFBSEsLAw/Prrr0hNTcWoUaPg4+ODjh07AgB69+4NT09PfPzxxzh9+jQSEhIwa9YsBAcHw8zMDAAwfvx4XLt2DdOnT8fFixfxzTffYMeOHQgNDZV66ERERFRNSZ5Uff36dXH0Zffu3ejXrx8WLlyIkydPom/fvpK2lZOTgxEjRuDOnTuwsrJCixYtkJCQgLfffhsAsHz5chgZGSEgIADFxcXw8/PDN998I65vbGyMmJgYTJgwAT4+PqhVqxYCAwMxf/58sY+7uztiY2MRGhqKlStXon79+tiwYQP8/PykHjoRERFVU5LvQ2RjY4Pff/8dnp6e6NKlC0aMGIFx48bhxo0b8PT0xKNHj7RVq97wPkRElcf7EBHR60LK32/JI0RdunRBWFgYOnfujJSUFGzfvh0AcOnSJdSvX//lKiYiIiLSI8lziFavXo0aNWpg165dWLt2rfiE+7i4OLzzzjsaL5CIiIhI2ySPELm4uCAmJqZC+/LlyzVSEBEREZGuvdR9iK5evYpZs2Zh6NCh4iXvcXFx4uMyiIiIiKoSyYHo0KFD8PLyQnJyMvbs2YOCggIAwOnTpzF37lyNF0hERESkbZIDUXh4OBYsWACFQgFTU1Ox/a233sKxY8c0WhwRERGRLkgOROnp6RgwYECFdnt7e9y7d08jRRERERHpkuRAZG1tjTt37lRoP3XqlHjFGREREVFVIjkQDRkyBDNmzEBWVhZkMhlUKhWOHDmCqVOnYsSIEdqokYiIiEirJAeihQsXokmTJnB2dkZBQQE8PT3RrVs3dOrUCbNmzdJGjURERERaJfk+RKampvjuu+8we/ZsnD17FgUFBWjdujUaNWqkjfqIiIiItE5yICrn4uICFxcXTdZCREREpBeSA5EgCNi1axd+/fVX5OTkQKVSqS3fs2ePxoojIiIi0gXJgSgkJATffvstevbsCQcHB8hkMm3URURERKQzkgPRv//9b+zZswd9+/bVRj1EREREOif5KjMrKys0aNBAG7UQERER6YXkQDRv3jxERkbi8ePH2qiHiIiISOcknzIbPHgw/vvf/8Le3h5ubm4wMTFRW37y5EmNFUdERESkC5IDUWBgIFJTUzF8+HBOqiYiIqJqQXIgio2NRUJCArp06aKNeoiIiIh0TvIcImdnZ8jlcm3UQkRERKQXkgPR0qVLMX36dNy4cUML5RARERHpnuRTZsOHD8ejR4/QsGFD1KxZs8Kk6tzcXI0VR0RERKQLkgPRihUrtFAGERERkf681FVmRERERNVJpQKRUqkUJ1Irlcp/7MsJ10RERFTVVCoQ1alTB3fu3IG9vT2sra2fee8hQRAgk8lQVlam8SKJiIiItKlSgejAgQOwsbEBAPz6669aLYiIiIhI1yoViLp37y5+7e7uDmdn5wqjRIIg4NatW5qtjoiIiEgHJN+HyN3dHXfv3q3QnpubC3d3d40URURERKRLkgNR+VyhvysoKIC5ublGiiIiIiLSpUpfdh8WFgYAkMlkmD17NmrWrCkuKysrQ3JyMlq1aqXxAomIiIi0rdKB6NSpUwCejhClp6fD1NRUXGZqaoqWLVti6tSpmq+QiIiISMsqHYjKry4bNWoUVq5cyfsNERERUbUh+U7Vmzdv1kYdRERERHojeVI1ERERUXXDQEREREQGj4GIiIiIDF6lAlGbNm3w4MEDAMD8+fPx6NEjrRZFREREpEuVCkQXLlxAYWEhACAyMhIFBQVaLYqIiIhIlyp1lVmrVq0watQodOnSBYIg4KuvvkLt2rWf2XfOnDkaLZCIiIhI2yoViKKjozF37lzExMRAJpMhLi4ONWpUXFUmkzEQERERUZVTqUDUuHFj/PDDDwAAIyMjJCYmwt7eXquFEREREemK5BszqlQqbdRBREREpDeSAxEAXL16FStWrMCFCxcAAJ6enpg8eTIaNmyo0eKIiIiIdEHyfYgSEhLg6emJlJQUtGjRAi1atEBycjKaNWsGhUIhaVtRUVFo3749LC0tYW9vj/79+yMjI0OtT1FREYKDg2Fra4vatWsjICAA2dnZan1u3rwJf39/1KxZE/b29pg2bRpKS0vV+hw8eBBt2rSBmZkZPDw8EB0dLfXQiYiIqJqSHIjCw8MRGhqK5ORkLFu2DMuWLUNycjJCQkIwY8YMSds6dOgQgoODcezYMSgUCpSUlKB3797iJf4AEBoair1792Lnzp04dOgQMjMzMXDgQHF5WVkZ/P398eTJExw9ehRbtmxBdHS02uTu69evw9/fHz179kRaWhpCQkIwZswYJCQkSD18IiIiqoZkgiAIUlYwNzdHeno6GjVqpNZ+6dIltGjRAkVFRS9dzN27d2Fvb49Dhw6hW7duyM/Ph52dHb7//nsMGjQIAHDx4kU0bdoUSUlJ6NixI+Li4tCvXz9kZmbCwcEBALBu3TrMmDEDd+/ehampKWbMmIHY2FicPXtW3NeQIUOQl5eH+Pj4F9alVCphZWWF/Px8yOXylz4+IkPgFh6r7xIku7HIX98lEJEWSPn7LXmEyM7ODmlpaRXa09LSXvnKs/z8fACAjY0NACA1NRUlJSXw9fUV+zRp0gQuLi5ISkoCACQlJcHLy0sMQwDg5+cHpVKJc+fOiX3+uo3yPuXb+Lvi4mIolUq1FxEREVVfkidVjx07FuPGjcO1a9fQqVMnAMCRI0ewePFihIWFvXQhKpUKISEh6Ny5M5o3bw4AyMrKgqmpKaytrdX6Ojg4ICsrS+zz1zBUvrx82T/1USqVePz4MSwsLNSWRUVFITIy8qWPhYiIiKoWyYFo9uzZsLS0xNKlSxEREQEAcHJywrx58zBp0qSXLiQ4OBhnz57F77///tLb0JSIiAi1cKdUKuHs7KzHioiIiEibJAcimUyG0NBQhIaG4uHDhwAAS0vLVypi4sSJiImJweHDh1G/fn2x3dHREU+ePEFeXp7aKFF2djYcHR3FPikpKWrbK78K7a99/n5lWnZ2NuRyeYXRIQAwMzODmZnZKx0TERERVR2S5xD9laWl5SuFIUEQMHHiRPz44484cOAA3N3d1Za3bdsWJiYmSExMFNsyMjJw8+ZN+Pj4AAB8fHyQnp6OnJwcsY9CoYBcLoenp6fY56/bKO9Tvg0iIiIybC91Y0ZNCQ4Oxvfff4+ff/4ZlpaW4pwfKysrWFhYwMrKCkFBQQgLC4ONjQ3kcjk+++wz+Pj4oGPHjgCA3r17w9PTEx9//DGWLFmCrKwszJo1C8HBweIoz/jx47F69WpMnz4do0ePxoEDB7Bjxw7Exla9q2GIiIhI815phOhVrV27Fvn5+ejRowfq1asnvrZv3y72Wb58Ofr164eAgAB069YNjo6O2LNnj7jc2NgYMTExMDY2ho+PD4YPH44RI0Zg/vz5Yh93d3fExsZCoVCgZcuWWLp0KTZs2AA/Pz+dHi8RERG9niTfh8gQ8T5ERJXH+xAR0etCa/chKikpQa9evXD58uVXKpCIiIjodSIpEJmYmODMmTPaqoWIiIhILyTPIRo+fDg2btyojVqIiIiI9ELyVWalpaXYtGkT9u/fj7Zt26JWrVpqy5ctW6ax4oiIiIh0QXIgOnv2LNq0aQPg6QNd/0omk2mmKiIiIiIdkhyIfv31V23UQURERKQ3L30foitXriAhIQGPHz8G8PSu00RERERVkeRAdP/+ffTq1Qtvvvkm+vbtizt37gAAgoKCMGXKFI0XSERERKRtkgNRaGgoTExMcPPmTdSsWVNs//DDDxEfH6/R4oiIiIh0QfIcon379iEhIUHtqfQA0KhRI/zxxx8aK4yIiIhIVySPEBUWFqqNDJXLzc0VH6ZKREREVJVIDkRdu3bF1q1bxfcymQwqlQpLlixBz549NVocERERkS5IPmW2ZMkS9OrVCydOnMCTJ08wffp0nDt3Drm5uThy5Ig2aiQiIiLSKskjRM2bN8elS5fQpUsXvP/++ygsLMTAgQNx6tQpNGzYUBs1EhEREWmV5BEiALCyssLMmTM1XQsRERGRXrxUIHrw4AE2btyICxcuAAA8PT0xatQo2NjYaLQ4IiIiIl2QfMrs8OHDcHNzw6pVq/DgwQM8ePAAq1atgru7Ow4fPqyNGomIiIi0SvIIUXBwMD788EOsXbsWxsbGAICysjJ8+umnCA4ORnp6usaLJCIiItImySNEV65cwZQpU8QwBADGxsYICwvDlStXNFocERERkS5IDkRt2rQR5w791YULF9CyZUuNFEVERESkS5U6ZXbmzBnx60mTJmHy5Mm4cuUKOnbsCAA4duwY1qxZg0WLFmmnSiIiIiItkgmCILyok5GREWQyGV7UVSaToaysTGPFvS6USiWsrKyQn58PuVyu73KIXmtu4bH6LkGyG4v89V0CEWmBlL/flRohun79ukYKIyIiInodVSoQubq6arsOIiIiIr15qRszZmZm4vfff0dOTg5UKpXaskmTJmmkMCIiIiJdkRyIoqOj8cknn8DU1BS2traQyWTiMplMxkBEREREVY7kQDR79mzMmTMHERERMDKSfNU+ERER0WtHcqJ59OgRhgwZwjBERERE1YbkVBMUFISdO3dqoxYiIiIivZB8yiwqKgr9+vVDfHw8vLy8YGJiorZ82bJlGiuOiIiISBdeKhAlJCSgcePGAFBhUjURERFRVSM5EC1duhSbNm3CyJEjtVAOERERke5JnkNkZmaGzp07a6MWIiIiIr2QHIgmT56Mr7/+Whu1EBEREemF5FNmKSkpOHDgAGJiYtCsWbMKk6r37NmjseKIiIiIdEFyILK2tsbAgQO1UQsRERGRXkgORJs3b9ZGHURERER6w9tNExERkcGTPELk7u7+j/cbunbt2isVRERERKRrkgNRSEiI2vuSkhKcOnUK8fHxmDZtmqbqIiIiItIZyYFo8uTJz2xfs2YNTpw48coFERFR9eUWHqvvEiS7schf3yWQDmhsDlGfPn2we/duTW2OiIiISGc0Foh27doFGxsbTW2OiIiISGcknzJr3bq12qRqQRCQlZWFu3fv4ptvvtFocURERES6IDkQ9e/fX+29kZER7Ozs0KNHDzRp0kRTdRERERHpjORTZnPnzlV7zZ49G+PHj3+pMHT48GG8++67cHJygkwmw08//aS2XBAEzJkzB/Xq1YOFhQV8fX1x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\n" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/26_SentimentalAnalysisNLP.ipynb b/26_SentimentalAnalysisNLP.ipynb new file mode 100644 index 0000000..d5291cc --- /dev/null +++ b/26_SentimentalAnalysisNLP.ipynb @@ -0,0 +1,1105 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Mkgh9SoBSOwH" + }, + "source": [ + "#26 Sentimental Analysis NLP" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_UNRNEQQG9Sr", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "be97a8fd-45a4-4ff2-d743-ad5ff1a29cf0" + }, + "source": [ + "!pip install nltk" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: nltk in /usr/local/lib/python3.11/dist-packages (3.9.1)\n", + "Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from nltk) (8.1.8)\n", + "Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from nltk) (1.4.2)\n", + "Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.11/dist-packages (from nltk) (2024.11.6)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from nltk) (4.67.1)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "v6-o7BjJTzVx" + }, + "source": [ + "### Importing Libraries" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "TLZbzW6wT2ZQ" + }, + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import re #Regular expressions\n", + "import nltk\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from nltk.corpus import stopwords\n", + "\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.metrics import accuracy_score\n", + "\n", + "from sklearn.model_selection import train_test_split" + ], + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NkPr6C5_UH9d" + }, + "source": [ + "### Load Dataset from Local Directory" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "F5rC2iqzUJEm", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "00a19f35-0083-435f-8a27-b21c6b2dd1d7" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset.csv to dataset.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aK8lU0OUUlX0" + }, + "source": [ + "### Importing Dataset" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "d2I6egUxUoaq", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "ca87b21b-2c27-4661-a0fa-eb682b4a1e60" + }, + "source": [ + "dataset = pd.read_csv('dataset.csv')\n", + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(14640, 15)\n", + " tweet_id airline_sentiment airline_sentiment_confidence \\\n", + "0 570306133677760513 neutral 1.0000 \n", + "1 570301130888122368 positive 0.3486 \n", + "2 570301083672813571 neutral 0.6837 \n", + "3 570301031407624196 negative 1.0000 \n", + "4 570300817074462722 negative 1.0000 \n", + "\n", + " negativereason negativereason_confidence airline \\\n", + "0 NaN NaN Virgin America \n", + "1 NaN 0.0000 Virgin America \n", + "2 NaN NaN Virgin America \n", + "3 Bad Flight 0.7033 Virgin America \n", + "4 Can't Tell 1.0000 Virgin America \n", + "\n", + " airline_sentiment_gold name negativereason_gold retweet_count \\\n", + "0 NaN cairdin NaN 0 \n", + "1 NaN jnardino NaN 0 \n", + "2 NaN yvonnalynn NaN 0 \n", + "3 NaN jnardino NaN 0 \n", + "4 NaN jnardino NaN 0 \n", + "\n", + " text tweet_coord \\\n", + "0 @VirginAmerica What @dhepburn said. NaN \n", + "1 @VirginAmerica plus you've added commercials t... NaN \n", + "2 @VirginAmerica I didn't today... Must mean I n... NaN \n", + "3 @VirginAmerica it's really aggressive to blast... NaN \n", + "4 @VirginAmerica and it's a really big bad thing... NaN \n", + "\n", + " tweet_created tweet_location user_timezone \n", + "0 2015-02-24 11:35:52 -0800 NaN Eastern Time (US & Canada) \n", + "1 2015-02-24 11:15:59 -0800 NaN Pacific Time (US & Canada) \n", + "2 2015-02-24 11:15:48 -0800 Lets Play Central Time (US & Canada) \n", + "3 2015-02-24 11:15:36 -0800 NaN Pacific Time (US & Canada) \n", + "4 2015-02-24 11:14:45 -0800 NaN Pacific Time (US & Canada) \n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cfM237zDUwSx" + }, + "source": [ + "###Segregating Dataset into Input & Output" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ReRaankPU1f0", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "8af748d8-bde1-449f-decc-246268f7716d" + }, + "source": [ + "features = dataset.iloc[:, 10].values\n", + "labels = dataset.iloc[:, 1].values\n", + "print(labels)" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "['neutral' 'positive' 'neutral' ... 'neutral' 'negative' 'neutral']\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KQwlfdWsj2LT" + }, + "source": [ + "###Removing the Special Character" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uhesmp0CU9xc" + }, + "source": [ + "processed_features = []\n", + "\n", + "for sentence in range(0, len(features)):\n", + " # Remove all the special characters\n", + " processed_feature = re.sub(r'\\W', ' ', str(features[sentence]))\n", + "\n", + " # remove all single characters\n", + " processed_feature= re.sub(r'\\s+[a-zA-Z]\\s+', ' ', processed_feature)\n", + "\n", + " # Remove single characters from the start\n", + " processed_feature = re.sub(r'\\^[a-zA-Z]\\s+', ' ', processed_feature)\n", + "\n", + " # Substituting multiple spaces with single space\n", + " processed_feature = re.sub(r'\\s+', ' ', processed_feature, flags=re.I)\n", + "\n", + " # Removing prefixed 'b'\n", + " processed_feature = re.sub(r'^b\\s+', '', processed_feature)\n", + "\n", + " # Converting to Lowercase\n", + " processed_feature = processed_feature.lower()\n", + "\n", + " processed_features.append(processed_feature)" + ], + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "meD0mcOVj5rK" + }, + "source": [ + "###Feature Extraction from text\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zzisF0taVA_b", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "0bce940a-6261-46ab-c791-4698b6e37807" + }, + "source": [ + "nltk.download('stopwords')\n", + "vectorizer = TfidfVectorizer (max_features=2500, min_df=7, max_df=0.8, stop_words=stopwords.words('english'))\n", + "processed_features = vectorizer.fit_transform(processed_features).toarray()\n", + "print(processed_features)" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[nltk_data] Downloading package stopwords to /root/nltk_data...\n", + "[nltk_data] Unzipping corpora/stopwords.zip.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0. 0. 0. ... 0. 0. 0.]\n", + " [0. 0. 0. ... 0. 0. 0.]\n", + " [0. 0. 0. ... 0. 0. 0.]\n", + " ...\n", + " [0. 0. 0. ... 0. 0. 0.]\n", + " [0. 0. 0. ... 0. 0. 0.]\n", + " [0. 0. 0. ... 0. 0. 0.]]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "n2vFlF_fj-SK" + }, + "source": [ + "###Splitting Dataset into Train & Test" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Q4fpb6RmVI0t" + }, + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(processed_features, labels, test_size=0.2, random_state=0)" + ], + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z9zzG3lDkC9L" + }, + "source": [ + "###Loading Random Forest Algorithm" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0TG77VbjVK7H", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "67fca259-b904-426c-dacb-fb233a53040c" + }, + "source": [ + "text_classifier = RandomForestClassifier(n_estimators=200, random_state=0)\n", + "text_classifier.fit(X_train, y_train)" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "RandomForestClassifier(n_estimators=200, random_state=0)" + ], + "text/html": [ + "
RandomForestClassifier(n_estimators=200, random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "s-cE4paSkH69" + }, + "source": [ + "###Predicting the Test data with Trained Model" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "JjNeO6rQVMfr" + }, + "source": [ + "predictions = text_classifier.predict(X_test)" + ], + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WzNioePqkMnH" + }, + "source": [ + "###Score of the Model" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "o2TY6JdyVOXn", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "8f600ab5-7d7e-453c-c57e-4d9db5a1fb86" + }, + "source": [ + "print(accuracy_score(y_test, predictions))" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0.7592213114754098\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MGL1jroOkRaR" + }, + "source": [ + "###Confusion Matrix" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Skyz1_qpVQgl", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 506 + }, + "outputId": "b78c2ba2-5d35-4535-f99c-d6ee7f891fd1" + }, + "source": [ + "from sklearn import metrics\n", + "import itertools\n", + "def plot_confusion_matrix(cm, classes,\n", + " normalize=False,\n", + " title='Confusion matrix',\n", + " cmap=plt.cm.Blues):\n", + "\n", + " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", + " plt.title(title)\n", + " plt.colorbar()\n", + " tick_marks = np.arange(len(classes))\n", + " plt.xticks(tick_marks, classes)\n", + " plt.yticks(tick_marks, classes)\n", + "\n", + " thresh = cm.max() / 2.\n", + " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", + " plt.text(j, i, cm[i, j],\n", + " horizontalalignment=\"center\",\n", + " color=\"white\" if cm[i, j] > thresh else \"black\")\n", + "\n", + " plt.tight_layout()\n", + " plt.ylabel('True label')\n", + " plt.xlabel('Predicted label')\n", + "\n", + "cm = metrics.confusion_matrix(y_test, predictions, labels=['negative', 'neutral', 'positive'])\n", + "plot_confusion_matrix(cm, classes=['negative', 'neutral', 'positive'])" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAl8AAAHpCAYAAAC8xFnoAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbWFJREFUeJzt3Xd4FNX+x/H3hpBCyoYSEoKhSImhdwi9BEIRQRFFIgSkiNKRIlcpghhFkXalKdJuUFSkIxLpXYoBBKRJ+wkhKpAQMIVkf39w2esawA1ONiF8Xj7zPMycM2e+s6zJl3POnDFZLBYLIiIiIuIQTtkdgIiIiMijRMmXiIiIiAMp+RIRERFxICVfIiIiIg6k5EtERETEgZR8iYiIiDiQki8RERERB1LyJSIiIuJASr5EREREHEjJl4jc18mTJ2nRogVmsxmTycTy5csNbf/s2bOYTCbmz59vaLu5QYkSJejWrVt2hyEiBlPyJfIQOH36NC+//DKPP/44bm5ueHt7U69ePaZOncoff/yRpdeOiIjg8OHDTJgwgUWLFlGjRo0svV5udPToUcaOHcvZs2ezOxQRyQFMerejSM62Zs0aOnbsiKurK127dqVChQqkpKSwfft2li5dSrdu3ZgzZ06WXPuPP/4gX758vPHGG7z99ttZcg2LxUJycjJ58+YlT548WXKN7PbVV1/RsWNHNm3aROPGje0+Lzk5GScnJ/LmzZt1wYmIwzlndwAicm9nzpyhU6dOFC9enI0bN1KkSBFrWd++fTl16hRr1qzJsuv/+uuvAPj4+GTZNUwmE25ublnW/sPGYrGQlJSEu7s7rq6u2R2OiGQBDTuK5GATJ04kMTGRuXPn2iRed5QuXZqBAwda92/dusX48eMpVaoUrq6ulChRgn/9618kJyfbnFeiRAmefPJJtm/fTq1atXBzc+Pxxx9n4cKF1jpjx46lePHiAAwbNgyTyUSJEiUA6Natm/XPfzZ27FhMJpPNsejoaOrXr4+Pjw+enp4EBQXxr3/9y1p+rzlfGzdupEGDBnh4eODj40O7du04duzYXa936tQpunXrho+PD2azme7du3Pz5s17f7D/1bhxYypUqMChQ4do1KgR+fLlo3Tp0nz11VcAbNmyhdq1a+Pu7k5QUBDfffedzfnnzp3j1VdfJSgoCHd3dwoWLEjHjh1thhfnz59Px44dAWjSpAkmkwmTycTmzZuB//1dfPvtt9SoUQN3d3dmz55tLbsz58tisdCkSRN8fX2Ji4uztp+SkkLFihUpVaoUN27c+Nt7FpHsp+RLJAdbtWoVjz/+OHXr1rWrfs+ePRk9ejTVqlVj8uTJNGrUiMjISDp16pSh7qlTp3j22Wdp3rw5kyZNIn/+/HTr1o0jR44A8MwzzzB58mQAXnjhBRYtWsSUKVMyFf+RI0d48sknSU5OZty4cUyaNImnnnqKHTt23Pe87777jrCwMOLi4hg7dixDhgxh586d1KtX767zpp577jmuX79OZGQkzz33HPPnz+ett96yK8arV6/y5JNPUrt2bSZOnIirqyudOnViyZIldOrUidatW/Puu+9y48YNnn32Wa5fv249d+/evezcuZNOnToxbdo0+vTpw4YNG2jcuLE1+WvYsCEDBgwA4F//+heLFi1i0aJFBAcHW9s5fvw4L7zwAs2bN2fq1KlUqVIlQ5wmk4lPP/2UpKQk+vTpYz0+ZswYjhw5wrx58/Dw8LDrnkUkm1lEJEeKj4+3AJZ27drZVT8mJsYCWHr27GlzfOjQoRbAsnHjRuux4sWLWwDL1q1brcfi4uIsrq6ultdee8167MyZMxbA8v7779u0GRERYSlevHiGGMaMGWP584+VyZMnWwDLr7/+es+471xj3rx51mNVqlSxFC5c2PL7779bjx08eNDi5ORk6dq1a4brvfTSSzZtPv3005aCBQve85p3NGrUyAJYFi9ebD32008/WQCLk5OTZffu3dbj3377bYY4b968maHNXbt2WQDLwoULrce+/PJLC2DZtGlThvp3/i7WrVt317KIiAibY7Nnz7YAlv/85z+W3bt3W/LkyWMZNGjQ396riOQc6vkSyaESEhIA8PLysqv+2rVrARgyZIjN8ddeew0gw9ywcuXK0aBBA+u+r68vQUFB/Pzzzw8c81/dmSu2YsUK0tPT7Trn0qVLxMTE0K1bNwoUKGA9XqlSJZo3b269zz/7c08QQIMGDfj999+tn+H9eHp62vQMBgUF4ePjQ3BwMLVr17Yev/PnP38+7u7u1j+npqby+++/U7p0aXx8fDhw4IAdd3tbyZIlCQsLs6tu7969CQsLo3///nTp0oVSpUrxzjvv2H0tEcl+Sr5Ecihvb28Am2Gu+zl37hxOTk6ULl3a5ri/vz8+Pj6cO3fO5nixYsUytJE/f36uXr36gBFn9Pzzz1OvXj169uyJn58fnTp14osvvrhvInYnzqCgoAxlwcHB/PbbbxnmNv31XvLnzw9g17089thjGeapmc1mAgMDMxz7a5t//PEHo0ePJjAwEFdXVwoVKoSvry/Xrl0jPj7+b699R8mSJe2uCzB37lxu3rzJyZMnmT9/vk0SKCI5n5IvkRzK29ubgIAAfvzxx0yd99dE4l7utayDxY7VZ+51jbS0NJt9d3d3tm7dynfffUeXLl04dOgQzz//PM2bN89Q95/4J/dyr3PtabN///5MmDCB5557ji+++IL169cTHR1NwYIF7e7pAzKdPG3evNn6EMXhw4czda6IZD8lXyI52JNPPsnp06fZtWvX39YtXrw46enpnDx50ub45cuXuXbtmvXJRSPkz5+fa9euZTj+1941ACcnJ5o1a8aHH37I0aNHmTBhAhs3bmTTpk13bftOnMePH89Q9tNPP1GoUKEcM7H8q6++IiIigkmTJlkfXqhfv36Gz8behNgely5don///rRo0YInn3ySoUOH3vVzF5GcS8mXSA42fPhwPDw86NmzJ5cvX85Qfvr0aaZOnQpA69atATI8kfjhhx8C0KZNG8PiKlWqFPHx8Rw6dMh67NKlSyxbtsym3pUrVzKce+dJvr8uf3FHkSJFqFKlCgsWLLBJYn788UfWr19vvc+cIE+ePBl616ZPn56hV+9Osni3hDWzevXqRXp6OnPnzmXOnDk4OzvTo0cPu3r5RCRn0CKrIjlYqVKlWLx4Mc8//zzBwcE2K9zv3LmTL7/80roOVOXKlYmIiGDOnDlcu3aNRo0a8f3337NgwQLat29PkyZNDIurU6dOjBgxgqeffpoBAwZw8+ZNZs6cSdmyZW0mmo8bN46tW7fSpk0bihcvTlxcHDNmzOCxxx6jfv3692z//fffp1WrVoSEhNCjRw/++OMPpk+fjtlsZuzYsYbdxz/15JNPsmjRIsxmM+XKlWPXrl189913FCxY0KZelSpVyJMnD++99x7x8fG4urrStGlTChcunKnrzZs3jzVr1jB//nwee+wx4Hay9+KLLzJz5kxeffVVw+5NRLKOki+RHO6pp57i0KFDvP/++6xYsYKZM2fi6upKpUqVmDRpEr169bLW/eSTT3j88ceZP38+y5Ytw9/fn5Ej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\n" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/BreastCancerDetection_VariousMLAlgorithm.ipynb b/BreastCancerDetection_VariousMLAlgorithm.ipynb new file mode 100644 index 0000000..534d9f3 --- /dev/null +++ b/BreastCancerDetection_VariousMLAlgorithm.ipynb @@ -0,0 +1,938 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AhpeX5Dm_eLW" + }, + "source": [ + "# **Day-10_BreastCancerDetection_VariousMLAlgorithm**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8rvHswu2td0Z" + }, + "source": [ + "### *Importing Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "P-YXxKhu_Uk4" + }, + "source": [ + "import pandas as pd #useful for loading the dataset\n", + "import numpy as np #to perform array\n", + "from matplotlib import pyplot" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mOt3nocbwvZk" + }, + "source": [ + "### *Choose Dataset from Local Directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "xB2NMwXtw2dG", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "ec354929-3ba9-42a1-b9bb-ccf832a4bb1b" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving data.csv to data.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "69Kx6TycwzHo" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7aXWQK9Cw7Dz" + }, + "source": [ + "dataset = pd.read_csv('data.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "huZ5AaCtxD0p" + }, + "source": [ + "### *Summarize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SmD4EDrkxFzq", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "c8de07bb-c31d-45b6-d7f1-f37549d27d5f" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(569, 33)\n", + " id diagnosis radius_mean texture_mean perimeter_mean area_mean \\\n", + "0 842302 M 17.99 10.38 122.80 1001.0 \n", + "1 842517 M 20.57 17.77 132.90 1326.0 \n", + "2 84300903 M 19.69 21.25 130.00 1203.0 \n", + "3 84348301 M 11.42 20.38 77.58 386.1 \n", + "4 84358402 M 20.29 14.34 135.10 1297.0 \n", + "\n", + " smoothness_mean compactness_mean concavity_mean concave points_mean \\\n", + "0 0.11840 0.27760 0.3001 0.14710 \n", + "1 0.08474 0.07864 0.0869 0.07017 \n", + "2 0.10960 0.15990 0.1974 0.12790 \n", + "3 0.14250 0.28390 0.2414 0.10520 \n", + "4 0.10030 0.13280 0.1980 0.10430 \n", + "\n", + " ... texture_worst perimeter_worst area_worst smoothness_worst \\\n", + "0 ... 17.33 184.60 2019.0 0.1622 \n", + "1 ... 23.41 158.80 1956.0 0.1238 \n", + "2 ... 25.53 152.50 1709.0 0.1444 \n", + "3 ... 26.50 98.87 567.7 0.2098 \n", + "4 ... 16.67 152.20 1575.0 0.1374 \n", + "\n", + " compactness_worst concavity_worst concave points_worst symmetry_worst \\\n", + "0 0.6656 0.7119 0.2654 0.4601 \n", + "1 0.1866 0.2416 0.1860 0.2750 \n", + "2 0.4245 0.4504 0.2430 0.3613 \n", + "3 0.8663 0.6869 0.2575 0.6638 \n", + "4 0.2050 0.4000 0.1625 0.2364 \n", + "\n", + " fractal_dimension_worst Unnamed: 32 \n", + "0 0.11890 NaN \n", + "1 0.08902 NaN \n", + "2 0.08758 NaN \n", + "3 0.17300 NaN \n", + "4 0.07678 NaN \n", + "\n", + "[5 rows x 33 columns]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-MFwV-9k3Tu1" + }, + "source": [ + "### *Mapping Class String Values to Numbers*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "yJvwzEfF3ZMe", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "7138e1d5-0f52-4a8d-80e1-63f3280ea23f" + }, + "source": [ + "dataset['diagnosis'] = dataset['diagnosis'].map({'B': 0, 'M': 1}).astype(int)\n", + "print(dataset.head)" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0qgR6rGRxH5y" + }, + "source": [ + "### *Segregate Dataset into X(Input/IndependentVariable) & Y(Output/DependentVariable)*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8qOVIILpxefB", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a50556fe-21af-46eb-ff7e-056be4e2d174" + }, + "source": [ + "X = dataset.iloc[:, 2:32].values\n", + "X" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1.799e+01, 1.038e+01, 1.228e+02, ..., 2.654e-01, 4.601e-01,\n", + " 1.189e-01],\n", + " [2.057e+01, 1.777e+01, 1.329e+02, ..., 1.860e-01, 2.750e-01,\n", + " 8.902e-02],\n", + " [1.969e+01, 2.125e+01, 1.300e+02, ..., 2.430e-01, 3.613e-01,\n", + " 8.758e-02],\n", + " ...,\n", + " [1.660e+01, 2.808e+01, 1.083e+02, ..., 1.418e-01, 2.218e-01,\n", + " 7.820e-02],\n", + " [2.060e+01, 2.933e+01, 1.401e+02, ..., 2.650e-01, 4.087e-01,\n", + " 1.240e-01],\n", + " [7.760e+00, 2.454e+01, 4.792e+01, ..., 0.000e+00, 2.871e-01,\n", + " 7.039e-02]])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "TE6LNAwmxkBn", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "93adc199-d960-4cdd-9d42-3ad978584020" + }, + "source": [ + "Y = dataset.iloc[:,1].values\n", + "Y" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1,\n", + " 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1,\n", + " 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1,\n", + " 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0,\n", + " 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1,\n", + " 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1,\n", + " 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0,\n", + " 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1,\n", + " 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,\n", + " 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1,\n", + " 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0,\n", + " 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0,\n", + " 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,\n", + " 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,\n", + " 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0,\n", + " 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0])" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oOzExtMjxmup" + }, + "source": [ + "### *Splitting Dataset into Train & Test*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uJXcK2PHxqJ9" + }, + "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.25, random_state = 0)" + ], + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "89y8rh-3yv15" + }, + "source": [ + "### *Feature Scaling*\n", + "### we scale our data to make all the features contribute equally to the result\n", + "###Fit_Transform - fit method is calculating the mean and variance of each of the features present in our data\n", + "###Transform - Transform method is transforming all the features using the respective mean and variance,\n", + "###We want our test data to be a completely new and a surprise set for our model" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ehsC_5BSy-Pa" + }, + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "sc = StandardScaler()\n", + "X_train = sc.fit_transform(X_train)\n", + "X_test = sc.transform(X_test)" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "X1gsZ3YZ51gz" + }, + "source": [ + "### *Validating some ML algorithm by its accuracy - Model Score*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ekrjJPx_5-rJ" + }, + "source": [ + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "from sklearn.naive_bayes import GaussianNB\n", + "from sklearn.svm import SVC\n", + "\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.model_selection import StratifiedKFold" + ], + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "7fmWEBDq6fUM" + }, + "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')))" + ], + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "r0dYFpqw6iXs", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 923 + }, + "outputId": "c7d83a67-7567-499b-b99c-3792b5c0f9c5" + }, + "source": [ + "results = []\n", + "names = []\n", + "res = []\n", + "for name, model in models:\n", + " kfold = StratifiedKFold(n_splits=10, random_state=None)\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", + " res.append(cv_results.mean())\n", + " print('%s: %f' % (name, cv_results.mean()))\n", + "\n", + "pyplot.ylim(.900, .999)\n", + "pyplot.bar(names, res, color ='maroon', width = 0.6)\n", + "\n", + "pyplot.title('Algorithm Comparison')\n", + "pyplot.show()" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "LR: 0.981285\n", + "LDA: 0.957863\n", + "KNN: 0.964839\n", + "CART: 0.929568\n", + "NB: 0.941417\n", + "SVM: 0.979014\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGzCAYAAAAMr0ziAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMkpJREFUeJzt3XtYVWX+///XBoKNIuIBIRVF0MnUhFIhc0azmCg6mOMpR1PRnDLRHJw8ZaD2KbLS0cg8lIkapeUpa4oyFCc/UuRpPs1Qpl8THRKwUnBIUNnr90c/d+0BD4C6b+z5uK51de17vde973uxbb9Y+94Lm2VZlgAAAAzm4e4BAAAAXAiBBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFuEJsNptmzJjhtucPDQ3ViBEjLrr2nnvuubwDwnmlpaXJZrPp4MGD7h4KYAQCC3AJvPzyy7LZbIqOjnb3UC5abm6uZsyYYfQb4vr163XXXXepadOm8vb2VvPmzTVw4EBt3rzZ3UMDcIURWIBLID09XaGhocrJydH+/fvdPZwq7d27V6+88orzcW5urmbOnGlkYLEsS/Hx8frDH/6gwsJCJSYmatGiRRo7dqwOHDig22+/Xdu3b3f3MC+rBx98UCdPnlTr1q3dPRTACF7uHgBQ133zzTfavn271q1bp4cffljp6elKTk5297Ak/fTGX1ZWJl9fX/n4+Lh7OBdtzpw5SktL04QJEzR37lzZbDbnvieeeEIrV66Ul9fV+b+v0tJS1a9fX56envL09HT3cABjcIUFqKX09HQ1atRId999t/r376/09PSLPjYrK0tdu3aV3W5XeHi4Fi9erBkzZri8QUvSmTNn9NRTTyk8PFw+Pj4KDQ3VtGnTVF5e7lJ3du3Jhx9+qK5du8rX11eLFy927ju7hiUtLU0DBgyQJPXu3Vs2m002m01ZWVku/W3btk1RUVGy2+0KCwvTihUrXPafXWexbds2jR8/XoGBgQoICNDDDz+sU6dO6fjx4xo2bJgaNWqkRo0aadKkSbrQH4g/efKkUlJS1L59e73wwguVzoX009WHqKgo5+MDBw5owIABaty4serVq6ebb75Zf/vb3yqda5vNprfeekszZ85UixYt1KBBA/Xv31/FxcUqLy/XhAkT1KxZM/n5+Sk+Pr7S+bXZbEpISFB6erquu+462e12denSRX//+99d6vLy8vToo4/quuuuk6+vr5o0aaIBAwZUupp19vxt3bpVjz76qJo1a6aWLVu67PvlMTt27FBsbKyaNm0qX19ftWnTRiNHjnTps7S0VBMnTlRISIh8fHx03XXX6YUXXqh03s/OZcOGDerUqZN8fHzUsWNHZWRknPfnA7jL1fkrCnAFpaen6w9/+IO8vb01ePBgLVy4UJ9//rm6det23uN2796tO++8U9dee61mzpypiooKzZo1S4GBgZVqH3roIS1fvlz9+/fXxIkT9dlnnyklJUVffvml1q9f71K7d+9eDR48WA8//LBGjx6t6667rlJ/PXv21Pjx4/Xiiy9q2rRpuv766yXJ+V9J2r9/v/r3769Ro0Zp+PDheu211zRixAh16dJFHTt2dOlv3LhxCg4O1syZM/Xpp59qyZIlCggI0Pbt29WqVSs988wzev/99/X888+rU6dOGjZs2DnPy7Zt2/TDDz9owoQJF3WFobCwULfccot+/PFHjR8/Xk2aNNHy5ct13333ac2aNerbt69LfUpKinx9fTVlyhTt379fqampuuaaa+Th4aFjx45pxowZ+vTTT5WWlqY2bdooKSnJ5fitW7dq9erVGj9+vHx8fPTyyy/rzjvvVE5Ojjp16iRJ+vzzz7V9+3Y98MADatmypQ4ePKiFCxfq1ltvVW5ururVq+fS56OPPqrAwEAlJSWptLS0ynkWFRXpjjvuUGBgoKZMmaKAgAAdPHhQ69atc9ZYlqX77rtPW7Zs0ahRoxQZGakPP/xQjz/+uPLz8/XXv/610rlet26dHn30UTVo0EAvvvii+vXrp0OHDqlJkyYXPPfAFWUBqLEdO3ZYkqxNmzZZlmVZDofDatmypfXYY49VqpVkJScnOx/fe++9Vr169az8/Hxn2759+ywvLy/rl/809+zZY0myHnroIZf+/vKXv1iSrM2bNzvbWrdubUmyMjIyKj1/69atreHDhzsfv/3225Yka8uWLVXWSrL+/ve/O9uKioosHx8fa+LEic62ZcuWWZKs2NhYy+FwONu7d+9u2Ww265FHHnG2nTlzxmrZsqXVq1evSs/3S/Pnz7ckWevXrz9v3VkTJkywJFmffPKJs+3EiRNWmzZtrNDQUKuiosKyLMvasmWLJcnq1KmTderUKWft4MGDLZvNZt11110u/Xbv3t1q3bq1S5skS5K1Y8cOZ1teXp5lt9utvn37Ott+/PHHSuPMzs62JFkrVqxwtp09f7/97W+tM2fOuNSf3ffNN99YlmVZ69evtyRZn3/++TnPxYYNGyxJ1v/8z/+4tPfv39+y2WzW/v37Xebi7e3t0vaPf/zDkmSlpqae8zkAd+EjIaAW0tPTFRQUpN69e0v66TL7oEGDtGrVKlVUVJzzuIqKCn388ce6//771bx5c2d727Ztddddd7nUvv/++5KkxMREl/aJEydKUqWPPtq0aaPY2NiaT+r/16FDB/3ud79zPg4MDNR1112nAwcOVKodNWqUy0c30dHRsixLo0aNcrZ5enqqa9euVR7/SyUlJZKkBg0aXNQ433//fUVFRem3v/2ts83Pz09/+tOfdPDgQeXm5rrUDxs2TNdcc02lsf73RyvR0dE6fPiwzpw549LevXt3denSxfm4VatW6tOnjz788EPnz9zX19e5//Tp0/r+++/Vtm1bBQQEaNeuXZXmMHr06AteTQoICJAkvffeezp9+nSVNe+//748PT01fvx4l/aJEyfKsix98MEHLu0xMTEKDw93Pu7cubP8/f0v+DMC3IHAAtRQRUWFVq1apd69e+ubb77R/v37tX//fkVHR6uwsFCZmZnnPLaoqEgnT55U27ZtK+3777a8vDx5eHhUag8ODlZAQIDy8vJc2tu0aVOLWf2sVatWldoaNWqkY8eOXbC2YcOGkqSQkJBK7VUd/0v+/v6SpBMnTlzUOPPy8qr82Ovsx1v/fX6qM1aHw6Hi4mKX9nbt2lV6rt/85jf68ccfdfToUUk/rcNJSkpyriNp2rSpAgMDdfz48Ur9SRf3M+vVq5f69eunmTNnqmnTpurTp4+WLVvmss4mLy9PzZs3rxT2LvZcSOf+GQPuRmABamjz5s06cuSIVq1apXbt2jm3gQMHSlK1Ft9ejKoWn1bll7/d18a5fuO3qlg0e67aqtqrOv6X2rdvL0n64osvLjTEGqnOWKULj7cq48aN09NPP62BAwfqrbfe0kcffaRNmzapSZMmcjgcleov5mdms9m0Zs0aZWdnKyEhQfn5+Ro5cqS6dOmi//znP9Ueo3Rp5wxcbiy6BWooPT1dzZo104IFCyrtW7dundavX69FixZV+WbUrFkz2e32Ku/Z8t9trVu3lsPh0L59+1wWxRYWFur48eM1vk/HxQagK+23v/2tGjVqpDfffFPTpk274EclrVu31t69eyu1f/XVV879l9K+ffsqtX399deqV6+ec8H0mjVrNHz4cM2ZM8dZU1ZWpuPHj9f6+W+++WbdfPPNevrpp/XGG29oyJAhWrVqlR566CG1bt1aH3/8sU6cOOFyleVynQvgSuIKC1ADJ0+e1Lp163TPPfeof//+lbaEhASdOHFCGzdurPJ4T09PxcTEaMOGDfr222+d7fv376+0ziAuLk6SNG/ePJf2uXPnSpLuvvvuGs2hfv36knRJ3kQvpXr16mny5Mn68ssvNXny5Cp/23/99deVk5Mj6afzk5OTo+zsbOf+0tJSLVmyRKGhoerQocMlHV92drbLOpTDhw/rnXfe0R133OEMV56enpXGnZqaet51TRdy7NixSn1GRkZKkvNjobi4OFVUVOill15yqfvrX/8qm81WaX0UUJdwhQWogY0bN+rEiRO67777qtx/8803KzAwUOnp6Ro0aFCVNTNmzNBHH32kHj16aMyYMc43mk6dOmnPnj3OuoiICA0fPlxLlizR8ePH1atXL+Xk5Gj58uW6//77nQt+qysyMlKenp6aPXu2iouL5ePjo9tuu03NmjWrUX+X0uOPP65//etfmjNnjrZs2aL+/fsrODhYBQUF2rBhg3Jycpx3up0yZYrefPNN3XXXXRo/frwaN26s5cuX65tvvtHatWvl4XFpfy/r1KmTYmNjXb7WLEkzZ8501txzzz1auXKlGjZsqA4dOig7O1sff/xxrb4qvHz5cr388svq27evwsPDdeLECb3yyivy9/d3htp7771XvXv31hNPPKGDBw8qIiJCH330kd555x1NmDDBZYEtUNcQWIAaSE9Pl91u1+9///sq93t4eOjuu+9Wenq6vv/++yrfqLp06aIPPvhAf/nLX/Tkk08qJCREs2bN0pdffum8hH/Wq6++qrCwMKWlpWn9+vUKDg7W1KlTa3VH3eDgYC1atEgpKSkaNWqUKioqtGXLFiMCi4eHh1asWKE+ffpoyZIleuGFF1RSUqLAwED17NlTzz33nLp37y5JCgoK0vbt2zV58mSlpqaqrKxMnTt31rvvvlvjq0/n06tXL3Xv3l0zZ87UoUOH1KFDB6Wlpalz587Omvnz58vT01Pp6ekqKytTjx49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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ospEktZ3_KgQ" + }, + "source": [ + "### *Training & Prediction using the algorithm with high accuracy*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zbi3Uvd0_Yn7", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "c3532d24-4239-4945-daee-c3d5ba95fcda" + }, + "source": [ + "from sklearn.svm import SVC\n", + "model.fit(X_train, y_train)\n", + "y_pred = model.predict(X_test)\n", + "print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 1]\n", + " [1 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]]\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Decceleration_analysisof_athelete_using_LSTM_real_world_project6.ipynb b/Decceleration_analysisof_athelete_using_LSTM_real_world_project6.ipynb new file mode 100644 index 0000000..6603be2 --- /dev/null +++ b/Decceleration_analysisof_athelete_using_LSTM_real_world_project6.ipynb @@ -0,0 +1,168 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyMGBVGVDEn8nFHYnHzp0U31", + "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": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import tensorflow as tf\n", + "import matplotlib.pyplot as plt\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import LSTM, Dense\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "# Load dataset from CSV file\n", + "def load_rpm_data(file_path):\n", + " df = pd.read_csv('rpm_deceleration_dataset.csv')\n", + " X = df.iloc[:, :-1].values # Features (RPM data sequences)\n", + " y = df.iloc[:, -1].values # Labels (1 for deceleration, 0 otherwise)\n", + " return X, y\n", + "\n", + "# File path to dataset\n", + "file_path = r\"E:\\Decceleration_analysisof_athelete using LSTM real world project6\\rpm_deceleration_dataset.csv\"\n", + "\n", + "# Prepare dataset\n", + "X, y = load_rpm_data(file_path)\n", + "scaler = StandardScaler()\n", + "X = scaler.fit_transform(X)\n", + "X = X.reshape(X.shape[0], X.shape[1], 1) # Reshape for LSTM\n", + "\n", + "# Train-test split\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "# Define LSTM model\n", + "model = Sequential([\n", + " LSTM(50, return_sequences=False, input_shape=(X_train.shape[1], 1)),\n", + " Dense(1, activation='sigmoid')\n", + "])\n", + "\n", + "# Compile model\n", + "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n", + "\n", + "# Train model\n", + "model.fit(X_train, y_train, epochs=20, batch_size=16, validation_data=(X_test, y_test))\n", + "\n", + "# Evaluate model\n", + "test_loss, test_accuracy = model.evaluate(X_test, y_test)\n", + "print(f\"Test Accuracy: {test_accuracy * 100:.2f}%\")\n", + "\n", + "# Plot histogram for deceleration per minute\n", + "plt.hist(y, bins=10, edgecolor='black')\n", + "plt.xlabel(\"Deceleration per Minute\")\n", + "plt.ylabel(\"Frequency\")\n", + "plt.title(\"Histogram of Deceleration per Minute\")\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "UUZslFlZkBpN", + "outputId": "bc7782c9-d45b-4f0f-bdf5-51f021355a4d" + }, + "execution_count": 25, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/20\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/keras/src/layers/rnn/rnn.py:200: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(**kwargs)\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 8ms/step - accuracy: 0.6656 - loss: 0.6481 - val_accuracy: 0.6670 - val_loss: 0.6271\n", + "Epoch 2/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.6743 - loss: 0.6228 - val_accuracy: 0.6670 - val_loss: 0.6166\n", + "Epoch 3/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.6601 - loss: 0.6213 - val_accuracy: 0.6820 - val_loss: 0.5975\n", + "Epoch 4/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - accuracy: 0.6579 - loss: 0.6192 - val_accuracy: 0.6800 - val_loss: 0.5720\n", + "Epoch 5/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - accuracy: 0.6803 - loss: 0.5896 - val_accuracy: 0.6830 - val_loss: 0.5519\n", + "Epoch 6/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - accuracy: 0.6937 - loss: 0.5628 - val_accuracy: 0.6500 - val_loss: 0.5887\n", + "Epoch 7/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.7021 - loss: 0.5405 - val_accuracy: 0.7390 - val_loss: 0.4979\n", + "Epoch 8/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.7465 - loss: 0.4933 - val_accuracy: 0.7320 - val_loss: 0.5215\n", + "Epoch 9/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - accuracy: 0.7660 - loss: 0.4742 - val_accuracy: 0.7850 - val_loss: 0.4273\n", + "Epoch 10/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 7ms/step - accuracy: 0.8209 - loss: 0.3972 - val_accuracy: 0.8270 - val_loss: 0.3901\n", + "Epoch 11/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.8213 - loss: 0.3796 - val_accuracy: 0.8420 - val_loss: 0.3595\n", + "Epoch 12/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 7ms/step - accuracy: 0.8408 - loss: 0.3634 - val_accuracy: 0.7950 - val_loss: 0.4218\n", + "Epoch 13/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 9ms/step - accuracy: 0.8401 - loss: 0.3503 - val_accuracy: 0.8330 - val_loss: 0.3686\n", + "Epoch 14/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.8424 - loss: 0.3528 - val_accuracy: 0.8220 - val_loss: 0.3770\n", + "Epoch 15/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.8564 - loss: 0.3298 - val_accuracy: 0.8210 - val_loss: 0.4038\n", + "Epoch 16/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 7ms/step - accuracy: 0.8446 - loss: 0.3439 - val_accuracy: 0.8730 - val_loss: 0.3035\n", + "Epoch 17/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.8501 - loss: 0.3258 - val_accuracy: 0.8690 - val_loss: 0.3123\n", + "Epoch 18/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 9ms/step - accuracy: 0.8560 - loss: 0.3279 - val_accuracy: 0.8600 - val_loss: 0.3087\n", + "Epoch 19/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 7ms/step - accuracy: 0.8530 - loss: 0.3319 - val_accuracy: 0.8550 - val_loss: 0.3229\n", + "Epoch 20/20\n", + "\u001b[1m250/250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 7ms/step - accuracy: 0.8545 - loss: 0.3269 - val_accuracy: 0.8500 - val_loss: 0.3279\n", + "\u001b[1m32/32\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.8555 - loss: 0.3230\n", + "Test Accuracy: 85.00%\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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AwOzfdEoERGVTLyGiIiIiBSP1xARERGR4jEQERERkeLxGqI8yMzMxJ07d2BlZVXs3/VEREREBSOEQEJCApydnV/5HXoMRHlw584d3ilERERUSt28eRMVKlR4aR8GojzI+ij8mzdvQqvVGrgaIiIiyov4+Hi4uLjk6SttGIjyIOs0mVarZSAiIiIqZfJyuQsvqiYiIiLFYyAiIiIixWMgIiIiIsVjICIiIiLFYyAiIiIixWMgIiIiIsVjICIiIiLFYyAiIiIixWMgIiIiIsVjICIiIiLFYyAiIiIixWMgIiIiIsVjICIiIiLFYyAiIiIixTMxdAEEREdH4/79+4YuI1/s7OxQsWJFQ5dBRERUKBiIDCw6Oho1atZCctJTQ5eSL2bmFoi6eIGhiIiI3ggMRAZ2//59JCc9RbkuY2FazsXQ5eRJ2oObeLBlLu7fv89AREREbwQGohLCtJwLNLqqhi6DiIhIkXhRNRERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKZ5BA9GyZctQr149aLVaaLVaeHh4YNu2bdLy5ORk+Pn5oVy5crC0tETPnj0RExMjGyM6OhqdO3eGhYUFHBwc8PnnnyM9PV3WZ9++fWjYsCE0Gg2qVq2KkJCQ4tg9IiIiKiUMGogqVKiAWbNmISIiAsePH0ebNm3wwQcf4Ny5cwCAMWPG4O+//8b69euxf/9+3LlzBz169JDWz8jIQOfOnZGamopDhw5h9erVCAkJwZQpU6Q+165dQ+fOndG6dWtERkZi9OjRGDZsGHbs2FHs+0tEREQlk0oIIQxdxPNsbW0xZ84c9OrVC/b29lizZg169eoFALh48SJq1aqF8PBwNG3aFNu2bUOXLl1w584dODo6AgCWL1+OCRMm4N69e1Cr1ZgwYQJCQ0Nx9uxZaRt9+/ZFXFwctm/fnqea4uPjYW1tjcePH0Or1Rbq/p44cQLu7u7QeS+ARle1UMcuKin6y9CvHo2IiAg0bNjQ0OUQERHlKD+/v0vMNUQZGRlYu3Ytnjx5Ag8PD0RERCAtLQ3t2rWT+tSsWRMVK1ZEeHg4ACA8PBx169aVwhAAeHl5IT4+XjrKFB4eLhsjq0/WGDlJSUlBfHy87EFERERvLoMHojNnzsDS0hIajQYjR47Epk2bULt2bej1eqjVatjY2Mj6Ozo6Qq/XAwD0er0sDGUtz1r2sj7x8fFISkrKsabg4GBYW1tLDxcXl8LYVSIiIiqhDB6IatSogcjISBw5cgQff/wxvL29cf78eYPWNHHiRDx+/Fh63Lx506D1EBERUdEyMXQBarUaVas+u3bG3d0dx44dw8KFC9GnTx+kpqYiLi5OdpQoJiYGOp0OAKDT6XD06FHZeFl3oT3f58U702JiYqDVamFubp5jTRqNBhqNplD2j4iIiEo+gx8helFmZiZSUlLg7u4OU1NT7N69W1oWFRWF6OhoeHh4AAA8PDxw5swZxMbGSn3CwsKg1WpRu3Ztqc/zY2T1yRqDiIiIyKBHiCZOnIiOHTuiYsWKSEhIwJo1a7Bv3z7s2LED1tbW8PX1RUBAAGxtbaHVavHpp5/Cw8MDTZs2BQC0b98etWvXxqBBgzB79mzo9Xp89dVX8PPzk47wjBw5Et999x3Gjx+PoUOHYs+ePVi3bh1CQ0MNuetERERUghg0EMXGxmLw4MG4e/curK2tUa9ePezYsQPvvfceAGD+/PkwMjJCz549kZKSAi8vLyxdulRa39jYGFu2bMHHH38MDw8PlClTBt7e3pg2bZrUx83NDaGhoRgzZgwWLlyIChUq4IcffoCXl1ex7y8RERGVTCXuc4hKIn4OkRw/h4iIiEqDUvk5RERERESGwkBEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIpn0EAUHByMxo0bw8rKCg4ODujWrRuioqJkfTw9PaFSqWSPkSNHyvpER0ejc+fOsLCwgIODAz7//HOkp6fL+uzbtw8NGzaERqNB1apVERISUtS7R0RERKWEQQPR/v374efnh8OHDyMsLAxpaWlo3749njx5Ius3fPhw3L17V3rMnj1bWpaRkYHOnTsjNTUVhw4dwurVqxESEoIpU6ZIfa5du4bOnTujdevWiIyMxOjRozFs2DDs2LGj2PaViIiISi4TQ258+/btsuchISFwcHBAREQEWrZsKbVbWFhAp9PlOMbOnTtx/vx57Nq1C46OjmjQoAGmT5+OCRMmIDAwEGq1GsuXL4ebmxvmzp0LAKhVqxb+/fdfzJ8/H15eXkW3g0RERFQqlKhriB4/fgwAsLW1lbX/+uuvsLOzQ506dTBx4kQ8ffpUWhYeHo66devC0dFRavPy8kJ8fDzOnTsn9WnXrp1sTC8vL4SHh+dYR0pKCuLj42UPIiIienMZ9AjR8zIzMzF69Gg0a9YMderUkdr79++PSpUqwdnZGadPn8aECRMQFRWFjRs3AgD0er0sDAGQnuv1+pf2iY+PR1JSEszNzWXLgoODERQUVOj7SERERCVTiQlEfn5+OHv2LP79919Z+4gRI6S/161bF05OTmjbti2uXLmCKlWqFEktEydOREBAgPQ8Pj4eLi4uRbItIiIiMrwSccrM398fW7Zswd69e1GhQoWX9m3SpAkA4PLlywAAnU6HmJgYWZ+s51nXHeXWR6vVZjs6BAAajQZarVb2ICIiojeXQQOREAL+/v7YtGkT9uzZAzc3t1euExkZCQBwcnICAHh4eODMmTOIjY2V+oSFhUGr1aJ27dpSn927d8vGCQsLg4eHRyHtCREREZVmBg1Efn5++OWXX7BmzRpYWVlBr9dDr9cjKSkJAHDlyhVMnz4dERERuH79Ov766y8MHjwYLVu2RL169QAA7du3R+3atTFo0CCcOnUKO3bswFdffQU/Pz9oNBoAwMiRI3H16lWMHz8eFy9exNKlS7Fu3TqMGTPGYPtOREREJYdBA9GyZcvw+PFjeHp6wsnJSXr8/vvvAAC1Wo1du3ahffv2qFmzJsaOHYuePXvi77//lsYwNjbGli1bYGxs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DxcXlyLbHhERERlWgU6ZDRw4ED/++GNh1/JKlStXhp2dHS5fvgwA0Ol0iI2NlfVJT0/Hw4cPpeuOdDodYmJiZH2ynud2bZJGo4FWq5U9iIiI6M1VoIuq09PTsXLlSuzatQvu7u7ZvsNs3rx5hVLci27duoUHDx7AyckJAODh4YG4uDhERETA3d0dALBnzx5kZmaiSZMmUp9JkyYhLS0NpqamAICwsDDUqFEjx9NlREREpDz5CkRXr16Fq6srzp49i4YNGwIA/vvvP1kflUqV5/ESExOloz0AcO3aNURGRsLW1ha2trYICgpCz549odPpcOXKFYwfPx5Vq1aFl5cXAKBWrVro0KEDhg8fjuXLlyMtLQ3+/v7o27cvnJ2dAQD9+/dHUFAQfH19MWHCBJw9exYLFy7E/Pnz87PrRERE9AbLVyCqVq0a7t69i7179wJ49lUdixYtki5Szq/jx4/LPrco67odb29vLFu2DKdPn8bq1asRFxcHZ2dntG/fHtOnT5d9+OOvv/4Kf39/tG3bFkZGRujZsycWLVokLbe2tsbOnTvh5+cHd3d32NnZYcqUKbzlnoiIiCT5CkQvfpv9tm3b8OTJkwJv3NPTM9uYz9uxY8crx7C1tcWaNWte2qdevXr4559/8l0fERERKUOBLqrO8rIwQ0RERFRa5CsQZX2f2IttRERERKVZvk+Z+fj4SNfwJCcnY+TIkdnuMtu4cWPhVUhERERUxPIViLy9vWXPBw4cWKjFEBERERlCvgLRqlWriqoOIiIiIoN5rYuqiYiIiN4EDERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4Bg1EBw4cQNeuXeHs7AyVSoU///xTtlwIgSlTpsDJyQnm5uZo164dLl26JOvz8OFDDBgw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\n" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/Flagellar_Motor__new.ipynb b/Flagellar_Motor__new.ipynb new file mode 100644 index 0000000..b230f08 --- /dev/null +++ b/Flagellar_Motor__new.ipynb @@ -0,0 +1,228 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyMzf8pKQLwtDM0mYMXCz0mG", + "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": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "source": [ + "pip install numpy scipy matplotlib mrcfile scikit-image\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "VtHNWFURhnKX", + "outputId": "3c55cad3-2f4a-4aec-81c9-06365d58c9a7" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (1.26.4)\n", + "Requirement already satisfied: scipy in /usr/local/lib/python3.11/dist-packages (1.13.1)\n", + "Requirement already satisfied: matplotlib in /usr/local/lib/python3.11/dist-packages (3.10.0)\n", + "Requirement already satisfied: mrcfile in /usr/local/lib/python3.11/dist-packages (1.5.4)\n", + "Requirement already satisfied: scikit-image in /usr/local/lib/python3.11/dist-packages (0.25.2)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.3.1)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (4.56.0)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.4.8)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (24.2)\n", + "Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (11.1.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (3.2.1)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (2.8.2)\n", + "Requirement already satisfied: networkx>=3.0 in /usr/local/lib/python3.11/dist-packages (from scikit-image) (3.4.2)\n", + "Requirement already satisfied: imageio!=2.35.0,>=2.33 in /usr/local/lib/python3.11/dist-packages (from scikit-image) (2.37.0)\n", + "Requirement already satisfied: tifffile>=2022.8.12 in /usr/local/lib/python3.11/dist-packages (from scikit-image) (2025.2.18)\n", + "Requirement already satisfied: lazy-loader>=0.4 in /usr/local/lib/python3.11/dist-packages (from scikit-image) (0.4)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.7->matplotlib) (1.17.0)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import requests\n", + "import gzip\n", + "import shutil\n", + "import mrcfile\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Step 1: Download the dataset\n", + "url = 'https://ftp.ebi.ac.uk/pub/databases/emdb/structures/EMD-0465/map/emd_0465.map.gz'\n", + "response = requests.get(url)\n", + "if response.status_code == 200:\n", + " with open('emd_0465.map.gz', 'wb') as file:\n", + " file.write(response.content)\n", + "else:\n", + " print(f\"Failed to download the file. Status code: {response.status_code}\")\n", + "\n", + "# Step 2: Extract the .gz file\n", + "with gzip.open('emd_0465.map.gz', 'rb') as f_in:\n", + " with open('emd_0465.map', 'wb') as f_out:\n", + " shutil.copyfileobj(f_in, f_out)\n", + "\n", + "# Step 3: Load the map file\n", + "with mrcfile.open('emd_0465.map', permissive=True) as mrc:\n", + " volume = mrc.data\n", + " if volume is None:\n", + " raise ValueError(\"Failed to load volume data from the map file.\")\n", + "\n", + "# Step 4: Visualize the middle slice\n", + "if volume is not None:\n", + " plt.imshow(volume[volume.shape[0] // 2], cmap='gray')\n", + " plt.title('Middle Slice of EMD-0465')\n", + " plt.show()\n", + "else:\n", + " print(\"Volume data is None. Cannot visualize.\")\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 452 + }, + "id": "44dkua4UjdeG", + "outputId": "d215ed13-f34d-4247-b3df-92425f02eab7" + }, + "execution_count": 21, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATIAAAGzCAYAAACsKpu4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXsNJREFUeJztnXmUFdW1/79N03Q3UyNTNyhDi0QcUBSRIKiJEokhPlCicXyOYLSJoiYxJEEcooi+RIJREJ/BIaI+4sMk+tSniPxiVFSIMYqiMSCIdAMyz9Bdvz98XfnW997epy9quLXYn7VYq+tW3ap9hns4+1v77FMQRVEEx3GcFNNkTxvgOI7zefGBzHGc1OMDmeM4qccHMsdxUo8PZI7jpB4fyBzHST0+kDmOk3p8IHMcJ/X4QOY4TurxgWw3KCgowPXXXx+87vrrr0dBQcFu3fP+++9HQUEBlixZsntGfg6+9rWv4Wtf+1p8vGTJEhQUFOD+++//l9vSWG6//Xbsv//+KCwsRJ8+ffa0Oc6/mL12IKsfKAoKCvDSSy9lnI+iCF26dEFBQQG+/e1v7wELv3iWLFmCCy+8ED169EBJSQkqKipw3HHHYfz48XvatM/F//7v/+JHP/oRBg4ciOnTp+OWW25p8NoLLrggbnf9V1JSEl/34osvxp//9re/zXqvgQMHoqCgAIceemji8+7du8ffbdKkCdq0aYPevXtj1KhRmDdvXs7lu++++3DQQQehpKQEPXv2xJ133hn8zje+8Q0UFBRg9OjRWc/X1NTg0ksvxb777ouSkhJ0794dF198ceKa+v+IrXrKF5ruaQP2NCUlJZgxYwYGDRqU+Hzu3Ln4+OOPUVxcnPGdrVu3omnTdFXd3//+d/Tr1w+lpaW46KKL0L17d6xYsQILFizAxIkTccMNNzT43W7dumHr1q0oKir6F1rceF544QU0adIE9913H5o1axa8vri4GP/5n/+Z8XlhYWHGZ/X949xzz018vmTJErz88ssN/qj79OmDa665BgCwceNGvPvuu5g5cybuvfdeXHXVVfjlL3/ZmKLhnnvuwfe+9z2MGDECV199Nf70pz/hiiuuwJYtW3Dttddm/c5///d/45VXXmnwnsuWLcPAgQMBAN/73vew77774pNPPsFrr72W9fopU6agZcuW8XG2etrTpOvX+CXwrW99CzNnzsTkyZMTg9OMGTPQt29frF69OuM7+fg/Uog77rgDmzZtwptvvolu3bolzq1cudL8br7+L1zPypUrUVpa2qhBDACaNm2aMTA1xLe+9S384Q9/wOrVq9G+ffv48xkzZqC8vBw9e/bE2rVrM7637777Zjxj4sSJOPvss3HHHXegZ8+euOyyy8xnb926FT/96U8xdOhQ/O53vwMAjBw5EnV1dbjpppswatQo7LPPPonvbNu2Dddccw2uvfZaXHfddVnve+mll6Jp06Z4/fXX0a5du2AdfOc730mUPR/Za13Les466yx8+umneO655+LPduzYgd/97nc4++yzs34nm0b20ksvoV+/figpKUGPHj1wzz33ZP3u9u3bcdVVV6FDhw5o1aoV/u3f/g0ff/xxo+19+umnceyxx6JFixZo1aoVhg4dinfeeSf4vQ8//BD77bdfxiAGAB07djS/25BG9t577+GMM85Ahw4dUFpaigMPPBA//elPE9csX74cF110EcrLy1FcXIxDDjkEv/nNb8IFBbBr1y7cdNNN6NGjB4qLi9G9e3f85Cc/wfbt2+NrCgoKMH36dGzevDl2fb5ILW/YsGEoLi7GzJkzE5/PmDEDZ5xxRk6zk9LSUjz00ENo27Ytbr75ZoQSz8yZMweffvopLr/88sTnVVVV2Lx5M5566qmM79x2222oq6vDD37wg6z3fO+99/D000/jhz/8Idq1a4dt27Zh586dph1RFGHDhg1Be/cke/1A1r17dwwYMACPPPJI/NnTTz+N9evX48wzz2zUPf72t7/hpJNOwsqVK3H99dfjwgsvxPjx4zFr1qyMay+55BJMmjQJJ510Em699VYUFRVh6NChjXrOQw89hKFDh6Jly5aYOHEixo0bh4ULF2LQoEHBlwLdunXDsmXL8MILLzTqWSHeeust9O/fHy+88AJGjhyJX/3qVxg+fDj++Mc/xtfU1NTgq1/9Kp5//nmMHj0av/rVr3DAAQfg4osvxqRJk4LPuOSSS3DdddfhyCOPxB133IHjjz8eEyZMSLTLQw89hGOPPRbFxcV46KGH8NBDD+G4444L3nv16tUZ/zZs2JBxXfPmzTFs2LBE//jrX/+Kd955p8H/6CxatmyJU089FcuXL8fChQvNa//yl78AAI466qjE53379kWTJk3i8/UsXboUt956KyZOnIjS0tKs93z++ecBAOXl5TjxxBNRWlqK0tJSnHzyyQ32of333x9lZWVo1aoVzj33XNTU1DSmqP9aor2U6dOnRwCi119/Pfr1r38dtWrVKtqyZUsURVF0+umnR1//+tejKIqibt26RUOHDk18F0A0fvz4+Hj48OFRSUlJ9NFHH8WfLVy4MCosLIy4it98880IQHT55Zcn7nf22Wdn3LPevsWLF0dRFEUbN26M2rRpE40cOTLx3erq6qisrCzjc+Xtt9+OSktLIwBRnz59oiuvvDJ64oknos2bN2dce/zxx0fHH398fLx48eIIQDR9+vT4s+OOOy5q1apVosxRFEV1dXXx3xdffHHUqVOnaPXq1YlrzjzzzKisrCyu72zU19Ull1yS+PwHP/hBBCB64YUX4s/OP//8qEWLFmb5+VoAWf8NGTIkvm7OnDkRgGjmzJnRk08+GRUUFERLly6NoiiKfvjDH0b7779/FEWf1dUhhxySeEa2PsPccccdEYDo97//vWlrVVVVVFhYmPVchw4dojPPPDPx2Xe+853omGOOiY8BRFVVVYlrrrjiighA1K5du+ib3/xm9Nhjj0W333571LJly6hHjx6J/jBp0qRo9OjR0cMPPxz97ne/i6688sqoadOmUc+ePaP169ebtv+r2etnZABwxhlnYOvWrXjyySexceNGPPnkk43+37a2thbPPvsshg8fjq5du8afH3TQQRgyZEji2v/5n/8BAFxxxRWJz8eMGRN8znPPPYd169bhrLPOSswiCgsL0b9/f8yZM8f8/iGHHII333wT5557LpYsWRLPoMrLy3Hvvfc2qqz1rFq1Cv/v//0/XHTRRYkyA4jDTaIowuOPP45TTjkFURQlbB4yZAjWr1+PBQsWNPiM+rq6+uqrE5/XC+jZ3KrGUlJSgueeey7j36233pr1+pNOOglt27bFo48+iiiK8Oijj+Kss87a7efXC+cbN240r9u6dWuDul9JSQm2bt0aH8+ZMwePP/54cKa7adMmAEBFRQWeeuopnHHGGfjBD36Ae++9Fx9++CFmzJgRX3vllVfizjvvxNlnn40RI0Zg0qRJeOCBB/DBBx/g7rvvbkxR/2Xs9WI/AHTo0AGDBw/GjBkzsGXLFtTW1uI73/lOo767atUqbN26FT179sw4d+CBB8Y/SAD46KOP0KRJE/To0SPjuhAffPABAOCEE07Ier5169bBe3zlK1/BQw89hNraWixcuBBPPvkkbrvtNowaNQqVlZUYPHhw8B4A8I9//AMAMsIOmFWrVmHdunWYNm0apk2blvUa6yVDfV0dcMABic8rKirQpk0bfPTRR42yNRuFhYWNLisAFBUV4fTTT8eMGTNw9NFHY9myZbvlVtZTP5i0atUKwGd1VVtbG59v2bIlWrZsidLSUuzYsSPrPbZt2xa7j7t27cIVV1yB8847D/369TOfXf+dM844A02a/HMec/rpp+O8887Dyy+/jEsuuaTB75999tm45ppr8Pzzz+PHP/5xI0r7r8EHsv/j7LPPxsiRI1FdXY2TTz4Zbdq02dMmJairqwPwmSZUUVGRcT6XcJDCwkL07t0bvXv3xoABA/D1r38dDz/8cE4/7sbae+655+L888/Pes1hhx0WvE9jA4q/bM4++2xMnToV119/PQ4//HAcfPDBu32vt99+GwDiQbpfv36JgXn8+PG4/vrr0alTJ9TW1mLlypWJFzI7duzAp59+is6dOwMAHnzwQSxatAj33HNPhs61ceNGLFmyBB07dkTz5s3j75SXlyeuKywsRLt27bK+gVW6dOmCNWvW5F7wLxEfyP6PU089FZdeeileffVVPPbYY43+Xv0bu/oZE7No0aLEcbdu3VBXV4cPP/wwMQvT67JRP4vr2LHjFzrg1AvJK1asaPR39t9/fwD//EFmo/6tbG1t7W7ZW19XH3zwAQ466KD485qaGqxbty7r29cvk0GDBqFr16548cUXMXHixN2+z6ZNmzBr1ix06dIlLtfDDz+ccBPr67d+hcIbb7yBb33rW/H5N954A3V1dfH5pUuXYufOnXFsGPPggw/iwQcfxKxZszB8+HD07dsXwGdvk5kdO3Zg9erV6NChg2l/FEVYsmQJjjjiiNwK/iXjGtn/0bJlS0yZMgXXX389TjnllEZ/r7CwEEOGDMETTzyBpUuXxp+/++67ePbZZxPXnnzyyQCAyZMnJz5vzBu8IUOGoHXr1rjllluyvi5ftWqV+f0//elPWb9X7/o2xr2tp0OHDjjuuOPwm9/8JlFmAPEr+sLCQowYMQKPP/541gEvZG/9D1frpj6QtLFver8oCgoKMHnyZIwfPx7nnXfebt1j69atOO+887BmzRr89Kc/jWebAwcOxODBg+N/9QPZCSecgLZt22LK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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "from scipy.ndimage import gaussian_filter\n", + "\n", + "smoothed_volume = gaussian_filter(volume, sigma=1)\n" + ], + "metadata": { + "id": "XqXR-v5Mh28a" + }, + "execution_count": 22, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from skimage import filters\n", + "\n", + "threshold = filters.threshold_otsu(smoothed_volume)\n", + "binary_volume = smoothed_volume > threshold\n" + ], + "metadata": { + "id": "i2ohs_TXh-b6" + }, + "execution_count": 23, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from scipy.ndimage import label\n", + "\n", + "labeled_volume, num_features = label(binary_volume)\n", + "print(f'Number of features detected: {num_features}')\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "OUyZbEJriDB2", + "outputId": "dbd65db4-12ef-4d2e-9cff-6fa4bcd79272" + }, + "execution_count": 24, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Number of features detected: 4\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from skimage.measure import regionprops\n", + "\n", + "regions = regionprops(labeled_volume)\n", + "\n", + "for region in regions:\n", + " if region.area > 100: # Filter small regions\n", + " z, y, x = region.centroid\n", + " print(f'Region at z={z}, y={y}, x={x} with area={region.area}')\n", + " # Visualize the region\n", + " plt.imshow(volume[int(z)], cmap='gray')\n", + " plt.scatter(x, y, c='red', s=50)\n", + " plt.title(f'Region at slice {int(z)}')\n", + " plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 470 + }, + "id": "_LYE4usKiJe4", + "outputId": "48211822-6c2f-413d-b71a-227b14785195" + }, + "execution_count": 25, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Region at z=34.488482611453946, y=36.455689486129536, x=34.7159841974739 with area=346780.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAATIAAAGzCAYAAACsKpu4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXGVJREFUeJztnXt0FeW5/79JCAEDhJsk3IlID6iIAkojesBKy7LaI9WqPcf+vNQWq6Cip1o5q2iL1VRaK8WiqPWgnkprocdbL1qLLV1UREXrpVrUgpACCXfC/ZLM7w8P0+98987zZqM2e8zzWYu1Mntmz7zzzrtf3uc7z6UgiqIIjuM4KaawpRvgOI7zQfGJzHGc1OMTmeM4qccnMsdxUo9PZI7jpB6fyBzHST0+kTmOk3p8InMcJ/X4ROY4TurxiayVMnbsWIwdO7alm/FP5eKLL8aAAQMSnxUUFOBb3/pWi7TH+fDwiayFeOCBB1BQUBD/a9OmDXr37o2LL74Ya9asaenmtThr167Ft771Lfz5z39u6aZ86Nx3330YM2YMysvLUVJSgsrKSlxyySV47733zO8tXrw4Hi8bN2785zQ2JbRp6Qa0dqZPn47Kykrs2bMHzz//PB544AEsXrwYb7zxBtq1a/eRXfe3v/3tR3buD4O1a9fi29/+NgYMGIDjjjvuI7vO7t270abNP/dn8Morr6CyshL/9m//hi5dumDlypW477778Mtf/hKvvvoqevXqlfGdxsZGXHnllSgtLcXOnTv/qe1NAz6RtTCnn346Ro4cCQD4yle+gu7du+O2227DE088gfPOO+8ju27btm0/snOniY/yP4umuOuuuzI+mzBhAkaOHImHHnoIN9xwQ8b+e++9FzU1NfjKV76CH/7wh/+MZqYKNy3zjFNOOQUA8Le//S3x+V//+ld84QtfQNeuXdGuXTuMHDkSTzzxRMb3X3vtNYwZMwbt27dHnz598J3vfAdz585FQUFBwnTJppGtX78el156KcrLy9GuXTsMGzYMDz74YOKY9957DwUFBfj+97+Pe++9FwMHDkRJSQlOOOEEvPjii8H727x5M77+9a9j6NCh6NChAzp16oTTTz8dr776anzMH/7wB5xwwgkAgEsuuSQ2px544IEmz7t9+3ZMmTIFAwYMQElJCXr06IFPf/rTePnll832ZNPI1qxZg0svvRS9evWKTb/LL78c+/bti4/ZunUrpkyZgr59+6KkpARHHnkkbrvtNjQ2Ngb7IBsHtbutW7dm7Nu8eTO++c1vYvr06ejcufMhnf/jjq/I8oyDk02XLl3iz/7yl79g9OjR6N27N2644QaUlpbi5z//OSZMmIBf/OIX+PznPw/g/R/gqaeeioKCAkydOhWlpaX48Y9/jJKSkuB1d+/ejbFjx+Ldd9/F5MmTUVlZifnz5+Piiy/G1q1bcfXVVyeOnzdvHrZv347LLrsMBQUFmDFjBs4++2ysWLECxcXFTV5nxYoVeOyxx3DuueeisrISdXV1uOeeezBmzBi8+eab6NWrF4YMGYLp06fjxhtvxMSJE+PJ/aSTTmryvF/72tewYMECTJ48GUcddRQ2bdqExYsX46233sLw4cOD93+QtWvX4sQTT8TWrVsxceJEDB48GGvWrMGCBQuwa9cutG3bFrt27cKYMWOwZs0aXHbZZejXrx+ee+45TJ06FevWrcPMmTObda1NmzahoaEBq1evxvTp0wEAp512WsZx06ZNQ0VFBS677DLcfPPNzb6XVkXktAhz586NAES/+93vog0bNkQ1NTXRggULosMPPzwqKSmJampq4mNPO+20aOjQodGePXvizxobG6OTTjopGjRoUPzZlVdeGRUUFESvvPJK/NmmTZuirl27RgCilStXxp+PGTMmGjNmTLw9c+bMCED0k5/8JP5s3759UVVVVdShQ4eovr4+iqIoWrlyZQQg6tatW7R58+b42McffzwCED355JPmfe/ZsydqaGhIfLZy5cqopKQkmj59evzZiy++GAGI5s6da57vIGVlZdGkSZPMYy666KKof//+ic8ARDfddFO8feGFF0aFhYXRiy++mPH9xsbGKIqi6Oabb45KS0ujt99+O7H/hhtuiIqKiqLVq1c3q80lJSURgLg/Z82alXHMq6++GhUVFUVPP/10FEVRdNNNN0UAog0bNjTrGq0FNy1bmHHjxuHwww9H37598YUvfAGlpaV44okn0KdPHwDvmxXPPvsszjvvPGzfvh0bN27Exo0bsWnTJowfPx7vvPNO/JbzqaeeQlVVVUIc79q1Ky644IJgO37961+joqIC//7v/x5/VlxcjKuuugo7duzAokWLEseff/75iVXjwVXTihUrzOuUlJSgsPD9YdfQ0IBNmzahQ4cO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\n" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/HandwrittenDigitRecognition_SVM.ipynb b/HandwrittenDigitRecognition_SVM.ipynb new file mode 100644 index 0000000..aebd2e6 --- /dev/null +++ b/HandwrittenDigitRecognition_SVM.ipynb @@ -0,0 +1,1397 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l-FmNW1v-wEx" + }, + "source": [ + "#Handwritten Digit Recognition | SVM**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aPZ-cSea-8Pz" + }, + "source": [ + "### *Importing Basic Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "KgOTIpQe-Sij" + }, + "source": [ + "import numpy as np\n", + "from sklearn.datasets import load_digits" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tAEv1LgB_OxV" + }, + "source": [ + "### *Load Dataset*\n", + "![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "mEkoGFM3_Rl6" + }, + "source": [ + "dataset = load_digits()" + ], + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fIw9RCUrACG9" + }, + "source": [ + "### *Summarize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OKcoy2EJAFj2", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "6ca48cd3-8140-4383-f915-8586948f2b80" + }, + "source": [ + "print(dataset.data)\n", + "print(dataset.target)\n", + "\n", + "print(dataset.data.shape)\n", + "print(dataset.images.shape)\n", + "\n", + "dataimageLength = len(dataset.images)\n", + "print(dataimageLength)" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[ 0. 0. 5. ... 0. 0. 0.]\n", + " [ 0. 0. 0. ... 10. 0. 0.]\n", + " [ 0. 0. 0. ... 16. 9. 0.]\n", + " ...\n", + " [ 0. 0. 1. ... 6. 0. 0.]\n", + " [ 0. 0. 2. ... 12. 0. 0.]\n", + " [ 0. 0. 10. ... 12. 1. 0.]]\n", + "[0 1 2 ... 8 9 8]\n", + "(1797, 64)\n", + "(1797, 8, 8)\n", + "1797\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "epmSBzRtCgdh" + }, + "source": [ + "### *Visualize the Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "sGYJfmAvCj3a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 593 + }, + "outputId": "992865b4-a1ad-4ebd-91c9-1918361c48b6" + }, + "source": [ + "n=7 #No. of Sample out of Samples total 1797\n", + "\n", + "import matplotlib.pyplot as plt\n", + "plt.gray()\n", + "plt.matshow(dataset.images[n])\n", + "plt.show()\n", + "\n", + "dataset.images[n]" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 0., 0., 7., 8., 13., 16., 15., 1.],\n", + " [ 0., 0., 7., 7., 4., 11., 12., 0.],\n", + " [ 0., 0., 0., 0., 8., 13., 1., 0.],\n", + " [ 0., 4., 8., 8., 15., 15., 6., 0.],\n", + " [ 0., 2., 11., 15., 15., 4., 0., 0.],\n", + " [ 0., 0., 0., 16., 5., 0., 0., 0.],\n", + " [ 0., 0., 9., 15., 1., 0., 0., 0.],\n", + " [ 0., 0., 13., 5., 0., 0., 0., 0.]])" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "woyBgG8hGXI-" + }, + "source": [ + "### *Segregate Dataset into X(Input/IndependentVariable) & Y(Output/DependentVariable)*\n", + "\n", + "### *Input - Pixel | Output - Class*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OYBk3bVmGbxW", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "7c8e67fc-c7d2-46b7-faea-74357fe4eba2" + }, + "source": [ + "X = dataset.images.reshape((dataimageLength,-1))\n", + "X" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 0., 0., 5., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 10., 0., 0.],\n", + " [ 0., 0., 0., ..., 16., 9., 0.],\n", + " ...,\n", + " [ 0., 0., 1., ..., 6., 0., 0.],\n", + " [ 0., 0., 2., ..., 12., 0., 0.],\n", + " [ 0., 0., 10., ..., 12., 1., 0.]])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Of_82fBDHC4R", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "3f1ff0b9-0774-4f1d-c2b1-7815cd863753" + }, + "source": [ + "Y = dataset.target\n", + "Y" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([0, 1, 2, ..., 8, 9, 8])" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QbO0qzzeHM7d" + }, + "source": [ + "### *Splitting Dataset into Train & Test*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1760lRsBHNw2", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "6f87d4c7-8adf-4809-a053-dd8e776af375" + }, + "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.25, random_state = 0)\n", + "print(X_train.shape)\n", + "print(X_test.shape)" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(1347, 64)\n", + "(450, 64)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e8DmcF1oHzTS" + }, + "source": [ + "### *Training*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uI79KiPYH3Ud", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "9ab5c2bf-7039-4578-95ba-fc5e2f2edda3" + }, + "source": [ + "from sklearn import svm\n", + "model = svm.SVC(kernel='linear')\n", + "model.fit(X_train,y_train)" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "SVC(kernel='linear')" + ], + "text/html": [ + "
SVC(kernel='linear')
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "umVph3jWO1_l" + }, + "source": [ + "### *Predicting, what the digit is from Test Data*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Cf1TTKbAO8i9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 535 + }, + "outputId": "cc0a3dca-d97c-4390-f1c0-6d1f52fa84c0" + }, + "source": [ + "n=13\n", + "result = model.predict(dataset.images[n].reshape((1,-1)))\n", + "plt.imshow(dataset.images[n], cmap=plt.cm.gray_r, interpolation='nearest')\n", + "print(result)\n", + "print(\"\\n\")\n", + "plt.axis('off')\n", + "plt.title('%i' %result)\n", + "plt.show()" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3]\n", + "\n", + "\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":7: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)\n", + " plt.title('%i' %result)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7LeUrxqkJP6w" + }, + "source": [ + "### *Prediction for Test Data*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2mcLDrhzJTwh", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "c1e6ad1e-6f04-4441-deba-6d4e9c4cca64" + }, + "source": [ + "y_pred = model.predict(X_test)\n", + "print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[2 2]\n", + " [8 8]\n", + " [2 2]\n", + " [6 6]\n", + " [6 6]\n", + " [7 7]\n", + " [1 1]\n", + " [9 9]\n", + " [8 8]\n", + " [5 5]\n", + " [2 2]\n", + " [8 8]\n", + " [6 6]\n", + " [6 6]\n", + " [6 6]\n", + " [6 6]\n", + " [1 1]\n", + " [0 0]\n", + " [5 5]\n", + " [8 8]\n", + " [8 8]\n", + " [7 7]\n", + " [8 8]\n", + " [4 4]\n", + " [7 7]\n", + " [5 5]\n", + " [4 4]\n", + " [9 9]\n", + " [2 2]\n", + " [9 9]\n", + " [4 4]\n", + " [7 7]\n", + " [6 6]\n", + " [8 8]\n", + " [9 9]\n", + " [4 4]\n", + " [3 3]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [8 8]\n", + " [6 6]\n", + " [7 7]\n", + " [7 7]\n", + " [1 1]\n", + " [0 0]\n", + " [7 7]\n", + " [6 6]\n", + " [2 2]\n", + " [1 1]\n", + " [9 9]\n", + " [6 6]\n", + " [7 7]\n", + " [9 9]\n", + " [0 0]\n", + " [0 0]\n", + " [5 5]\n", + " [1 1]\n", + " [6 6]\n", + " [3 3]\n", + " [0 0]\n", + " [2 2]\n", + " [3 3]\n", + " [4 4]\n", + " [1 1]\n", + " [9 9]\n", + " [2 2]\n", + " [6 6]\n", + " [9 9]\n", + " [1 1]\n", + " [8 8]\n", + " [3 3]\n", + " [5 5]\n", + " [1 1]\n", + " [2 2]\n", + " [8 8]\n", + " [2 2]\n", + " [2 2]\n", + " [9 9]\n", + " [7 7]\n", + " [2 2]\n", + " [3 3]\n", + " [6 6]\n", + " [0 0]\n", + " [5 5]\n", + " [3 3]\n", + " [7 7]\n", + " [5 5]\n", + " [1 1]\n", + " [2 2]\n", + " [9 9]\n", + " [9 9]\n", + " [3 3]\n", + " [1 1]\n", + " [7 7]\n", + " [7 7]\n", + " [4 4]\n", + " [8 8]\n", + " [5 5]\n", + " [8 8]\n", + " [5 5]\n", + " [5 5]\n", + " [2 2]\n", + " [5 5]\n", + " [9 9]\n", + " [0 0]\n", + " [7 7]\n", + " [1 1]\n", + " [4 4]\n", + " [4 7]\n", + " [3 3]\n", + " [4 4]\n", + " [8 8]\n", + " [9 9]\n", + " [7 7]\n", + " [9 9]\n", + " [8 8]\n", + " [2 2]\n", + " [1 6]\n", + " [5 5]\n", + " [2 2]\n", + " [5 5]\n", + " [8 8]\n", + " [4 4]\n", + " [1 8]\n", + " [7 7]\n", + " [0 0]\n", + " [6 6]\n", + " [1 1]\n", + " [5 5]\n", + " [5 9]\n", + " [9 9]\n", + " [9 9]\n", + " [5 5]\n", + " [9 9]\n", + " [9 9]\n", + " [5 5]\n", + " [7 7]\n", + " [5 5]\n", + " [6 6]\n", + " [2 2]\n", + " [8 8]\n", + " [6 6]\n", + " [9 9]\n", + " [6 6]\n", + " [1 1]\n", + " [5 5]\n", + " [1 1]\n", + " [5 5]\n", + " [9 9]\n", + " [9 9]\n", + " [1 1]\n", + " [5 5]\n", + " [3 3]\n", + " [6 6]\n", + " [1 1]\n", + " [8 8]\n", + " [9 9]\n", + " [8 8]\n", + " [7 7]\n", + " [6 6]\n", + " [7 7]\n", + " [6 6]\n", + " [5 5]\n", + " [6 6]\n", + " [0 0]\n", + " [8 8]\n", + " [8 8]\n", + " [9 9]\n", + " [8 8]\n", + " [6 6]\n", + " [1 1]\n", + " [0 0]\n", + " [4 4]\n", + " [1 1]\n", + " [6 6]\n", + " [3 3]\n", + " [8 8]\n", + " [6 6]\n", + " [7 7]\n", + " [4 4]\n", + " [9 5]\n", + " [6 6]\n", + " [3 3]\n", + " [0 0]\n", + " [3 3]\n", + " [3 3]\n", + " [3 3]\n", + " [0 0]\n", + " [7 7]\n", + " [7 7]\n", + " [5 5]\n", + " [7 7]\n", + " [8 8]\n", + " [0 0]\n", + " [7 7]\n", + " [1 8]\n", + " [9 9]\n", + " [6 6]\n", + " [4 4]\n", + " [5 5]\n", + " [0 0]\n", + " [1 1]\n", + " [4 4]\n", + " [6 6]\n", + " [4 4]\n", + " [3 3]\n", + " [3 3]\n", + " [0 0]\n", + " [9 9]\n", + " [5 5]\n", + " [3 9]\n", + " [2 2]\n", + " [1 1]\n", + " [4 4]\n", + " [2 2]\n", + " [1 1]\n", + " [6 6]\n", + " [8 8]\n", + " [9 9]\n", + " [2 2]\n", + " [4 4]\n", + " [9 9]\n", + " [3 3]\n", + " [7 7]\n", + " [6 6]\n", + " [2 2]\n", + " [3 3]\n", + " [3 3]\n", + " [1 1]\n", + " [6 6]\n", + " [9 9]\n", + " [3 3]\n", + " [6 6]\n", + " [3 3]\n", + " [2 2]\n", + " [2 2]\n", + " [0 0]\n", + " [7 7]\n", + " [6 6]\n", + " [1 1]\n", + " [1 1]\n", + " [9 9]\n", + " [7 7]\n", + " [2 2]\n", + " [7 7]\n", + " [8 8]\n", + " [5 5]\n", + " [5 5]\n", + " [7 7]\n", + " [5 5]\n", + " [2 2]\n", + " [3 3]\n", + " [7 7]\n", + " [2 2]\n", + " [7 7]\n", + " [5 5]\n", + " [5 5]\n", + " [7 7]\n", + " [0 0]\n", + " [9 9]\n", + " [1 1]\n", + " [6 6]\n", + " [5 5]\n", + " [9 9]\n", + " [7 7]\n", + " [4 4]\n", + " [3 3]\n", + " [8 8]\n", + " [0 0]\n", + " [3 3]\n", + " [6 6]\n", + " [4 4]\n", + " [6 6]\n", + " [3 3]\n", + " [2 2]\n", + " [6 6]\n", + " [8 8]\n", + " [8 8]\n", + " [8 8]\n", + " [4 4]\n", + " [6 6]\n", + " [7 7]\n", + " [5 5]\n", + " [2 2]\n", + " [4 4]\n", + " [5 5]\n", + " [3 3]\n", + " [2 2]\n", + " [4 4]\n", + " [6 6]\n", + " [9 9]\n", + " [4 4]\n", + " [5 5]\n", + " [4 4]\n", + " [3 3]\n", + " [4 4]\n", + " [6 6]\n", + " [2 2]\n", + " [9 9]\n", + " [0 0]\n", + " [1 1]\n", + " [7 7]\n", + " [2 2]\n", + " [0 0]\n", + " [9 9]\n", + " [6 6]\n", + " [0 0]\n", + " [4 4]\n", + " [2 2]\n", + " [0 0]\n", + " [7 7]\n", + " [9 9]\n", + " [8 8]\n", + " [5 5]\n", + " [4 4]\n", + " [8 8]\n", + " [2 2]\n", + " [8 8]\n", + " [4 4]\n", + " [3 3]\n", + " [7 7]\n", + " [2 2]\n", + " [6 6]\n", + " [9 9]\n", + " [1 1]\n", + " [5 5]\n", + " [1 1]\n", + " [0 0]\n", + " [8 8]\n", + " [2 2]\n", + " [8 1]\n", + " [9 9]\n", + " [5 5]\n", + " [6 6]\n", + " [2 8]\n", + " [2 2]\n", + " [7 7]\n", + " [2 2]\n", + " [1 1]\n", + " [5 5]\n", + " [1 1]\n", + " [6 6]\n", + " [4 4]\n", + " [5 5]\n", + " [0 0]\n", + " [9 9]\n", + " [4 4]\n", + " [1 1]\n", + " [1 1]\n", + " [7 7]\n", + " [0 0]\n", + " [8 8]\n", + " [9 9]\n", + " [0 0]\n", + " [5 5]\n", + " [4 4]\n", + " [3 3]\n", + " [8 8]\n", + " [8 8]\n", + " [6 6]\n", + " [5 5]\n", + " [3 3]\n", + " [4 4]\n", + " [4 4]\n", + " [4 4]\n", + " [8 8]\n", + " [8 8]\n", + " [7 7]\n", + " [0 0]\n", + " [9 9]\n", + " [6 6]\n", + " [3 3]\n", + " [5 5]\n", + " [2 2]\n", + " [3 3]\n", + " [0 0]\n", + " [8 8]\n", + " [8 3]\n", + " [3 3]\n", + " [1 1]\n", + " [3 3]\n", + " [3 3]\n", + " [0 0]\n", + " [0 0]\n", + " [4 4]\n", + " [6 6]\n", + " [0 0]\n", + " [7 7]\n", + " [7 7]\n", + " [6 6]\n", + " [2 2]\n", + " [0 0]\n", + " [4 4]\n", + " [4 4]\n", + " [2 2]\n", + " [3 3]\n", + " [7 7]\n", + " [1 8]\n", + " [9 9]\n", + " [8 8]\n", + " [6 6]\n", + " [8 8]\n", + " [5 5]\n", + " [6 6]\n", + " [2 2]\n", + " [2 2]\n", + " [3 3]\n", + " [1 1]\n", + " [7 7]\n", + " [7 7]\n", + " [8 8]\n", + " [0 0]\n", + " [3 3]\n", + " [3 3]\n", + " [2 2]\n", + " [1 1]\n", + " [5 5]\n", + " [5 5]\n", + " [9 9]\n", + " [1 1]\n", + " [3 3]\n", + " [7 7]\n", + " [0 0]\n", + " [0 0]\n", + " [7 7]\n", + " [0 0]\n", + " [4 4]\n", + " [5 5]\n", + " [8 9]\n", + " [9 3]\n", + " [3 3]\n", + " [4 4]\n", + " [3 3]\n", + " [1 1]\n", + " [8 8]\n", + " [9 9]\n", + " [8 8]\n", + " [3 3]\n", + " [6 6]\n", + " [2 2]\n", + " [1 1]\n", + " [6 6]\n", + " [2 2]\n", + " [1 1]\n", + " [7 7]\n", + " [5 5]\n", + " [5 5]\n", + " [1 1]\n", + " [9 9]]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gfNRnb-MJi9P" + }, + "source": [ + "### *Evaluate Model - Accuracy Score*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "irsPBj9KJnl-", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "9fcd5e90-df75-4aee-d182-d3c938032b54" + }, + "source": [ + "from sklearn.metrics import accuracy_score\n", + "print(\"Accuracy of the Model: {0}%\".format(accuracy_score(y_test, y_pred)*100))" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy of the Model: 97.11111111111111%\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C95vmesVLUrO" + }, + "source": [ + "### *Play with the Different Method*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "BVv7Pux6LdpH", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "cb5ae2d4-1583-4f09-8641-98028ef13223" + }, + "source": [ + "from sklearn import svm\n", + "model1 = svm.SVC(kernel='linear')\n", + "model2 = svm.SVC(kernel='rbf')\n", + "model3 = svm.SVC(gamma=0.001)\n", + "model4 = svm.SVC(gamma=0.001,C=0.1)\n", + "\n", + "model1.fit(X_train,y_train)\n", + "model2.fit(X_train,y_train)\n", + "model3.fit(X_train,y_train)\n", + "model4.fit(X_train,y_train)\n", + "\n", + "y_predModel1 = model1.predict(X_test)\n", + "y_predModel2 = model2.predict(X_test)\n", + "y_predModel3 = model3.predict(X_test)\n", + "y_predModel4 = model4.predict(X_test)\n", + "\n", + "print(\"Accuracy of the Model 1: {0}%\".format(accuracy_score(y_test, y_predModel1)*100))\n", + "print(\"Accuracy of the Model 2: {0}%\".format(accuracy_score(y_test, y_predModel2)*100))\n", + "print(\"Accuracy of the Model 3: {0}%\".format(accuracy_score(y_test, y_predModel3)*100))\n", + "print(\"Accuracy of the Model 4: {0}%\".format(accuracy_score(y_test, y_predModel4)*100))" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy of the Model 1: 97.11111111111111%\n", + "Accuracy of the Model 2: 99.11111111111111%\n", + "Accuracy of the Model 3: 99.55555555555556%\n", + "Accuracy of the Model 4: 96.66666666666667%\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Z22DqlQn_DaS" + }, + "source": [] + } + ] +} \ No newline at end of file diff --git a/LeafSpeciesDetection_DECISIONTREE.ipynb b/LeafSpeciesDetection_DECISIONTREE.ipynb new file mode 100644 index 0000000..2990191 --- /dev/null +++ b/LeafSpeciesDetection_DECISIONTREE.ipynb @@ -0,0 +1,1390 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aYYh8N1KOChK" + }, + "source": [ + "# **Day-5 | Leaf Species Detection | DECISION TREE**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TUcGB8gXNufD" + }, + "source": [ + "### *Import basic Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "XBeYR9xuNn_1" + }, + "source": [ + "from sklearn.datasets import load_iris\n", + "import pandas as pd\n", + "import numpy as np" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RSWsaAz7OOzj" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1gYg7y7WOai_" + }, + "source": [ + "dataset = load_iris()" + ], + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ql3v6_gZOjAD" + }, + "source": [ + "### *Summarize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_x9QzbrMOl0l", + "outputId": "ab81e859-9cc0-4483-c174-5012b2b47ca4" + }, + "source": [ + "print(dataset.data)\n", + "print(dataset.target)\n", + "\n", + "print(dataset.data.shape)" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[5.1 3.5 1.4 0.2]\n", + " [4.9 3. 1.4 0.2]\n", + " [4.7 3.2 1.3 0.2]\n", + " [4.6 3.1 1.5 0.2]\n", + " [5. 3.6 1.4 0.2]\n", + " [5.4 3.9 1.7 0.4]\n", + " [4.6 3.4 1.4 0.3]\n", + " [5. 3.4 1.5 0.2]\n", + " [4.4 2.9 1.4 0.2]\n", + " [4.9 3.1 1.5 0.1]\n", + " [5.4 3.7 1.5 0.2]\n", + " [4.8 3.4 1.6 0.2]\n", + " [4.8 3. 1.4 0.1]\n", + " [4.3 3. 1.1 0.1]\n", + " [5.8 4. 1.2 0.2]\n", + " [5.7 4.4 1.5 0.4]\n", + " [5.4 3.9 1.3 0.4]\n", + " [5.1 3.5 1.4 0.3]\n", + " [5.7 3.8 1.7 0.3]\n", + " [5.1 3.8 1.5 0.3]\n", + " [5.4 3.4 1.7 0.2]\n", + " [5.1 3.7 1.5 0.4]\n", + " [4.6 3.6 1. 0.2]\n", + " [5.1 3.3 1.7 0.5]\n", + " [4.8 3.4 1.9 0.2]\n", + " [5. 3. 1.6 0.2]\n", + " [5. 3.4 1.6 0.4]\n", + " [5.2 3.5 1.5 0.2]\n", + " [5.2 3.4 1.4 0.2]\n", + " [4.7 3.2 1.6 0.2]\n", + " [4.8 3.1 1.6 0.2]\n", + " [5.4 3.4 1.5 0.4]\n", + " [5.2 4.1 1.5 0.1]\n", + " [5.5 4.2 1.4 0.2]\n", + " [4.9 3.1 1.5 0.2]\n", + " [5. 3.2 1.2 0.2]\n", + " [5.5 3.5 1.3 0.2]\n", + " [4.9 3.6 1.4 0.1]\n", + " [4.4 3. 1.3 0.2]\n", + " [5.1 3.4 1.5 0.2]\n", + " [5. 3.5 1.3 0.3]\n", + " [4.5 2.3 1.3 0.3]\n", + " [4.4 3.2 1.3 0.2]\n", + " [5. 3.5 1.6 0.6]\n", + " [5.1 3.8 1.9 0.4]\n", + " [4.8 3. 1.4 0.3]\n", + " [5.1 3.8 1.6 0.2]\n", + " [4.6 3.2 1.4 0.2]\n", + " [5.3 3.7 1.5 0.2]\n", + " [5. 3.3 1.4 0.2]\n", + " [7. 3.2 4.7 1.4]\n", + " [6.4 3.2 4.5 1.5]\n", + " [6.9 3.1 4.9 1.5]\n", + " [5.5 2.3 4. 1.3]\n", + " [6.5 2.8 4.6 1.5]\n", + " [5.7 2.8 4.5 1.3]\n", + " [6.3 3.3 4.7 1.6]\n", + " [4.9 2.4 3.3 1. ]\n", + " [6.6 2.9 4.6 1.3]\n", + " [5.2 2.7 3.9 1.4]\n", + " [5. 2. 3.5 1. ]\n", + " [5.9 3. 4.2 1.5]\n", + " [6. 2.2 4. 1. ]\n", + " [6.1 2.9 4.7 1.4]\n", + " [5.6 2.9 3.6 1.3]\n", + " [6.7 3.1 4.4 1.4]\n", + " [5.6 3. 4.5 1.5]\n", + " [5.8 2.7 4.1 1. ]\n", + " [6.2 2.2 4.5 1.5]\n", + " [5.6 2.5 3.9 1.1]\n", + " [5.9 3.2 4.8 1.8]\n", + " [6.1 2.8 4. 1.3]\n", + " [6.3 2.5 4.9 1.5]\n", + " [6.1 2.8 4.7 1.2]\n", + " [6.4 2.9 4.3 1.3]\n", + " [6.6 3. 4.4 1.4]\n", + " [6.8 2.8 4.8 1.4]\n", + " [6.7 3. 5. 1.7]\n", + " [6. 2.9 4.5 1.5]\n", + " [5.7 2.6 3.5 1. ]\n", + " [5.5 2.4 3.8 1.1]\n", + " [5.5 2.4 3.7 1. ]\n", + " [5.8 2.7 3.9 1.2]\n", + " [6. 2.7 5.1 1.6]\n", + " [5.4 3. 4.5 1.5]\n", + " [6. 3.4 4.5 1.6]\n", + " [6.7 3.1 4.7 1.5]\n", + " [6.3 2.3 4.4 1.3]\n", + " [5.6 3. 4.1 1.3]\n", + " [5.5 2.5 4. 1.3]\n", + " [5.5 2.6 4.4 1.2]\n", + " [6.1 3. 4.6 1.4]\n", + " [5.8 2.6 4. 1.2]\n", + " [5. 2.3 3.3 1. ]\n", + " [5.6 2.7 4.2 1.3]\n", + " [5.7 3. 4.2 1.2]\n", + " [5.7 2.9 4.2 1.3]\n", + " [6.2 2.9 4.3 1.3]\n", + " [5.1 2.5 3. 1.1]\n", + " [5.7 2.8 4.1 1.3]\n", + " [6.3 3.3 6. 2.5]\n", + " [5.8 2.7 5.1 1.9]\n", + " [7.1 3. 5.9 2.1]\n", + " [6.3 2.9 5.6 1.8]\n", + " [6.5 3. 5.8 2.2]\n", + " [7.6 3. 6.6 2.1]\n", + " [4.9 2.5 4.5 1.7]\n", + " [7.3 2.9 6.3 1.8]\n", + " [6.7 2.5 5.8 1.8]\n", + " [7.2 3.6 6.1 2.5]\n", + " [6.5 3.2 5.1 2. ]\n", + " [6.4 2.7 5.3 1.9]\n", + " [6.8 3. 5.5 2.1]\n", + " [5.7 2.5 5. 2. ]\n", + " [5.8 2.8 5.1 2.4]\n", + " [6.4 3.2 5.3 2.3]\n", + " [6.5 3. 5.5 1.8]\n", + " [7.7 3.8 6.7 2.2]\n", + " [7.7 2.6 6.9 2.3]\n", + " [6. 2.2 5. 1.5]\n", + " [6.9 3.2 5.7 2.3]\n", + " [5.6 2.8 4.9 2. ]\n", + " [7.7 2.8 6.7 2. ]\n", + " [6.3 2.7 4.9 1.8]\n", + " [6.7 3.3 5.7 2.1]\n", + " [7.2 3.2 6. 1.8]\n", + " [6.2 2.8 4.8 1.8]\n", + " [6.1 3. 4.9 1.8]\n", + " [6.4 2.8 5.6 2.1]\n", + " [7.2 3. 5.8 1.6]\n", + " [7.4 2.8 6.1 1.9]\n", + " [7.9 3.8 6.4 2. ]\n", + " [6.4 2.8 5.6 2.2]\n", + " [6.3 2.8 5.1 1.5]\n", + " [6.1 2.6 5.6 1.4]\n", + " [7.7 3. 6.1 2.3]\n", + " [6.3 3.4 5.6 2.4]\n", + " [6.4 3.1 5.5 1.8]\n", + " [6. 3. 4.8 1.8]\n", + " [6.9 3.1 5.4 2.1]\n", + " [6.7 3.1 5.6 2.4]\n", + " [6.9 3.1 5.1 2.3]\n", + " [5.8 2.7 5.1 1.9]\n", + " [6.8 3.2 5.9 2.3]\n", + " [6.7 3.3 5.7 2.5]\n", + " [6.7 3. 5.2 2.3]\n", + " [6.3 2.5 5. 1.9]\n", + " [6.5 3. 5.2 2. ]\n", + " [6.2 3.4 5.4 2.3]\n", + " [5.9 3. 5.1 1.8]]\n", + "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n", + " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " 2 2]\n", + "(150, 4)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TZJDaTW3Or3X" + }, + "source": [ + "### *Segregate Dataset into X(Input/IndependentVariable) & Y(Output/DependentVariable)*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 424 + }, + "id": "EG1_3L0hOoq0", + "outputId": "4497898b-6264-4286-abb3-6394ec005754" + }, + "source": [ + "X = pd.DataFrame(dataset.data, columns=dataset.feature_names)\n", + "X" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", + "0 5.1 3.5 1.4 0.2\n", + "1 4.9 3.0 1.4 0.2\n", + "2 4.7 3.2 1.3 0.2\n", + "3 4.6 3.1 1.5 0.2\n", + "4 5.0 3.6 1.4 0.2\n", + ".. ... ... ... ...\n", + "145 6.7 3.0 5.2 2.3\n", + "146 6.3 2.5 5.0 1.9\n", + "147 6.5 3.0 5.2 2.0\n", + "148 6.2 3.4 5.4 2.3\n", + "149 5.9 3.0 5.1 1.8\n", + "\n", + "[150 rows x 4 columns]" + ], + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
...............
1456.73.05.22.3
1466.32.55.01.9
1476.53.05.22.0
1486.23.45.42.3
1495.93.05.11.8
\n", + "

150 rows × 4 columns

\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" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "X", + "summary": "{\n \"name\": \"X\",\n \"rows\": 150,\n \"fields\": [\n {\n \"column\": \"sepal length (cm)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.8280661279778629,\n \"min\": 4.3,\n \"max\": 7.9,\n \"num_unique_values\": 35,\n \"samples\": [\n 6.2,\n 4.5,\n 5.6\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sepal width (cm)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.435866284936698,\n \"min\": 2.0,\n \"max\": 4.4,\n \"num_unique_values\": 23,\n \"samples\": [\n 2.3,\n 4.0,\n 3.5\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"petal length (cm)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.7652982332594667,\n \"min\": 1.0,\n \"max\": 6.9,\n \"num_unique_values\": 43,\n \"samples\": [\n 6.7,\n 3.8,\n 3.7\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"petal width (cm)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.7622376689603465,\n \"min\": 0.1,\n \"max\": 2.5,\n \"num_unique_values\": 22,\n \"samples\": [\n 0.2,\n 1.2,\n 1.3\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fVIBC6zbPmD_", + "outputId": "1a834214-4d26-4413-da1f-2a5a9a45b115" + }, + "source": [ + "Y = dataset.target\n", + "Y" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", + " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", + " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nlnZPPJ2Pt8e" + }, + "source": [ + "### *Splitting Dataset into Train & Test*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WsXx-qmhPzSV", + "outputId": "3234893f-95d4-477f-fa50-86e38ad8e391" + }, + "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.25, random_state = 0)\n", + "print(X_train.shape)\n", + "print(X_test.shape)" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(112, 4)\n", + "(38, 4)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4W9cvXrPR_c5" + }, + "source": [ + "### *Finding best max_depth Value*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 581 + }, + "id": "MLko_TEoSOVY", + "outputId": "932213ba-06aa-49c7-dbba-2ea593edf2d4" + }, + "source": [ + "accuracy = []\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.metrics import accuracy_score\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i in range(1, 10):\n", + " model = DecisionTreeClassifier(max_depth = i, random_state = 0)\n", + " model.fit(X_train, y_train)\n", + " pred = model.predict(X_test)\n", + " score = accuracy_score(y_test, pred)\n", + " accuracy.append(score)\n", + "\n", + "plt.figure(figsize=(12, 6))\n", + "plt.plot(range(1, 10), accuracy, color='red', linestyle='dashed', marker='o',\n", + " markerfacecolor='blue', markersize=10)\n", + "plt.title('Finding best Max_Depth')\n", + "plt.xlabel('pred')\n", + "plt.ylabel('score')" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0, 0.5, 'score')" + ] + }, + "metadata": {}, + "execution_count": 7 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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MdLT041WrVoZt956q5GSklKgjNmGDh1qlC9fPs+v79ixw5BkPPvss4ZhGMb58+eNihUrGiNGjMjRLjEx0QgICMixPft37+mnn7Zvs1qtRs+ePQ0vLy/7z/zUqVOGJGPSpEm55ivI7y8AoOxhRB4AUKbMmjVL69evz7HcyJNPPpnjeceOHXXgwAH789WrV8vDw0MjR460b3N3d9fTTz9d4FwRERGqW7eu/Xnz5s3l7+9v/z5ZWVnasGGDoqKiFBISYm9Xr149de/evcDfx8PDQ0888YT9uZeXl5544gklJSVp27ZtkqTPP/9cjRo1UsOGDXOcuXDvvfdKkr788ktJUsWKFSVJK1asuCkztN9///26dOmSvvjiC50/f15ffPFFnqfVS5Kvr699/dy5c0pJSVHHjh21ffv2HO2Cg4PtvwcdO3bUzp07NW/evBKflC771m/nz5+XZLsMITk5WYMHD87xc3V3d1d4eLj953qtp556yr6efQlGRkaGNmzYUOAcN/r9BQCUPczGAwAoU9q0aZPnZHe58fHxsV+HnK1SpUo6d+6c/fmhQ4dUvXr16+7Z3aBBgwJ/n1tvvfW6bdd+n6SkJF26dEn16tW7rl1u2/ISEhKi8uXL59hWv359SbZrru+8807t27dPu3fvvu51Z0tKSpIkDRw4UB999JGGDx+usWPHqnPnzurbt6/69+8vN7fijwUEBgYqIiJCn376qS5evKisrCz1798/z/ZffPGFXn31Ve3cuTPHtfy5zR8waNAgffLJJ1q1apUef/xxde7cudh5/+rChQuSJD8/P0nSvn37JMn+gchf/fWDBDc3N9WpUyfHtmv7qiAK8vsLACh7KOQBAC7N3d3d1O9j/DmxWWmyWq1q1qyZpk+fnuvXQ0NDJdlGwL/++mt9+eWXWrVqleLj47V48WLde++9WrduXYn87B544AGNGDFCiYmJ6t69u/0sgL/65ptv1Lt3b91111167733VL16dXl6emr+/Pn69NNPr2t/5swZ/fjjj5KkX3/9VVartUQ+fLjWrl27JF39oCX7rIVFixYpODj4uvY3424GpfX7CwBwLBTyAADcQM2aNZWQkKALFy7kGJXfs2dPiX2PatWqycfHR/v377/ua7lty8vx48eVlpaWY1Q+e1b1WrVqSZLq1q2rn376SZ07d77hbPhubm7q3LmzOnfurOnTp2vq1Kl66aWX9OWXXyoiIqJQs+nnJjo6Wk888YQ2b96c723cli1bJh8fH61duzbHPebnz5+fa/tRo0bp/PnzmjZtmsaNG6cZM2YoJiamWFn/atGiRbJYLOrSpYsk2S+dqFatmiIiIm64v9Vq1YEDB+yj8NL1fVXcny8AoGziGnkAAG6gR48eyszMtM8gLtmuaX/33XdL7Hu4u7srIiJCcXFxOn78uH37/v37tWbNmgIfJzMzU++//779eUZGht5//30FBgYqLCxMku3a9GPHjunDDz+8bv9Lly4pLS1NknT27Nnrvt6yZUtJsp/anv2BQW634iuIChUqaPbs2Zo8ebJ69eqVZzt3d3dZLJYct1U7ePBgrjP6L126VIsXL9brr7+usWPHatCgQRo/fvx1t4krjtdff13r1q3TwIEDddttt0mSIiMj5e/vr6lTp+rKlSvX7XPq1Knrts2cOdO+bhiGZs6cKU9PT/ulAOXKlZNU9J8vAKBsYkQeAIAb6NWrl9q3b6+xY8fq4MGDaty4sZYvX66UlJQS/T6TJ0/WunXr1L59e40cOVJZWVmaOXOmmjZtqp07dxboGCEhIfrHP/6hgwcPqn79+lq8eLF27typDz74QJ6enpJst01bsmSJnnzySX355Zdq3769srKy9Ntvv2nJkiVau3atWrdurSlTpujrr79Wz549VbNmTSUlJem9997TLbfcog4dOkiyjUJXrFhRc+bMkZ+fn8qXL6/w8HDVrl27wK+7ILfx69mzp6ZPn65u3brpgQceUFJSkmbNmqV69erpf//7n71dUlKSRo4cqXvuucc+kdzMmTP15Zdf6pFHHtGmTZsKdYp9ZmamPvnkE0nS5cuXdejQIa1cuVL/+9//dM899+S4zZu/v79mz56thx9+WLfffrsGDRqkwMBAHT58WKtWrVL79u1zFO4+Pj6Kj4/X0KFDFR4erjVr1mjVqlV68cUX7de9+/r6qnHjxlq8eLHq16+vypUrq2nTpmratGmBXwMAoOyhkAcA4Abc3Ny0cuVKjRkzRp988oksFot69+6tt99+W61atSqx7xMWFqY1a9boueee04QJExQaGqopU6Zo9+7d+u233wp0jEqVKmnBggV6+umn9eGHHyooKEgzZ87UiBEjcryeuLg4/fOf/9TChQsVGxurcuXKqU6dOho9erT9VO/e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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sthecgH3QI4d" + }, + "source": [ + "### *Training*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "id": "_1iHKy-0QHm6", + "outputId": "63f5d1c9-bef7-4778-9a1f-8f2170a90770" + }, + "source": [ + "from sklearn.tree import DecisionTreeClassifier\n", + "model = DecisionTreeClassifier(criterion = 'entropy',max_depth = 3, random_state = 0)\n", + "model.fit(X_train,y_train)" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=0)" + ], + "text/html": [ + "
DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "h-dm7-tjXDQO" + }, + "source": [ + "### *Prediction*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "H9IXzjDeXFfv", + "outputId": "0b2faac8-d1d8-4326-eed2-adca7901bbf1" + }, + "source": [ + "y_pred = model.predict(X_test)\n", + "print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[2 2]\n", + " [1 1]\n", + " [0 0]\n", + " [2 2]\n", + " [0 0]\n", + " [2 2]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [2 2]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [2 2]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [2 2]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [2 2]\n", + " [1 1]\n", + " [0 0]\n", + " [2 2]\n", + " [2 2]\n", + " [1 1]\n", + " [0 0]\n", + " [2 1]]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DZ0nCNS_Xg4I" + }, + "source": [ + "### *Accuracy Score*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "z6zi5kA4XjXx", + "outputId": "93e85e20-69e0-4772-deb5-2e6092cb6940" + }, + "source": [ + "from sklearn.metrics import accuracy_score\n", + "print(\"Accuracy of the Model: {0}%\".format(accuracy_score(y_test, y_pred)*100))" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy of the Model: 97.36842105263158%\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/SalaryEstimation_K_NN.ipynb b/SalaryEstimation_K_NN.ipynb new file mode 100644 index 0000000..59808db --- /dev/null +++ b/SalaryEstimation_K_NN.ipynb @@ -0,0 +1,1156 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6pk_INoSKj1N" + }, + "source": [ + "# Day-4 | Salary Estimation | K-NEAREST NEIGHBOUR model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7OGtDD8zKwUz" + }, + "source": [ + "### *Importing Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7YBAsJmVKc_B" + }, + "source": [ + "import pandas as pd #useful for loading the dataset\n", + "import numpy as np #to perform array" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rVLDLs-lK3xo" + }, + "source": [ + "### *Choose Dataset from Local Directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "XA2ITub0K9k2", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "02acd90f-0908-4b97-85b4-bf701901c3f6" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving salary.csv to salary.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2VV6yeOfK_vp" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Ij-0EywfLN3t" + }, + "source": [ + "dataset = pd.read_csv('salary.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7QZKjhQiLd0_" + }, + "source": [ + "### *Summarize Dataset*\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Bn4Vn37VLsZX", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "3c5f2ba0-35fd-4859-9c20-777593dc00df" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(32561, 5)\n", + " age education.num capital.gain hours.per.week income\n", + "0 90 9 0 40 <=50K\n", + "1 82 9 0 18 <=50K\n", + "2 66 10 0 40 <=50K\n", + "3 54 4 0 40 <=50K\n", + "4 41 10 0 40 <=50K\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PSCVm2nuMmEa" + }, + "source": [ + "### *Mapping Salary Data to Binary Value*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "NHJs-2U0M3CV", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "ba91dd2d-2c05-4d58-d180-86635bc29685" + }, + "source": [ + "income_set = set(dataset['income'])\n", + "dataset['income'] = dataset['income'].map({'<=50K': 0, '>50K': 1}).astype(int)\n", + "print(dataset.head)" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cPyEdPblNyrw" + }, + "source": [ + "### *Segregate Dataset into X(Input/IndependentVariable) & Y(Output/DependentVariable)*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LKL0-37RNz0v", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a714a09a-8f1b-4de0-de9a-f7f5c8461207" + }, + "source": [ + "X = dataset.iloc[:, :-1].values\n", + "X" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[90, 9, 0, 40],\n", + " [82, 9, 0, 18],\n", + " [66, 10, 0, 40],\n", + " ...,\n", + " [40, 9, 0, 40],\n", + " [58, 9, 0, 40],\n", + " [22, 9, 0, 20]])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "gYqJfw9CN379", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "85ddb52c-990f-4fc3-d1e2-6d3d75f77dda" + }, + "source": [ + "Y = dataset.iloc[:, -1].values\n", + "Y" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([0, 0, 0, ..., 1, 0, 0])" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c9aiUBLqOCIP" + }, + "source": [ + "### *Splitting Dataset into Train & Test*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "F-Xes7CFODNU" + }, + "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.25, random_state = 0)" + ], + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BI1S2PKoOLpf" + }, + "source": [ + "### *Feature Scaling*\n", + "### we scale our data to make all the features contribute equally to the result\n", + "###Fit_Transform - fit method is calculating the mean and variance of each of the features present in our data\n", + "###Transform - Transform method is transforming all the features using the respective mean and variance,\n", + "###We want our test data to be a completely new and a surprise set for our model" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "bHSNDh8zOMZl" + }, + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "sc = StandardScaler()\n", + "X_train = sc.fit_transform(X_train)\n", + "X_test = sc.transform(X_test)" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tWUH3bnwYEfr" + }, + "source": [ + "### *Finding the Best K-Value*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WKES0Vn1YINO", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 581 + }, + "outputId": "207033dc-a2ff-4659-b63c-2ad3d1b0f7e9" + }, + "source": [ + "error = []\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Calculating error for K values between 1 and 40\n", + "for i in range(1, 40):\n", + " model = KNeighborsClassifier(n_neighbors=i)\n", + " model.fit(X_train, y_train)\n", + " pred_i = model.predict(X_test)\n", + " error.append(np.mean(pred_i != y_test))\n", + "\n", + "plt.figure(figsize=(12, 6))\n", + "plt.plot(range(1, 40), error, color='red', linestyle='dashed', marker='o',\n", + " markerfacecolor='blue', markersize=10)\n", + "plt.title('Error Rate K Value')\n", + "plt.xlabel('K Value')\n", + "plt.ylabel('Mean Error')" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0, 0.5, 'Mean Error')" + ] + }, + "metadata": {}, + "execution_count": 10 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/IAAAIjCAYAAACgdyAGAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAe3BJREFUeJzt3Xl4VOXZx/HfZE/IQgiYsIdNXMEWhKLimhIQREpYq5IK7hZFxO1tFVutgLUWEMSKgmBFwBCVghIQAcXiBlLrhsheZJElCRBIJpnn/eOYhEASZpKZzJzJ93Ndc83kLM+5ZzmTuc+zOYwxRgAAAAAAwBZC/B0AAAAAAABwH4k8AAAAAAA2QiIPAAAAAICNkMgDAAAAAGAjJPIAAAAAANgIiTwAAAAAADZCIg8AAAAAgI2QyAMAAAAAYCMk8gAAAAAA2AiJPAAAQDVSU1P1u9/9zt9hAABQhkQeAAA3vfLKK3I4HFXePv74Y3+HWKnf/e53FeKMjIzU2Wefrccee0wnTpyoUZnffPONHn/8cW3fvt2rsa5evVoOh0NZWVkVlhcVFalfv34KCQnRrFmzKt332WeflcPh0HvvvVdl+TNnzpTD4dDixYu9GjcAAHUpzN8BAABgN3/+85/Vpk2b05a3b9/eD9G4JzIyUi+99JIkKS8vT2+//baeeOIJbdmyRa+99prH5X3zzTf605/+pCuvvFKpqalejrYip9OpQYMG6Z133tHMmTM1cuTISrcbNmyYHnjgAc2bN09paWmVbjNv3jwlJSWpT58+vgwZAACfIpEHAMBDffr0UdeuXT3ap7i4WC6XSxEREaetO3bsmBo0aFDjeIwxOnHihKKjo6vcJiwsTDfeeGPZ33fddZcuueQSvf7663r22WeVnJxc4+P7ktPp1JAhQ7RkyRL94x//0KhRo6rctlmzZrrqqquUnZ2tGTNmKDIyssL63bt364MPPtBtt92m8PBwX4cOAIDP0LQeAAAv2759uxwOh5555hlNnjxZ7dq1U2RkZFlzdIfDoW+++Ua//e1vlZiYqMsuu0ySlew/8cQTZdunpqbq//7v/1RYWFih/NTUVPXr1085OTnq2rWroqOj9Y9//MOjGB0Ohy677DIZY7R169ay5Tt27NBdd92ljh07Kjo6WklJSRo8eHCFJvSvvPKKBg8eLEm66qqryprsr169umybd999Vz179lSDBg0UFxenvn376uuvv/YoxuLiYg0bNkxvv/22ZsyYoVtvvfWM+9x4443Ky8vT0qVLT1s3f/58uVwu3XDDDZKkZ555RpdccomSkpIUHR2tLl26nNakvzKl7+GpSrtenNrdwBuvBQAAJ6NGHgAAD+Xl5enAgQMVljkcDiUlJVVYNnv2bJ04cUK33XabIiMj1ahRo7J1gwcPVocOHfTUU0/JGCNJuuWWWzRnzhwNGjRI999/vz755BNNmDBB3377rd58880KZW/atEnDhw/X7bffrltvvVUdO3b0+HmUJpyJiYllyz777DP9+9//1rBhw9SiRQtt375dM2bM0JVXXqlvvvlGMTExuvzyy3XPPfdo6tSp+r//+z+de+65klR2/+qrryozM1Pp6emaNGmSCgoKNGPGDF122WX64osv3GqKX1xcrOHDh+vNN9/U9OnTdfvtt7v1nAYOHKg777xT8+bN08CBAyusmzdvnlq3bq1LL71UkjRlyhT1799fN9xwg4qKijR//nwNHjxYS5YsUd++fd063pl447UAAOA0BgAAuGX27NlGUqW3yMjIsu22bdtmJJn4+Hizf//+CmWMHz/eSDLDhw+vsHzjxo1GkrnlllsqLB83bpyRZN5///2yZa1btzaSzLJly9yKOzMz0zRo0MD89NNP5qeffjI//PCDeeaZZ4zD4TAXXHCBcblcZdsWFBSctv+6deuMJDN37tyyZW+88YaRZFatWlVh2yNHjpiGDRuaW2+9tcLyvXv3moSEhNOWn2rVqlVGUtlznD59ulvP8WSDBw82UVFRJi8vr2zZd999ZySZRx55pGzZqc+1qKjIXHDBBebqq6+usLx169YmMzOz7O/S9/BUpZ+Pbdu2GWNq/1oAAFAVauQBAPDQ9OnTdfbZZ1dYFhoaetp2GRkZatKkSaVl3HHHHRX+fueddyRJY8eOrbD8/vvv1zPPPKOlS5fqqquuKlvepk0bpaenux3zsWPHTovlsssu05w5cyo0Ez+5n73T6VR+fr7at2+vhg0basOGDbrpppuqPc6KFSuUm5ur4cOHV2i1EBoaqu7du2vVqlVuxbtv3z6FhYVVOqjgmdx444164403lJ2dXTZt3Lx58ySprFm9VPG5Hj58WCUlJerZs6def/11j49ZGW+9FgAAnIpEHgAAD3Xr1s2twe6qS0JPXbdjxw6FhIScNvJ9SkqKGjZsqB07drhddmWioqL0r3/9S5L0v//9T08//bT2799/2gB5x48f14QJEzR79mzt3r27rNm/ZHUpOJPNmzdLkq6++upK18fHx7sV79NPP63Jkydr0KBBWr58eVlzeHf06dNHjRo10rx588oS+ddff12dO3fW+eefX7bdkiVL9OSTT2rjxo0VxiGorP97TXjrtQAA4FQk8gAA+Eh1o8hXtc7dJLK6sisTGhpaYUq29PR0nXPOObr99tsrzKk+evRozZ49W2PGjFGPHj2UkJAgh8OhYcOGyeVynfE4pdu8+uqrSklJOW19WJh7Pz2aNm2qFStW6LLLLlPfvn21Zs0ade7c2a19w8PDNWTIEM2cOVP79u3Tzp07tXnzZj399NNl23z44Yfq37+/Lr/8cj3//PNq2rSpwsPDNXv27LLa+6pU9R6VlJRU+NtbrwUAAKfiPwgAAAGgdevWcrlc2rx5c9mgcZLVxDw3N1etW7f26vGaNm2q++67T3/605/08ccf61e/+pUkKSsrS5mZmfrb3/5Wtu2JEyeUm5tbYf+qktl27dpJks4666wq53J3V9u2bZWTk6MrrrhC6enp+vDDD9WhQwe39r3hhhv0wgsvaMGCBdq2bZscDoeGDx9etn7RokWKiopSTk5OhWnqZs+efcaySwcHzM3NVcOGDcuWn9pqwpuvBQAAJ2P6OQAAAsC1114rSZo8eXKF5c8++6wkeW0U9ZONHj1aMTExmjhxYtmy0NDQCs3pJem55547rba5dN77UxP89PR0xcfH66mnnpLT6TztmD/99JNHMV544YVaunSpjh49ql//+tfavXu3W/tdeumlSk1N1T//+U8tWLBAV1xxhVq0aFG2PjQ0VA6Ho8Lz2r59u956660zll2aoH/wwQdly44dO6Y5c+ZU2M7brwUAAKWokQcAwEPvvvuuvvvuu9OWX3LJJWrbtm2NyuzcubMyMzP14osvKjc3V1dccYU+/fRTzZkzRwMGDKgw0J23JCUl6eabb9bzzz+vb7/9Vueee6769eunV199VQkJCTrvvPO0bt06vffee6dNrXfRRRcpNDRUkyZNUl5eniIjI3X11VfrrLPO0owZM3TTTTfpl7/8pYYNG6YmTZpo586dWrp0qS699FJNmzbNozh79Oih7OxsXXfddfr1r3+tDz/8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tEaeRB4AAAAAglpAJPLTp09XamqqoqKi1L17d3366adVbjtz5kz17NlTiYmJSkxMVFpa2mnbP/744zrnnHPUoEGDsm0++eQTXz8N/7rlFunvf5e6dvV3JAAAAAAAH/J7Ir9gwQKNHTtW48eP14YNG9S5c2elp6dr//79lW6/evVqDR8+XKtWrdK6devUsmVL9erVS7t37y7b5uyzz9a0adP03//+V2vXrlVqaqp69eqln376qa6eVt0bPFgaM0Y67zx/RwIAAAAA8CGHMcb4M4Du3bvr4osv1rRp0yRJLpdLLVu21OjRo/Xwww+fcf+SkhIlJiZq2rRpGjFiRKXb5OfnKyEhQe+9956uueaaM5ZZun1eXp7iS0eDBwAAAADARzzJQ/1aI19UVKT169crLS2tbFlISIjS0tK0bt06t8ooKCiQ0+lUo9LB3io5xosvvqiEhAR17ty50m0KCwuVn59f4WY7hw5J69ZJGzb4OxIAAAAAgA/5NZE/cOCASkpKlJycXGF5cnKy9u7d61YZDz30kJo1a1bhYoAkLVmyRLGxsYqKitLf//53rVixQo0bN660jAkTJighIaHs1rJly5o9IX965x3pkkukBx/0dyQAAAAAAB/yex/52pg4caLmz5+vN998U1FRURXWXXXVVdq4caP+/e9/q3fv3hoyZEiV/e4feeQR5eXlld127dpVF+F7F/PIAwAAAEC94NdEvnHjxgoNDdW+ffsqLN+3b59SUlKq3feZZ57RxIkTtXz5cnXq1Om09Q0aNFD79u31q1/9Si+//LLCwsL08ssvV1pWZGSk4uPjK9xsh+nnAAAAAKBe8GsiHxERoS5dumjlypVly1wul1auXKkePXpUud/TTz+tJ554QsuWLVNXN6dbc7lcKiwsrHXMAat0jAASeQAAAAAIamH+DmDs2LHKzMxU165d1a1bN02ePFnHjh3TzTffLEkaMWKEmjdvrgkTJkiSJk2apMcee0zz5s1TampqWV/62NhYxcbG6tixY/rLX/6i/v37q2nTpjpw4ICmT5+u3bt3a/DgwX57nj5XWiN/7JhUWChFRvo3HgAAAACAT/g9kR86dKh++uknPfbYY9q7d68uuugiLVu2rGwAvJ07dyokpLzhwIwZM1RUVKRBgwZVKGf8+PF6/PHHFRoaqu+++05z5szRgQMHlJSUpIsvvlgf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UPitRl6Sxo4dq8zMTHXt2lXdunXT5MmTdezYMd18882SpBEjRqh58+aaMGGCJGuAvG+++abs8e7du7Vx40bFxsaqffv2kqTrrrtOf/nLX9SqVSudf/75+uKLL/Tss89q5MiRbsdVOpA/g94BAAAAAOpCaf7p1sRyxs+ee+4506pVKxMREWG6detmPv7447J1V1xxhcnMzCz7e9u2bUbSabcrrriibJv8/Hxz7733mlatWpmoqCjTtm1b84c//MEUFha6HdOuXbsqPQ43bty4cePGjRs3bty4cePmy9uuXbvOmLP6dR75QOVyufTjjz8qLi5ODoej1uXl5+erZcuW2rVrF/PS2wzvnb3x/tkX75198d7ZF++dvfH+2RfvnX15+70zxujIkSNq1qzZad3FT+XXpvWBKiQkRC1atPB6ufHx8ZycNsV7Z2+8f/bFe2dfvHf2xXtnb7x/9sV7Z1/efO8SEhLc2i7opp8DAAAAACCYkcgDAAAAAGAjJPJ1IDIyUuPHj2euehvivbM33j/74r2zL947++K9szfeP/vivbMvf753DHYHAAAAAICNUCMPAAAAAICNkMgDAAAAAGAjJPIAAAAAANgIiTwAAAAAADZCIl8Hpk+frtTUVEVFRal79+769NNP/R0SzuDxxx+Xw+GocDvnnHP8HRYq8cEHH+i6665Ts2bN5HA49NZbb1VYb4zRY489pqZNmyo6OlppaWnavHmzf4LFac70/v3ud7877Vzs3bu3f4JFmQkTJujiiy9WXFyczjrrLA0YMECbNm2qsM2JEyd09913KykpSbGxscrIyNC+ffv8FDFO5s77d+WVV5527t1xxx1+ihilZsyYoU6dOik+Pl7x8fHq0aOH3n333bL1nHeB60zvHeecfUycOFEOh0NjxowpW+aPc49E3scWLFigsWPHavz48dqwYYM6d+6s9PR07d+/39+h4QzOP/987dmzp+y2du1af4eEShw7dkydO3fW9OnTK13/9NNPa+rUqXrhhRf0ySefqEGDBkpPT9eJEyfqOFJU5kzvnyT17t27wrn4+uuv12GEqMyaNWt099136+OPP9aKFSvkdDrVq1cvHTt2rGyb++67T//617/0xhtvaM2aNfrxxx81cOBAP0aNUu68f5J06623Vjj3nn76aT9FjFItWrTQxIkTtX79en3++ee6+uqrdf31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AAAQFEjkAQCoR373u99pwIABFZZlZWUpKipKf/vb307bftGiRQoNDdXu3bsrLa9Dhw4aO3asL0IFAABVIJEHAKAee+mll3TDDTdoxowZuv/++09b379/fyUlJWnOnDmnrfvggw/0ww8/aNSoUXURKgAA+BmJPAAA9dTTTz+t0aNHa/78+br55psr3SY8PFw33XSTXnnlldPWzZo1S927d9f555+vZ599VhdeeKEaNGigli1b6q677tLRo0erPHZlLQPGjBmjK6+8suxvl8ulCRMmqE2bNoqOjlbnzp2VlZVVk6cKAEBQIZEHAKAeeuihh/TEE09oyZIl+s1vflPttqNGjdLmzZv1wQcflC07evSosrKyymrjQ0JCNHXqVH399deaM2eO3n//fT344IO1inHChAmaO3euXnjhBX399de67777dOONN2rNmjW1KhcAALsL83cAAACgbr377rt6++23tXLlSl199dVn3P68887Tr371K82aNUuXX365JGnhwoUyxmjYsGGSrNr0UqmpqXryySd1xx136Pnnn69RjIWFhXrqqaf03nvvqUePHpKktm3bau3atfrHP/6hK664okblAgAQDKiRBwCgnunUqZNSU1M1fvz4apu/n2zkyJHKysrSkSNHJFnN6gcPHqy4uDhJ0nvvvadrrrlGzZs3V1xcnG666SYdPHhQBQUFNYrxhx9+UEFBgX79618rNja27DZ37lxt2bKlRmUCABAsSOQBAKhnmjdvrtWrV2v37t3q3bt3WXJendKa94ULF2rz5s366KOPyprVb9++Xf369VOnTp20aNEirV+/XtOnT5ckFRUVVVpeSEiIjDEVljmdzrLHpRcYli5dqo0bN5bdvvnmG/rJAwDqPZrWAwBQD7Vu3Vpr1qzRVVddpd69e2vZsmVlteuViYuL0+DBgzVr1ixt2bJFZ599tnr27ClJWr9+vVwul/72t78pJMSqI1i4cGG1x2/SpIm++uqrCss2btyo8PBwSVZz/sjISO3cuZNm9AAAnIIaeQAA6qmWLVtq9erV2r9/v9LT05Wfn1/t9qNGjdK///1vvfDCCxo5cmTZ8vbt28vpdOq5557T1q1b9eqrr+qFF16otqyrr75an3/+uebOnavNmzdr/PjxFRL7uLg4jRs3Tvfdd5/mzJmjLVu2aMOGDXruuecqnQoPAID6hEQeAIB6rEWLFlq9erUOHDhwxmT+sssuU8eOHZWfn68RI0aULe/cubOeffZZTZo0SRdccIFee+01TZgwodrjpqen69FHH9WDDz6oiy++WEeOHKlQpiQ98cQTevTRRzVhwgSde+656t27t5YuXao2bdrU7kkDAGBzDnNqBzUAAAAAABCwqJEHAAAAAMBGSOQBAAAAALAREnkAAAAAAGyERB4AAAAAABshkQcAAAAAwEZI5AEAAAAAsBESeQAAAAAAbIREHgAAAAAAGyGRBwAAAADARkjkAQAAAACwERJ5AAAAAABs5P8BCSYlFS+kPD4AAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "j3i7m8V3OoXP" + }, + "source": [ + "### *Training*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "GmrBKoYLOnIx", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "3512171c-3593-42d9-8cc8-d9ea70dd9927" + }, + "source": [ + "from sklearn.neighbors import KNeighborsClassifier\n", + "model = KNeighborsClassifier(n_neighbors = 2, metric = 'minkowski', p = 2)\n", + "model.fit(X_train, y_train)" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "KNeighborsClassifier(n_neighbors=2)" + ], + "text/html": [ + "
KNeighborsClassifier(n_neighbors=2)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0oabYXRVOxO4" + }, + "source": [ + "### *Predicting, wheather new customer with Age & Salary will Buy or Not*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ovhU7dWzOx_a", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "0ffcdae0-a0cc-438a-f3dc-83f253ae793d" + }, + "source": [ + "age = int(input(\"Enter New Employee's Age: \"))\n", + "edu = int(input(\"Enter New Employee's Education: \"))\n", + "cg = int(input(\"Enter New Employee's Captital Gain: \"))\n", + "wh = int(input(\"Enter New Employee's Hour's Per week: \"))\n", + "newEmp = [[age,edu,cg,wh]]\n", + "result = model.predict(sc.transform(newEmp))\n", + "print(result)\n", + "\n", + "if result == 1:\n", + " print(\"Employee might got Salary above 50K\")\n", + "else:\n", + " print(\"Customer might not got Salary above 50K\")" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Enter New Employee's Age: 60\n", + "Enter New Employee's Education: 11\n", + "Enter New Employee's Captital Gain: 0\n", + "Enter New Employee's Hour's Per week: 12\n", + "[0]\n", + "Customer might not got Salary above 50K\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mjBCAtVFTE89" + }, + "source": [ + "### *Prediction for all Test Data*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SLSFpnwqTFk7", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "48095b0e-6a7c-4ec5-d5cd-19c074b42955" + }, + "source": [ + "y_pred = model.predict(X_test)\n", + "print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))" + ], + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0 0]\n", + " [0 0]\n", + " [0 0]\n", + " ...\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dgsr46pcTosv" + }, + "source": [ + "### *Evaluating Model - CONFUSION MATRIX*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "agWRkVL3Tqn_", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "3e9bdec0-081b-4d19-c9f4-71061cca654d" + }, + "source": [ + "from sklearn.metrics import confusion_matrix, accuracy_score\n", + "cm = confusion_matrix(y_test, y_pred)\n", + "\n", + "print(\"Confusion Matrix: \")\n", + "print(cm)\n", + "\n", + "print(\"Accuracy of the Model: {0}%\".format(accuracy_score(y_test, y_pred)*100))" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Confusion Matrix: \n", + "[[5918 275]\n", + " [1326 622]]\n", + "Accuracy of the Model: 80.33411128853949%\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/TitanicSurvivalPrediction_NAIVEBAYES.ipynb b/TitanicSurvivalPrediction_NAIVEBAYES.ipynb new file mode 100644 index 0000000..195853a --- /dev/null +++ b/TitanicSurvivalPrediction_NAIVEBAYES.ipynb @@ -0,0 +1,1835 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Qmi36D7ZPY-M" + }, + "source": [ + "# **Day - 6 Titanic Survival Prediction using NAIVE BAYES**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Q8lgHC2zPTE4" + }, + "source": [ + "### *Importing basic Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nKKbpfywIqAq" + }, + "source": [ + "import pandas as pd\n", + "import numpy as np" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xfyZYdDaPnJz" + }, + "source": [ + "### *Choose Dataset file from Local Directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "id": "ki0LIHaOP869", + "outputId": "b9ecc9aa-e308-4031-a096-fd77b3f36d4c" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving titanicsurvival.csv to titanicsurvival.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oEx3VSimP_DF" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "HQVO5TRBQCGP" + }, + "source": [ + "dataset = pd.read_csv('titanicsurvival.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Da6ym5z7QHwY" + }, + "source": [ + "### *Summarize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Esd6w-GBQLZ5", + "outputId": "44a2090a-3b0f-4ee2-c37b-328f185d2bba" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(891, 5)\n", + " Pclass Sex Age Fare Survived\n", + "0 3 male 22.0 7.2500 0\n", + "1 1 female 38.0 71.2833 1\n", + "2 3 female 26.0 7.9250 1\n", + "3 1 female 35.0 53.1000 1\n", + "4 3 male 35.0 8.0500 0\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1AALh-8cS6Jd" + }, + "source": [ + "### *Mapping Text Data to Binary Value*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "rcr5RdqtS9iD", + "outputId": "24ecd79c-ef7c-4301-be39-ecad5bb7361e" + }, + "source": [ + "income_set = set(dataset['Sex'])\n", + "dataset['Sex'] = dataset['Sex'].map({'female': 0, 'male': 1}).astype(int)\n", + "print(dataset.head)" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_j0iPDCWRYAg" + }, + "source": [ + "### *Segregate Dataset into X(Input/IndependentVariable) & Y(Output/DependentVariable)*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 424 + }, + "id": "Cqyxx7qQRYp7", + "outputId": "f7fa1388-e792-4dab-ef8b-6110b7b7d6f5" + }, + "source": [ + "X = dataset.drop('Survived',axis='columns')\n", + "X" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Pclass Sex Age Fare\n", + "0 3 1 22.0 7.2500\n", + "1 1 0 38.0 71.2833\n", + "2 3 0 26.0 7.9250\n", + "3 1 0 35.0 53.1000\n", + "4 3 1 35.0 8.0500\n", + ".. ... ... ... ...\n", + "886 2 1 27.0 13.0000\n", + "887 1 0 19.0 30.0000\n", + "888 3 0 NaN 23.4500\n", + "889 1 1 26.0 30.0000\n", + "890 3 1 32.0 7.7500\n", + "\n", + "[891 rows x 4 columns]" + ], + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PclassSexAgeFare
03122.07.2500
11038.071.2833
23026.07.9250
31035.053.1000
43135.08.0500
...............
8862127.013.0000
8871019.030.0000
88830NaN23.4500
8891126.030.0000
8903132.07.7500
\n", + "

891 rows × 4 columns

\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" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "X", + "summary": "{\n \"name\": \"X\",\n \"rows\": 891,\n \"fields\": [\n {\n \"column\": \"Pclass\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 1,\n \"max\": 3,\n \"num_unique_values\": 3,\n \"samples\": [\n 3,\n 1,\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sex\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 0,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Age\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.526497332334044,\n \"min\": 0.42,\n \"max\": 80.0,\n \"num_unique_values\": 88,\n \"samples\": [\n 0.75,\n 22.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Fare\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 49.693428597180905,\n \"min\": 0.0,\n \"max\": 512.3292,\n \"num_unique_values\": 248,\n \"samples\": [\n 11.2417,\n 51.8625\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 458 + }, + "id": "1F1tC2tRRddY", + "outputId": "dfa4f8ca-945a-465b-ab63-637411837fb8" + }, + "source": [ + "Y = dataset.Survived\n", + "Y" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 0\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 0\n", + " ..\n", + "886 0\n", + "887 1\n", + "888 0\n", + "889 1\n", + "890 0\n", + "Name: Survived, Length: 891, dtype: int64" + ], + "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", + "
Survived
00
11
21
31
40
......
8860
8871
8880
8891
8900
\n", + "

891 rows × 1 columns

\n", + "

" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SibVwENGTpsN" + }, + "source": [ + "Finding & Removing NA values from our Features X" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "soVDtqhRTwHZ", + "outputId": "e18b9852-5d91-40cb-c46d-94f3402f13a2" + }, + "source": [ + "X.columns[X.isna().any()]" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index(['Age'], dtype='object')" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0_jCaFTRXQj1" + }, + "source": [ + "X.Age = X.Age.fillna(X.Age.mean())" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nYNPgh4cX0bt" + }, + "source": [ + "### *Test again to check any na value*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QSBSGrNfX3NA", + "outputId": "5a65aec5-9704-4c66-8c2c-9012d961c99b" + }, + "source": [ + "X.columns[X.isna().any()]" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index([], dtype='object')" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R4ngba4SYEue" + }, + "source": [ + "### *Splitting Dataset into Train & Test*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vy9RTlZ4YFyO" + }, + "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.25,random_state =0)" + ], + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ocZLLSzgYl9V" + }, + "source": [ + "### *Training*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "id": "tPSuaammYz_4", + "outputId": "a3a5cc02-a37f-41be-d0d6-514872a484e1" + }, + "source": [ + "from sklearn.naive_bayes import GaussianNB\n", + "model = GaussianNB()\n", + "model.fit(X_train, y_train)" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "GaussianNB()" + ], + "text/html": [ + "
GaussianNB()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "v63bNnciZZYS" + }, + "source": [ + "### *Predicting, wheather Person Survived or Not*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "s17AtjCOZeEZ", + "outputId": "fb8f0722-4755-463a-b2c7-3761e564e2b3" + }, + "source": [ + "pclassNo = int(input(\"Enter Person's Pclass number: \"))\n", + "gender = int(input(\"Enter Person's Gender 0-female 1-male(0 or 1): \"))\n", + "age = int(input(\"Enter Person's Age: \"))\n", + "fare = float(input(\"Enter Person's Fare: \"))\n", + "person = [[pclassNo,gender,age,fare]]\n", + "result = model.predict(person)\n", + "print(result)\n", + "\n", + "if result == 1:\n", + " print(\"Person might be Survived\")\n", + "else:\n", + " print(\"Person might not be Survived\")" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Enter Person's Pclass number: 20\n", + "Enter Person's Gender 0-female 1-male(0 or 1): 0\n", + "Enter Person's Age: 43\n", + "Enter Person's Fare: 4567\n", + "[1]\n", + "Person might be Survived\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py:2739: UserWarning: X does not have valid feature names, but GaussianNB was fitted with feature names\n", + " warnings.warn(\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1PdvxG-La4H3" + }, + "source": [ + "### *Prediction for all Test Data*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fShPpJ75a6u0", + "outputId": "8d96d8c6-14fc-4c3d-fe83-35f22246d155" + }, + "source": [ + "y_pred = model.predict(X_test)\n", + "print(np.column_stack((y_pred,y_test)))" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 1]\n", + " [0 0]\n", + " [0 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 0]\n", + " [0 1]\n", + " [0 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [0 1]\n", + " [0 0]\n", + " [1 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 1]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 1]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 1]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 1]\n", + " [1 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 0]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 0]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 0]\n", + " [0 1]\n", + " [1 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 1]\n", + " [0 0]\n", + " [0 1]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 1]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 1]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 1]\n", + " [1 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lFeW_-qYdszc" + }, + "source": [ + "### *Accuracy of our Model*" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HDOFRQ0PdzQS", + "outputId": "9e0c4bba-ac94-4065-dac9-2e69d47ddebd" + }, + "source": [ + "from sklearn.metrics import accuracy_score\n", + "print(\"Accuracy of the Model: {0}%\".format(accuracy_score(y_test, y_pred)*100))" + ], + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy of the Model: 77.57847533632287%\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Untitled13.ipynb b/Untitled13.ipynb new file mode 100644 index 0000000..e8defb0 --- /dev/null +++ b/Untitled13.ipynb @@ -0,0 +1,730 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyMJAMTJ2UxcPpBAc/ntokzp", + "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": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "iU_l3SQ9A65p" + }, + "outputs": [], + "source": [] + }, + { + "source": [ + "#23_MarketBasketAnalysisusingAPIRIORI\n", + "### Importing the basic libraries\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "### Load Dataset from Local Directory\n", + "from google.colab import files\n", + "uploaded = files.upload()\n", + "### Importing the dataset\n", + "dataset = pd.read_csv('dataset.csv')\n", + "print(dataset.shape)\n", + "print(dataset.head(5))\n", + "### Data Pre-Processing using vectorized operations\n", + "# Extract the relevant columns (assuming first 20)\n", + "transactions_df = dataset.iloc[:, :20]\n", + "# Convert all values to strings\n", + "transactions_df = transactions_df.astype(str)\n", + "# Convert DataFrame to list of lists\n", + "transactions = transactions_df.values.tolist()\n", + "### Training APRIORI\n", + "!pip install apyori\n", + "from apyori import apriori\n", + "rules = apriori(transactions = transactions, min_support = 0.003, min_confidence = 0.2, min_lift = 3, min_length = 2, max_length = 2)\n", + "### Result\n", + "results = list(rules)\n", + "results\n", + "### Results in Dataframe\n", + "lhs = [tuple(result[2][0][0])[0] for result in results]\n", + "rhs = [tuple(result[2][0][1])[0] for result in results]\n", + "supports = [result[1] for result in results]\n", + "confidences = [result[2][0][2] for result in results]\n", + "lifts = [result[2][0][3] for result in results]\n", + "resultsinDataFrame = pd.DataFrame(zip(lhs, rhs, supports, confidences, lifts), columns = ['Left Hand Side', 'Right Hand Side', 'Support', 'Confidence', 'Lift'])\n", + "resultsinDataFrame" + ], + "cell_type": "code", + "metadata": { + "id": "lFqrYPxIAk31", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1291 + }, + "outputId": "dfb99183-e856-45ba-8a3d-9d4e58d67a90" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset.csv to dataset.csv\n", + "(7500, 20)\n", + " shrimp almonds avocado vegetables mix green grapes \\\n", + "0 burgers meatballs eggs NaN NaN \n", + "1 chutney NaN NaN NaN NaN \n", + "2 turkey avocado NaN NaN NaN \n", + "3 mineral water milk energy bar whole wheat rice green tea \n", + "4 low fat yogurt NaN NaN NaN NaN \n", + "\n", + " whole weat flour yams cottage cheese energy drink tomato juice \\\n", + "0 NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN \n", + "\n", + " low fat yogurt green tea honey salad mineral water salmon antioxydant juice \\\n", + "0 NaN NaN NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN NaN NaN \n", + "\n", + " frozen smoothie spinach olive oil \n", + "0 NaN NaN NaN \n", + "1 NaN NaN NaN \n", + "2 NaN NaN NaN \n", + "3 NaN NaN NaN \n", + "4 NaN NaN NaN \n", + "Collecting apyori\n", + " Downloading apyori-1.1.2.tar.gz (8.6 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Building wheels for collected packages: apyori\n", + " Building wheel for apyori (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for apyori: filename=apyori-1.1.2-py3-none-any.whl size=5954 sha256=6f460bf2d21945572fd7d1a90d9524bf5c416704c59847856c42f2fb0d60d484\n", + " Stored in directory: /root/.cache/pip/wheels/77/3d/a6/d317a6fb32be58a602b1e8c6b5d6f31f79322da554cad2a5ea\n", + "Successfully built apyori\n", + "Installing collected packages: apyori\n", + "Successfully installed apyori-1.1.2\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Left Hand Side Right Hand Side Support Confidence Lift\n", + "0 light cream chicken 0.004533 0.290598 4.843305\n", + "1 mushroom cream sauce escalope 0.005733 0.300699 3.790327\n", + "2 pasta escalope 0.005867 0.372881 4.700185\n", + "3 fromage blanc honey 0.003333 0.245098 5.178128\n", + "4 herb & pepper ground beef 0.016000 0.323450 3.291555\n", + "5 tomato sauce ground beef 0.005333 0.377358 3.840147\n", + "6 light cream olive oil 0.003200 0.205128 3.120612\n", + "7 whole wheat pasta olive oil 0.008000 0.271493 4.130221\n", + "8 pasta shrimp 0.005067 0.322034 4.514494" + ], + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Left Hand SideRight Hand SideSupportConfidenceLift
0light creamchicken0.0045330.2905984.843305
1mushroom cream sauceescalope0.0057330.3006993.790327
2pastaescalope0.0058670.3728814.700185
3fromage blanchoney0.0033330.2450985.178128
4herb & pepperground beef0.0160000.3234503.291555
5tomato sauceground beef0.0053330.3773583.840147
6light creamolive oil0.0032000.2051283.120612
7whole wheat pastaolive oil0.0080000.2714934.130221
8pastashrimp0.0050670.3220344.514494
\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" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "resultsinDataFrame", + "summary": "{\n \"name\": \"resultsinDataFrame\",\n \"rows\": 9,\n \"fields\": [\n {\n \"column\": \"Left Hand Side\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 7,\n \"samples\": [\n \"light cream\",\n \"mushroom cream sauce\",\n \"tomato sauce\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Right Hand Side\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 6,\n \"samples\": [\n \"chicken\",\n \"escalope\",\n \"shrimp\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Support\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.003896500487537852,\n \"min\": 0.0032,\n \"max\": 0.016,\n \"num_unique_values\": 9,\n \"samples\": [\n 0.008,\n 0.005733333333333333,\n 0.005333333333333333\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Confidence\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.056168653549259547,\n \"min\": 0.20512820512820515,\n \"max\": 0.37735849056603776,\n \"num_unique_values\": 9,\n \"samples\": [\n 0.2714932126696833,\n 0.30069930069930073,\n 0.37735849056603776\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Lift\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.7066844698506499,\n \"min\": 3.120611639881417,\n \"max\": 5.178127589063795,\n \"num_unique_values\": 9,\n \"samples\": [\n 4.130221288078346,\n 3.7903273197390845,\n 3.840147461662528\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 1 + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "rj5duez_ERkd" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/accuracy_enhanced_BreastCancerDetection_VariousMLAlgorithm.ipynb b/accuracy_enhanced_BreastCancerDetection_VariousMLAlgorithm.ipynb new file mode 100644 index 0000000..bca0d4c --- /dev/null +++ b/accuracy_enhanced_BreastCancerDetection_VariousMLAlgorithm.ipynb @@ -0,0 +1,1083 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "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": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AhpeX5Dm_eLW" + }, + "source": [ + "# **Day-10_BreastCancerDetection_VariousMLAlgorithm**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8rvHswu2td0Z" + }, + "source": [ + "### *Importing Libraries*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "P-YXxKhu_Uk4" + }, + "source": [ + "import pandas as pd #useful for loading the dataset\n", + "import numpy as np #to perform array\n", + "from matplotlib import pyplot" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mOt3nocbwvZk" + }, + "source": [ + "### *Choose Dataset from Local Directory*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "xB2NMwXtw2dG", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 73 + }, + "outputId": "ec354929-3ba9-42a1-b9bb-ccf832a4bb1b" + }, + "source": [ + "from google.colab import files\n", + "uploaded = files.upload()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving data.csv to data.csv\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "69Kx6TycwzHo" + }, + "source": [ + "### *Load Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7aXWQK9Cw7Dz" + }, + "source": [ + "dataset = pd.read_csv('data.csv')" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "huZ5AaCtxD0p" + }, + "source": [ + "### *Summarize Dataset*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SmD4EDrkxFzq", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "c8de07bb-c31d-45b6-d7f1-f37549d27d5f" + }, + "source": [ + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(569, 33)\n", + " id diagnosis radius_mean texture_mean perimeter_mean area_mean \\\n", + "0 842302 M 17.99 10.38 122.80 1001.0 \n", + "1 842517 M 20.57 17.77 132.90 1326.0 \n", + "2 84300903 M 19.69 21.25 130.00 1203.0 \n", + "3 84348301 M 11.42 20.38 77.58 386.1 \n", + "4 84358402 M 20.29 14.34 135.10 1297.0 \n", + "\n", + " smoothness_mean compactness_mean concavity_mean concave points_mean \\\n", + "0 0.11840 0.27760 0.3001 0.14710 \n", + "1 0.08474 0.07864 0.0869 0.07017 \n", + "2 0.10960 0.15990 0.1974 0.12790 \n", + "3 0.14250 0.28390 0.2414 0.10520 \n", + "4 0.10030 0.13280 0.1980 0.10430 \n", + "\n", + " ... texture_worst perimeter_worst area_worst smoothness_worst \\\n", + "0 ... 17.33 184.60 2019.0 0.1622 \n", + "1 ... 23.41 158.80 1956.0 0.1238 \n", + "2 ... 25.53 152.50 1709.0 0.1444 \n", + "3 ... 26.50 98.87 567.7 0.2098 \n", + "4 ... 16.67 152.20 1575.0 0.1374 \n", + "\n", + " compactness_worst concavity_worst concave points_worst symmetry_worst \\\n", + "0 0.6656 0.7119 0.2654 0.4601 \n", + "1 0.1866 0.2416 0.1860 0.2750 \n", + "2 0.4245 0.4504 0.2430 0.3613 \n", + "3 0.8663 0.6869 0.2575 0.6638 \n", + "4 0.2050 0.4000 0.1625 0.2364 \n", + "\n", + " fractal_dimension_worst Unnamed: 32 \n", + "0 0.11890 NaN \n", + "1 0.08902 NaN \n", + "2 0.08758 NaN \n", + "3 0.17300 NaN \n", + "4 0.07678 NaN \n", + "\n", + "[5 rows x 33 columns]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-MFwV-9k3Tu1" + }, + "source": [ + "### *Mapping Class String Values to Numbers*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "yJvwzEfF3ZMe", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "7138e1d5-0f52-4a8d-80e1-63f3280ea23f" + }, + "source": [ + "dataset['diagnosis'] = dataset['diagnosis'].map({'B': 0, 'M': 1}).astype(int)\n", + "print(dataset.head)" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0qgR6rGRxH5y" + }, + "source": [ + "### *Segregate Dataset into X(Input/IndependentVariable) & Y(Output/DependentVariable)*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8qOVIILpxefB", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a50556fe-21af-46eb-ff7e-056be4e2d174" + }, + "source": [ + "X = dataset.iloc[:, 2:32].values\n", + "X" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1.799e+01, 1.038e+01, 1.228e+02, ..., 2.654e-01, 4.601e-01,\n", + " 1.189e-01],\n", + " [2.057e+01, 1.777e+01, 1.329e+02, ..., 1.860e-01, 2.750e-01,\n", + " 8.902e-02],\n", + " [1.969e+01, 2.125e+01, 1.300e+02, ..., 2.430e-01, 3.613e-01,\n", + " 8.758e-02],\n", + " ...,\n", + " [1.660e+01, 2.808e+01, 1.083e+02, ..., 1.418e-01, 2.218e-01,\n", + " 7.820e-02],\n", + " [2.060e+01, 2.933e+01, 1.401e+02, ..., 2.650e-01, 4.087e-01,\n", + " 1.240e-01],\n", + " [7.760e+00, 2.454e+01, 4.792e+01, ..., 0.000e+00, 2.871e-01,\n", + " 7.039e-02]])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "TE6LNAwmxkBn", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "93adc199-d960-4cdd-9d42-3ad978584020" + }, + "source": [ + "Y = dataset.iloc[:,1].values\n", + "Y" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1,\n", + " 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1,\n", + " 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1,\n", + " 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0,\n", + " 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1,\n", + " 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1,\n", + " 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0,\n", + " 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1,\n", + " 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,\n", + " 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1,\n", + " 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0,\n", + " 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0,\n", + " 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,\n", + " 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,\n", + " 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0,\n", + " 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0])" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oOzExtMjxmup" + }, + "source": [ + "### *Splitting Dataset into Train & Test*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uJXcK2PHxqJ9" + }, + "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.25, random_state = 0)" + ], + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "89y8rh-3yv15" + }, + "source": [ + "### *Feature Scaling*\n", + "### we scale our data to make all the features contribute equally to the result\n", + "###Fit_Transform - fit method is calculating the mean and variance of each of the features present in our data\n", + "###Transform - Transform method is transforming all the features using the respective mean and variance,\n", + "###We want our test data to be a completely new and a surprise set for our model" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ehsC_5BSy-Pa" + }, + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "sc = StandardScaler()\n", + "X_train = sc.fit_transform(X_train)\n", + "X_test = sc.transform(X_test)" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "X1gsZ3YZ51gz" + }, + "source": [ + "### *Validating some ML algorithm by its accuracy - Model Score*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ekrjJPx_5-rJ" + }, + "source": [ + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "from sklearn.naive_bayes import GaussianNB\n", + "from sklearn.svm import SVC\n", + "\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.model_selection import StratifiedKFold" + ], + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "7fmWEBDq6fUM" + }, + "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')))" + ], + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "r0dYFpqw6iXs", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 923 + }, + "outputId": "c7d83a67-7567-499b-b99c-3792b5c0f9c5" + }, + "source": [ + "results = []\n", + "names = []\n", + "res = []\n", + "for name, model in models:\n", + " kfold = StratifiedKFold(n_splits=10, random_state=None)\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", + " res.append(cv_results.mean())\n", + " print('%s: %f' % (name, cv_results.mean()))\n", + "\n", + "pyplot.ylim(.900, .999)\n", + "pyplot.bar(names, res, color ='maroon', width = 0.6)\n", + "\n", + "pyplot.title('Algorithm Comparison')\n", + "pyplot.show()" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:1256: FutureWarning: 'multi_class' was deprecated in version 1.5 and will be removed in 1.7. Use OneVsRestClassifier(LogisticRegression(..)) instead. Leave it to its default value to avoid this warning.\n", + " warnings.warn(\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "LR: 0.981285\n", + "LDA: 0.957863\n", + "KNN: 0.964839\n", + "CART: 0.929568\n", + "NB: 0.941417\n", + "SVM: 0.979014\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGzCAYAAAAMr0ziAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMkpJREFUeJzt3XtYVWX+///XBoKNIuIBIRVF0MnUhFIhc0azmCg6mOMpR1PRnDLRHJw8ZaD2KbLS0cg8lIkapeUpa4oyFCc/UuRpPs1Qpl8THRKwUnBIUNnr90c/d+0BD4C6b+z5uK51de17vde973uxbb9Y+94Lm2VZlgAAAAzm4e4BAAAAXAiBBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFuEJsNptmzJjhtucPDQ3ViBEjLrr2nnvuubwDwnmlpaXJZrPp4MGD7h4KYAQCC3AJvPzyy7LZbIqOjnb3UC5abm6uZsyYYfQb4vr163XXXXepadOm8vb2VvPmzTVw4EBt3rzZ3UMDcIURWIBLID09XaGhocrJydH+/fvdPZwq7d27V6+88orzcW5urmbOnGlkYLEsS/Hx8frDH/6gwsJCJSYmatGiRRo7dqwOHDig22+/Xdu3b3f3MC+rBx98UCdPnlTr1q3dPRTACF7uHgBQ133zzTfavn271q1bp4cffljp6elKTk5297Ak/fTGX1ZWJl9fX/n4+Lh7OBdtzpw5SktL04QJEzR37lzZbDbnvieeeEIrV66Ul9fV+b+v0tJS1a9fX56envL09HT3cABjcIUFqKX09HQ1atRId999t/r376/09PSLPjYrK0tdu3aV3W5XeHi4Fi9erBkzZri8QUvSmTNn9NRTTyk8PFw+Pj4KDQ3VtGnTVF5e7lJ3du3Jhx9+qK5du8rX11eLFy927ju7hiUtLU0DBgyQJPXu3Vs2m002m01ZWVku/W3btk1RUVGy2+0KCwvTihUrXPafXWexbds2jR8/XoGBgQoICNDDDz+sU6dO6fjx4xo2bJgaNWqkRo0aadKkSbrQH4g/efKkUlJS1L59e73wwguVzoX009WHqKgo5+MDBw5owIABaty4serVq6ebb75Zf/vb3yqda5vNprfeekszZ85UixYt1KBBA/Xv31/FxcUqLy/XhAkT1KxZM/n5+Sk+Pr7S+bXZbEpISFB6erquu+462e12denSRX//+99d6vLy8vToo4/quuuuk6+vr5o0aaIBAwZUupp19vxt3bpVjz76qJo1a6aWLVu67PvlMTt27FBsbKyaNm0qX19ftWnTRiNHjnTps7S0VBMnTlRISIh8fHx03XXX6YUXXqh03s/OZcOGDerUqZN8fHzUsWNHZWRknPfnA7jL1fkrCnAFpaen6w9/+IO8vb01ePBgLVy4UJ9//rm6det23uN2796tO++8U9dee61mzpypiooKzZo1S4GBgZVqH3roIS1fvlz9+/fXxIkT9dlnnyklJUVffvml1q9f71K7d+9eDR48WA8//LBGjx6t6667rlJ/PXv21Pjx4/Xiiy9q2rRpuv766yXJ+V9J2r9/v/r3769Ro0Zp+PDheu211zRixAh16dJFHTt2dOlv3LhxCg4O1syZM/Xpp59qyZIlCggI0Pbt29WqVSs988wzev/99/X888+rU6dOGjZs2DnPy7Zt2/TDDz9owoQJF3WFobCwULfccot+/PFHjR8/Xk2aNNHy5ct13333ac2aNerbt69LfUpKinx9fTVlyhTt379fqampuuaaa+Th4aFjx45pxowZ+vTTT5WWlqY2bdooKSnJ5fitW7dq9erVGj9+vHx8fPTyyy/rzjvvVE5Ojjp16iRJ+vzzz7V9+3Y98MADatmypQ4ePKiFCxfq1ltvVW5ururVq+fS56OPPqrAwEAlJSWptLS0ynkWFRXpjjvuUGBgoKZMmaKAgAAdPHhQ69atc9ZYlqX77rtPW7Zs0ahRoxQZGakPP/xQjz/+uPLz8/XXv/610rlet26dHn30UTVo0EAvvvii+vXrp0OHDqlJkyYXPPfAFWUBqLEdO3ZYkqxNmzZZlmVZDofDatmypfXYY49VqpVkJScnOx/fe++9Vr169az8/Hxn2759+ywvLy/rl/809+zZY0myHnroIZf+/vKXv1iSrM2bNzvbWrdubUmyMjIyKj1/69atreHDhzsfv/3225Yka8uWLVXWSrL+/ve/O9uKioosHx8fa+LEic62ZcuWWZKs2NhYy+FwONu7d+9u2Ww265FHHnG2nTlzxmrZsqXVq1evSs/3S/Pnz7ckWevXrz9v3VkTJkywJFmffPKJs+3EiRNWmzZtrNDQUKuiosKyLMvasmWLJcnq1KmTderUKWft4MGDLZvNZt11110u/Xbv3t1q3bq1S5skS5K1Y8cOZ1teXp5lt9utvn37Ott+/PHHSuPMzs62JFkrVqxwtp09f7/97W+tM2fOuNSf3ffNN99YlmVZ69evtyRZn3/++TnPxYYNGyxJ1v/8z/+4tPfv39+y2WzW/v37Xebi7e3t0vaPf/zDkmSlpqae8zkAd+EjIaAW0tPTFRQUpN69e0v66TL7oEGDtGrVKlVUVJzzuIqKCn388ce6//771bx5c2d727Ztddddd7nUvv/++5KkxMREl/aJEydKUqWPPtq0aaPY2NiaT+r/16FDB/3ud79zPg4MDNR1112nAwcOVKodNWqUy0c30dHRsixLo0aNcrZ5enqqa9euVR7/SyUlJZKkBg0aXNQ433//fUVFRem3v/2ts83Pz09/+tOfdPDgQeXm5rrUDxs2TNdcc02lsf73RyvR0dE6fPiwzpw549LevXt3denSxfm4VatW6tOnjz788EPnz9zX19e5//Tp0/r+++/Vtm1bBQQEaNeuXZXmMHr06AteTQoICJAkvffeezp9+nSVNe+//748PT01fvx4l/aJEyfKsix98MEHLu0xMTEKDw93Pu7cubP8/f0v+DMC3IHAAtRQRUWFVq1apd69e+ubb77R/v37tX//fkVHR6uwsFCZmZnnPLaoqEgnT55U27ZtK+3777a8vDx5eHhUag8ODlZAQIDy8vJc2tu0aVOLWf2sVatWldoaNWqkY8eOXbC2YcOGkqSQkJBK7VUd/0v+/v6SpBMnTlzUOPPy8qr82Ovsx1v/fX6qM1aHw6Hi4mKX9nbt2lV6rt/85jf68ccfdfToUUk/rcNJSkpyriNp2rSpAgMDdfz48Ur9SRf3M+vVq5f69eunmTNnqmnTpurTp4+WLVvmss4mLy9PzZs3rxT2LvZcSOf+GQPuRmABamjz5s06cuSIVq1apXbt2jm3gQMHSlK1Ft9ejKoWn1bll7/d18a5fuO3qlg0e67aqtqrOv6X2rdvL0n64osvLjTEGqnOWKULj7cq48aN09NPP62BAwfqrbfe0kcffaRNmzapSZMmcjgcleov5mdms9m0Zs0aZWdnKyEhQfn5+Ro5cqS6dOmi//znP9Ueo3Rp5wxcbiy6BWooPT1dzZo104IFCyrtW7dundavX69FixZV+WbUrFkz2e32Ku/Z8t9trVu3lsPh0L59+1wWxRYWFur48eM1vk/HxQagK+23v/2tGjVqpDfffFPTpk274EclrVu31t69eyu1f/XVV879l9K+ffsqtX399deqV6+ec8H0mjVrNHz4cM2ZM8dZU1ZWpuPHj9f6+W+++WbdfPPNevrpp/XGG29oyJAhWrVqlR566CG1bt1aH3/8sU6cOOFyleVynQvgSuIKC1ADJ0+e1Lp163TPPfeof//+lbaEhASdOHFCGzdurPJ4T09PxcTEaMOGDfr222+d7fv376+0ziAuLk6SNG/ePJf2uXPnSpLuvvvuGs2hfv36knRJ3kQvpXr16mny5Mn68ssvNXny5Cp/23/99deVk5Mj6afzk5OTo+zsbOf+0tJSLVmyRKGhoerQocMlHV92drbLOpTDhw/rnXfe0R133OEMV56enpXGnZqaet51TRdy7NixSn1GRkZKkvNjobi4OFVUVOill15yqfvrX/8qm81WaX0UUJdwhQWogY0bN+rEiRO67777qtx/8803KzAwUOnp6Ro0aFCVNTNmzNBHH32kHj16aMyYMc43mk6dOmnPnj3OuoiICA0fPlxLlizR8ePH1atXL+Xk5Gj58uW6//77nQt+qysyMlKenp6aPXu2iouL5ePjo9tuu03NmjWrUX+X0uOPP65//etfmjNnjrZs2aL+/fsrODhYBQUF2rBhg3Jycpx3up0yZYrefPNN3XXXXRo/frwaN26s5cuX65tvvtHatWvl4XFpfy/r1KmTYmNjXb7WLEkzZ8501txzzz1auXKlGjZsqA4dOig7O1sff/xxrb4qvHz5cr388svq27evwsPDdeLECb3yyivy9/d3htp7771XvXv31hNPPKGDBw8qIiJCH330kd555x1NmDDBZYEtUNcQWIAaSE9Pl91u1+9///sq93t4eOjuu+9Wenq6vv/++yrfqLp06aIPPvhAf/nLX/Tkk08qJCREs2bN0pdffum8hH/Wq6++qrCwMKWlpWn9+vUKDg7W1KlTa3VH3eDgYC1atEgpKSkaNWqUKioqtGXLFiMCi4eHh1asWKE+ffpoyZIleuGFF1RSUqLAwED17NlTzz33nLp37y5JCgoK0vbt2zV58mSlpqaqrKxMnTt31rvvvlvjq0/n06tXL3Xv3l0zZ87UoUOH1KFDB6Wlpalz587Omvnz58vT01Pp6ekqKytTjx49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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ospEktZ3_KgQ" + }, + "source": [ + "### *Training & Prediction using the algorithm with high accuracy*" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zbi3Uvd0_Yn7", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "c3532d24-4239-4945-daee-c3d5ba95fcda" + }, + "source": [ + "from sklearn.svm import SVC\n", + "model.fit(X_train, y_train)\n", + "y_pred = model.predict(X_test)\n", + "print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 1]\n", + " [1 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 1]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [0 1]\n", + " [1 1]\n", + " [0 0]\n", + " [0 0]\n", + " [0 0]\n", + " [1 1]]\n" + ] + } + ] + }, + { + "source": [ + "models = []\n", + "models.append(('LR', LogisticRegression(**best_params['LR'])))\n", + "models.append(('LDA', LinearDiscriminantAnalysis(**best_params['LDA'])))\n", + "models.append(('KNN', KNeighborsClassifier(**best_params['KNN'])))\n", + "models.append(('CART', DecisionTreeClassifier(**best_params['CART'])))\n", + "models.append(('NB', GaussianNB(**best_params['NB'])))\n", + "models.append(('SVM', SVC(**best_params['SVM'])))" + ], + "cell_type": "code", + "metadata": { + "id": "lgTzkaw8B0ZZ" + }, + "execution_count": 28, + "outputs": [] + }, + { + "source": [ + "from sklearn.model_selection import GridSearchCV\n", + "\n", + "param_grids = {\n", + " 'LR': {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n", + " 'LDA': {'solver': ['svd', 'lsqr', 'eigen']},\n", + " 'KNN': {'n_neighbors': [3, 5, 7, 9, 11], 'weights': ['uniform', 'distance']},\n", + " 'CART': {'criterion': ['gini', 'entropy'], 'max_depth': [None, 5, 10, 15]},\n", + " 'NB': {'var_smoothing': [1e-9, 1e-8, 1e-7, 1e-6, 1e-5]},\n", + " 'SVM': {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf'], 'gamma': ['scale', 'auto']}\n", + "}\n", + "\n", + "# Initialize best_params before the loop\n", + "best_params = {}\n", + "\n", + "# Define models outside the loop to avoid redefinition within each loop\n", + "models = [\n", + " ('LR', LogisticRegression()),\n", + " ('LDA', LinearDiscriminantAnalysis()),\n", + " ('KNN', KNeighborsClassifier()),\n", + " ('CART', DecisionTreeClassifier()),\n", + " ('NB', GaussianNB()),\n", + " ('SVM', SVC())\n", + "]\n", + "\n", + "results = []\n", + "names = []\n", + "\n", + "for name, model in models:\n", + " grid_search = GridSearchCV(estimator=model, param_grid=param_grids[name], cv=5, scoring='accuracy')\n", + " grid_search.fit(X_train, y_train)\n", + " results.append(grid_search.best_score_)\n", + " names.append(name)\n", + " best_params[name] = grid_search.best_params_ # Populating best_params inside the loop\n", + " print(f'{name}: Best Accuracy = {grid_search.best_score_}, Best Parameters = {grid_search.best_params_}')\n", + "\n", + "\n", + "# Now you can use best_params to create your models\n", + "models = []\n", + "models.append(('LR', LogisticRegression(**best_params['LR'])))\n", + "models.append(('LDA', LinearDiscriminantAnalysis(**best_params['LDA'])))\n", + "models.append(('KNN', KNeighborsClassifier(**best_params['KNN'])))\n", + "models.append(('CART', DecisionTreeClassifier(**best_params['CART'])))\n", + "models.append(('NB', GaussianNB(**best_params['NB'])))\n", + "models.append(('SVM', SVC(**best_params['SVM'])))\n", + "\n", + "# ... (Rest of your code)" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FuOHDHRpCGBD", + "outputId": "cc1ace9b-2ba2-44fe-98cf-b525f30e5355" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "LR: Best Accuracy = 0.9812038303693571, Best Parameters = {'C': 1}\n", + "LDA: Best Accuracy = 0.9459917920656634, Best Parameters = {'solver': 'svd'}\n", + "KNN: Best Accuracy = 0.9625170998632011, Best Parameters = {'n_neighbors': 9, 'weights': 'uniform'}\n", + "CART: Best Accuracy = 0.922435020519836, Best Parameters = {'criterion': 'entropy', 'max_depth': 5}\n", + "NB: Best Accuracy = 0.9460465116279069, Best Parameters = {'var_smoothing': 1e-09}\n", + "SVM: Best Accuracy = 0.9835567715458277, Best Parameters = {'C': 1, 'gamma': 'scale', 'kernel': 'linear'}\n" + ] + } + ] + }, + { + "source": [ + "results = []\n", + "names = []\n", + "best_params = {}\n", + "\n", + "for name, model in models:\n", + " grid_search = GridSearchCV(estimator=model, param_grid=param_grids[name], cv=5, scoring='accuracy')\n", + " grid_search.fit(X_train, y_train)\n", + " results.append(grid_search.best_score_)\n", + " names.append(name)\n", + " best_params[name] = grid_search.best_params_\n", + " print(f'{name}: Best Accuracy = {grid_search.best_score_}, Best Parameters = {grid_search.best_params_}')\n", + "\n", + "# Print the results\n", + "pyplot.ylim(.900, .999)\n", + "pyplot.bar(names, results, color ='maroon', width = 0.6)\n", + "pyplot.title('Algorithm Comparison')\n", + "pyplot.show()" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 556 + }, + "id": "CP9Tm2JRB2ee", + "outputId": "62b247dc-d239-4a9e-edca-45b0c8231ee8" + }, + "execution_count": 24, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "LR: Best Accuracy = 0.9812038303693571, Best Parameters = {'C': 1}\n", + "LDA: Best Accuracy = 0.9459917920656634, Best Parameters = {'solver': 'svd'}\n", + "KNN: Best Accuracy = 0.9625170998632011, Best Parameters = {'n_neighbors': 9, 'weights': 'uniform'}\n", + "CART: Best Accuracy = 0.9248974008207934, Best Parameters = {'criterion': 'gini', 'max_depth': 10}\n", + "NB: Best Accuracy = 0.9460465116279069, Best Parameters = {'var_smoothing': 1e-09}\n", + "SVM: Best Accuracy = 0.9835567715458277, Best Parameters = {'C': 1, 'gamma': 'scale', 'kernel': 'linear'}\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGzCAYAAAAMr0ziAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMkRJREFUeJzt3XtcVVXi///3AYKDIuIFIRVF0MnUhFIhc0azmCi6mOMtR1PRnDIvOTh5y0DtU2Slo5F5KRM1Sstb1hRlKE5+pMjbfJqhTL8mOiRgpeCQoHL2749+njrD8QJezsJez8djP3yctddeZ63FwfNm73X2sVmWZQkAAMBgXp7uAAAAwPkQWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYgCvEZrNp+vTpHnv+8PBwDRs27ILr3nPPPZe3Qzin9PR02Ww2HThwwNNdAYxAYAEugZdfflk2m02xsbGe7soFy8vL0/Tp041+Q1y3bp3uuusuNW7cWL6+vmratKn69++vTZs2ebprAK4wAgtwCWRkZCg8PFy5ubnat2+fp7vj1p49e/TKK684H+fl5WnGjBlGBhbLspSYmKg//OEPKioqUlJSkhYuXKjRo0dr//79uv3227Vt2zZPd/OyevDBB3XixAm1bNnS010BjODj6Q4Atd0333yjbdu2ae3atXr44YeVkZGhlJQUT3dL0k9v/OXl5fL395efn5+nu3PBZs+erfT0dI0fP15z5syRzWZz7nviiSe0YsUK+fhcnf99lZWVqW7duvL29pa3t7enuwMYgzMswEXKyMhQgwYNdPfdd6tv377KyMi44GOzs7PVuXNn2e12RUZGatGiRZo+fbrLG7QknT59Wk899ZQiIyPl5+en8PBwTZ06VRUVFS71zqw9+fDDD9W5c2f5+/tr0aJFzn1n1rCkp6erX79+kqSePXvKZrPJZrMpOzvbpb2tW7cqJiZGdrtdERERWr58ucv+M+sstm7dqnHjxik4OFhBQUF6+OGHdfLkSR07dkxDhgxRgwYN1KBBA02cOFHn+4L4EydOKDU1VW3bttULL7xQZS6kn84+xMTEOB/v379f/fr1U8OGDVWnTh3dfPPN+tvf/lZlrm02m9566y3NmDFDzZo1U7169dS3b1+VlJSooqJC48ePV5MmTRQQEKDExMQq82uz2TRmzBhlZGTouuuuk91uV6dOnfT3v//dpV5+fr4effRRXXfddfL391ejRo3Ur1+/Kmezzszfli1b9Oijj6pJkyZq3ry5y75fHrN9+3bFx8ercePG8vf3V6tWrTR8+HCXNsvKyjRhwgSFhYXJz89P1113nV544YUq835mLOvXr1eHDh3k5+en9u3bKzMz85w/H8BTrs4/UYArKCMjQ3/4wx/k6+urgQMHasGCBfr888/VpUuXcx63a9cu3Xnnnbr22ms1Y8YMVVZWaubMmQoODq5S96GHHtKyZcvUt29fTZgwQZ999plSU1P15Zdfat26dS519+zZo4EDB+rhhx/WyJEjdd1111Vpr3v37ho3bpxefPFFTZ06Vddff70kOf+VpH379qlv374aMWKEhg4dqtdee03Dhg1Tp06d1L59e5f2xo4dq9DQUM2YMUOffvqpFi9erKCgIG3btk0tWrTQM888o/fff1/PP/+8OnTooCFDhpx1XrZu3aoffvhB48ePv6AzDEVFRbrlllv0448/aty4cWrUqJGWLVum++67T6tXr1bv3r1d6qempsrf31+TJ0/Wvn37lJaWpmuuuUZeXl46evSopk+frk8//VTp6elq1aqVkpOTXY7fsmWLVq1apXHjxsnPz08vv/yy7rzzTuXm5qpDhw6SpM8//1zbtm3TAw88oObNm+vAgQNasGCBbr31VuXl5alOnToubT766KMKDg5WcnKyysrK3I6zuLhYd9xxh4KDgzV58mQFBQXpwIEDWrt2rbOOZVm67777tHnzZo0YMULR0dH68MMP9fjjj6ugoEB//etfq8z12rVr9eijj6pevXp68cUX1adPHx08eFCNGjU679wDV5QFoMa2b99uSbI2btxoWZZlORwOq3nz5tZjjz1Wpa4kKyUlxfn43nvvterUqWMVFBQ4y/bu3Wv5+PhYv/zV3L17tyXJeuihh1za+8tf/mJJsjZt2uQsa9mypSXJyszMrPL8LVu2tIYOHep8/Pbbb1uSrM2bN7utK8n6+9//7iwrLi62/Pz8rAkTJjjLli5dakmy4uPjLYfD4Szv2rWrZbPZrEceecRZdvr0aat58+ZWjx49qjzfL82bN8+SZK1bt+6c9c4YP368Jcn65JNPnGXHjx+3WrVqZYWHh1uVlZWWZVnW5s2bLUlWhw4drJMnTzrr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WAAAgPEILAAAwHg1Cizz589XeHi47Ha7YmNjlZube9a6p06d0syZMxUZGSm73a6oqChlZma61ElNTVWXLl1Ur149NWnSRPfff7/27NlTk64BAICrULUDy6pVq5SUlKSUlBTt3LlTUVFRio+PV3Fxsdv606ZN06JFi5SWlqa8vDw98sgj6t27t3bt2uWss2XLFo0ePVqffvqpNm7cqFOnTumOO+5QWVlZzUcGAACuGtUOLHPmzNHIkSOVmJiodu3aaeHChapTp45ee+01t/VXrFihqVOnKiEhQRERERo1apQSEhI0e/ZsZ53MzEwNGzZM7du3V1RUlNLT03Xw4EHt2LGj5iMDAABXjWoFlpMnT2rHjh2Ki4v7uQEvL8XFxSknJ8ftMRUVFbLb7S5l/v7+2rp161mfp6SkRJLUsGHDs9apqKhQaWmpywYAAK5O1Qos3333nSorKxUSEuJSHhISosLCQrfHxMfHa86cOdq7d68cDoc2btyotWvX6vDhw27rOxwOjR8/Xt26dVOHDh3O2pfU1FTVr1/fuYWFhVVnKAAAoBa57J8Smjdvntq0aaO2bdvK19dXY8aMUWJiory83D/16NGj9c9//lMrV648Z7tTpkxRSUmJczt06NDl6D4AADBAtQJL48aN5e3traKiIpfyoqIihYaGuj0mODhY69evV1lZmfLz8/XVV18pICBAERERVeqOGTNG7733njZv3qzmzZufsy9+fn4KDAx02QAAwNWpWoHF19dXnTp1UlZWlrPM4XAoKytLXbt2PeexdrtdzZo10+nTp7VmzRr16tXLuc+yLI0ZM0br1q3Tpk2b1KpVq2oOAwAAXM18qntAUlKShg4dqs6dOysmJkZz585VWVmZEhMTJUlDhgxRs2bNlJqaKkn67LPPVFBQoOjoaBUUFGj69OlyOByaOHGis83Ro0frjTfe0DvvvKN69eo518PUr19f/v7+l2KcAACgFqt2YBkwYICOHDmi5ORkFRYWKjo6WpmZmc6FuAcPHnRZn1JeXq5p06Zp//79CggIUEJCglasWKGgoCBnnQULFkiSbr31VpfnWrp0qYYNG1b9UQEAgKtKtQOL9NNakzFjxrjdl52d7fK4R48eysvLO2d7lmXVpBsAAOBXgu8SAgAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAY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9NtJ3nzzTUVGRioqKkqSFB0drZYtW2rVqlUu9erVq6fdu3dr+/btmj17tm666Sa366t+zc73uvvkk0+0e/du7d69W6+++qqeeeYZLViw4Ar30rP69Omjb7/9Vhs2bNCdd96p7Oxs3XTTTc6F2QMHDlRlZaXeeustSdKqVavk5eV11nVQw4cP19KlS7VlyxaVlZUpISHhSg3lkiGwGKJx48Zq3bq1fve73+ntt9/WuHHjlJeX5+lu1Rrff/+9jhw5olatWkmSPvzwQxUUFGjAgAHy8fGRj4+PHnjgAeXn5/8qFu81a9ZM2dnZKigo0J133qnjx4+7rde9e3fFx8drypQp52zPx8dHTz/9tObNm6dvv/32cnTZY9q0aSObzaavvvrqnPWWLFmif/3rX87Xk4+Pj/Ly8qqclvfy8lLr1q11/fXXKykpSTfffLNGjRp1OYdQ65zvddeqVSu1bt1a7du3V2Jioh588MFfZeiz2+36/e9/ryeffFLbtm3TsGHDnGemAgMD1bdvX+dZ46VLl6p///4KCAhw29agQYP06aefavr06XrwwQfl41Pt7z72OAKLgcLCwjRgwIDzvongZ/PmzZOXl5fz47xLlizRAw884Pwr7cz2wAMP/GoW37Zs2VJbtmxRYWHhOUPLs88+q3fffbfKpwj+W79+/dS+fXvNmDHjcnTXY85cLpw/f77Kysqq7D927Ji++OILbd++XdnZ2S6vp+zsbOXk5Jwz7EyePFmrVq36VS0avRAX+rqTflr7cuLEiSvQK7O1a9fO5TU6YsQIbd26Ve+99562bdvmstj2vzVs2FD33XeftmzZUisvB0lS7YtYtVhJSYl2797tUtaoUSO3dR977DF16NBB27dvV+fOna9A78xyrrk6fvy4CgsLderUKX3zzTd6/fXX9eqrryo1NVWtW7fWkSNH9O6772rDhg3q0KGDSxtDhgxR79699cMPP6hhw4ZXajgeExYWpuzsbPXs2VPx8fHKzMysUueGG27QoEGD9OKLL563vWeffVbx8fGXo6seNX/+fHXr1k0xMTGaOXOmOnbsqNOnT2vjxo1asGCB4uPjFRMT43YdRZcuXbRkyRK392WRfvoZ9O7dW8nJyXrvvfcu91BqjXO97oqLi1VeXq6Kigrl5uZqxYoV6tu3rwd66Rnff/+9+vXrp+HDh6tjx46qV6+etm/frueee069evVy1uvevbtat26tIUOGqG3btrrlllvO2W56erpefvnls77vmI4zLFdQdna2brzxRpftbH+ttmvXTnfccYeSk5OvcC/NcK65Sk5O1rXXXqvWrVvrwQcfVElJibKysjRp0iRJ0vLly1W3bl23i01vv/12+fv76/XXX7+i4/Gk5s2bKzs7W999953i4+NVWlpapc7MmTMvaG3Pbbfdpttuu02nT5++HF31mIiICO3cuVM9e/bUhAkT1KFDB/3+979XVlaW5s2bp9dff119+vRxe2yfPn20fPlynTp16qzt//nPf9bf/vY35ebmXq4h1Epne91dd911zt/xSZMm6eGHH75qP6XmTkBAgHMtY/fu3dWhQwc9+eSTGjlypF566SVnPZvNpuHDh+vo0aMXdNbE39+/1oYVSbJZF7riDAAAwEM4wwIAAIxHYAEAAMYjsAAAAOMRWAAAgPEILAAAwHgEFgAAYDwCCwAAMB6BBQAAGI/AAgAAjEdgAQAAxiOwAAAA4/1/oh9MC2piR+sAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/athelete_speed_dashboard5.ipynb b/athelete_speed_dashboard5.ipynb new file mode 100644 index 0000000..7c62e85 --- /dev/null +++ b/athelete_speed_dashboard5.ipynb @@ -0,0 +1,176 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyO00Xm/6WwCJ8/dPgpB1Juf", + "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": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 614 + }, + "id": "G2vIOdeGG43G", + "outputId": "689ccdcc-3ca2-4b1f-e21d-702aa480ff99" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Analysis complete.\n" + ] + } + ], + "source": [ + "# prompt: create visual dashboard for speed,power,mean velocity,horsepower persecond analysis using rpm for atheletes speed analysis device where we calculate athelets speed through revolution per minute through absolute encoder sensor live.the dashboard should be more visual and should use 2d modeling for graphs of all above parameter and clearity in all above graphs ploted.also build an python application for the same .write backend effective and correctly matching front end parameter\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import time\n", + "import random\n", + "import pandas as pd\n", + "from IPython.display import clear_output\n", + "\n", + "class AthleteAnalyzer:\n", + " def __init__(self):\n", + " self.rpm_data = []\n", + " self.time_data = []\n", + " self.power_data = []\n", + " self.speed_data = []\n", + " self.mean_velocity_data = []\n", + " self.horsepower_per_second_data = []\n", + " self.start_time = time.time()\n", + "\n", + " def calculate_speed(self, rpm, radius=0.3): # Radius in meters (adjust as needed)\n", + " # Calculate linear speed (m/s) from RPM and radius\n", + " circumference = 2 * np.pi * radius\n", + " speed_mps = (rpm / 60) * circumference\n", + " return speed_mps\n", + "\n", + " def calculate_power(self, rpm, torque=10): # Torque in Nm (adjust as needed)\n", + " # Calculate power (watts) from RPM and torque\n", + " power_watts = (rpm * 2 * np.pi * torque) / 60\n", + " return power_watts\n", + "\n", + " def calculate_mean_velocity(self,speed_data):\n", + " if len(speed_data)==0:\n", + " return 0\n", + " mean_velocity = sum(speed_data) / len(speed_data)\n", + " return mean_velocity\n", + "\n", + " def calculate_horsepower_per_second(self,power_data):\n", + " if len(power_data)==0:\n", + " return 0\n", + "\n", + " horsepower_per_second = (power_data[-1] * 0.001341)\n", + " return horsepower_per_second\n", + "\n", + " def update_data(self, rpm):\n", + " current_time = time.time() - self.start_time\n", + " self.time_data.append(current_time)\n", + " self.rpm_data.append(rpm)\n", + "\n", + " speed = self.calculate_speed(rpm)\n", + " self.speed_data.append(speed)\n", + "\n", + " power = self.calculate_power(rpm)\n", + " self.power_data.append(power)\n", + "\n", + " mean_velocity=self.calculate_mean_velocity(self.speed_data)\n", + " self.mean_velocity_data.append(mean_velocity)\n", + "\n", + " horsepower_per_second=self.calculate_horsepower_per_second(self.power_data)\n", + " self.horsepower_per_second_data.append(horsepower_per_second)\n", + "\n", + " def create_dashboard(self):\n", + "\n", + " # Create figure and axes\n", + " fig, axs = plt.subplots(3, 2, figsize=(18, 12))\n", + "\n", + " # RPM Graph\n", + " axs[0, 0].plot(self.time_data, self.rpm_data, label=\"RPM\", color=\"blue\")\n", + " axs[0, 0].set_xlabel(\"Time (s)\")\n", + " axs[0, 0].set_ylabel(\"RPM\")\n", + " axs[0, 0].set_title(\"RPM Over Time\")\n", + " axs[0, 0].grid(True)\n", + "\n", + " # Speed Graph\n", + " axs[0, 1].plot(self.time_data, self.speed_data, label=\"Speed (m/s)\", color=\"green\")\n", + " axs[0, 1].set_xlabel(\"Time (s)\")\n", + " axs[0, 1].set_ylabel(\"Speed (m/s)\")\n", + " axs[0, 1].set_title(\"Speed Over Time\")\n", + " axs[0, 1].grid(True)\n", + "\n", + " # Power Graph\n", + " axs[1, 0].plot(self.time_data, self.power_data, label=\"Power (watts)\", color=\"red\")\n", + " axs[1, 0].set_xlabel(\"Time (s)\")\n", + " axs[1, 0].set_ylabel(\"Power (watts)\")\n", + " axs[1, 0].set_title(\"Power Over Time\")\n", + " axs[1, 0].grid(True)\n", + "\n", + " #Mean Velocity Graph\n", + " axs[1, 1].plot(self.time_data, self.mean_velocity_data, label=\"Mean Velocity\", color=\"orange\")\n", + " axs[1, 1].set_xlabel(\"Time (s)\")\n", + " axs[1, 1].set_ylabel(\"Mean Velocity\")\n", + " axs[1, 1].set_title(\"Mean Velocity Over Time\")\n", + " axs[1, 1].grid(True)\n", + "\n", + " #Horse power per second Graph\n", + " axs[2, 0].plot(self.time_data, self.horsepower_per_second_data, label=\"Horse Power Per Second\", color=\"purple\")\n", + " axs[2, 0].set_xlabel(\"Time (s)\")\n", + " axs[2, 0].set_ylabel(\"Horsepower/s\")\n", + " axs[2, 0].set_title(\"Horse Power per Second Over Time\")\n", + " axs[2, 0].grid(True)\n", + "\n", + " fig.delaxes(axs[2,1])\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + " def run_analysis(self, duration=30, update_interval=1):\n", + " end_time = time.time() + duration\n", + " while time.time() < end_time:\n", + " # Simulate RPM data from sensor (replace with actual sensor reading)\n", + " rpm = random.randint(50, 150)\n", + " self.update_data(rpm)\n", + " self.create_dashboard()\n", + "\n", + " # Clear the output and update the dashboard\n", + " clear_output(wait=True)\n", + "\n", + " time.sleep(update_interval)\n", + " print(\"Analysis complete.\")\n", + "\n", + "if __name__ == \"__main__\":\n", + " analyzer = AthleteAnalyzer()\n", + " analyzer.run_analysis()\n", + "\n" + ] + } + ] +} \ No newline at end of file diff --git a/breastcancer_6.ipynb b/breastcancer_6.ipynb new file mode 100644 index 0000000..e099796 --- /dev/null +++ b/breastcancer_6.ipynb @@ -0,0 +1,835 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyPEBJ6UnJGiLAl/F4VbQEn/", + "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": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "4BYhNI_DVlrd" + }, + "outputs": [], + "source": [] + }, + { + "source": [ + "from IPython import get_ipython\n", + "from IPython.display import display\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import train_test_split\n", + "from google.colab import files\n", + "from sklearn.preprocessing import LabelEncoder\n", + "from xgboost import XGBClassifier\n", + "from sklearn.metrics import confusion_matrix, accuracy_score\n", + "from sklearn.model_selection import cross_val_score" + ], + "cell_type": "code", + "metadata": { + "id": "x58skzkAVrK9" + }, + "execution_count": 1, + "outputs": [] + }, + { + "source": [ + "# Load Dataset from Local Directory\n", + "uploaded = files.upload()\n", + "\n", + "# Importing the dataset\n", + "dataset = pd.read_csv('dataset.csv')\n", + "print(dataset.shape)\n", + "print(dataset.head(5))" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 460 + }, + "id": "Wv58GcVQVsAP", + "outputId": "1c7e07ef-7408-4d02-fcc4-54546265d3e3" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving dataset.csv to dataset.csv\n", + "(683, 11)\n", + " Sample code number Clump Thickness Uniformity of Cell Size \\\n", + "0 1000025 5 1 \n", + "1 1002945 5 4 \n", + "2 1015425 3 1 \n", + "3 1016277 6 8 \n", + "4 1017023 4 1 \n", + "\n", + " Uniformity of Cell Shape Marginal Adhesion Single Epithelial Cell Size \\\n", + "0 1 1 2 \n", + "1 4 5 7 \n", + "2 1 1 2 \n", + "3 8 1 3 \n", + "4 1 3 2 \n", + "\n", + " Bare Nuclei Bland Chromatin Normal Nucleoli Mitoses Class \n", + "0 1 3 1 1 2 \n", + "1 10 3 2 1 2 \n", + "2 2 3 1 1 2 \n", + "3 4 3 7 1 2 \n", + "4 1 3 1 1 2 \n" + ] + } + ] + }, + { + "source": [ + "# Segregating Dataset\n", + "X = dataset.iloc[:, :-1].values\n", + "y = dataset.iloc[:, -1].values\n", + "\n", + "# Encode the target variable 'y'\n", + "le = LabelEncoder()\n", + "y = le.fit_transform(y)\n", + "\n", + "# Splitting Dataset into Train & Test\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)" + ], + "cell_type": "code", + "metadata": { + "id": "RcSmj6qPVs6C" + }, + "execution_count": 3, + "outputs": [] + }, + { + "source": [ + "# Training with XGBoost\n", + "classifier = XGBClassifier()\n", + "classifier.fit(X_train, y_train)" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 254 + }, + "id": "kikaoHatVvp7", + "outputId": "37c5e300-7dd3-459b-9d2f-11f86aececa5" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "XGBClassifier(base_score=None, booster=None, callbacks=None,\n", + " colsample_bylevel=None, colsample_bynode=None,\n", + " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", + " enable_categorical=False, eval_metric=None, feature_types=None,\n", + " gamma=None, grow_policy=None, importance_type=None,\n", + " interaction_constraints=None, learning_rate=None, max_bin=None,\n", + " max_cat_threshold=None, max_cat_to_onehot=None,\n", + " max_delta_step=None, max_depth=None, max_leaves=None,\n", + " min_child_weight=None, missing=nan, monotone_constraints=None,\n", + " multi_strategy=None, n_estimators=None, n_jobs=None,\n", + " num_parallel_tree=None, random_state=None, ...)" + ], + "text/html": [ + "
XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
+              "              colsample_bylevel=None, colsample_bynode=None,\n",
+              "              colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
+              "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
+              "              gamma=None, grow_policy=None, importance_type=None,\n",
+              "              interaction_constraints=None, learning_rate=None, max_bin=None,\n",
+              "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
+              "              max_delta_step=None, max_depth=None, max_leaves=None,\n",
+              "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
+              "              multi_strategy=None, n_estimators=None, n_jobs=None,\n",
+              "              num_parallel_tree=None, random_state=None, ...)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "source": [ + "# Forming Confusion Matrix\n", + "y_pred = classifier.predict(X_test)\n", + "cm = confusion_matrix(y_test, y_pred)\n", + "print(cm)\n", + "accuracy_score(y_test, y_pred)\n", + "\n", + "# K-Fold Cross Validation\n", + "accuracies = cross_val_score(estimator=classifier, X=X_train, y=y_train, cv=10)\n", + "print(\"Accuracy: {:.2f} %\".format(accuracies.mean() * 100))" + ], + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LoXwTRLPVwby", + "outputId": "54849688-c935-4532-8d8e-0e29beb8c857" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[85 2]\n", + " [ 1 49]]\n", + "Accuracy: 96.71 %\n" + ] + } + ] + } + ] +} \ No newline at end of file