{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "xPKpZHvt_xgq" }, "source": [ "# Machine Learning\n", "\n", "\n", "* Machine learning is a subset of artificial intelligence (AI) that focuses on enabling computers to learn from data and make predictions or decisions without being explicitly programmed. In traditional programming, developers write code to provide instructions to computers on how to perform specific tasks. However, in machine learning, instead of programming explicit instructions, algorithms are trained on large datasets to recognize patterns and make predictions or decisions based on that data.\n", "* Types of Machine Learning:\n", " \n", "\n", "1. Supervised Learning: Learning from labeled data, where the computer is trained on input-output pairs. Predicting whether a given email is spam or not spam based on its content and whether it was marked as spam by the user.\n", "2. Unsupervised Learning: Finding patterns and structures in data without explicit supervision. Sorting different types of fruits into groups based on their similarities in size, color, and texture.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "Fj-HaH5PBiE3" }, "source": [ "### Linear Regression\n", "Linear regression is a statistical method used to model the relationship between two variables, typically denoted as X and Y. It assumes that there is a linear relationship between the independent variable X and the dependent variable Y.\n", "\n", "Example: Predicting Exam Scores\n", "Let's consider an example where we want to predict students' exam scores\n", "Y based on the number of hours they study X. We'll assume that there is a linear relationship between study hours and exam scores.\n", "\n", "Suppose our model equation is Y=5X+10.\n", "If a student studies for 6 hours(X = 6), we can predict their exam score using the equation: Y = 5(6) + 10 = 40" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "xRKsg7uiDyEB" }, "outputs": [], "source": [ "# importing library\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "cbfhyR34GMBw", "outputId": "cbc27605-f2a7-401a-d176-90a53a14d7b9" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/drive\n" ] } ], "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "vBEd9zFGD4qC" }, "outputs": [], "source": [ "# Reading the .csv file\n", "data = pd.read_csv('/content/drive/MyDrive/MASHDEMY_AI_Summer Camp/LEVEL2_ML/scores.csv')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "KHtyAtCSGftV", "outputId": "2f6bcab8-c230-485d-ec84-2d68ce78468b" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Hours Score\n", "0 8 90\n", "1 8 99\n", "2 9 100\n", "3 4 10\n", "4 5 23" ], "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", "
HoursScore
0890
1899
29100
3410
4523
\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": "data", "summary": "{\n \"name\": \"data\",\n \"rows\": 25,\n \"fields\": [\n {\n \"column\": \"Hours\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2,\n \"min\": 0,\n \"max\": 9,\n \"num_unique_values\": 10,\n \"samples\": [\n 6,\n 9,\n 3\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 31,\n \"min\": 5,\n \"max\": 100,\n \"num_unique_values\": 19,\n \"samples\": [\n 90,\n 12,\n 67\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 4 } ], "source": [ "# printing the first 5 rows\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "UcU7OCJyGi4j", "outputId": "6eb1fb04-8007-45a0-a6ab-64068c5a23a0" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(25, 2)\n" ] } ], "source": [ "# printing the shape of the data\n", "print(data.shape)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "EiVe7dJNGm_G", "outputId": "ca0c59a9-44ef-4ff8-c6d1-92b7ae2df496" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 25 entries, 0 to 24\n", "Data columns (total 2 columns):\n", " # Column Non-Null Count Dtype\n", "--- ------ -------------- -----\n", " 0 Hours 25 non-null int64\n", " 1 Score 25 non-null int64\n", "dtypes: int64(2)\n", "memory usage: 528.0 bytes\n", "None\n" ] } ], "source": [ "# Getting the basic information about the data\n", "print(data.info())" ] }, { "cell_type": "markdown", "metadata": { "id": "BVX5fDHDHdNM" }, "source": [ "Splitting the data into train and test set" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "ECQa_eSwIR7E" }, "outputs": [], "source": [ "# Getting the independent(X) and dependent variables(Y)\n", "X = data[['Hours']]\n", "Y = data[['Score']]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "T7FIjEShHbE0" }, "outputs": [], "source": [ "# Splitting the data into train and test set\n", "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=23)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "id": "-hnyar0nJTX0", "outputId": "4f93a049-b0e9-42f5-a8b2-28b34736f67d" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABA6klEQVR4nO3deVxUZf//8fcwIhAKLiGLoJBZ7rdbmQumSZJtGmpumVvaXWguLbf+7q9bd2lat6GZW49SM80UqczvXWZUirlkmt5qpZaWiIiaCebucH5/zJfJEVCWgRkOr+fjMQ/lOtec+ZwzwLw55zrXsRiGYQgAAMCkvNxdAAAAQEki7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7MDjfP3117JYLPr6669dul6LxaJJkya5dJ2F9euvv8pisei11167Yd9JkybJYrGUQlUwg0WLFslisejXX391dymFZrbv9cjISA0cONDdZeAqhB0US84v2JxHhQoVVLNmTQ0cOFBpaWmlXs9//vMftwcaT5UTtK5+BAQEqGnTppo9e7ZsNluR1ss+L7gpU6boo48+cncZ5d6mTZs0adIknT592t2loJQQduASL774opYsWaJ58+apS5cueu+993T33XfrwoULpVrHf/7zH02ePDnPZefPn9f//M//lGo9xfE///M/On/+vMvX26dPHy1ZskRLlizR1KlTVbNmTY0YMUJjx44t0vqut8/hrCTDTv/+/XX+/HnVrl27RNZvJps2bdLkyZNLLOzs27dPb731VomsG0VTwd0FwBy6dOmili1bSpKeeOIJ3XzzzZo2bZpWr16tRx991M3V2fn6+rq7hEKpUKGCKlRw/Y9o8+bN9dhjjzm+fvrpp9WqVSstW7ZMr776qstfD0Vz9uxZ+fv7F7i/1WqV1WotwYrKp+zsbF26dKlQvz98fHxKsCIUBUd2UCKio6MlSb/88otT+08//aQePXqoWrVq8vX1VcuWLbV69eobri8lJUU9e/ZUrVq15OPjo4iICI0ePdrpyMfAgQP15ptvSpLTqZoceY3Z+f7779WlSxcFBASoUqVK6tSpk7Zs2eLUJ+dU3TfffKMxY8YoKChI/v7+euSRR3TixAmnvt99951iY2N18803y8/PT1FRURo8eHCe27RgwQLVqVNH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4uLcV1dhmWU7PAinsQAAZV9SktSjh3NAkKS0NHt7UpJ76ioss2yHh7EYhmG4uwh3y8rKUmBgoDIzMxUQEODucgAAhWGzSZGRuQNCDovFfmTk0CHPPhVklu0oRQX9/ObIDgCgbEtJyT8gSJJhSKmp9n6ezCzb4YEIOwCAsi093bX93MUs2+GBCDsAgLItNNS1/dzFLNvhgQg7AICyLTraPpbFYsl7ucUiRUTY+3kys2yHByLsAADKNqvVflm2lDso5HydkOD5g3rNsh0eiLADACj74uKkxESpZk3n9vBwe3tZmZ/GLNvhYbj0XFx6DgCmYZaZh82yHSWsoJ/fzKAMADAPq1Xq0MHdVRSfWbbDQ3AaCwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmJpHhx2bzabx48crKipKfn5+qlOnjv71r3/JMAxHH8MwNGHCBIWGhsrPz08xMTE6cOCAG6sGgDLIZpO+/lp6/337vzabuysCXMajw860adM0d+5czZ49Wz/++KOmTZum6dOn64033nD0mT59umbNmqV58+Zp69at8vf3V2xsrC5cuODGygGgDElKkiIjpY4dpb597f9GRtrbAROwGFcfJvEwDz74oIKDg/X222872rp37y4/Pz+99957MgxDYWFhevbZZ/Xcc89JkjIzMxUcHKxFixapd+/eBXqdrKwsBQYGKjMzUwEBASWyLQDgkZKSpB49pGs/CiwW+7+JiVJcXOnXBRRAQT+/PfrITps2bZScnKz9+/dLknbt2qWNGzeqS5cukqRDhw7p2LFjiomJcTwnMDBQrVq10ubNm91SMwCUGTabNHJk7qAj/dU2ahSntFDmVXB3AdczduxYZWVlqV69erJarbLZbHr55ZfVr18/SdKxY8ckScHBwU7PCw4OdizLy8WLF3Xx4kXH11lZWSVQPQB4uJQU6ciR/JcbhpSaau/XoUOplQW4mkcf2VmxYoWWLl2qZcuWaceOHVq8eLFee+01LV68uFjrnTp1qgIDAx2PiIgIF1UMAGVIerpr+wEeyqPD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\n" }, "metadata": {} } ], "source": [ "# Getting the relation ship between x_train and y_train\n", "plt.scatter(x_train, y_train, c='red')\n", "plt.title('Relationship Between x_train and y_train')\n", "plt.xlabel('x_train')\n", "plt.ylabel('y_train')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "_5jE-a87KKeC" }, "source": [ "Training the model" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 74 }, "id": "dPtMTfZtKMyz", "outputId": "46e61209-9119-4d3d-8d55-85a181b42585" }, "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 } ], "source": [ "# creating the object of LinearRegression\n", "linear_regression = LinearRegression()\n", "# fitting the model(training the model)\n", "linear_regression.fit(x_train, y_train)" ] }, { "cell_type": "markdown", "metadata": { "id": "1WJt3RU1LZmo" }, "source": [ "Making the prediction" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "id": "-zmPu1RFLpDo", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "ef1779ca-332d-4968-e9ed-7651dd39fe1e" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([[93.02672293],\n", " [82.29957806],\n", " [71.57243319],\n", " [50.11814346],\n", " [60.84528833]])" ] }, "metadata": {}, "execution_count": 11 } ], "source": [ "y_predict = linear_regression.predict(x_test)\n", "y_predict" ] }, { "cell_type": "markdown", "metadata": { "id": "uDHUFGvaLxzh" }, "source": [ "Evaluating the model" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "VJCvtfWCL0UB", "outputId": "fa70b995-0064-4ffc-cc80-c330d0d9b891" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.19547188853278752\n" ] } ], "source": [ "print(linear_regression.score(x_test, y_test))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KtwlXw-6MhAI", "outputId": "4ba0b337-357c-4308-d9a5-4c22412d51a2" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[[93.02672293]]\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", " warnings.warn(\n" ] } ], "source": [ "my_value = x_test.iloc[0,0]\n", "y_predict_new = linear_regression.predict(my_value.reshape(1,-1))\n", "print(y_predict_new)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "id": "829XlcM2cQaP", "outputId": "49bd60ca-c04b-4e51-d335-64fed3589dfb" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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95mZmYnMzEzN47S0tBKrl4iIiIyLUY/sJCQkYMyYMVi6dClsbGxKbL/R0dFwdHTU/Hh5eZXYvomIiMi4GHXYOXnyJJKTk9GkSRNYWFjAwsICe/fuxZw5c2BhYQE3NzdkZWUhJSVF53lJSUlwd3fPd7+TJk1Camqq5ichIaGUj4SIiIgMxahPY3Xo0AFnz57VaXvjjTfg7++PCRMmwMvLC5aWlti5cyf69OkDAIiLi8O1a9cQEBCQ736tra1hbW1dqrUTERGRcTDqsGNvb4969erptJUvXx4VK1bUtA8ZMgTjxo2Ds7MzHBwcMGrUKAQEBODll182RMlERERkZIw67BTGV199BTMzM/Tp0weZmZno1KkT5s6da+iyiIiIyEiohBDC0EUYWlpaGhwdHZGamgoHBwdDl0NERESFUNjvb6O+QJmIiIjoRTHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIx7BAREZGiMewQERGRojHsEBERkaIZddiJjo7GSy+9BHt7e7i6uqJXr16Ii4vT2ebRo0eIjIxExYoVYWdnhz59+iApKclAFRMREZGxMeqws3fvXkRGRuLIkSPYvn07Hj9+jI4dO+LBgweabcaOHYtff/0VK1euxN69e3Hz5k2EhIQYsGoiIiIyJiohhDB0EYV1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\n" }, "metadata": {} } ], "source": [ "# Check whether your prediction is aligned with the true value or not\n", "plt.scatter(x_test, y_test, c='red', label='Actual')\n", "plt.plot(x_test, y_predict, c='blue', label='Predicted')\n", "plt.title('Plot to check the prediction')\n", "plt.xlabel('x_test')\n", "plt.ylabel('y')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "source": [ "y_predict_new[0][0]" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "REi-FEIjk0RT", "outputId": "fa853673-a941-488c-de27-57368e73efe4" }, "execution_count": 14, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "93.02672292545711" ] }, "metadata": {}, "execution_count": 14 } ] }, { "cell_type": "code", "source": [ "def predict_my_score(hours_of_study):\n", " input_arr = [[hours_of_study]]\n", " y_predict_new = linear_regression.predict(input_arr)\n", " return int(y_predict_new[0][0])\n", "predict_my_score(8)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "JS-ceSqykX-s", "outputId": "a87a2fdf-8f3c-4fdc-fc8b-26f5795211ec" }, "execution_count": 15, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", " warnings.warn(\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "93" ] }, "metadata": {}, "execution_count": 15 } ] }, { "cell_type": "code", "source": [ "! pip install gradio" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "VB4zy6zSmZFo", "outputId": "bec0c470-ce95-443c-ecd5-7724ce52a190" }, "execution_count": 16, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting gradio\n", " Downloading gradio-4.37.2-py3-none-any.whl (12.3 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.3/12.3 MB\u001b[0m \u001b[31m35.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting aiofiles<24.0,>=22.0 (from gradio)\n", " Downloading aiofiles-23.2.1-py3-none-any.whl (15 kB)\n", "Requirement already satisfied: altair<6.0,>=4.2.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (4.2.2)\n", "Collecting fastapi (from gradio)\n", " Downloading fastapi-0.111.0-py3-none-any.whl (91 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m92.0/92.0 kB\u001b[0m \u001b[31m12.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting ffmpy (from gradio)\n", " Downloading ffmpy-0.3.2.tar.gz (5.5 kB)\n", " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", "Collecting gradio-client==1.0.2 (from gradio)\n", " Downloading gradio_client-1.0.2-py3-none-any.whl (318 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m318.2/318.2 kB\u001b[0m \u001b[31m35.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting httpx>=0.24.1 (from gradio)\n", " Downloading httpx-0.27.0-py3-none-any.whl (75 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m75.6/75.6 kB\u001b[0m \u001b[31m10.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: huggingface-hub>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from gradio) (0.23.4)\n", "Requirement already satisfied: importlib-resources<7.0,>=1.3 in /usr/local/lib/python3.10/dist-packages (from gradio) (6.4.0)\n", "Requirement already satisfied: jinja2<4.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (3.1.4)\n", "Requirement already satisfied: markupsafe~=2.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (2.1.5)\n", "Requirement already satisfied: matplotlib~=3.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (3.7.1)\n", "Requirement already satisfied: numpy<3.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (1.25.2)\n", "Collecting orjson~=3.0 (from gradio)\n", " Downloading orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (141 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m141.1/141.1 kB\u001b[0m \u001b[31m12.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from gradio) (24.1)\n", "Requirement already satisfied: pandas<3.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (2.0.3)\n", "Requirement already satisfied: pillow<11.0,>=8.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (9.4.0)\n", "Requirement already satisfied: pydantic>=2.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (2.8.0)\n", "Collecting pydub (from gradio)\n", " Downloading pydub-0.25.1-py2.py3-none-any.whl (32 kB)\n", "Collecting python-multipart>=0.0.9 (from gradio)\n", " Downloading python_multipart-0.0.9-py3-none-any.whl (22 kB)\n", "Requirement already satisfied: pyyaml<7.0,>=5.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (6.0.1)\n", "Collecting ruff>=0.2.2 (from gradio)\n", " Downloading ruff-0.5.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.1 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.1/10.1 MB\u001b[0m \u001b[31m61.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting semantic-version~=2.0 (from gradio)\n", " Downloading semantic_version-2.10.0-py2.py3-none-any.whl (15 kB)\n", "Collecting tomlkit==0.12.0 (from gradio)\n", " Downloading tomlkit-0.12.0-py3-none-any.whl (37 kB)\n", "Requirement already satisfied: typer<1.0,>=0.12 in /usr/local/lib/python3.10/dist-packages (from gradio) (0.12.3)\n", "Requirement already satisfied: typing-extensions~=4.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (4.12.2)\n", "Requirement already satisfied: urllib3~=2.0 in /usr/local/lib/python3.10/dist-packages (from gradio) (2.0.7)\n", "Collecting uvicorn>=0.14.0 (from gradio)\n", " Downloading uvicorn-0.30.1-py3-none-any.whl (62 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.4/62.4 kB\u001b[0m \u001b[31m8.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from gradio-client==1.0.2->gradio) (2023.6.0)\n", "Collecting websockets<12.0,>=10.0 (from gradio-client==1.0.2->gradio)\n", " Downloading websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (129 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m129.9/129.9 kB\u001b[0m \u001b[31m10.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: entrypoints in /usr/local/lib/python3.10/dist-packages (from altair<6.0,>=4.2.0->gradio) (0.4)\n", "Requirement already satisfied: jsonschema>=3.0 in /usr/local/lib/python3.10/dist-packages (from altair<6.0,>=4.2.0->gradio) (4.19.2)\n", "Requirement already satisfied: toolz in /usr/local/lib/python3.10/dist-packages (from altair<6.0,>=4.2.0->gradio) (0.12.1)\n", "Requirement already satisfied: anyio in /usr/local/lib/python3.10/dist-packages (from httpx>=0.24.1->gradio) (3.7.1)\n", "Requirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from httpx>=0.24.1->gradio) (2024.6.2)\n", "Collecting httpcore==1.* (from httpx>=0.24.1->gradio)\n", " Downloading httpcore-1.0.5-py3-none-any.whl (77 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m77.9/77.9 kB\u001b[0m \u001b[31m9.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: idna in /usr/local/lib/python3.10/dist-packages (from httpx>=0.24.1->gradio) (3.7)\n", "Requirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from httpx>=0.24.1->gradio) (1.3.1)\n", "Collecting h11<0.15,>=0.13 (from httpcore==1.*->httpx>=0.24.1->gradio)\n", " Downloading h11-0.14.0-py3-none-any.whl (58 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.3/58.3 kB\u001b[0m \u001b[31m7.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.19.3->gradio) (3.15.4)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.19.3->gradio) (2.31.0)\n", "Requirement already satisfied: tqdm>=4.42.1 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.19.3->gradio) (4.66.4)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib~=3.0->gradio) (1.2.1)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib~=3.0->gradio) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib~=3.0->gradio) (4.53.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib~=3.0->gradio) (1.4.5)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib~=3.0->gradio) (3.1.2)\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib~=3.0->gradio) (2.8.2)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3.0,>=1.0->gradio) (2023.4)\n", "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3.0,>=1.0->gradio) (2024.1)\n", "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic>=2.0->gradio) (0.7.0)\n", "Requirement already satisfied: pydantic-core==2.20.0 in /usr/local/lib/python3.10/dist-packages (from pydantic>=2.0->gradio) (2.20.0)\n", "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0,>=0.12->gradio) (8.1.7)\n", "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0,>=0.12->gradio) (1.5.4)\n", "Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0,>=0.12->gradio) (13.7.1)\n", "Collecting starlette<0.38.0,>=0.37.2 (from fastapi->gradio)\n", " Downloading starlette-0.37.2-py3-none-any.whl (71 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m71.9/71.9 kB\u001b[0m \u001b[31m8.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting fastapi-cli>=0.0.2 (from fastapi->gradio)\n", " Downloading fastapi_cli-0.0.4-py3-none-any.whl (9.5 kB)\n", "Collecting ujson!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,>=4.0.1 (from fastapi->gradio)\n", " Downloading ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m53.6/53.6 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting email_validator>=2.0.0 (from fastapi->gradio)\n", " Downloading email_validator-2.2.0-py3-none-any.whl (33 kB)\n", "Collecting dnspython>=2.0.0 (from email_validator>=2.0.0->fastapi->gradio)\n", " Downloading dnspython-2.6.1-py3-none-any.whl (307 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m307.7/307.7 kB\u001b[0m \u001b[31m23.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=3.0->altair<6.0,>=4.2.0->gradio) (23.2.0)\n", "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=3.0->altair<6.0,>=4.2.0->gradio) (2023.12.1)\n", "Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=3.0->altair<6.0,>=4.2.0->gradio) (0.35.1)\n", "Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=3.0->altair<6.0,>=4.2.0->gradio) (0.18.1)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib~=3.0->gradio) (1.16.0)\n", "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer<1.0,>=0.12->gradio) (3.0.0)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer<1.0,>=0.12->gradio) (2.16.1)\n", "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio->httpx>=0.24.1->gradio) (1.2.1)\n", "Collecting httptools>=0.5.0 (from uvicorn>=0.14.0->gradio)\n", " Downloading httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (341 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m341.4/341.4 kB\u001b[0m \u001b[31m26.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting python-dotenv>=0.13 (from uvicorn>=0.14.0->gradio)\n", " Downloading python_dotenv-1.0.1-py3-none-any.whl (19 kB)\n", "Collecting uvloop!=0.15.0,!=0.15.1,>=0.14.0 (from uvicorn>=0.14.0->gradio)\n", " Downloading uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m54.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting watchfiles>=0.13 (from uvicorn>=0.14.0->gradio)\n", " Downloading watchfiles-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.2/1.2 MB\u001b[0m \u001b[31m68.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface-hub>=0.19.3->gradio) (3.3.2)\n", "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0,>=0.12->gradio) (0.1.2)\n", "Building wheels for collected packages: ffmpy\n", " Building wheel for ffmpy (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for ffmpy: filename=ffmpy-0.3.2-py3-none-any.whl size=5584 sha256=5fa1ef79fef74b76e91dbccc57e8a8ed3144e73febadf787e8747a2c962dc8e2\n", " Stored in directory: /root/.cache/pip/wheels/bd/65/9a/671fc6dcde07d4418df0c592f8df512b26d7a0029c2a23dd81\n", "Successfully built ffmpy\n", "Installing collected packages: pydub, ffmpy, websockets, uvloop, ujson, tomlkit, semantic-version, ruff, python-multipart, python-dotenv, orjson, httptools, h11, dnspython, aiofiles, watchfiles, uvicorn, starlette, httpcore, email_validator, httpx, gradio-client, fastapi-cli, fastapi, gradio\n", "Successfully installed aiofiles-23.2.1 dnspython-2.6.1 email_validator-2.2.0 fastapi-0.111.0 fastapi-cli-0.0.4 ffmpy-0.3.2 gradio-4.37.2 gradio-client-1.0.2 h11-0.14.0 httpcore-1.0.5 httptools-0.6.1 httpx-0.27.0 orjson-3.10.6 pydub-0.25.1 python-dotenv-1.0.1 python-multipart-0.0.9 ruff-0.5.0 semantic-version-2.10.0 starlette-0.37.2 tomlkit-0.12.0 ujson-5.10.0 uvicorn-0.30.1 uvloop-0.19.0 watchfiles-0.22.0 websockets-11.0.3\n" ] } ] }, { "cell_type": "code", "source": [ "import gradio as gr\n" ], "metadata": { "id": "KrJ_CTeUmMum" }, "execution_count": 17, "outputs": [] }, { "cell_type": "code", "source": [ "interface = gr.Interface(predict_my_score, inputs = \"number\", outputs = \"number\")\n", "interface.launch(debug = True)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 715 }, "id": "BMxWguGTmmt_", "outputId": "aa718960-0f8a-4e47-b0ae-84480114462b" }, "execution_count": 18, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Setting queue=True in a Colab notebook requires sharing enabled. Setting `share=True` (you can turn this off by setting `share=False` in `launch()` explicitly).\n", "\n", "Colab notebook detected. This cell will run indefinitely so that you can see errors and logs. To turn off, set debug=False in launch().\n", "Running on public URL: https://770a3f8c0b6a49846a.gradio.live\n", "\n", "This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/html": [ "
" ] }, "metadata": {} }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", " warnings.warn(\n" ] }, { "output_type": "stream", "name": "stdout", "text": [ "Keyboard interruption in main thread... closing server.\n", "Killing tunnel 127.0.0.1:7860 <> https://770a3f8c0b6a49846a.gradio.live\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [] }, "metadata": {}, "execution_count": 18 } ] }, { "cell_type": "code", "source": [ "import pickle as pk\n", "pk.dump(linear_regression, open(\"score_predict.pkl\", \"wb\"))" ], "metadata": { "id": "Z9VhixulrE8z" }, "execution_count": 19, "outputs": [] }, { "cell_type": "code", "source": [ "loaded_model = pk.load(open(\"score_predict.pkl\", \"rb\"), encoding=\"bytes\")\n", "loaded_model" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 74 }, "id": "vI2WUJhfsJC3", "outputId": "a2d83c5f-f3df-4459-9b56-6dda1408a7f5" }, "execution_count": 20, "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": 20 } ] }, { "cell_type": "code", "source": [ "def predict_my_score(hours_of_study):\n", " input_arr = [[hours_of_study]]\n", " y_predict_new = loaded_model.predict(input_arr)\n", " return int(y_predict_new[0][0])\n", "predict_my_score(8)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ldfNZjEDsrD4", "outputId": "04678260-2395-4a58-acc7-463ed1a2ab46" }, "execution_count": 21, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", " warnings.warn(\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "93" ] }, "metadata": {}, "execution_count": 21 } ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 0 }