├── MiniProj ICS ├── sql-injection-demo-master │ ├── .gitignore │ ├── requirements.txt │ ├── data.db │ ├── .gitattributes │ ├── Screenshot from 2021-05-26 21-13-56.png │ ├── Screenshot from 2021-05-26 21-14-02.png │ ├── 403.html │ ├── index.html │ ├── js │ │ └── submit.js │ ├── LICENSE │ ├── api.py │ ├── README.md │ ├── login_files │ │ ├── overrides.css │ │ └── modernizr.js │ └── login.html ├── xss-example-master │ ├── Screenshot from 2021-05-26 21-29-25.png │ ├── Screenshot from 2021-05-26 21-30-12.png │ ├── Screenshot from 2021-05-26 21-30-14.png │ ├── index.html │ ├── app.js │ └── style.css └── readme.md ├── ICS1 ├── BE_LP3_Q2_41239_ICS1.pdf └── BE_LP3_Q2_41239_ICS1_O.ipynb ├── ICS2 ├── BE_LP3_Q2_41239_ICS2.pdf └── BE_LP3_Q2_41239_ICS2_O.ipynb ├── ICS3 ├── BE_LP3_Q2_41239_ICS3.pdf └── BE_LP3_Q2_41239_ICS3_O.ipynb ├── ICS4 ├── BE_LP3_Q2_41239_ICS4.pdf └── BE_LP3_Q2_41239_ICS4_O.ipynb ├── MLA1 ├── BE_LP3_Q2_41239_MLA1.pdf └── BE_LP3_Q2_41239_MLA1_O.ipynb ├── MLA2 └── BE_LP3_Q2_41239_MLA2.pdf ├── MLA3 ├── BE_LP3_Q2_41239_MLA3.pdf └── BE_LP3_Q2_41239_MLA3_O.ipynb ├── MLA4 ├── BE_LP3_Q2_41239_MLA4.pdf └── BE_LP3_Q2_41239_MLA4_O.ipynb ├── BE_LP3_Q2_41239_ICS_MINIPROJ.pdf ├── BE_LP3_Q2_41239_ML_MiniProject.pdf ├── README.md └── Mini-project_LP3 └── BE_LP3_Q2_41239_ML_MINIPROJ_O.py /MiniProj ICS/sql-injection-demo-master/.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/requirements.txt: -------------------------------------------------------------------------------- 1 | flask 2 | flask-cors -------------------------------------------------------------------------------- /ICS1/BE_LP3_Q2_41239_ICS1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/ICS1/BE_LP3_Q2_41239_ICS1.pdf -------------------------------------------------------------------------------- /ICS2/BE_LP3_Q2_41239_ICS2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/ICS2/BE_LP3_Q2_41239_ICS2.pdf -------------------------------------------------------------------------------- /ICS3/BE_LP3_Q2_41239_ICS3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/ICS3/BE_LP3_Q2_41239_ICS3.pdf -------------------------------------------------------------------------------- /ICS4/BE_LP3_Q2_41239_ICS4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/ICS4/BE_LP3_Q2_41239_ICS4.pdf -------------------------------------------------------------------------------- /MLA1/BE_LP3_Q2_41239_MLA1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MLA1/BE_LP3_Q2_41239_MLA1.pdf -------------------------------------------------------------------------------- /MLA2/BE_LP3_Q2_41239_MLA2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MLA2/BE_LP3_Q2_41239_MLA2.pdf -------------------------------------------------------------------------------- /MLA3/BE_LP3_Q2_41239_MLA3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MLA3/BE_LP3_Q2_41239_MLA3.pdf -------------------------------------------------------------------------------- /MLA4/BE_LP3_Q2_41239_MLA4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MLA4/BE_LP3_Q2_41239_MLA4.pdf -------------------------------------------------------------------------------- /BE_LP3_Q2_41239_ICS_MINIPROJ.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/BE_LP3_Q2_41239_ICS_MINIPROJ.pdf -------------------------------------------------------------------------------- /BE_LP3_Q2_41239_ML_MiniProject.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/BE_LP3_Q2_41239_ML_MiniProject.pdf -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/data.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MiniProj ICS/sql-injection-demo-master/data.db -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/.gitattributes: -------------------------------------------------------------------------------- 1 | vendor/* linguist-vendored 2 | login.html linguist-vendored 3 | login_files/* linguist-vendored -------------------------------------------------------------------------------- /MiniProj ICS/xss-example-master/Screenshot from 2021-05-26 21-29-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MiniProj ICS/xss-example-master/Screenshot from 2021-05-26 21-29-25.png -------------------------------------------------------------------------------- /MiniProj ICS/xss-example-master/Screenshot from 2021-05-26 21-30-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MiniProj ICS/xss-example-master/Screenshot from 2021-05-26 21-30-12.png -------------------------------------------------------------------------------- /MiniProj ICS/xss-example-master/Screenshot from 2021-05-26 21-30-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MiniProj ICS/xss-example-master/Screenshot from 2021-05-26 21-30-14.png -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/Screenshot from 2021-05-26 21-13-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MiniProj ICS/sql-injection-demo-master/Screenshot from 2021-05-26 21-13-56.png -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/Screenshot from 2021-05-26 21-14-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Omkar2310/LP3/HEAD/MiniProj ICS/sql-injection-demo-master/Screenshot from 2021-05-26 21-14-02.png -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/403.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Forbidden

4 | You don't have permission to access / on this server 5 |
6 | Red Hat Linux at http://localhost Port 80 7 | 8 | -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Access Wifi 6 | 7 | 8 | 9 |
10 | 11 |

12 | 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LP3 2 | Sppu BE COMP LP3 all assignments written and code with miniprojects.ML and ICS elective 3 | 4 | ## Assignment 1 Linear Regression 5 | ## Assignment 2 Decision Tree 6 | ## Assignment 3 KNN 7 | ## Assignment 4 K Mean Cluster 8 | ## Assignment 5 ICS_1 SDES 9 | ## Assignment 6 ICS_2 ECC 10 | ## Assignment 7 ICS_3 DH key pair 11 | ## Assignment 8 ICS_4 RSA 12 | ## ML MINIPROJ 13 | ## ICS MINIPROJ 14 | -------------------------------------------------------------------------------- /MiniProj ICS/readme.md: -------------------------------------------------------------------------------- 1 | ## FOR SQL INJECTION 2 | Steps to run 3 | 1. pip install flask 4 | 2. pip install flask-cors 5 | 3. Run python api.py file 6 | 4. Open index.html file on browser 7 | 5. Enter a' OR 1=1 OR 'b in image input box 8 | 6. Submit click and you see Connection Established. 9 | 10 | 11 | ## FOR CROSS SITE SCRIPTING 12 | 13 | Steps to run 14 | 15 | 1. Open index.html on browser 16 | 2. Now write any Test Message in message field and in Image field write invalid-page.com/no-image!jpg" onerror="alert('Hacked!')". 17 | 3. CLick submit you are alerted HACKED!!!. 18 | -------------------------------------------------------------------------------- /MiniProj ICS/xss-example-master/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Cross-Site Scripting (XSS) Attacks 7 | 8 | 9 | 10 | 11 |
12 |
13 |
14 | 15 | 16 |
17 |
18 | 19 | 20 |
21 | 22 |
23 |
24 |
25 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/js/submit.js: -------------------------------------------------------------------------------- 1 | function makeHttpObject() { 2 | try { 3 | return new XMLHttpRequest(); 4 | } catch (error) { 5 | } 6 | try { 7 | return new ActiveXObject("Msxml2.XMLHTTP"); 8 | } catch (error) { 9 | } 10 | try { 11 | return new ActiveXObject("Microsoft.XMLHTTP"); 12 | } catch (error) { 13 | } 14 | 15 | throw new Error("Could not create HTTP request object."); 16 | } 17 | const button = document.getElementById("submit"); 18 | button.addEventListener("click", e => { 19 | const code = document.getElementById("code").value; 20 | const url = "http://0.0.0.0:5000/search?code=" + code; 21 | let request = makeHttpObject(); 22 | console.log(url); 23 | request.open("GET", url, true); 24 | request.send(null); 25 | request.onreadystatechange = function () { 26 | if (request.readyState == 4) 27 | var text = request.responseText; 28 | document.getElementById("text").innerHTML = text; 29 | }; 30 | }); -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Vivek Verma 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MiniProj ICS/xss-example-master/app.js: -------------------------------------------------------------------------------- 1 | const userMessages = []; 2 | 3 | const userMessageForm = document.querySelector('form'); 4 | const userMessagesList = document.querySelector('ul'); 5 | 6 | function renderMessages() { 7 | let messageItems = ''; 8 | for (const message of userMessages) { 9 | messageItems = ` 10 | ${messageItems} 11 |
  • 12 |
    13 | ${message.text} 14 |
    15 |

    ${message.text}

    16 |
  • 17 | `; 18 | } 19 | 20 | userMessagesList.innerHTML = messageItems; 21 | } 22 | 23 | function formSubmitHandler(event) { 24 | event.preventDefault(); 25 | const userMessageInput = event.target.querySelector('textarea'); 26 | const messageImageInput = event.target.querySelector('input'); 27 | const userMessage = userMessageInput.value; 28 | const imageUrl = messageImageInput.value; 29 | 30 | if ( 31 | !userMessage || 32 | !imageUrl || 33 | userMessage.trim().length === 0 || 34 | imageUrl.trim().length === 0 35 | ) { 36 | alert('Please insert a valid message and image.'); 37 | return; 38 | } 39 | 40 | userMessages.push({ 41 | text: userMessage, 42 | image: imageUrl, 43 | }); 44 | 45 | userMessageInput.value = ''; 46 | messageImageInput.value = ''; 47 | 48 | renderMessages(); 49 | } 50 | 51 | userMessageForm.addEventListener('submit', formSubmitHandler); 52 | -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/api.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, request, render_template 2 | from flask_cors import CORS 3 | import sqlite3 4 | 5 | app = Flask(__name__) 6 | CORS(app) 7 | 8 | 9 | @app.route("/get") 10 | def get(): 11 | conn = sqlite3.connect("data.db") 12 | c = conn.cursor() 13 | c.execute("select * from data") 14 | data = c.fetchall() 15 | return "
    ".join([i[0] for i in data]) 16 | 17 | 18 | @app.route("/register") 19 | def register(): 20 | code = request.args.get('code') 21 | conn = sqlite3.connect("data.db") 22 | c = conn.cursor() 23 | try: 24 | c.execute("INSERT INTO data VALUES (?)", (code,)) 25 | conn.commit() 26 | return f"Successfully added {code}" 27 | except sqlite3.Error as e: 28 | return str(e) 29 | 30 | 31 | @app.route("/search") 32 | def search(): 33 | code = request.args.get('code') 34 | conn = sqlite3.connect("data.db") 35 | c = conn.cursor() 36 | try: 37 | statement = "select * from data where data='" + code + "'" 38 | c.execute(statement) 39 | found = c.fetchall() 40 | if found == []: 41 | return f"Invalid Code
    {statement}" 42 | else: 43 | return f"Wifi Connection Established
    {statement}" 44 | except sqlite3.Error as e: 45 | return str(e) + f"
    {statement}" 46 | 47 | 48 | @app.route("/login") 49 | def login(): 50 | return open("login.html").read() 51 | 52 | 53 | @app.route("/") 54 | def main(): 55 | return open("403.html").read() 56 | 57 | 58 | if __name__ == "__main__": 59 | app.run(host="0.0.0.0") 60 | -------------------------------------------------------------------------------- /MiniProj ICS/xss-example-master/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | 5 | html { 6 | font-family: sans-serif; 7 | } 8 | 9 | body { 10 | margin: 0; 11 | } 12 | 13 | section { 14 | margin: 2rem auto; 15 | width: 90%; 16 | max-width: 40rem; 17 | border-radius: 10px; 18 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); 19 | background-color: white; 20 | padding: 1rem; 21 | } 22 | 23 | .form-control { 24 | margin: 1rem 0; 25 | } 26 | 27 | .form-control input, 28 | .form-control textarea, 29 | .form-control label { 30 | display: block; 31 | width: 100%; 32 | font: inherit; 33 | } 34 | 35 | .form-control label { 36 | font-weight: bold; 37 | margin-bottom: 0.5rem; 38 | } 39 | 40 | .form-control input, 41 | .form-control textarea { 42 | border: 1px solid #ccc; 43 | padding: 0.25rem; 44 | border-radius: 4px; 45 | } 46 | 47 | .form-control input:focus, 48 | .form-control textarea:focus { 49 | border-color: #ffbb00; 50 | outline: none; 51 | background-color: #fcecc1; 52 | } 53 | 54 | button { 55 | cursor: pointer; 56 | font: inherit; 57 | border-radius: 6px; 58 | border: 1px solid black; 59 | background-color: #ffbb00; 60 | color: black; 61 | padding: 0.5rem 2rem; 62 | box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26); 63 | } 64 | 65 | button:focus { 66 | outline: none; 67 | } 68 | 69 | button:hover, 70 | button:active { 71 | background-color: #f8cf60; 72 | } 73 | 74 | #user-messages ul { 75 | padding: 0; 76 | margin: 0; 77 | list-style: none; 78 | } 79 | 80 | .message-item { 81 | margin: 0.5rem 0; 82 | padding: 0.5rem; 83 | display: flex; 84 | align-items: center; 85 | } 86 | 87 | .message-image { 88 | width: 50px; 89 | height: 50px; 90 | margin-right: 1rem; 91 | } 92 | 93 | .message-item img { 94 | width: 100%; 95 | height: 100%; 96 | border-radius: 50%; 97 | } -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/README.md: -------------------------------------------------------------------------------- 1 | # SQL-Injection Demo 2 | `index.html` contains a website that's prone to SQL Injection. 3 | SQL Injection is a code injection technique that can be used to access databases without authorization. 4 | 5 | ## Trying it for yourself 6 | Install the dependencies with 7 | ```bash 8 | pip install -r requirements.txt 9 | ``` 10 | Run `api.py` and open `index.html` in a browser. 11 | 12 | ## How a SQL Query could look like 13 | Let's say the website is dealing with a database with table `data` that stores in a field `data`. An example of checking 14 | if the code `1X4Z25` is valid could look like this 15 | ```sql 16 | select * from data where data='1X4Z25' 17 | ``` 18 | This sort of statement is extremely vulnerable. 19 | ## SQL Injection 20 | The way we can test if a website is by using the escape character `'`. This sort of statement 21 | could look like this: 22 | ```sql 23 | select * from data where data=''' 24 | ``` 25 | which would throw the error `unrecognized token: "'''"`. 26 | On a real website, this could throw something like `an unexpected error`.
    27 | We can use SQL statements to complete the statement to always return something.
    28 | By using a statement like `1=1` we can return everything in the database. 29 | Such a statement could look like this. 30 | ```sql 31 | select * from data where data='a' OR 1=1 OR 'b' 32 | ``` 33 | This would always validate us. By inserting `a' OR 1=1 OR 'b` in the text field this completes 34 | the statement and returns a valid code. 35 | The server can proceed to do other things with this code, even if you don't know what code you are using.
    36 |
    37 | SQL Injection also works if the data is numbers. For example, a sql statement accepting only numbers 38 | could look like this. 39 | 40 | ```sql 41 | select * from data where data=123456 42 | ``` 43 | 44 | Here, SQL Injection is a little bit more simple. We can test by using the escape character `'`, 45 | and an example SQL Injection could look like this: 46 | ```sql 47 | select * from data where data=123 OR 1=1 48 | ``` 49 | Here, by entering `123 OR 1=1`, we accomplish the same thing as last time. 50 | 51 | 52 | -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/login_files/overrides.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | /* CSS Document */ 3 | 4 | body { 5 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 6 | top: 0; 7 | color: #0a0a0a; 8 | background: #FFFFFF; 9 | } 10 | h1 { 11 | font-weight: 700; 12 | font-size: 4em; 13 | } 14 | h4 { 15 | font-weight: 700; 16 | font-size: 1.5em; 17 | text-align: center; 18 | } 19 | h5 { 20 | font-weight: 700; 21 | font-size: 1.5em; 22 | } 23 | #top_header { 24 | margin-top: 45px; 25 | } 26 | #main_image { 27 | height: 450px; 28 | padding: 150px 0; 29 | } 30 | #connectform { 31 | margin-left: auto; 32 | margin-right: auto; 33 | margin-bottom: 30px; 34 | width: 40%; 35 | } 36 | a.small.radius.button { 37 | background-color: #EE3B33; 38 | } 39 | a.small.radius.button:hover { 40 | background-color: #6A0001; 41 | } 42 | #2ndLogo { 43 | height: 450px; 44 | padding: 150px 0; 45 | } 46 | footer p { 47 | font-size:.75em; 48 | } 49 | 50 | /* ************** Media Queries ******************* */ 51 | 52 | @media only screen and (max-device-width: 1280px) /* Laptops */ 53 | { 54 | 55 | } 56 | @media only screen and (max-device-width: 1024px) /* iPad Pro */ 57 | { 58 | 59 | } 60 | @media only screen and (max-device-width: 800px) /* Nexus 10 */ 61 | { 62 | 63 | } 64 | @media only screen and (max-device-width: 768px) /* iPad */ 65 | { 66 | 67 | } 68 | @media only screen and (max-device-width: 480px) /* Nokia N9 */ 69 | { 70 | #connectform { 71 | margin-bottom: 25px; 72 | width: 100%; 73 | } 74 | } 75 | @media only screen and (max-device-width: 414px) /* iPhone 6 Plus, 7 Plus */ 76 | { 77 | #main_image { 78 | height: 350px; 79 | padding: 110px 0; 80 | } 81 | #top_header { 82 | margin-top: 25px; 83 | } 84 | 85 | } 86 | @media only screen and (max-device-width: 384px) /* LG Optimus L70 */ 87 | { 88 | #main_image { 89 | height: 325px; 90 | padding: 100px 0; 91 | } 92 | #top_header { 93 | margin-top: 15px; 94 | } 95 | 96 | } 97 | @media only screen and (max-device-width: 375px) /* iPhone 6, 7 */ 98 | { 99 | 100 | } 101 | @media only screen and (max-device-width: 360px) /* Galaxy Note II, Note III, S5 */ 102 | { 103 | 104 | } 105 | @media only screen and (max-device-width: 320px) /* iPhone 5, Nokia Lumia */ 106 | { 107 | #main_image { 108 | height: 200px; 109 | padding: 70px 0; 110 | } 111 | footer p { 112 | font-size: .7em !important; 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /ICS3/BE_LP3_Q2_41239_ICS3_O.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "BE_LP3_41239_ICS_3_O.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | }, 13 | "language_info": { 14 | "name": "python" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "code", 20 | "metadata": { 21 | "colab": { 22 | "base_uri": "https://localhost:8080/" 23 | }, 24 | "id": "rjXi9dfDo1M1", 25 | "outputId": "ec7e1ccd-67e1-430d-8a49-1acb165669b4" 26 | }, 27 | "source": [ 28 | "from random import randint\n", 29 | "\n", 30 | "if __name__ == '__main__':\n", 31 | "\n", 32 | "\t# Both the persons will be agreed upon the\n", 33 | "\t# public keys G and P\n", 34 | "\t# A prime number P is taken\n", 35 | "\tP = 23\n", 36 | "\t\n", 37 | "\t# A primitve root for P, G is taken\n", 38 | "\tG = 9\n", 39 | "\t\n", 40 | "\t\n", 41 | "\tprint('The Value of P is :%d'%(P))\n", 42 | "\tprint('The Value of G is :%d'%(G))\n", 43 | "\t\n", 44 | "\t# Alice will choose the private key a\n", 45 | "\ta = 4\n", 46 | "\tprint('The Private Key a for Alice is :%d'%(a))\n", 47 | "\t\n", 48 | "\t# gets the generated key\n", 49 | "\tx = int(pow(G,a,P))\n", 50 | "\t\n", 51 | "\t# Bob will choose the private key b\n", 52 | "\tb = 3\n", 53 | "\tprint('The Private Key b for Bob is :%d'%(b))\n", 54 | "\t\n", 55 | "\t# gets the generated key\n", 56 | "\ty = int(pow(G,b,P))\n", 57 | "\t\n", 58 | "\t\n", 59 | "\t# Secret key for Alice\n", 60 | "\tka = int(pow(y,a,P))\n", 61 | "\t\n", 62 | "\t# Secret key for Bob\n", 63 | "\tkb = int(pow(x,b,P))\n", 64 | "\t\n", 65 | "\tprint('Secret key for the Alice is : %d'%(ka))\n", 66 | "\tprint('Secret Key for the Bob is : %d'%(kb))\n" 67 | ], 68 | "execution_count": 1, 69 | "outputs": [ 70 | { 71 | "output_type": "stream", 72 | "text": [ 73 | "The Value of P is :23\n", 74 | "The Value of G is :9\n", 75 | "The Private Key a for Alice is :4\n", 76 | "The Private Key b for Bob is :3\n", 77 | "Secret key for the Alice is : 9\n", 78 | "Secret Key for the Bob is : 9\n" 79 | ], 80 | "name": "stdout" 81 | } 82 | ] 83 | } 84 | ] 85 | } -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Template A 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |

    Wi-Fi Sponsored By:

    17 |
    18 |
    19 | 20 | 21 |
    22 |
    23 |
    24 |

    LOGO

    25 |
    800px Wide, Minimum
    26 |
    27 |
    28 |
    29 | 30 | 31 |
    32 |
    33 |
    34 |
    35 |

    Login

    36 | 37 | CONNECT 38 |
    39 |
    40 |
    41 | 42 | 43 |
    44 | 45 | 46 | 51 | 52 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /ICS2/BE_LP3_Q2_41239_ICS2_O.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "BE_LP3_41239_ICS_2_O.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | }, 13 | "language_info": { 14 | "name": "python" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "code", 20 | "metadata": { 21 | "colab": { 22 | "base_uri": "https://localhost:8080/" 23 | }, 24 | "id": "BIQuMLg6mSeu", 25 | "outputId": "9ba11a34-827b-4f26-e611-eb75de96998f" 26 | }, 27 | "source": [ 28 | "\n", 29 | "import math\n", 30 | "import random\n", 31 | "\n", 32 | "def point(a, b):\n", 33 | "\n", 34 | "\tif (4*(a**3) + 27*(b**2)) != 0:\n", 35 | "\t\tx = 1\n", 36 | "\t\tprint(\"generating\")\n", 37 | "\t\twhile True:\n", 38 | "\t\t\trhs = (x**3) + (a*x) + b\n", 39 | "\t\t\ty = int(math.sqrt(rhs))\n", 40 | "\t\t\tlhs = (y**2)\n", 41 | "\n", 42 | "\t\t\tif lhs == rhs:\n", 43 | "\t\t\t\treturn [x, y]\n", 44 | "\t\t\telse:\n", 45 | "\t\t\t\tx += 1\n", 46 | "\telse:\n", 47 | "\t\tprint(\"Enter another coefficients.\")\n", 48 | "\n", 49 | "\n", 50 | "a = int(input(\"Enter the coefficient 'a' of curve: \"))\n", 51 | "b = int(input(\"Enter the coefficient 'b' of curve: \"))\n", 52 | "\n", 53 | "private_A = 13\n", 54 | "private_B = 15\n", 55 | "\n", 56 | "generator = point(a, b)\n", 57 | "print(\"Generator point: \", generator)\n", 58 | "\n", 59 | "m = int(input(\"Enter the plaintext integer: \"))\n", 60 | "\n", 61 | "public_key_A = [private_A*generator[0], private_A*generator[1]]\n", 62 | "print(\"Public Key of A: \", public_key_A)\n", 63 | "\n", 64 | "public_key_B = [private_B*generator[0], private_B*generator[1]]\n", 65 | "print(\"Public Key of B: \", public_key_B)\n", 66 | "\n", 67 | "k = random.randint(0, 10)\n", 68 | "\n", 69 | "c1 = k * (generator[0] + generator[1])\n", 70 | "\n", 71 | "c2 = m + ((k*public_key_B[0]) + (k*public_key_B[1]))\n", 72 | "\n", 73 | "ciphertext = [c1, c2]\n", 74 | "print(\"Ciphertext: \", ciphertext)\n", 75 | "\n", 76 | "r = private_B*c1\n", 77 | "\n", 78 | "plaintext = c2 - r\n", 79 | "print(\"Decrypted Plaintext: \", plaintext)" 80 | ], 81 | "execution_count": 2, 82 | "outputs": [ 83 | { 84 | "output_type": "stream", 85 | "text": [ 86 | "Enter the coefficient 'a' of curve: 3\n", 87 | "Enter the coefficient 'b' of curve: 4\n", 88 | "generating\n", 89 | "Generator point: [5, 12]\n", 90 | "Enter the plaintext integer: 10001010\n", 91 | "Public Key of A: [65, 156]\n", 92 | "Public Key of B: [75, 180]\n", 93 | "Ciphertext: [51, 10001775]\n", 94 | "Decrypted Plaintext: 10001010\n" 95 | ], 96 | "name": "stdout" 97 | } 98 | ] 99 | } 100 | ] 101 | } -------------------------------------------------------------------------------- /ICS1/BE_LP3_Q2_41239_ICS1_O.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "BE_LP3_Q2_41239_ICS1_O.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | }, 13 | "language_info": { 14 | "name": "python" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "code", 20 | "metadata": { 21 | "id": "UcRzJAEdVJBw", 22 | "colab": { 23 | "base_uri": "https://localhost:8080/" 24 | }, 25 | "outputId": "e53765db-7d65-4413-f411-54e6283df9bf" 26 | }, 27 | "source": [ 28 | "P10 = (3, 5, 2, 7, 4, 10, 1, 9, 8, 6)\n", 29 | "P8 = (6, 3, 7, 4, 8, 5, 10, 9)\n", 30 | "P4 = (2, 4, 3, 1)\n", 31 | "\n", 32 | "IP = (2, 6, 3, 1, 4, 8, 5, 7)\n", 33 | "IPi = (4, 1, 3, 5, 7, 2, 8, 6)\n", 34 | "\n", 35 | "E = (4, 1, 2, 3, 2, 3, 4, 1)\n", 36 | "\n", 37 | "S0 = [\n", 38 | " [1, 0, 3, 2],\n", 39 | " [3, 2, 1, 0],\n", 40 | " [0, 2, 1, 3],\n", 41 | " [3, 1, 3, 2]\n", 42 | " ]\n", 43 | "\n", 44 | "S1 = [\n", 45 | " [0, 1, 2, 3],\n", 46 | " [2, 0, 1, 3],\n", 47 | " [3, 0, 1, 0],\n", 48 | " [2, 1, 0, 3]\n", 49 | " ]\n", 50 | "\n", 51 | "def permutation(pattern, key):\n", 52 | " permuted = \"\"\n", 53 | "\n", 54 | " for i in pattern:\n", 55 | " permuted += key[i-1]\n", 56 | "\n", 57 | " return permuted\n", 58 | "\n", 59 | "def generate_first(left, right):\n", 60 | " left = left[1:] + left[:1]\n", 61 | " right = right[1:] + right[:1]\n", 62 | " key = left + right\n", 63 | "\n", 64 | " return permutation(P8, key)\n", 65 | "\n", 66 | "def generate_second(left, right):\n", 67 | " left = left[3:] + left[:3]\n", 68 | " right = right[3:] + right[:3]\n", 69 | " key = left + right\n", 70 | "\n", 71 | " return permutation(P8, key)\n", 72 | "\n", 73 | "def transform(right, key):\n", 74 | " extended = permutation(E, right)\n", 75 | " xor_cipher = bin(int(extended, 2) ^ int(key, 2))[2:].zfill(8)\n", 76 | " xor_left = xor_cipher[:4]\n", 77 | " xor_right = xor_cipher[4:]\n", 78 | "\n", 79 | " new_left = Sbox(xor_left, S0)\n", 80 | " new_right = Sbox(xor_right, S1)\n", 81 | "\n", 82 | " return permutation(P4, new_left + new_right)\n", 83 | "\n", 84 | "def Sbox(data, box):\n", 85 | " row = int(data[0] + data[3], 2)\n", 86 | " column = int(data[1] + data[2], 2)\n", 87 | "\n", 88 | " return bin(box[row][column])[2:].zfill(4)\n", 89 | "\n", 90 | "def encrypt(left, right, key):\n", 91 | " cipher = int(left, 2) ^ int(transform(right, key), 2)\n", 92 | "\n", 93 | " return right, bin(cipher)[2:].zfill(4)\n", 94 | "\n", 95 | "key = input(\"Enter a 10-bit key: \")\n", 96 | "if len(key) != 10:\n", 97 | " raise Exception(\"Check the input\")\n", 98 | "\n", 99 | "plaintext = input(\"Enter 8-bit plaintext: \")\n", 100 | "if len(plaintext) != 8:\n", 101 | " raise Exception(\"Check the input\")\n", 102 | "\n", 103 | "p10key = permutation(P10, key)\n", 104 | "print(\"First Permutation\")\n", 105 | "print(p10key)\n", 106 | "left_key = p10key[:len(p10key)//2]\n", 107 | "print(\"Left key\",left_key)\n", 108 | "right_key = p10key[len(p10key)//2:]\n", 109 | "print(\"Right key\",right_key)\n", 110 | "first_key = generate_first(left_key, right_key)\n", 111 | "print(\"*****\")\n", 112 | "print(\"First key\")\n", 113 | "print(first_key)\n", 114 | "second_key = generate_second(left_key, right_key)\n", 115 | "print(\"*****\")\n", 116 | "print(\"Second key\")\n", 117 | "print(second_key)\n", 118 | "initial_permutation = permutation(IP, plaintext)\n", 119 | "print(\"Initial Permutation\",initial_permutation)\n", 120 | "left_data = initial_permutation[:len(initial_permutation)//2]\n", 121 | "right_data = initial_permutation[len(initial_permutation)//2:]\n", 122 | "\n", 123 | "left, right = encrypt(left_data, right_data, first_key)\n", 124 | "left, right = encrypt(left, right, second_key)\n", 125 | "\n", 126 | "print(\"Ciphertext:\", permutation(IPi, left + right))" 127 | ], 128 | "execution_count": 15, 129 | "outputs": [ 130 | { 131 | "output_type": "stream", 132 | "text": [ 133 | "Enter a 10-bit key: 1010101010\n", 134 | "Enter 8-bit plaintext: 10101010\n", 135 | "First Permutation\n", 136 | "1101001100\n", 137 | "Left key 11010\n", 138 | "Right key 01100\n", 139 | "*****\n", 140 | "First key\n", 141 | "11100100\n", 142 | "*****\n", 143 | "Second key\n", 144 | "01010011\n", 145 | "Initial Permutation 00110011\n", 146 | "Ciphertext: 10101011\n" 147 | ], 148 | "name": "stdout" 149 | } 150 | ] 151 | } 152 | ] 153 | } -------------------------------------------------------------------------------- /ICS4/BE_LP3_Q2_41239_ICS4_O.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "BE_LP3_41239_ICS_8_O.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "display_name": "Python 3", 11 | "name": "python3" 12 | }, 13 | "language_info": { 14 | "name": "python" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "code", 20 | "metadata": { 21 | "colab": { 22 | "base_uri": "https://localhost:8080/" 23 | }, 24 | "id": "Z3Fb8Xd0W5lF", 25 | "outputId": "dc0b1154-1701-43e4-8d9d-da26b19377f4" 26 | }, 27 | "source": [ 28 | "import random\n", 29 | "\n", 30 | "\n", 31 | "'''\n", 32 | "Euclid's algorithm for determining the greatest common divisor\n", 33 | "Use iteration to make it faster for larger integers\n", 34 | "'''\n", 35 | "\n", 36 | "\n", 37 | "def gcd(a, b):\n", 38 | " while b != 0:\n", 39 | " a, b = b, a % b\n", 40 | " return a\n", 41 | "\n", 42 | "\n", 43 | "'''\n", 44 | "Euclid's extended algorithm for finding the multiplicative inverse of two numbers\n", 45 | "'''\n", 46 | "\n", 47 | "\n", 48 | "def multiplicative_inverse(e, phi):\n", 49 | " d = 0\n", 50 | " x1 = 0\n", 51 | " x2 = 1\n", 52 | " y1 = 1\n", 53 | " temp_phi = phi\n", 54 | "\n", 55 | " while e > 0:\n", 56 | " temp1 = temp_phi//e\n", 57 | " temp2 = temp_phi - temp1 * e\n", 58 | " temp_phi = e\n", 59 | " e = temp2\n", 60 | "\n", 61 | " x = x2 - temp1 * x1\n", 62 | " y = d - temp1 * y1\n", 63 | "\n", 64 | " x2 = x1\n", 65 | " x1 = x\n", 66 | " d = y1\n", 67 | " y1 = y\n", 68 | "\n", 69 | " if temp_phi == 1:\n", 70 | " return d + phi\n", 71 | "\n", 72 | "\n", 73 | "'''\n", 74 | "Tests to see if a number is prime.\n", 75 | "'''\n", 76 | "\n", 77 | "\n", 78 | "def is_prime(num):\n", 79 | " if num == 2:\n", 80 | " return True\n", 81 | " if num < 2 or num % 2 == 0:\n", 82 | " return False\n", 83 | " for n in range(3, int(num**0.5)+2, 2):\n", 84 | " if num % n == 0:\n", 85 | " return False\n", 86 | " return True\n", 87 | "\n", 88 | "\n", 89 | "def generate_key_pair(p, q):\n", 90 | " if not (is_prime(p) and is_prime(q)):\n", 91 | " raise ValueError('Both numbers must be prime.')\n", 92 | " elif p == q:\n", 93 | " raise ValueError('p and q cannot be equal')\n", 94 | " # n = pq\n", 95 | " n = p * q\n", 96 | "\n", 97 | " # Phi is the totient of n\n", 98 | " phi = (p-1) * (q-1)\n", 99 | "\n", 100 | " # Choose an integer e such that e and phi(n) are coprime\n", 101 | " e = random.randrange(1, phi)\n", 102 | "\n", 103 | " # Use Euclid's Algorithm to verify that e and phi(n) are coprime\n", 104 | " g = gcd(e, phi)\n", 105 | " while g != 1:\n", 106 | " e = random.randrange(1, phi)\n", 107 | " g = gcd(e, phi)\n", 108 | "\n", 109 | " # Use Extended Euclid's Algorithm to generate the private key\n", 110 | " d = multiplicative_inverse(e, phi)\n", 111 | "\n", 112 | " # Return public and private key_pair\n", 113 | " # Public key is (e, n) and private key is (d, n)\n", 114 | " return ((e, n), (d, n))\n", 115 | "\n", 116 | "\n", 117 | "def encrypt(pk, plaintext):\n", 118 | " # Unpack the key into it's components\n", 119 | " key, n = pk\n", 120 | " # Convert each letter in the plaintext to numbers based on the character using a^b mod m\n", 121 | " cipher = [pow(ord(char), key, n) for char in plaintext]\n", 122 | " # Return the array of bytes\n", 123 | " return cipher\n", 124 | "\n", 125 | "\n", 126 | "def decrypt(pk, ciphertext):\n", 127 | " # Unpack the key into its components\n", 128 | " key, n = pk\n", 129 | " # Generate the plaintext based on the ciphertext and key using a^b mod m\n", 130 | " aux = [str(pow(char, key, n)) for char in ciphertext]\n", 131 | " # Return the array of bytes as a string\n", 132 | " plain = [chr(int(char2)) for char2 in aux]\n", 133 | " return ''.join(plain)\n", 134 | "\n", 135 | "\n", 136 | "if __name__ == '__main__':\n", 137 | " '''\n", 138 | " Detect if the script is being run directly by the user\n", 139 | " '''\n", 140 | " print(\"===========================================================================================================\")\n", 141 | " print(\"================================== RSA Encryptor / Decrypter ==============================================\")\n", 142 | " print(\" \")\n", 143 | "\n", 144 | " p = int(input(\" - Enter a prime number (17, 19, 23, etc): \"))\n", 145 | " q = int(input(\" - Enter another prime number (Not one you entered above): \"))\n", 146 | "\n", 147 | " print(\" - Generating your public / private key-pairs now . . .\")\n", 148 | "\n", 149 | " public, private = generate_key_pair(p, q)\n", 150 | "\n", 151 | " print(\" - Your public key is \", public, \" and your private key is \", private)\n", 152 | "\n", 153 | " message = input(\" - Enter a message to encrypt with your public key: \")\n", 154 | " encrypted_msg = encrypt(public, message)\n", 155 | "\n", 156 | " print(\" - Your encrypted message is: \", ''.join(map(lambda x: str(x), encrypted_msg)))\n", 157 | " print(\" - Decrypting message with private key \", private, \" . . .\")\n", 158 | " print(\" - Your message is: \", decrypt(private, encrypted_msg))\n", 159 | "\n", 160 | " print(\" \")\n", 161 | " print(\"============================================ END ==========================================================\")\n", 162 | " print(\"===========================================================================================================\")" 163 | ], 164 | "execution_count": 10, 165 | "outputs": [ 166 | { 167 | "output_type": "stream", 168 | "text": [ 169 | "===========================================================================================================\n", 170 | "================================== RSA Encryptor / Decrypter ==============================================\n", 171 | " \n", 172 | " - Enter a prime number (17, 19, 23, etc): 17\n", 173 | " - Enter another prime number (Not one you entered above): 23\n", 174 | " - Generating your public / private key-pairs now . . .\n", 175 | " - Your public key is (205, 391) and your private key is (261, 391)\n", 176 | " - Enter a message to encrypt with your public key: omkarmankar\n", 177 | " - Your encrypted message is: 314227241201252227201213241201252\n", 178 | " - Decrypting message with private key (261, 391) . . .\n", 179 | " - Your message is: omkarmankar\n", 180 | " \n", 181 | "============================================ END ==========================================================\n", 182 | "===========================================================================================================\n" 183 | ], 184 | "name": "stdout" 185 | } 186 | ] 187 | } 188 | ] 189 | } -------------------------------------------------------------------------------- /Mini-project_LP3/BE_LP3_Q2_41239_ML_MINIPROJ_O.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import random 3 | import matplotlib.pyplot as plt 4 | from matplotlib.text import OffsetFrom 5 | class City: 6 | def __init__(self,x,y): 7 | self.x = x 8 | self.y = y 9 | 10 | def distance(self,city): 11 | xDis = abs(self.x - city.x) 12 | yDis = abs(self.y - city.y) 13 | distance = np.sqrt((xDis**2) + (yDis**2)) 14 | return distance 15 | 16 | def __repr__(self): 17 | return "(" + str(self.x) + "," + str(self.y) + ")" 18 | 19 | 20 | class Route: #Chromosome 21 | def __init__(self, cityList): 22 | self.cityList = cityList 23 | self.route = self.createRoute() 24 | self.distance = self.routeDistance() 25 | self.fitness= self.routeFitness() 26 | 27 | def createRoute(self): 28 | route = random.sample(self.cityList, len(self.cityList)) 29 | return route 30 | 31 | def routeDistance(self): 32 | pathDistance = 0 33 | for i in range(0, len(self.route)-1): 34 | fromCity = self.route[i] 35 | toCity = None 36 | if i + 1 < len(self.route): 37 | toCity = self.route[i + 1] 38 | else: 39 | toCity = self.route[0] 40 | pathDistance += fromCity.distance(toCity) 41 | return pathDistance 42 | 43 | #Fitness function = inverse of path distance i.e. maximize fitness=> minimum path length 44 | def routeFitness(self): 45 | fitness = 1 / float(self.distance) 46 | return fitness 47 | 48 | class Population: 49 | def __init__(self,popSize,cityList): 50 | self.popSize = popSize 51 | self.cityList = cityList 52 | self.routes,self.fitness = self.initialPopulation() 53 | 54 | def initialPopulation(self): 55 | population = [] 56 | fitness = [] 57 | for i in range(0, self.popSize): 58 | r = Route(self.cityList) 59 | population.append(r.route) 60 | fitness.append(r.routeFitness()) 61 | return population,fitness 62 | 63 | class GA: 64 | def __init__(self,popSize,cityList,tournament_size = 3,pc=0.65,pm=0.1): 65 | self.tournament_size = tournament_size 66 | self.population = Population(popSize,cityList) 67 | self.pc = pc #crossover probability 68 | self.pm = pm #mutation probabaility 69 | self.fittest = 0 70 | self.fittest_route = 0 71 | self.parents = 0 72 | self.offspring = 0 73 | 74 | def selection(self): 75 | #Performs tournament selection without replacement of size s 76 | parents = [] 77 | while len(parents)!= self.population.popSize: 78 | participants = random.sample(self.population.fitness,self.tournament_size) 79 | # get index of fittest participant 80 | index = self.population.fitness.index(max(participants)) 81 | 82 | # add fittest participant to parent list for reproduction 83 | parents.append(self.population.routes[index]) 84 | #print("Parents:",index_routes(parents,cityList)) 85 | self.parents = parents 86 | 87 | def crossover(self): 88 | #Performs order crossover with probability pc 89 | offspring = [] 90 | #select parents by randomly generating indices 91 | while len(self.parents)!=0: 92 | #select mate for gene at position 0 by randomly generating index in range [1,len(parents)-1] 93 | index = random.randint(1,len(self.parents)-1) 94 | #print("Index: ",index) 95 | A = self.parents[0] 96 | #print("A:,",[cityList.index(city) for city in A]) 97 | B = self.parents[index] 98 | #print("B:,",[cityList.index(city) for city in B]) 99 | 100 | #generate random probability in range [0,1] 101 | pc = random.uniform(0,1) 102 | 103 | #check against crossover probability 104 | if pc <= self.pc: 105 | #perform crossover 106 | #generate random crossover point 107 | crossover_index = random.randint(0,len(cityList)-3) #window size = 3 cities = 10 108 | #print("Crossover_index: ",crossover_index) 109 | 110 | #extract cities in selected window 111 | window_A = A[crossover_index:crossover_index+3] 112 | window_B = B[crossover_index:crossover_index+3] 113 | #print("Window A:",[cityList.index(city) for city in window_A]) 114 | #print("Window B:",[cityList.index(city) for city in window_B]) 115 | C=[] 116 | D=[] 117 | i=0 118 | j=0 119 | #Fill until crossover_index 120 | while len(C)!=crossover_index : 121 | if B[i] not in window_A: 122 | C.append(B[i]) 123 | i=i+1 124 | while len(D)!=crossover_index: 125 | if A[j] not in window_B: 126 | D.append(A[j]) 127 | j=j+1 128 | 129 | #Append windows 130 | C = C + window_A 131 | D = D + window_B 132 | 133 | #Fill remaining positions 134 | while len(C)!= len(cityList): 135 | if B[i] not in window_A: 136 | C.append(B[i]) 137 | i=i+1 138 | while len(D)!=len(cityList): 139 | if A[j] not in window_B: 140 | D.append(A[j]) 141 | j=j+1 142 | 143 | #Append to offspring 144 | offspring.append(C) 145 | offspring.append(D) 146 | else: 147 | #no crossover 148 | offspring.append(A) 149 | offspring.append(B) 150 | 151 | #remove selected parents from parents array 152 | self.parents.pop(index) 153 | self.parents.pop(0) 154 | 155 | self.offspring = offspring 156 | #print('\nOffspring: ',index_routes(self.offspring,cityList)) 157 | 158 | def mutation(self): 159 | #Swap mutation is performed with probability pm 160 | 161 | for x in range(len(self.offspring)) : 162 | #Generate mutation probability randomly 163 | pm = random.uniform(0,1) 164 | if pm <=self.pm : 165 | #mutation occurs 166 | indexes = [random.randint(0,len(cityList)-1) for i in range(2)] 167 | 168 | route = self.offspring[x] 169 | #print("Route: ",route) 170 | city = route[indexes[0]] 171 | route[indexes[0]] = route[indexes[1]] 172 | route[indexes[1]] = city 173 | #print("Mutate route: ",route) 174 | 175 | #Replace with mutated gene 176 | self.offspring[x] = route 177 | #print("Mutated offspring:",index_routes(self.offspring,cityList)) 178 | 179 | def replacement(self): 180 | self.population.routes = self.offspring 181 | self.population.fitness = [] 182 | for route in self.population.routes: 183 | r = Route(cityList) 184 | r.route = route 185 | r.routeDistance() 186 | self.population.fitness.append(r.routeFitness()) 187 | self.fittest = max(self.fittest,max(self.population.fitness)) 188 | if self.fittest in self.population.fitness: 189 | index = self.population.fitness.index(self.fittest) 190 | self.fittest_route = self.population.routes[index] 191 | self.offspring = [] 192 | 193 | #print("\nGene pool : ",index_routes(self.population.routes,cityList)) 194 | #print("\nFitness : ",self.population.fitness) 195 | print("\nFittest Individual: ",1/self.fittest) 196 | print("\nFittest route: ",[cityList.index(city) for city in self.fittest_route]) 197 | 198 | def index_routes(routes,cityList): 199 | return [[cityList.index(city) for city in route] for route in routes] 200 | 201 | 202 | 203 | #Main 204 | popSize = 20 205 | n_generations = 10 206 | cityList = [] 207 | for i in range(0,5): 208 | cityList.append(City(x=int(random.random() * 25), y=int(random.random() * 25))) 209 | print("CityList: ",cityList) 210 | ga = GA(popSize,cityList) 211 | print("Initial population: ",index_routes(ga.population.routes,cityList)) 212 | for i in range(n_generations): 213 | print("--------Generation ",i,"-----------") 214 | ga.selection() 215 | ga.crossover() 216 | ga.mutation() 217 | ga.replacement() 218 | 219 | X = [cityList[i].x for i in range(len(cityList))] 220 | y = [cityList[i].y for i in range(len(cityList))] 221 | 222 | fig,ax = plt.subplots() 223 | ax.scatter(X,y,s=10) 224 | for i in range(len(cityList)): 225 | ax.annotate(i,(X[i],y[i])) 226 | 227 | def connectpoints(route,p1,p2,cost): 228 | x1, x2 = route[p1].x, route[p2].x 229 | y1, y2 = route[p1].y, route[p2].y 230 | xmid = (x1+x2)/2 231 | ymid = (y1+y2)/2 232 | #ax.plot([x1,x2],[y1,y2]) 233 | c = "{:.2f}".format(cost) 234 | an1 = ax.annotate('',xy=(x1,y1),xycoords='data',xytext=(x2,y2),textcoords='data', 235 | arrowprops=dict(arrowstyle="<-",connectionstyle="arc3"),) 236 | offset_from = OffsetFrom(an1,(0,0)) 237 | an2 = ax.annotate(c,(xmid+0.1,ymid)) 238 | #plt.setp(line,linewidth=0.5) 239 | cost = [] 240 | for i in range(len(ga.fittest_route)-1): 241 | x1,y1 = ga.fittest_route[i].x,ga.fittest_route[i].y 242 | x2,y2 = ga.fittest_route[i+1].x,ga.fittest_route[i+1].y 243 | cost.append(City(x1,y1).distance(City(x2,y2))) 244 | cost.append(City(ga.fittest_route[0].x,ga.fittest_route[0].y).distance(City(ga.fittest_route[len(ga.fittest_route)-1].x,ga.fittest_route[len(ga.fittest_route)-1].y))) 245 | for i in range(len(ga.fittest_route)-1): 246 | connectpoints(ga.fittest_route,i,i+1,cost[i]) 247 | connectpoints(ga.fittest_route,len(ga.fittest_route)-1,0,cost[len(ga.fittest_route)-1]) 248 | print("Cost:",cost) 249 | plt.show() 250 | -------------------------------------------------------------------------------- /MiniProj ICS/sql-injection-demo-master/login_files/modernizr.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Modernizr v2.8.3 3 | * www.modernizr.com 4 | * 5 | * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton 6 | * Available under the BSD and MIT licenses: www.modernizr.com/license/ 7 | */ 8 | window.Modernizr=function(a,b,c){function d(a){t.cssText=a}function e(a,b){return d(x.join(a+";")+(b||""))}function f(a,b){return typeof a===b}function g(a,b){return!!~(""+a).indexOf(b)}function h(a,b){for(var d in a){var e=a[d];if(!g(e,"-")&&t[e]!==c)return"pfx"==b?e:!0}return!1}function i(a,b,d){for(var e in a){var g=b[a[e]];if(g!==c)return d===!1?a[e]:f(g,"function")?g.bind(d||b):g}return!1}function j(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+z.join(d+" ")+d).split(" ");return f(b,"string")||f(b,"undefined")?h(e,b):(e=(a+" "+A.join(d+" ")+d).split(" "),i(e,b,c))}function k(){o.input=function(c){for(var d=0,e=c.length;e>d;d++)E[c[d]]=!!(c[d]in u);return E.list&&(E.list=!(!b.createElement("datalist")||!a.HTMLDataListElement)),E}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),o.inputtypes=function(a){for(var d,e,f,g=0,h=a.length;h>g;g++)u.setAttribute("type",e=a[g]),d="text"!==u.type,d&&(u.value=v,u.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(e)&&u.style.WebkitAppearance!==c?(q.appendChild(u),f=b.defaultView,d=f.getComputedStyle&&"textfield"!==f.getComputedStyle(u,null).WebkitAppearance&&0!==u.offsetHeight,q.removeChild(u)):/^(search|tel)$/.test(e)||(d=/^(url|email)$/.test(e)?u.checkValidity&&u.checkValidity()===!1:u.value!=v)),D[a[g]]=!!d;return D}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var l,m,n="2.8.3",o={},p=!0,q=b.documentElement,r="modernizr",s=b.createElement(r),t=s.style,u=b.createElement("input"),v=":)",w={}.toString,x=" -webkit- -moz- -o- -ms- ".split(" "),y="Webkit Moz O ms",z=y.split(" "),A=y.toLowerCase().split(" "),B={svg:"http://www.w3.org/2000/svg"},C={},D={},E={},F=[],G=F.slice,H=function(a,c,d,e){var f,g,h,i,j=b.createElement("div"),k=b.body,l=k||b.createElement("body");if(parseInt(d,10))for(;d--;)h=b.createElement("div"),h.id=e?e[d]:r+(d+1),j.appendChild(h);return f=["­",'"].join(""),j.id=r,(k?j:l).innerHTML+=f,l.appendChild(j),k||(l.style.background="",l.style.overflow="hidden",i=q.style.overflow,q.style.overflow="hidden",q.appendChild(l)),g=c(j,a),k?j.parentNode.removeChild(j):(l.parentNode.removeChild(l),q.style.overflow=i),!!g},I=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return H("@media "+b+" { #"+r+" { position: absolute; } }",function(b){d="absolute"==(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position}),d},J=function(){function a(a,e){e=e||b.createElement(d[a]||"div"),a="on"+a;var g=a in e;return g||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(a,""),g=f(e[a],"function"),f(e[a],"undefined")||(e[a]=c),e.removeAttribute(a))),e=null,g}var d={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return a}(),K={}.hasOwnProperty;m=f(K,"undefined")||f(K.call,"undefined")?function(a,b){return b in a&&f(a.constructor.prototype[b],"undefined")}:function(a,b){return K.call(a,b)},Function.prototype.bind||(Function.prototype.bind=function(a){var b=this;if("function"!=typeof b)throw new TypeError;var c=G.call(arguments,1),d=function(){if(this instanceof d){var e=function(){};e.prototype=b.prototype;var f=new e,g=b.apply(f,c.concat(G.call(arguments)));return Object(g)===g?g:f}return b.apply(a,c.concat(G.call(arguments)))};return d}),C.flexbox=function(){return j("flexWrap")},C.flexboxlegacy=function(){return j("boxDirection")},C.canvas=function(){var a=b.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))},C.canvastext=function(){return!(!o.canvas||!f(b.createElement("canvas").getContext("2d").fillText,"function"))},C.webgl=function(){return!!a.WebGLRenderingContext},C.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:H(["@media (",x.join("touch-enabled),("),r,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=9===a.offsetTop}),c},C.geolocation=function(){return"geolocation"in navigator},C.postmessage=function(){return!!a.postMessage},C.websqldatabase=function(){return!!a.openDatabase},C.indexedDB=function(){return!!j("indexedDB",a)},C.hashchange=function(){return J("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},C.history=function(){return!(!a.history||!history.pushState)},C.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},C.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},C.rgba=function(){return d("background-color:rgba(150,255,150,.5)"),g(t.backgroundColor,"rgba")},C.hsla=function(){return d("background-color:hsla(120,40%,100%,.5)"),g(t.backgroundColor,"rgba")||g(t.backgroundColor,"hsla")},C.multiplebgs=function(){return d("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(t.background)},C.backgroundsize=function(){return j("backgroundSize")},C.borderimage=function(){return j("borderImage")},C.borderradius=function(){return j("borderRadius")},C.boxshadow=function(){return j("boxShadow")},C.textshadow=function(){return""===b.createElement("div").style.textShadow},C.opacity=function(){return e("opacity:.55"),/^0.55$/.test(t.opacity)},C.cssanimations=function(){return j("animationName")},C.csscolumns=function(){return j("columnCount")},C.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return d((a+"-webkit- ".split(" ").join(b+a)+x.join(c+a)).slice(0,-a.length)),g(t.backgroundImage,"gradient")},C.cssreflections=function(){return j("boxReflect")},C.csstransforms=function(){return!!j("transform")},C.csstransforms3d=function(){var a=!!j("perspective");return a&&"webkitPerspective"in q.style&&H("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b){a=9===b.offsetLeft&&3===b.offsetHeight}),a},C.csstransitions=function(){return j("transition")},C.fontface=function(){var a;return H('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&0===g.indexOf(d.split(" ")[0])}),a},C.generatedcontent=function(){var a;return H(["#",r,"{font:0/0 a}#",r,':after{content:"',v,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},C.video=function(){var a=b.createElement("video"),c=!1;try{(c=!!a.canPlayType)&&(c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""))}catch(d){}return c},C.audio=function(){var a=b.createElement("audio"),c=!1;try{(c=!!a.canPlayType)&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,""))}catch(d){}return c},C.localstorage=function(){try{return localStorage.setItem(r,r),localStorage.removeItem(r),!0}catch(a){return!1}},C.sessionstorage=function(){try{return sessionStorage.setItem(r,r),sessionStorage.removeItem(r),!0}catch(a){return!1}},C.webworkers=function(){return!!a.Worker},C.applicationcache=function(){return!!a.applicationCache},C.svg=function(){return!!b.createElementNS&&!!b.createElementNS(B.svg,"svg").createSVGRect},C.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==B.svg},C.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(w.call(b.createElementNS(B.svg,"animate")))},C.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(w.call(b.createElementNS(B.svg,"clipPath")))};for(var L in C)m(C,L)&&(l=L.toLowerCase(),o[l]=C[L](),F.push((o[l]?"":"no-")+l));return o.input||k(),o.addTest=function(a,b){if("object"==typeof a)for(var d in a)m(a,d)&&o.addTest(d,a[d]);else{if(a=a.toLowerCase(),o[a]!==c)return o;b="function"==typeof b?b():b,"undefined"!=typeof p&&p&&(q.className+=" "+(b?"":"no-")+a),o[a]=b}return o},d(""),s=u=null,function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=s.elements;return"string"==typeof a?a.split(" "):a}function e(a){var b=r[a[p]];return b||(b={},q++,a[p]=q,r[q]=b),b}function f(a,c,d){if(c||(c=b),k)return c.createElement(a);d||(d=e(c));var f;return f=d.cache[a]?d.cache[a].cloneNode():o.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!f.canHaveChildren||n.test(a)||f.tagUrn?f:d.frag.appendChild(f)}function g(a,c){if(a||(a=b),k)return a.createDocumentFragment();c=c||e(a);for(var f=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)f.createElement(h[g]);return f}function h(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?f(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function i(a){a||(a=b);var d=e(a);return!s.shivCSS||j||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||h(a,d),a}var j,k,l="3.7.0",m=a.html5||{},n=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,o=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,p="_html5shiv",q=0,r={};!function(){try{var a=b.createElement("a");a.innerHTML="",j="hidden"in a,k=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){j=!0,k=!0}}();var s={elements:m.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:l,shivCSS:m.shivCSS!==!1,supportsUnknownElements:k,shivMethods:m.shivMethods!==!1,type:"default",shivDocument:i,createElement:f,createDocumentFragment:g};a.html5=s,i(b)}(this,b),o._version=n,o._prefixes=x,o._domPrefixes=A,o._cssomPrefixes=z,o.mq=I,o.hasEvent=J,o.testProp=function(a){return h([a])},o.testAllProps=j,o.testStyles=H,o.prefixed=function(a,b,c){return b?j(a,b,c):j(a,"pfx")},q.className=q.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(p?" js "+F.join(" "):""),o}(this,this.document); 9 | -------------------------------------------------------------------------------- /MLA4/BE_LP3_Q2_41239_MLA4_O.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "kernelspec": { 6 | "display_name": "Python 3", 7 | "language": "python", 8 | "name": "python3" 9 | }, 10 | "language_info": { 11 | "codemirror_mode": { 12 | "name": "ipython", 13 | "version": 3 14 | }, 15 | "file_extension": ".py", 16 | "mimetype": "text/x-python", 17 | "name": "python", 18 | "nbconvert_exporter": "python", 19 | "pygments_lexer": "ipython3", 20 | "version": "3.6.3" 21 | }, 22 | "colab": { 23 | "name": "BE_LP3_Q2_41239_MLA4_O.ipynb", 24 | "provenance": [] 25 | } 26 | }, 27 | "cells": [ 28 | { 29 | "cell_type": "code", 30 | "metadata": { 31 | "collapsed": true, 32 | "id": "BUizRc1gPg79" 33 | }, 34 | "source": [ 35 | "#Load the required Libraries \n", 36 | "import numpy as np\n", 37 | "import pandas as pd\n", 38 | "from copy import deepcopy\n", 39 | "from matplotlib import pyplot as plt\n", 40 | "%matplotlib inline" 41 | ], 42 | "execution_count": null, 43 | "outputs": [] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "metadata": { 48 | "collapsed": true, 49 | "id": "2oS-OUiePg8E" 50 | }, 51 | "source": [ 52 | "#Given Dataset\n", 53 | "dataset = {\n", 54 | "'Points':['P1','P2','P3','P4','P5','P6','P7','P8',],\n", 55 | "'x_coordinate':[0.1,0.15,0.08,0.16,0.2,0.25,0.24,0.3],\n", 56 | "'y_coordinate':[0.6,0.71,0.9,0.85,0.3,0.5,0.1,0.2]\n", 57 | "}" 58 | ], 59 | "execution_count": null, 60 | "outputs": [] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "metadata": { 65 | "collapsed": true, 66 | "id": "nxf-SjfHPg8G" 67 | }, 68 | "source": [ 69 | "#dataframe\n", 70 | "df = pd.DataFrame(dataset,columns=['Points','x_coordinate','y_coordinate'])" 71 | ], 72 | "execution_count": null, 73 | "outputs": [] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "metadata": { 78 | "colab": { 79 | "base_uri": "https://localhost:8080/", 80 | "height": 300 81 | }, 82 | "id": "j6iTIGfMPg8H", 83 | "outputId": "f275f1dd-8188-4741-f7bd-369f7d5183bf" 84 | }, 85 | "source": [ 86 | "df" 87 | ], 88 | "execution_count": null, 89 | "outputs": [ 90 | { 91 | "output_type": "execute_result", 92 | "data": { 93 | "text/html": [ 94 | "
    \n", 95 | "\n", 108 | "\n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | "
    Pointsx_coordinatey_coordinate
    0P10.100.60
    1P20.150.71
    2P30.080.90
    3P40.160.85
    4P50.200.30
    5P60.250.50
    6P70.240.10
    7P80.300.20
    \n", 168 | "
    " 169 | ], 170 | "text/plain": [ 171 | " Points x_coordinate y_coordinate\n", 172 | "0 P1 0.10 0.60\n", 173 | "1 P2 0.15 0.71\n", 174 | "2 P3 0.08 0.90\n", 175 | "3 P4 0.16 0.85\n", 176 | "4 P5 0.20 0.30\n", 177 | "5 P6 0.25 0.50\n", 178 | "6 P7 0.24 0.10\n", 179 | "7 P8 0.30 0.20" 180 | ] 181 | }, 182 | "metadata": { 183 | "tags": [] 184 | }, 185 | "execution_count": 4 186 | } 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "metadata": { 192 | "colab": { 193 | "base_uri": "https://localhost:8080/", 194 | "height": 282 195 | }, 196 | "id": "-kli-m2IPg8K", 197 | "outputId": "b2297570-e6d1-42e8-956c-0b01f747d4c3" 198 | }, 199 | "source": [ 200 | "# Getting the values and plotting it\n", 201 | "f1 = df['x_coordinate'].values\n", 202 | "f2 = df['y_coordinate'].values\n", 203 | "X = np.array(list(zip(f1, f2)))\n", 204 | "plt.scatter(f1, f2, c='black', s=7)" 205 | ], 206 | "execution_count": null, 207 | "outputs": [ 208 | { 209 | "output_type": "execute_result", 210 | "data": { 211 | "text/plain": [ 212 | "" 213 | ] 214 | }, 215 | "metadata": { 216 | "tags": [] 217 | }, 218 | "execution_count": 5 219 | }, 220 | { 221 | "output_type": "display_data", 222 | "data": { 223 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAS7klEQVR4nO3df4zc+X3X8eervrlWtFu4cjsInS93LnLFOhA1aDsgKpEgguoLi6+QguxTpARCT0V1U0hBXJToVBkhRIpA/GFQjypqi3S41/xRmcXFCunlj6Jex3vkcid75MTnpD27iNkmKV1AJOP0zR87vk7Wa+/4POuxP/t8SCN/f3zm+33PR1+99PXnuzOfVBWSpPvft827AEnSbBjoktQIA12SGmGgS1IjDHRJasQD8zrxww8/XI8//vi8Ti9J96WXX375d6tqcbt9cwv0xx9/nLW1tXmdXpLuS0l+62b7HHKRpEYY6JLUCANdkhphoEtSIwx0SWrEVIGe5HCSi0kuJXlmm/2PJflMkleTfDbJ/tmXKkm6lR0DPck+4CTwBHAIOJbk0JZm/xL4xap6B3AC+OezLvS64XDI6uoqw+Fwt04hSfelaf4OvQdcqqrLAElOAU8CFybaHAI+Ml5+EfiVWRZ53XA4ZGlpidFoRKfTYTAY0O12d+NUknTfmWbI5RHgjYn1K+Ntkz4P/M3x8t8AFpL88a0HSvJ0krUka+vr67ddbL/fZzQasbGxwWg0ot/v3/YxJKlVs3oo+o+AdyX5HPAu4Crwza2Nquq5qlququXFxW2/uXpLvV6PTqfDwsICnU6HXq93x4VLUiumGXK5Cjw6sb5/vO1NVfU7jO/Qk3wX8L6q+r1ZFXldt9tlMBjQ7/fp9XoOt0jShGkC/RxwMMkBNoP8KPDUZIMkDwNfrao/AD4KfHLWhV7X7XZZWVnZrcNL0n1rxyGXqroGHAfOAgPghao6n+REkiPjZu8GLib5AvAngH+2S/VKkm4i85okenl5ufy1RUm6PUlerqrl7fb5TVFJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6Lpr/GE1aXfNbZJo7S3+sJq0+7xD113hD6tJu89A113hD6tJu88hF90V/rCatPsMdN01/rCatLsccpGkRhjoktQIA12SGmGgS1IjDHRJasRUgZ7kcJKLSS4leWab/W9L8mKSzyV5Ncl7Z1+qJOlWdgz0JPuAk8ATwCHgWJJDW5p9nM2p6d7J5pyj/3bWhUqSbm2aO/QecKmqLlfVN4BTwJNb2hTw3ePlPwr8zuxKlCRNY5pAfwR4Y2L9ynjbpJ8G3p/kCnAG+IntDpTk6SRrSdbW19ffQrmSpJuZ1UPRY8DPV9V+4L3Af0hyw7Gr6rmqWq6q5cXFxRmdWpIE0wX6VeDRifX9422TPgS8AFBVvwF8B/DwLAqUJE1nmkA/BxxMciDJg2w+9Dy9pc1vA38FIMkSm4HumIok3UU7BnpVXQOOA2eBAZt/zXI+yYkkR8bNfgr40SSfB/4j8MGqqt0qWpJ0o6l+bbGqzrD5sHNy27MTyxeAH5xtaZKk2+E3RSWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx03bbhcMjq6irD4XDepUiaMNXvoUvXDYdDlpaWGI1GdDodBoMB3W533mVJYso79CSHk1xMcinJM9vs/9dJXhm/vpDk92Zfqu4F/X6f0WjExsYGo9GIfr8/75Ikje14h55kH3AS+KvAFeBcktPjWYoAqKp/ONH+J4B37kKtugf0ej06nQ4LCwt0Oh16vd68S5I0Ns0deg+4VFWXq+obwCngyVu0P8bmvKJqULfbZTAY8PzzzzvcIt1jphlDfwR4Y2L9CvDnt2uY5DHgAPBrN9n/NPA0wNve9rbbKlT3jm63y8rKyrzLkLTFrP/K5Sjwqar65nY7q+q5qlququXFxcUZn1qS9rZpAv0q8OjE+v7xtu0cxeEWSZqLaQL9HHAwyYEkD7IZ2qe3Nkryp4GHgN+YbYmSpGnsGOhVdQ04DpwFBsALVXU+yYkkRyaaHgVOVVXtTqmSpFuZ6otFVXUGOLNl27Nb1n96dmVJkm6XX/2XpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEVMFepLDSS4muZTkmZu0+dtJLiQ5n+T52ZYpSdrJjoGeZB9wEngCOAQcS3JoS5uDwEeBH6yqtwP/YBdqnYvhcMjq6irD4XDepUjSLU0zY1EPuFRVlwGSnAKeBC5MtPlR4GRVfQ2gqppIv+FwyNLSEqPRiE6nw2AwoNvtzrssSdrWNEMujwBvTKxfGW+b9H3A9yX5b0leSnJ4uwMleTrJWpK19fX1t1bxXdTv9xmNRmxsbDAajej3+/MuSZJualYPRR8ADgLvBo4B/z7JH9vaqKqeq6rlqlpeXFyc0al3T6/Xo9PpsLCwQKfTodfrzbskSbqpaYZcrgKPTqzvH2+bdAX4zaoaAV9K8gU2A/7cTKqck263y2AwoN/v0+v1HG6RdE+b5g79HHAwyYEkDwJHgdNb2vwKm3fnJHmYzSGYyzOsc2663S4rKyuGuaR73o6BXlXXgOPAWWAAvFBV55OcSHJk3Ows8JUkF4AXgX9cVV/ZraIlSTdKVc3lxMvLy7W2tjaXc0vS/SrJy1W1vN0+vykqSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWrEVIGe5HCSi0kuJXlmm/0fTLKe5JXx6+/NvlRJ0q3sGOhJ9gEngSeAQ8CxJIe2afpLVfX949fPzbhOSfeZ4XDI6uoqw+Fw3qXsGQ9M0aYHXKqqywBJTgFPAhd2szBJ96/hcMjS0hKj0YhOp8NgMHCi9btgmiGXR4A3JtavjLdt9b4kryb5VJJHtztQkqeTrCVZW19ffwvlSrof9Pt9RqMRGxsbjEYj+v3+vEvaE2b1UPQ/AY9X1TuATwO/sF2jqnquqparanlxcXFGp5Z0r+n1enQ6HRYWFuh0OvR6vXmXtCdMM+RyFZi8494/3vamqvrKxOrPAZ+489Ik3a+63S6DwYB+v0+v13O45S6ZJtDPAQeTHGAzyI8CT002SPInq+p/jFePAIOZVinpvtPtdllZWZl3GXvKjoFeVdeSHAfOAvuAT1bV+SQngLWqOg18OMkR4BrwVeCDu1izJGkbqaq5nHh5ebnW1tbmcm5Jul8lebmqlrfb5zdFJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNmCrQkxxOcjHJpSTP3KLd+5JUkm1/fF2StHt2DPQk+4CTwBPAIeBYkkPbtFsAfhL4zVkXKUna2TR36D3gUlVdrqpvAKeAJ7dp90+BfwH8vxnWJ0ma0jSB/gjwxsT6lfG2NyX5c8CjVfWfb3WgJE8nWUuytr6+ftvFSpJu7o4fiib5NuBfAT+1U9uqeq6qlqtqeXFx8U5PLUmaME2gXwUenVjfP9523QLwZ4DPJvky8BeA0z4YlaS7a5pAPwccTHIgyYPAUeD09Z1V9b+q6uGqeryqHgdeAo5U1dquVCxJ2taOgV5V14DjwFlgALxQVeeTnEhyZLcLlCRN54FpGlXVGeDMlm3P3qTtu++8LEnS7fKbopLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDViqkBPcjjJxSSXkjyzzf4fS/JakleS/HqSQ7MvVZJ0KzsGepJ9wEngCeAQcGybwH6+qv5sVX0/8Ak2J42W9ozhcMjq6irD4XDepWgPm2bGoh5wqaouAyQ5BTwJXLjeoKp+f6L9dwI1yyKle9lwOGRpaYnRaESn02EwGNDtduddlvagaYZcHgHemFi/Mt72LZL8eJLX2bxD//B2B0rydJK1JGvr6+tvpV7pntPv9xmNRmxsbDAajej3+/MuSXvUzB6KVtXJqvpTwD8BPn6TNs9V1XJVLS8uLs7q1NJc9Xo9Op0OCwsLdDoder3evEvSHjXNkMtV4NGJ9f3jbTdzCvh3d1KUdD/pdrsMBgP6/T69Xs/hFs3NNHfo54CDSQ4keRA4CpyebJDk4MTqXwO+OLsSpXtft9tlZWXFMNdc7XiHXlXXkhwHzgL7gE9W1fkkJ4C1qjoNHE/yHmAEfA34wG4WLUm60TRDLlTVGeDMlm3PTiz/5IzrkiTdJr8pKkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqxFSBnuRwkotJLiV5Zpv9H0lyIcmrST6T5LHZlypJupUdAz3JPuAk8ARwCDiW5NCWZp8DlqvqHcCngE/MulBJasFwOGR1dZXhcDjzY08zBV0PuFRVlwGSnAKeBC5cb1BVL060fwl4/yyLlKQWDIdDlpaWGI1GdDodBoPBTCcWn2bI5RHgjYn1K+NtN/Mh4Fe325Hk6SRrSdbW19enr1KSGtDv9xmNRmxsbDAajej3+zM9/kwfiiZ5P7AM/Mx2+6vquaparqrlxcXFWZ5aku55vV6PTqfDwsICnU6HXq830+NPM+RyFXh0Yn3/eNu3SPIe4GPAu6rq67MpT5La0e12GQwG9Pt9er3eTIdbYLpAPwccTHKAzSA/Cjw12SDJO4GfBQ5X1exH+iWpEd1ul5WVlV059o5DLlV1DTgOnAUGwAtVdT7JiSRHxs1+Bvgu4JeTvJLk9K5UK0m6qWnu0KmqM8CZLduenVh+z4zrkiTdJr8pKkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqxFSBnuRwkotJLiV5Zpv9fynJf09yLcmPzL5MSdJOdgz0JPuAk8ATwCHgWJJDW5r9NvBB4PlZFyhp/obDIaurqwyHThl8L5tmCroecKmqLgMkOQU8CVy43qCqvjze9we7UKOkORoOhywtLTEajeh0OgwGg5nPVq/ZmGbI5RHgjYn1K+Ntty3J00nWkqytr6+/lUNIusv6/T6j0YiNjQ1GoxH9fn/eJekm7upD0ap6rqqWq2p5cXHxbp5a0lvU6/XodDosLCzQ6XTo9XrzLkk3Mc2Qy1Xg0Yn1/eNtkvaAbrfLYDCg3+/T6/UcbrmHTRPo54CDSQ6wGeRHgad2tSpJ95Rut8vKysq8y9AOdhxyqaprwHHgLDAAXqiq80lOJDkCkOQHklwB/hbws0nO72bRkqQbTXOHTlWdAc5s2fbsxPI5NodiJElz4jdFJakRBrokNcJAl6RGGOiS1IhU1XxOnKwDvzWXk9++h4HfnXcR9xj75Eb2yY3sk+3dSb88VlXbfjNzboF+P0myVlXL867jXmKf3Mg+uZF9sr3d6heHXCSpEQa6JDXCQJ/Oc/Mu4B5kn9zIPrmRfbK9XekXx9AlqRHeoUtSIwx0SWrEng/0O5kAO8kHknxx/PrA3at6d91hn3wzySvj1+m7V/XumqJPPpLkQpJXk3wmyWMT+/bqdXKrPtmr18mPJXlt/Ll/fXJ+5iQfHb/vYpIfeksFVNWefQH7gNeB7wUeBD4PHNrS5nHgHcAvAj8ysf17gMvjfx8aLz807880zz4Z7/vf8/4Mc+qTvwz8kfHy3wd+yetk+z7Z49fJd08sHwH+y3j50Lj9twMHxsfZd7s17PU79DcnwK6qbwDXJ8B+U1V9uapeBbZOgP1DwKer6qtV9TXg08Dhu1H0LruTPmnVNH3yYlX93/HqS/zhz0nv5evkZn3Sqmn65PcnVr8TuP5XKU8Cp6rq61X1JeDS+Hi3Za8H+p1MgD2zybPvMXf6ub5jPBH4S0l+eLalzc3t9smHgF99i++9X9xJn8Aevk6S/HiS14FPAB++nffuZKoJLqTb8FhVXU3yvcCvJXmtql6fd1F3S5L3A8vAu+Zdy73iJn2yZ6+TqjoJnEzyFPBxYGbPVfb6HfqdTIDd6uTZd/S5qurq+N/LwGeBd86yuDmZqk+SvAf4GHCkqr5+O++9D91Jn+zp62TCKeD6/05mc53M+0HCnB9iPMDmQ6oD/OFDjLffpO3Pc+ND0S+x+aDrofHy98z7M825Tx4Cvn28/DDwRbY8FLofX9P0CZuB9DpwcMv2PXud3KJP9vJ1cnBi+a8Da+Plt/OtD0Uv8xYeis69E+b9At4LfGF84X1svO0Em3cUAD/A5njW/wG+ApyfeO/fZfPhxSXg78z7s8y7T4C/CLw2vjBfAz40789yF/vkvwL/E3hl/DrtdbJ9n+zx6+TfAOfH/fHiZOCz+T+Z14GLwBNv5fx+9V+SGrHXx9AlqRkGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWrE/wdDkFiYNR9UrAAAAABJRU5ErkJggg==\n", 224 | "text/plain": [ 225 | "
    " 226 | ] 227 | }, 228 | "metadata": { 229 | "tags": [], 230 | "needs_background": "light" 231 | } 232 | } 233 | ] 234 | }, 235 | { 236 | "cell_type": "code", 237 | "metadata": { 238 | "collapsed": true, 239 | "id": "Bh9YcYACPg8L" 240 | }, 241 | "source": [ 242 | "# Euclidean Distance Caculator\n", 243 | "def dist(a, b, ax=1):\n", 244 | " return np.linalg.norm(a - b, axis=ax)" 245 | ], 246 | "execution_count": null, 247 | "outputs": [] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "metadata": { 252 | "colab": { 253 | "base_uri": "https://localhost:8080/" 254 | }, 255 | "id": "rLSNM3GIPg8M", 256 | "outputId": "8dd3b100-069c-43c1-aae6-78ea1e7fda8e" 257 | }, 258 | "source": [ 259 | "# Number of clusters\n", 260 | "k = 2\n", 261 | "# Two initia Centroids are given\n", 262 | "# m1 = P1\n", 263 | "# m2 = P8\n", 264 | "Centroid_m1 = list(X[0])\n", 265 | "Centroid_m2 = list(X[7])\n", 266 | "Centroids = np.array([Centroid_m1,Centroid_m2])\n", 267 | "print(Centroids)" 268 | ], 269 | "execution_count": null, 270 | "outputs": [ 271 | { 272 | "output_type": "stream", 273 | "text": [ 274 | "[[0.1 0.6]\n", 275 | " [0.3 0.2]]\n" 276 | ], 277 | "name": "stdout" 278 | } 279 | ] 280 | }, 281 | { 282 | "cell_type": "code", 283 | "metadata": { 284 | "colab": { 285 | "base_uri": "https://localhost:8080/", 286 | "height": 282 287 | }, 288 | "id": "rZb60gEhPg8M", 289 | "outputId": "fce2f115-509e-4019-ffb6-a7b03b198f01" 290 | }, 291 | "source": [ 292 | "# Plotting along with the Centroids\n", 293 | "plt.scatter(f1, f2, c='#050505', s=7)\n", 294 | "plt.scatter(Centroid_m1[0],Centroid_m1[1] ,marker='*', s=200, c='g')\n", 295 | "plt.scatter(Centroid_m2[0],Centroid_m2[1] ,marker='*', s=200, c='g')" 296 | ], 297 | "execution_count": null, 298 | "outputs": [ 299 | { 300 | "output_type": "execute_result", 301 | "data": { 302 | "text/plain": [ 303 | "" 304 | ] 305 | }, 306 | "metadata": { 307 | "tags": [] 308 | }, 309 | "execution_count": 8 310 | }, 311 | { 312 | "output_type": "display_data", 313 | "data": { 314 | "image/png": "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\n", 315 | "text/plain": [ 316 | "
    " 317 | ] 318 | }, 319 | "metadata": { 320 | "tags": [], 321 | "needs_background": "light" 322 | } 323 | } 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "metadata": { 329 | "colab": { 330 | "base_uri": "https://localhost:8080/" 331 | }, 332 | "id": "xWjaZ8IvPg8O", 333 | "outputId": "d95e59a4-4508-40ae-ee7c-fe34bb4ca228" 334 | }, 335 | "source": [ 336 | "# To store the value of centroids when it updates\n", 337 | "C_old = np.zeros(Centroids.shape)\n", 338 | "# Cluster Lables(0, 1, 2)\n", 339 | "clusters = np.zeros(len(X))\n", 340 | "# Error func. - Distance between new centroids and old centroids\n", 341 | "error = dist(Centroids, C_old, None)\n", 342 | "# Loop will run till the error becomes zero\n", 343 | "while error != 0:\n", 344 | " # Assigning each value to its closest cluster\n", 345 | " for i in range(len(X)):\n", 346 | " distances = dist(X[i], Centroids)\n", 347 | " cluster = np.argmin(distances)\n", 348 | " clusters[i] = cluster\n", 349 | " # Storing the old centroid values\n", 350 | " C_old = deepcopy(Centroids)\n", 351 | " print(C_old)\n", 352 | " # Finding the new centroids by taking the average value\n", 353 | " for i in range(k):\n", 354 | " points = [X[j] for j in range(len(X)) if clusters[j] == i]\n", 355 | " Centroids[i] = np.mean(points, axis=0)\n", 356 | " print(Centroids[i])\n", 357 | " error = dist(Centroids, C_old, None)" 358 | ], 359 | "execution_count": null, 360 | "outputs": [ 361 | { 362 | "output_type": "stream", 363 | "text": [ 364 | "[[0.1 0.6]\n", 365 | " [0.3 0.2]]\n", 366 | "[0.148 0.712]\n", 367 | "[0.24666667 0.2 ]\n", 368 | "[[0.148 0.712 ]\n", 369 | " [0.24666667 0.2 ]]\n", 370 | "[0.148 0.712]\n", 371 | "[0.24666667 0.2 ]\n" 372 | ], 373 | "name": "stdout" 374 | } 375 | ] 376 | }, 377 | { 378 | "cell_type": "code", 379 | "metadata": { 380 | "colab": { 381 | "base_uri": "https://localhost:8080/", 382 | "height": 508 383 | }, 384 | "id": "18v_S0aSPg8R", 385 | "outputId": "260bd06b-6a9b-41c7-f521-398d85ff49f9" 386 | }, 387 | "source": [ 388 | "colors = ['r', 'g']\n", 389 | "fig, ax = plt.subplots()\n", 390 | "print(\"New centroids are : \")\n", 391 | "print(Centroids[1])\n", 392 | "print(\"**\")\n", 393 | "for i in range(k):\n", 394 | " points = np.array([X[j] for j in range(len(X)) if clusters[j] == i])\n", 395 | " print(\"For centroid\",i)\n", 396 | " print(points)\n", 397 | " ax.scatter(points[:, 0], points[:, 1], s=7, c=colors[i])\n", 398 | "\n", 399 | "ax.scatter(Centroids[:, 0], Centroids[:, 1], marker='*', s=200, c='#050505')" 400 | ], 401 | "execution_count": null, 402 | "outputs": [ 403 | { 404 | "output_type": "stream", 405 | "text": [ 406 | "New centroids are : \n", 407 | "[0.24666667 0.2 ]\n", 408 | "**\n", 409 | "For centroid 0\n", 410 | "[[0.1 0.6 ]\n", 411 | " [0.15 0.71]\n", 412 | " [0.08 0.9 ]\n", 413 | " [0.16 0.85]\n", 414 | " [0.25 0.5 ]]\n", 415 | "For centroid 1\n", 416 | "[[0.2 0.3 ]\n", 417 | " [0.24 0.1 ]\n", 418 | " [0.3 0.2 ]]\n" 419 | ], 420 | "name": "stdout" 421 | }, 422 | { 423 | "output_type": "execute_result", 424 | "data": { 425 | "text/plain": [ 426 | "" 427 | ] 428 | }, 429 | "metadata": { 430 | "tags": [] 431 | }, 432 | "execution_count": 18 433 | }, 434 | { 435 | "output_type": "display_data", 436 | "data": { 437 | "image/png": "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\n", 438 | "text/plain": [ 439 | "
    " 440 | ] 441 | }, 442 | "metadata": { 443 | "tags": [], 444 | "needs_background": "light" 445 | } 446 | } 447 | ] 448 | }, 449 | { 450 | "cell_type": "code", 451 | "metadata": { 452 | "collapsed": true, 453 | "id": "ZqUvaHz6Pg8T" 454 | }, 455 | "source": [ 456 | "" 457 | ], 458 | "execution_count": null, 459 | "outputs": [] 460 | } 461 | ] 462 | } -------------------------------------------------------------------------------- /MLA1/BE_LP3_Q2_41239_MLA1_O.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "BE_LP3_Q2_41239_MLA1_O.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | }, 13 | "accelerator": "GPU" 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "code", 18 | "metadata": { 19 | "id": "aQPAgQEit8x1" 20 | }, 21 | "source": [ 22 | "" 23 | ], 24 | "execution_count": null, 25 | "outputs": [] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": { 30 | "id": "4aSkAkwBBFzt" 31 | }, 32 | "source": [ 33 | "Problem Statement \n", 34 | "The following table shows the results of a recently conducted\n", 35 | "study on the correlation of the number of hours spent driving\n", 36 | "with the risk of developing acute backache. Find the equation of\n", 37 | "the best fit line for this data.\n", 38 | "\n", 39 | "X (Driving hrs) = { 10 , 8 , 2 , 15 , 10 , 16 , 11 , 16 }\n", 40 | "\n", 41 | " Y (risk score)= { 95 , 80 , 10 , 50 , 45 , 98 , 38 , 93 }" 42 | ] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": { 47 | "id": "ZL64BF7ZdFcY" 48 | }, 49 | "source": [ 50 | "REMEBER" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "metadata": { 56 | "colab": { 57 | "base_uri": "https://localhost:8080/", 58 | "height": 300 59 | }, 60 | "id": "NIcjw3OTdG5P", 61 | "outputId": "bfcc2386-7fd8-48f3-e95a-c7687fbc6a36" 62 | }, 63 | "source": [ 64 | "import pandas as pd\n", 65 | "import numpy as np\n", 66 | "df = pd.read_csv('Data.csv')\n", 67 | "df\n", 68 | "\n" 69 | ], 70 | "execution_count": null, 71 | "outputs": [ 72 | { 73 | "output_type": "execute_result", 74 | "data": { 75 | "text/html": [ 76 | "
    \n", 77 | "\n", 90 | "\n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | "
    HoursRisk
    01095
    1980
    2210
    31550
    41045
    51698
    61138
    71693
    \n", 141 | "
    " 142 | ], 143 | "text/plain": [ 144 | " Hours Risk\n", 145 | "0 10 95\n", 146 | "1 9 80\n", 147 | "2 2 10\n", 148 | "3 15 50\n", 149 | "4 10 45\n", 150 | "5 16 98\n", 151 | "6 11 38\n", 152 | "7 16 93" 153 | ] 154 | }, 155 | "metadata": { 156 | "tags": [] 157 | }, 158 | "execution_count": 1 159 | } 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": { 165 | "id": "RaiWQsus_dJh" 166 | }, 167 | "source": [ 168 | "\n", 169 | "\n", 170 | "\n", 171 | "#Understand\n", 172 | "Here data is\n", 173 | "\n", 174 | "Domain = X (hrs) = { 10 , 8 , 2 , 15 , 10 , 16 , 11 , 16 }\n", 175 | "\n", 176 | "Range = Y (risk)= { 95 , 80 , 10 , 50 , 45 , 98 , 38 , 93 }\n", 177 | "\n", 178 | "Why Machine Learning?\n", 179 | "\n", 180 | "-> In the data X(hrs of driving) and Y(risk score) are having one to many mapping so we have to find mapping function that maps domain to range.\n", 181 | "(In this case there is one to many mapping but it can be also one to one mapping but in that case we need not to use Linear Regression and can be solved by mathematical formula)\n", 182 | "\n", 183 | "Why Supervised learning?\n", 184 | "\n", 185 | "-> Given data accepts feature X(hrs) mapping with Output label Y(risk) and hence it is Supervised Learning.\n" 186 | ] 187 | }, 188 | { 189 | "cell_type": "markdown", 190 | "metadata": { 191 | "id": "gJviEwvIVvDD" 192 | }, 193 | "source": [ 194 | "\n", 195 | "\n", 196 | "Now for finding best fit line the equation of line is y = mx + c\n", 197 | "\n", 198 | "\n", 199 | "But in data observation is that for X=10 maps to 2 values 95 and 45 so to remove this confusion there is need to add new feature\n", 200 | "\n", 201 | "Refering to the paper [(Paper)](https://open.library.ubc.ca/cIRcle/collections/facultyresearchandpublications/52383/items/1.0048193) \n", 202 | "\n", 203 | "(CREATE)\n", 204 | "\n", 205 | "So created WBV(whole body vibration) as a feature in the data.WBV is defined as the mechanical vibration that, when transmitted to the whole body, entails risks to the health and safety of drivers, in particular lower-back morbidity and trauma of the spine.\n", 206 | "\n", 207 | "\n", 208 | "X = { 10 , 8 , 2 , 15 , 10 , 16 , 11 , 16 }\n", 209 | "\n", 210 | "WBV = { 85 , 60 , 4 , 20 , 30 , 90 , 15 , 88 } \n", 211 | "\n", 212 | "Y = { 95 , 80 , 10 , 50 , 45 , 98 , 38 , 93 }\n", 213 | "\n", 214 | "\n", 215 | "\n", 216 | "\n", 217 | "\n", 218 | "\n" 219 | ] 220 | }, 221 | { 222 | "cell_type": "markdown", 223 | "metadata": { 224 | "id": "HNFJagineOH5" 225 | }, 226 | "source": [ 227 | "Programmer's Perspective\n", 228 | "\n", 229 | " Let S be our system\n", 230 | "\n", 231 | "S = { s, e, X, Y , fme,ffi | phi}\n", 232 | "\n", 233 | "s (start state) = system take input of the data\n", 234 | "\n", 235 | " s = {Xi Yi| i∈N 1<=Xi<=20 and 0<=Yi<=100 }\n", 236 | " \n", 237 | " s is constructor of class i.e. system()\n", 238 | "\n", 239 | "\n", 240 | "e (end state) = system predict output\n", 241 | "\n", 242 | " predict_output() function of class \n", 243 | " best fit line with equation y=mx+c\n", 244 | "\n", 245 | "X (input set) = {X1,X2,X3} \n", 246 | "\n", 247 | "\n", 248 | "\n", 249 | " X = {hours,wbv,risk}\n", 250 | "\n", 251 | " X1=hours spending in driving { 10 , 8 , 2 , 15 , 10 , 16 , 11 , 16 } 1<=X1<=20\n", 252 | "\n", 253 | " X2=WBV { 85 , 60 , 4 , 20 , 30 , 90 , 15 , 88 } 1<=X2<=100\n", 254 | "\n", 255 | " X3=risk score of back pain { 95 , 80 , 10 , 50 , 45 , 98 , 38 , 93 } 0<=X3<=100\n", 256 | "\n", 257 | "Y (outcomes) = {Y0,Y1,Y2} \n", 258 | "\n", 259 | " Y = { predict_output() , slope_intercept() ,rmse }\n", 260 | "\n", 261 | " Specifying Functions\n", 262 | "\n", 263 | " Domain(X) = {10,8,2,15,16,11} input\n", 264 | "\n", 265 | " y = f0(x) = b0(X(i)) + b1 \n", 266 | " \n", 267 | " b0=slope and b1=y-intercept\n", 268 | "\n", 269 | " Range {95,80,10,50,45,98,38,93} output\n", 270 | "\n", 271 | " \n", 272 | "\n", 273 | "fme - does the transformation of start to end state\n", 274 | "\n", 275 | " main function prediction_output()\n", 276 | "\n", 277 | "ffi - set of friend function\n", 278 | "\n", 279 | " {f0 -> calculate_mean(),\n", 280 | " \n", 281 | " f1 -> calc_variance() ,\n", 282 | " \n", 283 | " f2 -> coefficients()}\n", 284 | "\n" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "metadata": { 290 | "id": "TYLZ6VVqeQTW" 291 | }, 292 | "source": [ 293 | "" 294 | ], 295 | "execution_count": null, 296 | "outputs": [] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "metadata": { 301 | "id": "FekbpJmthiva" 302 | }, 303 | "source": [ 304 | "import numpy as np\n", 305 | "class system:\n", 306 | " def __init__(self,hours,wbv,risk_score):\n", 307 | " #start state\n", 308 | " self.hours=hours\n", 309 | " self.wbv=wbv\n", 310 | " self.risk_score=risk_score\n", 311 | " self.total_sample=len(self.hours)\n", 312 | " self.X=self.initialize_X()\n", 313 | " self.Y=self.initialize_Y()\n", 314 | " \n", 315 | " \n", 316 | " def initialize_X(self):\n", 317 | " self.total_sample=len(self.hours)\n", 318 | " self.X=np.zeros((self.total_sample,3))\n", 319 | " for i in range(self.total_sample):\n", 320 | " self.X[i]=[1,x[i],y[i]]\n", 321 | " return self.X\n", 322 | " \n", 323 | " def initialize_Y(self):\n", 324 | " self.Y=np.array([[]])\n", 325 | " for i in range(self.total_sample):\n", 326 | " self.Y=np.append(self.Y,z[i])\n", 327 | " return self.Y\n", 328 | " \n", 329 | " def find_transpose(self,X):\n", 330 | " return X.T\n", 331 | " \n", 332 | " def find_inverse(self,X):\n", 333 | " return np.linalg.inv(X)\n", 334 | " \n", 335 | " def calculate_coef(self):\n", 336 | " #(ANALYZE)\n", 337 | " #this function do calculation of normal equaion\n", 338 | " #theta=(X.T . X)^-1 . X.T . Y (for linear regression)\n", 339 | " X_transpose=self.find_transpose(self.X)\n", 340 | " X_new=X_transpose.dot(self.X)\n", 341 | " X_inv=self.find_inverse(X_new)\n", 342 | " theta=X_inv.dot(self.find_transpose(self.X)).dot(self.Y)\n", 343 | " return theta\n", 344 | " def predict_y(self,theta):\n", 345 | " Y_pred=[]\n", 346 | " for i in range (self.total_sample):\n", 347 | " # ans = theta0 + theta1*x1 + theta2*x2 \n", 348 | " res=theta[0]+theta[1]*self.hours[i]+theta[2]*self.wbv[i]\n", 349 | " Y_pred.append(res)\n", 350 | " return Y_pred\n", 351 | " \n", 352 | " \n", 353 | " def predict_output(self):\n", 354 | " #this is end state of system\n", 355 | " theta=self.calculate_coef()\n", 356 | " #(APPLY)\n", 357 | " Y_pred=self.predict_y(theta)\n", 358 | " import sklearn.metrics as sm\n", 359 | " R2_score = round(sm.r2_score(self.risk_score, Y_pred), 2)\n", 360 | " \n", 361 | " return theta,Y_pred,R2_score\n", 362 | " \n" 363 | ], 364 | "execution_count": null, 365 | "outputs": [] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "metadata": { 370 | "id": "KRawysbgkXgb" 371 | }, 372 | "source": [ 373 | "" 374 | ], 375 | "execution_count": null, 376 | "outputs": [] 377 | }, 378 | { 379 | "cell_type": "code", 380 | "metadata": { 381 | "id": "BJBaaUC8gblD" 382 | }, 383 | "source": [ 384 | "x=[10,8,2,15,10,16,11,16]\n", 385 | "y = [85,60,5,20,30,82,15,80]\n", 386 | "z =[95,80,10,50,45,98,38,93]" 387 | ], 388 | "execution_count": null, 389 | "outputs": [] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "metadata": { 394 | "id": "di_rLJLrhrko" 395 | }, 396 | "source": [ 397 | "obj=system(x,y,z)" 398 | ], 399 | "execution_count": null, 400 | "outputs": [] 401 | }, 402 | { 403 | "cell_type": "code", 404 | "metadata": { 405 | "id": "Yg-fGI4Whz2m" 406 | }, 407 | "source": [ 408 | "c,y,ac=obj.predict_output()" 409 | ], 410 | "execution_count": null, 411 | "outputs": [] 412 | }, 413 | { 414 | "cell_type": "code", 415 | "metadata": { 416 | "colab": { 417 | "base_uri": "https://localhost:8080/" 418 | }, 419 | "id": "txQUeS3Eh0Ri", 420 | "outputId": "e9eb7996-6ccb-4f56-c44c-bed247945b97" 421 | }, 422 | "source": [ 423 | "ac" 424 | ], 425 | "execution_count": null, 426 | "outputs": [ 427 | { 428 | "output_type": "execute_result", 429 | "data": { 430 | "text/plain": [ 431 | "0.98" 432 | ] 433 | }, 434 | "metadata": { 435 | "tags": [] 436 | }, 437 | "execution_count": 7 438 | } 439 | ] 440 | }, 441 | { 442 | "cell_type": "code", 443 | "metadata": { 444 | "id": "PbEpPEUg-hEk", 445 | "colab": { 446 | "base_uri": "https://localhost:8080/" 447 | }, 448 | "outputId": "e8b7ad8e-cbf6-4e43-ed03-2aea06bc9ec2" 449 | }, 450 | "source": [ 451 | "y" 452 | ], 453 | "execution_count": null, 454 | "outputs": [ 455 | { 456 | "output_type": "execute_result", 457 | "data": { 458 | "text/plain": [ 459 | "[94.47280984842452,\n", 460 | " 70.45628032047415,\n", 461 | " 15.42151044129788,\n", 462 | " 46.044664425998526,\n", 463 | " 47.6820584105688,\n", 464 | " 100.16460548404385,\n", 465 | " 36.29494745561612,\n", 466 | " 98.46312361357639]" 467 | ] 468 | }, 469 | "metadata": { 470 | "tags": [] 471 | }, 472 | "execution_count": 9 473 | } 474 | ] 475 | }, 476 | { 477 | "cell_type": "code", 478 | "metadata": { 479 | "id": "xK96U6JmiOFB" 480 | }, 481 | "source": [ 482 | "" 483 | ], 484 | "execution_count": null, 485 | "outputs": [] 486 | }, 487 | { 488 | "cell_type": "code", 489 | "metadata": { 490 | "id": "QIudNJq_iOM7" 491 | }, 492 | "source": [ 493 | "" 494 | ], 495 | "execution_count": null, 496 | "outputs": [] 497 | }, 498 | { 499 | "cell_type": "code", 500 | "metadata": { 501 | "id": "oFZ6Df50iOmr" 502 | }, 503 | "source": [ 504 | "" 505 | ], 506 | "execution_count": null, 507 | "outputs": [] 508 | }, 509 | { 510 | "cell_type": "markdown", 511 | "metadata": { 512 | "id": "QlStOOtTJ3k8" 513 | }, 514 | "source": [ 515 | "SCRATCH" 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "metadata": { 521 | "colab": { 522 | "base_uri": "https://localhost:8080/", 523 | "height": 279 524 | }, 525 | "id": "vZLe_ek6J5LO", 526 | "outputId": "1b30368a-0e7d-40e7-b093-1af92afd8ead" 527 | }, 528 | "source": [ 529 | "import matplotlib.pyplot as plt\n", 530 | "\n", 531 | "plt.scatter(df['Hours '], df['Risk'])\n", 532 | "plt.xlabel('number of Hours')\n", 533 | "plt.ylabel('Risk Score')\n", 534 | "plt.show()" 535 | ], 536 | "execution_count": null, 537 | "outputs": [ 538 | { 539 | "output_type": "display_data", 540 | "data": { 541 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAWPElEQVR4nO3df7DddX3n8efLJK4XrA0USklQgpVmR0EMpi71R1fFNa51JEsZf6w/0NJldF1/TyrR6brOTldsXC3dbnXwR0GX6lJMA+u0RgbB2o7iBIOEH6a6KJhLkLg1avWqIbz3j/O9Xy/x3stJcs/53pPzfMxk7vl+zjn3+7pwk9f5/vp8U1VIkgTwsK4DSJIWD0tBktSyFCRJLUtBktSyFCRJraVdBzgcxx13XK1atarrGJI0Um666abvVtXxsz030qWwatUqtm3b1nUMSRopSe6a6zl3H0mSWgMrhSQfTXJfkltnjB2b5NokX2++HtOMJ8mfJvlGkluSnDmoXJKkuQ1yS+Ey4HkHjF0EXFdVpwLXNcsA/xY4tflzIfCBAeaSJM1hYKVQVX8H/NMBw+cAlzePLwfWzxj/WPV8CVie5MRBZZMkzW7YxxROqKrdzeN7gROaxyuBb8943a5m7BckuTDJtiTb9uzZM7ikkjSGOjv7qKoqyUHPxldVlwKXAqxdu9bZ/CSNlS3bJ9m0dSf37J1ixfIJNqxbzfo1s36GPiTDLoXvJDmxqnY3u4fua8YngUfPeN1JzZgkqbFl+yQbN+9gat9+ACb3TrFx8w6ABSuGYe8+ugY4v3l8PnD1jPFXNmchnQV8f8ZuJkkSsGnrzrYQpk3t28+mrTsXbB0D21JI8gngmcBxSXYB7wQuBq5McgFwF/Ci5uV/Azwf+AbwY+DVg8olSaPqnr1TBzV+KAZWClX10jmeOnuW1xbwukFlkaQjwYrlE0zOUgArlk8s2Dq8olmSRsSGdauZWLbkQWMTy5awYd3qBVvHSM99JEnjZPpg8pF09pGkQzDo0xA1OtavWTnQ//eWgrTIDeM0RGmaxxSkRW4YpyFK0ywFaZEbxmmI0jR3H0mL3DBOQ9ToGPTxJbcUpEVuGKchajRMH1+a3DtF8fPjS1u2L9ysQJaCtMitX7OSd597OiuXTxBg5fIJ3n3u6R5kHkMjPc2FpIUz6NMQNRqGcXzJLQVJGhFzHUdymgtJGkNOcyFJajnNhSTpQQZ9fMndR5KklqUgSWpZCpKklqUgSWpZCpKklqUgSWpZCpKklqUgSWpZCpKklqUgSWpZCpKklqUgSWpZCpKklqUgSWpZCpKklqUgSWpZCpKklqUgSWpZCpKklqUgSWpZCpKklqUgSWot7WKlSd4M/D5QwA7g1cCJwCeBXwFuAl5RVT/rIp90qLZsn2TT1p3cs3eKFcsn2LBuNevXrOw6ltS3oW8pJFkJvAFYW1WnAUuAlwDvAd5fVY8DvgdcMOxs0uHYsn2SjZt3MLl3igIm906xcfMOtmyf7Dqa1Leudh8tBSaSLAWOAnYDzwauap6/HFjfUTbpkGzaupOpffsfNDa1bz+btu7sKJF08IZeClU1CbwXuJteGXyf3u6ivVV1f/OyXcCs29xJLkyyLcm2PXv2DCOy1Jd79k4d1Li0GHWx++gY4BzgFGAFcDTwvH7fX1WXVtXaqlp7/PHHDyildPBWLJ84qHFpMepi99FzgG9W1Z6q2gdsBp4GLG92JwGcBLgjViNlw7rVTCxb8qCxiWVL2LBudUeJpIPXRSncDZyV5KgkAc4GbgeuB85rXnM+cHUH2aRDtn7NSt597umsXD5BgJXLJ3j3uad79pFGSqpq+CtN3gW8GLgf2E7v9NSV9E5JPbYZe3lV/XS+77N27dratm3bgNNK0pElyU1VtXa25zq5TqGq3gm884DhO4GndBBHktTwimZJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1LAVJUstSkCS1+i6FJEcNMogkqXsPWQpJnprkduBrzfIZSf584MkkSUPXz5bC+4F1wP8DqKqvAr89yFCSpG70tfuoqr59wND+AWSRJHVsaR+v+XaSpwKVZBnwRuCOwcaSJHWhny2F1wCvA1YCk8CTmmVJ0hFm3i2FJEuAS6rqZUPKI0nq0LxbClW1Hzg5ycMXcqVJlie5KsnXktyR5LeSHJvk2iRfb74es5DrlCQ9tH6OKdwJ/EOSa4AfTQ9W1fsOY72XAJ+pqvOawjkKeDtwXVVdnOQi4CLgbYexDknSQeqnFP5v8+dhwC8d7gqT/DK9U1pfBVBVPwN+luQc4JnNyy4HbsBSkKSheshSqKp3ASR5ZLP8z4e5zlOAPcBfJDkDuIneGU0nVNXu5jX3Aicc5nokSQepnyuaT0uyHbgNuC3JTUmecBjrXAqcCXygqtbQ2yV10cwXVFUBNUeeC5NsS7Jtz549hxFDknSgfk5JvRR4S1WdXFUnA28FPnQY69wF7KqqG5vlq+iVxHeSnAjQfL1vtjdX1aVVtbaq1h5//PGHEUOSdKB+SuHoqrp+eqGqbgCOPtQVVtW99C6IW90MnQ3cDlwDnN+MnQ9cfajrkCQdmr7OPkryh8DHm+WX0zsj6XC8HriiOfPoTuDV9ArqyiQXAHcBLzrMdUiSDlI/pfB7wLuAzfT283+hGTtkVXUzsHaWp84+nO8rSTo8/Zx99D3gDUPIIknqWD9nH12bZPmM5WOSbB1sLElSF/o50HxcVe2dXmi2HH51cJEkSV3ppxQeSPKY6YUkJzPHNQSSpNHWz4HmdwB/n+TzQIBnABcONJUkqRP9HGj+TJIzgbPobSG8qaq+O/BkkqShm3P3UZKTm8nraErgR8BzgVcu9FTakqTFYb5jClfSXLmc5EnAXwF3A2cAfz74aJKkYZtv99FEVd3TPH458NGq+u9JHgbcPPhokqRhm29LITMePxu4DqCqHhhoIklSZ+bbUvhckiuB3cAxwOegncH0Z0PIJkkasvlK4U3Ai4ETgadX1b5m/NfonaYqSTrCzFkKzY1uPjnL+PaBJpIkdaafK5olSWOinyuaJUkHacv2STZt3ck9e6dYsXyCDetWs37Nyq5jPaR+Zkl98ixjLxhMHEkafVu2T7Jx8w4m905RwOTeKTZu3sGW7ZNdR3tI/ew++lCS06YXkrwU+MPBRZKk0bZp606m9u1/0NjUvv1s2rqzo0T962f30XnAVUn+Pb3J8F5Jb7oLSdIs7tk7dVDji0k/E+LdmeQlwBZ601w8t6oW/08mSR1ZsXyCyVkKYMXyiQ7SHJz5JsTbkeSWJLcAVwHHAqcANzZjkqRZbFi3mollSx40NrFsCRvWre4oUf/m21LwYLIkHYLps4xG8eyj+S5euwsgya8Du6rqp0meCTwR+Nhw4knSaFq/ZuVIlMCB+jn76FPA/iSPAy4FHg385UBTSZI60dc9mqvqfuBc4H9U1QZ68yFJko4w/ZTCvubahFcCn27Glg0ukiSpK/1cp/Bq4DXAH1XVN5OcAnx8sLEkzTSqUyZo9PRzncLtwBtmLH8TeM8gQ0n6uekpE6avkJ2eMgGwGLTg5rtO4crma3u9wsw/w4sojbdRnjJBo2e+LYU3Nl+9XkHq0ChPmaDRM991Crubr3fNHE/yMOClwF2zvU/SwhrlKRM0eubbffSoJBuT/FmS56bn9cCdwIuGF1Eab6M8ZYJGz3y7jz4OfA/4IvD7wNuBAOur6uYhZJPEaE+ZoNEzXyk8tqpOB0jyYWA38Jiq+slQkklqjeqUCRo98128tm/6QVXtpzf/kYUgSUew+bYUzkjyg+ZxgIlmOUBV1aMGnk6SNFTznX20ZK7nJElHpn7mPhqIJEuSbE/y6Wb5lCQ3JvlGkv+d5OFdZZOkcdVZKdC7OO6OGcvvAd5fVY+jd9bTBZ2kkqQx1kkpJDkJ+B3gw81ygGfTu+0nwOXA+i6ySdI462pL4U+APwAeaJZ/Bdjb3LcBYBfg+XeSNGRDL4UkLwDuq6qbDvH9FybZlmTbnj17FjidJI23fu6nsNCeBrwwyfOBRwCPAi4BlidZ2mwtnARMzvbmqrqU3m1BWbt2bQ0nsnRk8j4NOtDQtxSqamNVnVRVq4CXAJ+rqpcB1wPnNS87H7h62NmkcTJ9n4bJvVMUP79Pw5bts34e05jo8uyjA70NeEuSb9A7xvCRjvNIRzTv06DZdLH7qFVVNwA3NI/vBJ7SZR5pnHifBs1mMW0pSBqiue7H4H0axpulII0p79Og2XS6+0hSd7xPg2ZjKUhjzPs06EDuPpIktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVLLUpAktSwFSVJr6KWQ5NFJrk9ye5LbkryxGT82ybVJvt58PWbY2SRp3HWxpXA/8NaqejxwFvC6JI8HLgKuq6pTgeuaZUnSEA29FKpqd1V9pXn8Q+AOYCVwDnB587LLgfXDziZJ467TYwpJVgFrgBuBE6pqd/PUvcAJc7znwiTbkmzbs2fPUHJK0rjorBSSPBL4FPCmqvrBzOeqqoCa7X1VdWlVra2qtccff/wQkkrS+OikFJIso1cIV1TV5mb4O0lObJ4/Ebivi2ySNM66OPsowEeAO6rqfTOeugY4v3l8PnD1sLNJ0rhb2sE6nwa8AtiR5OZm7O3AxcCVSS4A7gJe1EE2SRprQy+Fqvp7IHM8ffYws0iSHswrmiVJLUtBktSyFCRJLUtBktSyFCRJLUtBktSyFCRJLUtBktSyFCRJLUtBktSyFCRJLUtBktSyFCRJLUtBktTq4n4KndqyfZJNW3dyz94pViyfYMO61axfs7LrWJK0KIxVKWzZPsnGzTuY2rcfgMm9U2zcvAPAYpAkxmz30aatO9tCmDa1bz+btu7sKJEkLS5jVQr37J06qHFJGjdjVQorlk8c1LgkjZuxKoUN61YzsWzJg8Ymli1hw7rVHSWSpMVlrA40Tx9M9uwjSZrdWJUC9IrBEpCk2Y3V7iNJ0vwsBUlSy1KQJLUsBUlSy1KQJLVSVV1nOGRJ9gB3HeLbjwO+u4BxBm2U8o5SVhitvKOUFUYr7yhlhcPLe3JVHT/bEyNdCocjybaqWtt1jn6NUt5RygqjlXeUssJo5R2lrDC4vO4+kiS1LAVJUmucS+HSrgMcpFHKO0pZYbTyjlJWGK28o5QVBpR3bI8pSJJ+0ThvKUiSDmApSJJaY1cKSR6d5Poktye5Lckbu870UJIsSbI9yae7zvJQkixPclWSryW5I8lvdZ1pLkne3PwO3JrkE0ke0XWmmZJ8NMl9SW6dMXZskmuTfL35ekyXGafNkXVT83twS5K/TrK8y4wzzZZ3xnNvTVJJjusi24Hmyprk9c1/39uS/PFCrW/sSgG4H3hrVT0eOAt4XZLHd5zpobwRuKPrEH26BPhMVf1L4AwWae4kK4E3AGur6jRgCfCSblP9gsuA5x0wdhFwXVWdClzXLC8Gl/GLWa8FTquqJwL/CGwcdqh5XMYv5iXJo4HnAncPO9A8LuOArEmeBZwDnFFVTwDeu1ArG7tSqKrdVfWV5vEP6f2jtWhvsJDkJOB3gA93neWhJPll4LeBjwBU1c+qam+3qea1FJhIshQ4Crin4zwPUlV/B/zTAcPnAJc3jy8H1g811Bxmy1pVn62q+5vFLwEnDT3YHOb4bwvwfuAPgEVzBs4cWV8LXFxVP21ec99CrW/sSmGmJKuANcCN3SaZ15/Q+yV9oOsgfTgF2AP8RbO768NJju461GyqapLep6u7gd3A96vqs92m6ssJVbW7eXwvcEKXYQ7C7wF/23WI+SQ5B5isqq92naUPvwE8I8mNST6f5DcX6huPbSkkeSTwKeBNVfWDrvPMJskLgPuq6qaus/RpKXAm8IGqWgP8iMWze+NBmn3x59ArshXA0Ule3m2qg1O988kXzSfauSR5B73dtld0nWUuSY4C3g78566z9GkpcCy9XeAbgCuTZCG+8ViWQpJl9Arhiqra3HWeeTwNeGGSbwGfBJ6d5H91G2leu4BdVTW95XUVvZJYjJ4DfLOq9lTVPmAz8NSOM/XjO0lOBGi+Lthug0FI8irgBcDLanFfFPXr9D4gfLX5+3YS8JUkv9ZpqrntAjZXz5fp7UlYkAPjY1cKTZt+BLijqt7XdZ75VNXGqjqpqlbROwj6uapatJ9mq+pe4NtJVjdDZwO3dxhpPncDZyU5qvmdOJtFelD8ANcA5zePzweu7jDLvJI8j96uzxdW1Y+7zjOfqtpRVb9aVauav2+7gDOb3+nFaAvwLIAkvwE8nAWa4XXsSoHep+9X0PvUfXPz5/ldhzqCvB64IsktwJOA/9Zxnlk1WzNXAV8BdtD7u7CopjlI8gngi8DqJLuSXABcDPybJF+nt7VzcZcZp82R9c+AXwKubf6efbDTkDPMkXdRmiPrR4HHNqepfhI4f6G2xJzmQpLUGsctBUnSHCwFSVLLUpAktSwFSVLLUpAktSwFqZHkhiQDv3F7kjc0M8heccD4Mw+cCTfJZUnOG3QmadrSrgNIR4IkS2dM/vZQ/iPwnKraNchMMx1kPo0xtxQ0UpKsaj5lf6iZR/6zSSaa59pP+kmOa6YrIMmrkmxp7j/wrST/Kclbmkn7vpTk2BmreEVzodWtSZ7SvP/oZk77LzfvOWfG970myefoTWN9YNa3NN/n1iRvasY+CDwW+Nskbz7In/3sZv07mjz/ohn/1vTc/0nWJrmhefxfknw8yT8AH0/yhOZnuDm9exycejDr13iwFDSKTgX+ZzOP/F7gd/t4z2nAucBvAn8E/LiZtO+LwCtnvO6oqnoSvU/zH23G3kFvipGn0JtaYNOM2V/PBM6rqn89c2VJngy8GvhX9CYt+w9J1lTVa+hN0f2sqnr/LDmfMeNK+5uBFzbf7xH05tV/cVWdTm8r/7V9/NyPp7dV8lLgNcAlzc+3lt5UDtKDWAoaRd+sqpubxzcBq/p4z/VV9cOq2gN8H/g/zfiOA97/CWjnsH9UencLey5wUfOP9A3AI4DHNK+/tqpmm5f/6cBfV9WPquqf6U2494w+cn6hqp40/YfeXEcAq+n93P/YLF9O794VD+WaqppqHn8ReHuStwEnzxiXWpaCRtFPZzzez8+Pjd3Pz3+nD7y15sz3PDBj+QEefGztwHlfCgjwuzP+sX5MVU1PnvejQ8i/0Ob7udt8VfWX9LY8poC/SfLs4cTTKLEUdCT5FvDk5vGhnrHzYoAkT6d3453vA1uB10/PV59kTR/f5wvA+mYW1qOBf9eMHaqdwKokj2uWXwF8vnn8LX7+c8+5Ky3JY4E7q+pP6c2u+sTDyKMjlKWgI8l7gdcm2c6hzy3/k+b9HwSmZ878r8Ay4JYktzXL82pu+XoZ8GV6d/b7cFVtP8RMVNVP6B2j+KskO+ht4UzPOvou4JIk2+htOc3lRcCtzW6w04CPHWoeHbmcJVWS1HJLQZLUshQkSS1LQZLUshQkSS1LQZLUshQkSS1LQZLU+v/c0bjJ0fcF4gAAAABJRU5ErkJggg==\n", 542 | "text/plain": [ 543 | "
    " 544 | ] 545 | }, 546 | "metadata": { 547 | "tags": [], 548 | "needs_background": "light" 549 | } 550 | } 551 | ] 552 | }, 553 | { 554 | "cell_type": "code", 555 | "metadata": { 556 | "id": "qF-5ANLzJ5So" 557 | }, 558 | "source": [ 559 | "" 560 | ], 561 | "execution_count": null, 562 | "outputs": [] 563 | }, 564 | { 565 | "cell_type": "markdown", 566 | "metadata": { 567 | "id": "yH31tDRBMIvs" 568 | }, 569 | "source": [ 570 | "Calculate Mean and Covariance\n", 571 | "\n", 572 | "(REMEMBER)" 573 | ] 574 | }, 575 | { 576 | "cell_type": "code", 577 | "metadata": { 578 | "id": "APOLkZyeJ5aE" 579 | }, 580 | "source": [ 581 | "x = df['Hours '].values\n", 582 | "y = df['Risk'].values" 583 | ], 584 | "execution_count": null, 585 | "outputs": [] 586 | }, 587 | { 588 | "cell_type": "code", 589 | "metadata": { 590 | "id": "-04oUsh3J5hT" 591 | }, 592 | "source": [ 593 | "def mean(values):\n", 594 | " return np.mean(values)\n" 595 | ], 596 | "execution_count": null, 597 | "outputs": [] 598 | }, 599 | { 600 | "cell_type": "code", 601 | "metadata": { 602 | "id": "MRvs_d16J5oy" 603 | }, 604 | "source": [ 605 | "def variance(values, mean):\n", 606 | " return sum([(x-mean)**2 for x in values])" 607 | ], 608 | "execution_count": null, 609 | "outputs": [] 610 | }, 611 | { 612 | "cell_type": "code", 613 | "metadata": { 614 | "id": "UzWRHQHcJ5vd" 615 | }, 616 | "source": [ 617 | "mean_X, mean_Y = mean(x), mean(y)" 618 | ], 619 | "execution_count": null, 620 | "outputs": [] 621 | }, 622 | { 623 | "cell_type": "code", 624 | "metadata": { 625 | "id": "-eqlzNK2J54B" 626 | }, 627 | "source": [ 628 | "var_x, var_y = variance(x, mean_X), variance(y, mean_Y)\n" 629 | ], 630 | "execution_count": null, 631 | "outputs": [] 632 | }, 633 | { 634 | "cell_type": "code", 635 | "metadata": { 636 | "colab": { 637 | "base_uri": "https://localhost:8080/" 638 | }, 639 | "id": "NzSoMYfBJ6AX", 640 | "outputId": "a27f8f8a-fe19-44ee-8f1c-57aa8c1a7093" 641 | }, 642 | "source": [ 643 | "print(mean_X, var_x)" 644 | ], 645 | "execution_count": null, 646 | "outputs": [ 647 | { 648 | "output_type": "stream", 649 | "text": [ 650 | "11.125 152.875\n" 651 | ], 652 | "name": "stdout" 653 | } 654 | ] 655 | }, 656 | { 657 | "cell_type": "code", 658 | "metadata": { 659 | "colab": { 660 | "base_uri": "https://localhost:8080/" 661 | }, 662 | "id": "UiMpvgx-MbvC", 663 | "outputId": "f76d914e-de47-439d-bd6a-486200a45b1d" 664 | }, 665 | "source": [ 666 | "print(mean_Y, var_y)" 667 | ], 668 | "execution_count": null, 669 | "outputs": [ 670 | { 671 | "output_type": "stream", 672 | "text": [ 673 | "63.625 7361.875\n" 674 | ], 675 | "name": "stdout" 676 | } 677 | ] 678 | }, 679 | { 680 | "cell_type": "code", 681 | "metadata": { 682 | "id": "5JNNW214Mb1c" 683 | }, 684 | "source": [ 685 | "def covariance(x, mean_x, y, mean_y):\n", 686 | " covar = 0.0\n", 687 | " for i in range(len(x)):\n", 688 | " covar += (x[i] - mean_x)*(y[i] - mean_y)\n", 689 | " return covar" 690 | ], 691 | "execution_count": null, 692 | "outputs": [] 693 | }, 694 | { 695 | "cell_type": "code", 696 | "metadata": { 697 | "colab": { 698 | "base_uri": "https://localhost:8080/" 699 | }, 700 | "id": "LIQMCTBiMb8j", 701 | "outputId": "6562d50e-36e1-4566-a9da-2a74f3a86079" 702 | }, 703 | "source": [ 704 | "covariance(x, mean_X, y, mean_Y)" 705 | ], 706 | "execution_count": null, 707 | "outputs": [ 708 | { 709 | "output_type": "execute_result", 710 | "data": { 711 | "text/plain": [ 712 | "701.375" 713 | ] 714 | }, 715 | "metadata": { 716 | "tags": [] 717 | }, 718 | "execution_count": 34 719 | } 720 | ] 721 | }, 722 | { 723 | "cell_type": "code", 724 | "metadata": { 725 | "id": "SwRVtQwhMcD3" 726 | }, 727 | "source": [ 728 | "def coefficients(data):\n", 729 | " a,b = list(data)\n", 730 | " x = data[a].values\n", 731 | " y = data[b].values\n", 732 | " mean_x, mean_y = mean(x), mean(y)\n", 733 | " b1 = covariance(x, mean_x, y, mean_y) / variance(x, mean_x)\n", 734 | " b0 = mean_y - b1 * mean_x\n", 735 | " return [b0, b1]" 736 | ], 737 | "execution_count": null, 738 | "outputs": [] 739 | }, 740 | { 741 | "cell_type": "markdown", 742 | "metadata": { 743 | "id": "mBtrxLZXnquF" 744 | }, 745 | "source": [ 746 | "EVALUATE" 747 | ] 748 | }, 749 | { 750 | "cell_type": "code", 751 | "metadata": { 752 | "colab": { 753 | "base_uri": "https://localhost:8080/" 754 | }, 755 | "id": "lhy3mlKBMcLL", 756 | "outputId": "402510fe-d784-4122-94d8-e6effc0d53d2" 757 | }, 758 | "source": [ 759 | "coefficients(df)" 760 | ], 761 | "execution_count": null, 762 | "outputs": [ 763 | { 764 | "output_type": "execute_result", 765 | "data": { 766 | "text/plain": [ 767 | "[12.584627964022893, 4.58789860997547]" 768 | ] 769 | }, 770 | "metadata": { 771 | "tags": [] 772 | }, 773 | "execution_count": 36 774 | } 775 | ] 776 | }, 777 | { 778 | "cell_type": "code", 779 | "metadata": { 780 | "id": "8KySihYZX-mb" 781 | }, 782 | "source": [ 783 | "" 784 | ], 785 | "execution_count": null, 786 | "outputs": [] 787 | }, 788 | { 789 | "cell_type": "code", 790 | "metadata": { 791 | "id": "hLz29pSlMcSc" 792 | }, 793 | "source": [ 794 | "predictions = []\n", 795 | "b0, b1 = coefficients(df)\n", 796 | "for i,row in df.iterrows():\n", 797 | " ynew = b0 + b1 * row['Hours ']\n", 798 | " predictions.append(ynew)" 799 | ], 800 | "execution_count": null, 801 | "outputs": [] 802 | }, 803 | { 804 | "cell_type": "code", 805 | "metadata": { 806 | "colab": { 807 | "base_uri": "https://localhost:8080/" 808 | }, 809 | "id": "Lw1_IqBzMcaC", 810 | "outputId": "61f3f259-fb9c-472c-c0f1-a3c2106db4ac" 811 | }, 812 | "source": [ 813 | "predictions" 814 | ], 815 | "execution_count": null, 816 | "outputs": [ 817 | { 818 | "output_type": "execute_result", 819 | "data": { 820 | "text/plain": [ 821 | "[58.46361406377759,\n", 822 | " 53.87571545380212,\n", 823 | " 21.760425183973833,\n", 824 | " 81.40310711365495,\n", 825 | " 58.46361406377759,\n", 826 | " 85.99100572363042,\n", 827 | " 63.05151267375307,\n", 828 | " 85.99100572363042]" 829 | ] 830 | }, 831 | "metadata": { 832 | "tags": [] 833 | }, 834 | "execution_count": 39 835 | } 836 | ] 837 | }, 838 | { 839 | "cell_type": "code", 840 | "metadata": { 841 | "id": "VHjShZhTMvU8" 842 | }, 843 | "source": [ 844 | "" 845 | ], 846 | "execution_count": null, 847 | "outputs": [] 848 | }, 849 | { 850 | "cell_type": "markdown", 851 | "metadata": { 852 | "id": "WGs9Yf8Vdft9" 853 | }, 854 | "source": [ 855 | "ANALYZE" 856 | ] 857 | }, 858 | { 859 | "cell_type": "code", 860 | "metadata": { 861 | "colab": { 862 | "base_uri": "https://localhost:8080/", 863 | "height": 265 864 | }, 865 | "id": "d1wRkugnMvb5", 866 | "outputId": "a9d2b05c-c838-4b3c-b528-57195eb42557" 867 | }, 868 | "source": [ 869 | "regression_line = [(b0 + b1*x) for x in x]\n", 870 | "plt.scatter(x, df['Risk'], c='b', label='actual')\n", 871 | "plt.plot(x, regression_line, c='r', label='prediction')\n", 872 | "plt.legend(loc='upper left')\n", 873 | "plt.show()" 874 | ], 875 | "execution_count": null, 876 | "outputs": [ 877 | { 878 | "output_type": "display_data", 879 | "data": { 880 | "image/png": "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\n", 881 | "text/plain": [ 882 | "
    " 883 | ] 884 | }, 885 | "metadata": { 886 | "tags": [], 887 | "needs_background": "light" 888 | } 889 | } 890 | ] 891 | }, 892 | { 893 | "cell_type": "code", 894 | "metadata": { 895 | "id": "l4vu867dMvjn" 896 | }, 897 | "source": [ 898 | "from math import sqrt\n", 899 | "\n", 900 | "def rmse(actual, predicted):\n", 901 | " sum_err = 0.0\n", 902 | " for i in range(len(actual)):\n", 903 | " pred_err = predicted[i] - actual[i]\n", 904 | " sum_err += pred_err**2\n", 905 | " mean_err = sum_err / float(len(actual))\n", 906 | " return sqrt(mean_err)" 907 | ], 908 | "execution_count": null, 909 | "outputs": [] 910 | }, 911 | { 912 | "cell_type": "code", 913 | "metadata": { 914 | "colab": { 915 | "base_uri": "https://localhost:8080/" 916 | }, 917 | "id": "xx2qGxnrNBCn", 918 | "outputId": "77f71c1b-ddc6-472a-d922-ca745ae3a4db" 919 | }, 920 | "source": [ 921 | "rmse(y, predictions)" 922 | ], 923 | "execution_count": null, 924 | "outputs": [ 925 | { 926 | "output_type": "execute_result", 927 | "data": { 928 | "text/plain": [ 929 | "22.759716640449565" 930 | ] 931 | }, 932 | "metadata": { 933 | "tags": [] 934 | }, 935 | "execution_count": 40 936 | } 937 | ] 938 | }, 939 | { 940 | "cell_type": "code", 941 | "metadata": { 942 | "id": "_RgvwfKBNBJU" 943 | }, 944 | "source": [ 945 | "" 946 | ], 947 | "execution_count": null, 948 | "outputs": [] 949 | }, 950 | { 951 | "cell_type": "code", 952 | "metadata": { 953 | "id": "AvZ0xZDMNBQK" 954 | }, 955 | "source": [ 956 | "" 957 | ], 958 | "execution_count": null, 959 | "outputs": [] 960 | } 961 | ] 962 | } -------------------------------------------------------------------------------- /MLA3/BE_LP3_Q2_41239_MLA3_O.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "kernelspec": { 6 | "display_name": "Python 3", 7 | "language": "python", 8 | "name": "python3" 9 | }, 10 | "language_info": { 11 | "codemirror_mode": { 12 | "name": "ipython", 13 | "version": 3 14 | }, 15 | "file_extension": ".py", 16 | "mimetype": "text/x-python", 17 | "name": "python", 18 | "nbconvert_exporter": "python", 19 | "pygments_lexer": "ipython3", 20 | "version": "3.7.0" 21 | }, 22 | "colab": { 23 | "name": "BE_LP3_Q2_41239_MLA3_O.ipynb", 24 | "provenance": [], 25 | "collapsed_sections": [] 26 | } 27 | }, 28 | "cells": [ 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "id": "yiwo2XzRZcVb" 33 | }, 34 | "source": [ 35 | "# **Problem Statement :**\n", 36 | "\n", 37 | "In the following diagram let blue circles indicate positive examples and orange squares indicate negative examples. We want to use k-NN algorithm for classifying the points. If k=3, find the class of the point (6,6). Extend the same example for Distance-Weighted k-NN and Locally weighted Averaging\n", 38 | "\n", 39 | "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANkAAADkCAYAAAAVWoEFAAAgAElEQVR4Ae2dCZycRZn/BwhsgBUVUcCbFRDFa5Vd0eWvoKCrIOAHVwUPFFZERVFEFFmFdXGVlUMQQUXukJCEGwkQSEjmzOTgSkIC5J77Prpn+nr7/f0/3+p5Zjqd6Ul3pntmZKo+n7frPaqrnnrq+dVTVW+9z1OhIsPatWt17bXX6sQTT1RFRYX23HNPffzjH9djjz2mMAzdQZYdHR365S9/qTe/+c06+uijdfHFF2vz5s1KJBJFluiTew78fXOgoljyU6mU+0tXV5c+/OEPO6CddtppikajSqfTCoJAsVjMpVm0aJF41tbW5q57e3u3A2KxZfv0ngN/jxwoGmRUMh6PC7Dde++9+sd//EftvffeuuGGG1z9uc/R2Nio008/XTfffLO739fX5wDIM6/N/h5FxdO8qxwoCmQMBw0kaCyuv/WtbzltdtBBB4mhpIVLL71U3//+9x2wSNff36/BwUGn5TzIjEs+ng4cKApkMASAABYDyrp169y8i/nZySefrGQyqZqaGjdn4xkhEom4+wCNoSTDSh88B6YLB4oCGRoJEHEAMq4J11xzjXbffXc3bLzyyit11lln6S9/+Yt7xlyNtN3d3Q5gAwMDTrtNFwb7enoOFA0ytBCgsUUOYoDz2c9+1g0bX/WqV+ncc8918zbYy/yNADAZavrgOTDdOFAUyJiH2VwMLca5AWf27Nnab7/99PrXv15PPPGE46MBbLox1dfXcyCbA0WBzICFVmIYCMgsLFu2TK95zWt0wAEHaNWqVXbbx54D054DRYEMbtnwEC3FOWAjPP30006TscrIOQEw+uA5MN05UBTI0GQAyw6AZkBavXq1DjzwQDEnW7FiheMr6XzwHJjuHCgKZDALUAEeAMZyPDs/HnroIV1++eVu4YOlfLZdLVmyZBiA053Jvv7TmwNFg4yVRRY7bPl+69atuuiii3TmmWe6F9O8nP7a176mn/70p2KXhw+eA9OdA0WDbLozzNffc6BYDniQFcsxn95zoEgOeJAVyTCf3HOgWA54kBXLMZ/ec6BIDniQFckwn9xzoFgOFA0yVhVtZTH7PVj2/WKJ8Ok9B17JHCgaZLwn42AZn43BgIvtVQAue2nfgPhKZp6vm+dAIRwoCmQGJMDEN2UEA112YaTj8EDL5oo/n64cKBpkaC00GCBiVwcvotn1QbBd+TzzwXPAcyDDgaJAxl/QYrb7/vzzz3dbqTCYQ2A3iBnUsWFkphj/6zkwfTlQNMjQYgCNL50/85nPOJBdcskljoMAi+EjMdqMcx88B6Y7B4oGmZl7q62t1b777utAdsIJJzhDOTYHQ9MZ0KY7g339PQeKAhnAsaHijTfe6ACGcVO+hl66dKnjJs8ZNnL44DngOSAVBTIAZCA69dRTHcgwoMPnLdddd93wMj7DRA8yL16eAxkOFAUym29t3LhRfAENuPbYYw8Xn3LKKW7ICAiZs3HY8NEz23NgOnOgKJAZaP70pz85YAEyrAcTH3zwwXruueccLw1kfil/OouWr7txoCiQ8SeGgT/84Q/1ute9Tvvss49mzpzpzlkEeeCBB1y+tujhQWZs9vF05kBRILNl+eeff15PPvmkfvazn+nQQw/Vgw8+6Ly64MmFISVDRtIS++A5MN05UBTIAE22LcV58+bpXe96l7P1YYxku5W9H7PhpT3zsefAdORAUSAzBhl47rjjDh122GHD26rsuY89BzwHRjhQNMgAmAfZCAP9mefAzjjgQbYzDvnnngPj5IAH2TgZ6P/uObAzDniQ7YxD/rnnwDg5MAyy7OV2W4K3uZfNw1g1zH73dfvtt+uQQw5xO/LHSYf/u+dAyTiAjGbLacky3sWMKgAQoGKXhgWW6W3Xht0jBmR4y7Ql+jlz5ujYY4/Vli1b1N7eLt6TTdSBs/eWlhZXnpXNvYkon/JaW1tdWXywykG5RsdE0EAZ0MDR2dkp6s7nR1yXmw/kb+Vu27ZtuDyrP/c4t3Tl5Ie1BTwwv+TIp8lotvxO1nkFiAdovN/CxxiuaLln78PWr1+vm266Sb/97W+dSyTum+kBHLOz+2PlypXi0xf+O1FHdXW16urq9NRTT+nxxx9357hvgg6elZOOqqoqVVZWujIpj49W+Up8MnhQX1/vaHn00Udd+dBQbjrgL/WnHPhPjE86owFewH/jU7nbgi9AKIP2B/xTLVTQy/z5z3/Weeedp7e97W267777HOjQZDTgSSed5LZLcf+0005zzLVK8J7sE5/4hLCHzxfRvb29E3r09PTohRdecOBHm1A+MffLSQsag4NyGhsbtXz5cm3atGlSeEDvvXnzZtfRoUEmov7UG80Bj+EDoxv8gz/zzDPDfOEZaXhezrag/vgkR2viTQheTKWhIlipQCuhcu+//363o/6ee+4xDOnb3/62/vVf/3X4Gpe155xzzvD1nXfeqXe+852OycM3J/hkw4YNYptX9vxxIkmggdHkzc3NE1nsdmXRfs8++6wT6O0eTOAFX2bQDtkCbm0yEWSwp5YN6nT4Uy1UICQEBOXVr36124doRJ544onOFzTMQrPhreWYY45x8w/SzJo1S0ccccSwiobBE3VYA7744ouuB4U+7pW7fOavtjAED+ik4F1DQ4NjW7nLz82fQpmb0oujxQgTzQfKQ5Oh0ZkLcZ3Np1yaS3lNu1MWX+yjSRlRWP6OGVPgx83JYAzjbHbWmyYDfB/5yEf0pS99yTGNyvzoRz/SO97xDiHYBOZw7F1EVU9GgJnQQi8Oow1o5abFhJhysHnCsNpAVu6yc/OHFgMZwzgCfClnIH/KzebDSy+95ITcBJxnE0GL1ROQ4eHVQGbl2/PJjB3IIABB4XMVVgwJjKOPOuoo8TGmBeZtgIwhGoE5GcNF5nWTEWAkIGOYYNplIphLGVYeC0FMupuamiaDBU7Q0WAsPjA3IpSbBwYkAxtlAjKEnLLtsHTlpof86WDR5lNyuIiQwAxWEffbbz/nNROmcY/h4r/8y7+4huOH4SLaDQASbrnlFjdcnCyQQcPLL7+83Vyg3A3qKj5kYxKgMQpAwCdzToYGgwbz3200lis28BBboB3MVzj3aAdLV+42IX/aYsqCzN4noA3w98y3YRYuvvhiHX744U6QYBgLH3jSNOaiyd773vdOmiaDTg8yuVVOD7IpDDLmXnzR/I1vfEP777+/Tj/9dF1xxRUOSAwLzz77bGckB+tUJ598spvcGggBWfbCh92fyNiDzINsymsyVscYx/Iij/nN2rVrtXr1aje+Z5zLeyBeOHLfxrvcJ7CEz/dkk7XwAQ0eZB5kUx5kNvQz7cPYlncOgI+YCmSnYQ5nY/+77rrLaTJeOE5W8CDzIJvyIDNQARJARYBotBXgMqAxdyMt902T2eqiB5lf+KCz8wsfo6ua4V34oz/e8S4A5CAAssk2P+A1mddkU16T7Qijse94kGX4g1bn8Ev4GX54TZYfN16T5efNmE88yLb/ZsuDLL+4eJDl582YTzzIPMjGFJCshx5kWcwo5tSDzIOsUHnxICuUUznpPMg8yHJEIu+lB1le1oz9wIPMg2xsCRl56kE2wouizjzIPMgKFRgPskI5lZPOg8yDLEck8l56kOVlzdgPPMg8yMaWkJGnHmQjvCjqzIPMg6xQgfEgK5RTOek8yDzIckQi76UHWV7WjP3Ag8yDbGwJGXnqQTbCi6LOPMg8yAoVGA+yQjmVk86DzIMsRyTyXnqQ5WXN2A88yDzIxpaQkaceZCO8KOrMg8yDrFCBGRfIcJ3kP9pMOruL3iTcy864qQke3x3yZT2HfeRrz0odT/mPNs2UgDGC2MzE2TNjCnY/LB33MISKtarJND9gxk3NDkk2fUZ3qWPTYpQJjzDTjRXfyQrwHwvQOF+YiACPDUBWHma6MZBr/Lc0dm3pSh1bOZjJoB0w9mSyUOqydjW/CgCFiWMEB4GBQMCEW6Tf/OY3+r//+z/nmoieGpPUBKvE3Xff7cx0mw12E76JiI0GjLJipttoJy5n+TRqdhnwDuHCowqhnGXn5m10ADLs0GPeD76YPZbc9KW8trJdpSVnCx8+WLsQW5pSlpubF+XQJtQZW/hYVzMajLbJjp0TQMCTTTxWqH7/+9+7nhFTcF/96le3M3oK8wiYhDv00EOdVxiuqexEHtCMJluzZo2j3xhebhpoUMri4BwBN1v45S47O3+rLyCjF0eTGV3Z6cpxnluOfRltNOU+LwcN5GlyS2e3atUqp8lMPicbXFZ+BQRZz4e5N4g+88wznSFTM8d9xhln6LbbbnP/oWJm1Qoz3djGNwGzTCcqhm4aF6DRqBMV4JEJk4FssmzhU2f8gGE3ExdKE8kHyjbwYAgXK9TIk9HAs4kKlEn5yCJtMpFl76yODmQQBJHmRgkrVBUVFfroRz+qCy+8UBdddNGw0zfSUQkCmuy4445zQyWGjDT2RB704Ggx/GJRPkJWbjqw+483R2LqSnkIOA4XoGci6w8NHAgWduCJuYYP5aTDeE0Z1Blb/AzbMQlnPCDG6G0528PooD04aAeGi1MJYODEDRchisPAQ2OdcMIJ2m233RzYMNWN9uKgF7dKzJ07V1//+tedt0vG41RyIg8adeHChc6NKkKGi9Vyl4/NeSsHd7rQ8Nhjjzkry9BQ7vKz86d8DrzKmCtZ2sFcu2anLeU5w2P4QEydGaZhZXrBggWOH5TF8BU6yi0X5G804NYY/+XI6FQKFQYc1DzgYX72i1/8QldeeaUTpk996lOaMWOGrrrqKkd3NsjQeICRXhy3PfRoE3nQk+HOFrPinNOb0buWkwZzzUpPzYoiB4KOp0nmROUsO1/edIoIGzF8MO2SL30p7qMxKcsOhuzm7ZNn0IBGpaxy0kPetDlak3ZAk5ksTxWgVTAPA2g2lqahjj76aGf7HiIxyc2cDIcUrDoSTJMBMuZkVHSyAnMBQDbRAR5w0OnQq0/mEj7AhwZrn4nmBeXRDtkWhCeaBtoCjWb+Gia6/LHKcy+jWZkBaASE5dRTT3V+ygAYQnTZZZfp6quvHh5OZoPMv4z2/smQG1tdNGFDRpi/c5i82LNSx+SPnE5pkBkzbOg4f/58feUrX9G1116rSy65RL/73e/cWNeYY0zzZrq9BWGTCQ8y48SOsXNna2NYeylNMuZm+N/lJSsLIqThOcGDbOSlM7xhqOa3VXmHEzvCK3OnAjVr26UAD2BCcNBqpuG4x8IGsQdZhnHwjcODLMMPr8kyfBjt12kyhMXGziY8thhiWgyQ8YzgNZnXZNYBm1B5kBkndozH3IVvYOJvBkLu2X0/J/OazETKg8w4sWM8Jsh2TD6yjYZnHmQeZCYjHmTGiR1jD7IdeVLQHRtW+zlZhl0eZPnFxoMsP2/GfOJB5r+MHlNAsh56kGUxo5hTDzIPskLlxYOsUE7lpPMg8yDLEYm8lx5keVkz9gMPMg+ysSVk5KkH2QgvijrzIPMgK1RgPMgK5VROOg8yD7Ickch76UGWlzVjP/Ag8yAbW0JGnnqQjfCiqDMPMg+yQgXGg6xQTuWk8yDzIMsRibyXHmR5WTP2Aw8yD7KxJWTkqQfZCC+KOgNkbJpmWxUGY/z3ZP57snwC5EGWjzM7ue9B5jXZTkRk+LEH2TArijvxIPMgK1RiPMgK5VROOg8yD7Ickch76UGWlzVjP8gLMixTDx1Yqc4cO/oIGDv34p5i2xA7I1gXm4hgX0UTW/CfuhgndowdyOxLZx5nf/m8Y/Ltn7/SP9ocseTOGfZN7EgrCDI235OJpGqr69Xc1OrYlVZKaSXdEQqb7Fhcptc3wGXi0Xi7q/c8yKa4STh6ZOx5cLBSlm2xarRGzwbhKxlkWDPB4n8GaIEUDkphv8KwV0GqX+lkTGEgJfpTql+6Wq3NnUor1EAYUTTdpVjYrWTYq3QYU5BKKkiEClNy/wkA3GjM3cV7HmRTHGRYEOYAXDicAHTZmi233acLyBgIAbQ0aHDoiEkhxl77lEzBp5TSgTTQH2h57Tq1NPeI/8TCuCLpPg2GvUqqX0EYUxoT6IkwowjT2EvxIMuVq/FcI5PI7ZQ1bor2yjXvbCbiRqv4dAEZMGCYJw7QlE45dARhoEBpJRQqrkCRWEzL6leqYVuLQw6YTIQpJZRUiqFjOqkwicpLS06FpRWmA3Ifjb27dM9rsr8DkJk2w1g/tsRzQZfd8tMHZAwRExmAOZWWwRunzMwGggGnrQaDVlXX3q+GzWszKiqZcsPDRCpQIpVWkEwrHQ+keEoKGC/iQDCu0OnJbM7u+rkH2d8ByHAyceONNzpvLj/+8Y+d3fvslaPs5p8+IAMQsSENlhk7MgdLJgMF6YQCdSgdrFeQqNNz9deoY/PfpIENUmSblIoonQoUxOWOMBYOgywMEwo8yLJFatznU364iFXgc889V1/+8ped66EbbrhB73vf+4atBedyYDqBLBRmydFdmQULpmaAR2Gvoh3Vemn5b7Wx5nytefQL2rb422pc+kv1vDBL4cCLUjAgxdMOp6yZKBY4TcaKY1Jxt+qYy9tdvfaabIprMjwkzpw5U/fdd58DFo7d2IsHmFgMITZrwk7Ysoybzpo1S3h1oZEnK+AbrRyuk0K3CJ/KLH5Y5VjZSEal9Gb1bLxDdXd+Si/Mfq8a5x+irfccptVzPqSmyvOk6FIp3ZHBJ0uUOMzJWDh3OTGnK2XARxiO98z9cCnzzpcXIx0z204a2gFngBZyn9v9UsfIpwUcs+PCiXWGqRQq8OCy9957O/dIf/3rX/Xzn//c+d6FeFtphJkQDuM4zPEEfqRxZ7t582a3Msnq5EQemA7HCSAubTlH2BC0UtDQE+1Te7RX7dGIOiMD6u0bUKQ3osHebYp1Vqnrud9o49yPqPPuNyl61wz1zJ+hzfMPUOvSU5RqnaXBjqcV7elWtGdA0e6oor0RRSN96ov2qycaUV8JeGVOB9mcTOdITN25Xwoe5MsDXsNnc+7HS3A6a0DGf+h07SAtR768xnvf8qc8vHuyrmByO1WAVnHrrbc6t7XMyQDSd77zHR155JHDztTQYgTrmQCf9WBz5szRD37wA7fboLq6WlVVVRN60HvjzpYDIcOlKjsfSkHL0toqPbmsSk/U1erJmnotrl6u6qoqrah6UGsWXaMND5+lxrlHKZj/RqXvqlDygT3U/tBrtG3hx9W44ldaufg2VS9eqJrKOtVV1qqucqlqqpeosqZKT9XWqXKc/KKOS5Ys0dKlS12d77///mE3tuVuB0Y6LJfj3RMaiBctWqRHHnlkuB3wekka4nLTs3jxYlf+ww8/rKampp1uqJho8DlNhhN2GEe45pprdNBBBzk/yFyz8kjPYL0DsWkyhouf+9znJsUpOVoLN6ZoMbze40IVB4alckre3t2u5p42NXV1qqGrR41dPWrt6lBnx3r1ti5S5+ortG3esRqce6hit+6j3jv/QVvnHqSGJz+vaMMcdbU+p/b2VnV0dqmrs1VdHVvV1dmo9q42tXR2q71zfE7cqT91xYUvIwk6FxawuAcf4E25DuMxPEd7Eq9bt8552sy+R/mWtly0mBxQZ8AOP5BRlMJUCRUIKXMyGokAcA488EA98cQT7trmZDbO5drO0WTvfve73XBgsirEGHzt2rVlKD419CYsUFySW7tAo4v9gQ3q2HiLav98nJruOkoDc96lzlnv0Ma7jlLzkgukgafpntxUjPdp0oAkXP72u8lZqZsfAWaoxDCRQBtNdMCX3fPPPz/RxbpRFfLIwZyMV1CAbCqFChrmpJNO0oUXXuiE9bzzztMxxxwz7APZhocMETmnh7BKALIjjjhiGGQ8n8gDRjInw1exDWGhryQ0pGNSqk9BMKhYGKo/lNjTEVFUgZrV1fCQVj/6I7U8dqZa7j5ezfM+qy0PnK2W2j8q6NusWCqpSChFwoTiYafSYZOUblcYDCoI4GPpeGUgQ2vQNiWp/xhtCd/ht/GcaxyzMycz2SC2zric9FCOTWVwDA/ImOJQ5lQJboMw2uBXv/qVrrvuOrfwwfDDglXC1C/XNk9j4YPVRYYIBNJM1GFMtNVF6OJeqcoP00kpiCkdJBWEoeKhFA1DDSiulHqVTm5RGH9OYd8SNVZeqciGeVLkWal/o8J0XPFUWgMh26ySSob9Soc9mb2P6ZgDGCArBa3UmY6SjobJP3mWuy0oE35zWNi4cePwgpmVX+o2GY1fJgcAHk3GwofdM9omO67IJsjAMxZR2elfyRuER+cBC/usxbPSOqAwHFQq6NXyuoVqadrgBpNuB/BQL5rpS/nNPUbPfVfvAi7m1LggnoiQLexWnv/UxTixY+zc2drt3N7J7mfHgMyANv1Axj77zOcuKbRcOqFkalA1dZVqam7KZtOEngMy/z3ZFN4gjPaiZwI4xKjd7GFArrRMe5CxYViBUkF8CGQDqq2rVHNzQy6rhjujHR6U+IYH2RTf8WHaKzs2TTWaLExvkLFyxzyEzojOiZf0MdXWVqvZazI3LzSZsU7bOnC7X46YspDfKfupC5W2MfZY4DLmeJBl5leZL6NZQUu4oZo3CedNwhlGcmM3J6MXAGiEbBDlJs59Pv3mZCPvoIxnLFPX1i5Tc3PLaOyakHt+uPh3oMmKkYRsEE5HkBmvMsPrjHFTDzLJry6aZOwYe2tVO/KkoDseZN4kXEGCIsmDrFBO5aTzIPMgyxGJvJceZHlZM/aDDMgyW4d4R+UXPvzCRz6J8SDLx5kx7zPR5n0iS/isLnqHE35Oll9gPMjy8ybPE5bw2SSddEcyGVdtbZV/T/ay12R5BMbPyfIxZuz7XpPZu1Xjk9dkxokdY6/JduRJQXf8nMwvfBQkKH51sVA27ZjOg8yDbEepGP2O12Sj82Wndz3IPMh2KiRDCTzICuVUTjoPMg+yHJHIe+lBlpc1Yz/wIPMgG1tCRp56kI3woqgzDzIPskIFxoOsUE7lpPMg8yDLEYm8lx5keVkz9gMPMg+ysSVk5KkH2QgvijrzIPMgK1RgPMgK5VROOg8yD7Ickch7ObVAlsegZl7qlflYEMu123/ZPfKFt31kSlzKkA2yutq6yd2F32vWqrxJOIybTrWwHchMUMci0oSWNDirOPTQQ513D67t2a7EwlqW8z+ZiRWEGj6c5cJQQYhVLYyY4mYWgzaBNr28TmufX+UMiuLFEv9fgTtwexRmfD5nkmbczeYBci7NmErcDpduXzA/ZMbm4EFXViIxqMrKxWpqalQat7eUiikHrDnYAd1Dfs7sVj4e59LBtaMlwBRfxoKjq1dWBr2dXaqvqlI0gilwrGjhV230TiWT31DlLG93WbhFYzoY27vo8stynZRNP2ksbfb9Up6b3GFlDVPl27Zty+LM1DitwEaFmYWDJGzj47jAmDcamfbspptu0uGHH+5cFpFuPMxL4w9NobM5n0I+kninTOOA2QkrAIulY0oOGRWVIpJ61bxxuTasrlSYaFWYaleQ7lFc/YoprhhWpZBq3FUlcUdbuCBBDzh3eHGY5iJQKtGnVLJL6bBX8XhE0cGIqmpr1drePmRcNKUgllB6EPPBQ5jEbzQO2odMo2K5EYfvBfMrHSoYDJVKDLnSxSc1nQxHEKh321Y9v/Rx9XW+KKlJsUTjdg7RHJaow3AHk+moHD+2u18YfwCO5cU5wfyTASwEPvs59+y6HDHlI8OY6carC+VPpVBh/qIhasuWLc7L5oMPPjgqjdZ72cO5c+fqPe95z7DdfLu/KzG4yoCMHe6ACz/LgcJEWkEK8cSsKL6We6WwQ0pskuLPqWfDfWpbO18aeFaKr1cYNitQzxDIJAfYjPLJaJYCiUsLB+xohbTzy+5kOh0qGY8oHUQdNdFoXIMxqaYmqobGjGuJIB1qIBpTOp5WOhZmnLKH0B3fHmTO8fuOQj0qeQAyhfAGSjin8GjsqBRvluJblGqqU9dz85TuXiKFKyRtzLjidRo/o1EBmoXMWIGyTVtnPbREY8QABb4YwEiKqXfMZFuw56QtZ7D8ARa2+JHhQixhl5Om3LyHrVVh4vmCCy4QbpTwdTVaMOZaxebNm+e8uuDwgGAg3NU4EaaVoAHpHRMpB7R0KhROzlN8w4X2CpuVHnheXetmq6X+v7V10ff18qM/UEv9b9Wx+jal+2noNqfHUCaJtOvs5VzRFmWrP6YAG/bphANZGhfSqYxgRiJJxeLSxo3SLX+N6MunrdAF56/UqlUpJdNSXxTz3YES8bhS8QHJ2b/HV3SoFEeYWTQolE8MkTELnkgOKBkCM3xZN6tv66PaVvs7NS7+sRoeO0ft1T9R8/JfKtr8qBRGhD1/hq50EKY5M2Wm3NA2c168TX7aH6E2hxK0PU4AsXtosgEAEXaTmULrWmw606qURfl4l8mmazQ5nuh7FVQKQnGgd+mll7rh31133TUmHdaDmcMJc9kz5p+Kfeh64dDNLIZmOsKvirRZqa6FenHBD7T2zqO1de4H9fKsD2vNHcfrpYe/q2TnQkmtCpVwrosYKfL/4vtT/sl4j3jk32A/OpBWd5/0s5+t0+v3f1B7Vjyp3Stm6RPHPqInF3e4qVginVIKv9HO8RIItWw4IU/GsYUGZmH9SrnBNP8bkJIvqm3VlXrmzmP10h1HaMusw7Tlrg9o/W0fVfdz10vOxRPDJtRVbjk73MhNsNNrA4MlZLiI0wvuEwyI9rzcMaBHkzInm3LDRSqPx8p7773XOS045JBDNHv27Lw8gXkGsltuuUUf+9jHnLsaXJri4rSQA1COdvT3RBTtiWigFzewHerp61Znf1Sd0UF1RfoU6duoVH+d4ptu0aYHTlPLXW9S/L43qG/uW9Vw55HafM+pGtx0h4K+dYr0dqqjb1Bt/YPqiParK9Ktnr7C6HN16OtVf1+P+vu71N/frr7+NvVGOtTZP6BITHr40R4deNCdqqhYrIsk/RwAACAASURBVFfv3au9Kl5URcVtOutbi9U7KHVGo2rp3Kb+SIf6envV3xNTH0dfj/oizert6yiIVxlaOtUdbVDvYIci0V4NdDcr7KpTe/UF2jr3CPXO30+xe/bVwN0HqePWIzRQ/2vFIw3q7+9UpL9b/b096u/tc3T09nbLHX09jh89vbim7SucliF3wdBFG1p74zqJORE2IHFzi5tZznFXa2nKEUMDZZn7KJwBmnbLK8QT/KAC4v7whz8490f4+nrjG9/oADcaHQDM1D/PGS6ef/75zoIuQMV1aSEHhmdGO+qr67WyeplW1lSrvnapauqqtLR+uRbVr1D1imVaVf83vVx7o7Ytvkhb7j1e0bmvUWrObhqcs7f65r1Dm+76uBqf/Lk21s7T8poqLV32rJ5a/rSeWlGryhWVqltWUxB9rg41K1VXs0osz9fVLVLt8gWqWfGYnqqrUc2qbv38snXaY8ZfNHOvNZo5I6q99xhQRcUSHfuJhXr4yVZVP/O8Ftc+oeplT2lZ3XItq35ey2qe07K6GtUtW6i6ZUsLpqVmWaWqVjyuulXVqqtdpqcrF6t15d3a+MCX1Hr3wYrfU6HU7AqlZs1U5Ka3q/2h7+vZugWqX1ap+roq1dVWq66mVnW1taqD/mUctapdVqfaunrV1RXedtnti2dLXNVajEtbVvhwscs90hYjF9l5F3qONxtc+5Iex5WADBmdSqHi5ptvdsNECL3qqqt0wAEH6OKLLxb+piCW8W32EADirRIMK48++minyei9cEI3nqOrtUs9rR3qbmlRV3uT2jqa1dDRqS0dXWrp7lRP5zpF25/QwIY/aNu9x6v3rv2UmjtD0dn7qO2ON2vz7OPUu/YGRVtXqbu9VU0d/drW1attPa1q6m5Qe0db4fS19qm9uV8dbd3q6GhQW/d6tXavU0Nno1p7E5p9f6fe+FY02SOasccWvXrfXlVULNJZ56zUi9sG1dDTrcbOTWrvalB7W6famiJqb4moo71V7e0b1N7RVDgtnS1q6dmqlq42dbb1qa+1U7Hm5epc9D21zXmb4vN3d51NMGt/Ddz0Lg0suUw97evV1dGkzvYmtbe1qL21TR1t1L9VbR0cbWrraFdbO25xOwqnpb1dbS6fkbam7RkqVlZWupVmZACfdeORhUL/Szm4tOUAcKyMT7VQwTiW4SG9z/XXX699991XV1999TCxgIwxrgErG2S33367GF7C5JIEOiAOVhncvCXlfm0l3M3J0qsVtt6tzQ9/QVtvPVg9d+2vjllv1ubbjtSGuZ9XbNt8tyjA0hkzH1zRJtxKYcbBfMF0QsfwZC4zD2JlM6kB9/7tpaa0vvT1pdp9xvWqqHhYe8x4Qm9/+xOa/1CvmznFlVRKuJeNuSU8Fl4y+THPxCVuMcvMvGVLuAWTkEpRlchm9dT+rzbP+pA6Zh+onjv2V3TWu9V+0zHqq/39kOtcErPUnz0voy7j6+mzZcH4mWvjg/ujpbP0pY5RBCx8TMn3ZKalYBILH7vttptwaYvap3dg1YYDoNlqkTEv10w398d30Py8j0pJ6biLWRWLhSaSESm9UWHPU+pa8Wu1P/4fanngeLU8eJI6F56t1qWXKtG+RFInr6EdwABZ5rU076qKe1/jZNGA7ygDOhH1JfoUDaXaZwd03oXP6Mh/fkAnnbJcN9/WpbZeqTMW0WC6W4PJViVTPZl6pFg15V1dWukwpjAceZe0c57xXiqlNKuSsAbsDLQqsnqO2hd+V90LTlHrPcdr4PFvqm/BBYquuXdo4QM0srQ4hCvXPkMv9N0LhczL+sxSfuFth8zYYWDJBRnPmRsR77x+hZc9Wl6Ug3wuX758aoIM4EAkS58LFizQ/Pnz3diW+RkTSmMUMWkJVJRgILMlfNKM50iGaXxYuqVnJWNSMqEwYNmbd9LEAwqDNim1SWFXjdTxoHqf/r06V1ynsG2B0p3VUnKz0ryMDlMaYI2RVwJ0/24pPuN7rSAa0+wcYak7zCyBp3gVgLDHNJDo1GA643i9tUea/1BUy1YFiqXoENLqT3QrQOsl+5RK9CtMxRUkUwpSoVJBWskgNmRSrjB+pYOU29ESsGIJbGB/qk/pzucUtj+p4MVb1VNzhdKb5kntT0mRlxSmo0NL+IGjn8VaE3xnzi6dUpCm/Mx7yYJ4MtS+CLQd5EnIXsLnHs9tFMR5MfkXk9ZAzH9QDFNyuAgjeEcGIywMDg66lSMqYIwyYJHGzg1kaLzxBuSGPRExBBtQpOJSIi6lGLOxAYQdH0nFU1GFYb+ED+Z0p7atWapNzy6WgnYp6FQqYMfHoCJKio1PvJMSdSOfIibEvDwORFlDQooGAWjJmNNOA8lu9Q70ayAlLX+2WZsau90L6mTY45bbkzGW2VHBbA9DayWUDoEtm75415WpV0F8g4ZkREEQdS8mEq4rSkhBhgex5ue0pf5hDXauUah2hbzqCOOZHSHuBVluKUOqbVhL5z4f+xq5MCCYLOxMk42d4/ieQsOUBhnaKRaLOS3F7g+ubRcIzASAxNZzwQ5jbC7IuL+rB9uYomFSiJGbiQUJKRaT4gmlUynFgpR7azXIXMvtc5RiSemZ5zfo2WfXK5kMFE8mNBgkFAlxnZ7QoHuFzUvtpNs9whvZQuljsBmoT+kwrnSQdi+zmQulEykFiQEFQUTpcEAD8X5VL6/Shq1rlVaXEskmJeK9SkYDhfaazKkegJV0AEu63R8jW5N2RpMrPNGnwHUgfYqoX4N0R+mU0smUuhvb9PSy5erobNOgBtUf9DnAs5fSaWKmZG771FDbZbavZN5QZ93fGR323ABGzD2Cbasy+TCZIQ3n9t9Sx67woY0Q7PiYkpoMUHEYI9BcdlAB7hOMscYk7hnIbLhoz3YlBmTxECDR16MyUlIyc7ADJMm4e2i5wO0pDOV2V7zwYqOeW7PBKSt2Y6EfnEYMM9uE0R4hWizJxt0iQBYmFbDfkGGmm4Nkdnwwv0kH8GjQza0GYz2qqlusxpaX3UviRLJbyUQss97Afkk3LaLcjIZOhUlxOLoK7pQoNO6GqoHbMDboNBp8QMZ7uiJaUf+MevsH3JrIIDS7XSXs5qBsA5nVH6FnWB4Ogc/uFxabLEwFkJmsQcuU3SDsEFTEj1UqG2SlGC6Sn+WdG49F3ssvb9COn7qMLixj5TPas1w67Jq0NCrgSyWTqqnBnW3zUBaZnt3S5otHK29X7/X29am2plYDUf+py5T/1KWQRjahIa1pslKBrJDyc9MwF8gFWW6aclwbyND6vJ8ZAVk5Shs7T3ZS8HKfXTcTETKa3X+0WSivt/uerJA/eZBluORB5kFWCF5I40FWKKdy0nmQeZDliETeSw+yvKwZ+4EHmQfZ2BIy8tSDbIQXRZ15kHmQFSowHmSFcion3VQCGZ+U+IWPwO1d9KuLOYJaiku/uij33ZYHmQdZKfA0ah4eZB5krHgzsmAXvtdko8JkfDc9yDzIPMjGh6Gd/tuDzIPMg2ynMBlfgskDGatrmS/Ha2pq1dzcMr6KjOPffuHDDxfHIT47/+vEgIz9iEMfO7ovL/nkJfMRZiqRUl31CjU3GcjYUJ17ZKxu2Zclmd2NO69boSk8yDzICpWVXUo3qSDjM7U4IFul5sbWIfqzoTRyPnI23o//d2STB5kH2Y5SUcI7EwuyjCFQyE8NabJkIqXamlVqbjKQ5a9cNtDypyr+iQeZB1nxUlPEP8oHMiCx/bCPCTbzMEIylZazJp5MqaZ2pZqadw6yIqpVYNIMbHt6ulRbW61otD+L5gKz2IVkfhd+cUzzOz7y8isfyDJ/2B5kK9Q0KQsfHmS0hl9dzCvEpXkw4ZqMr5mdJgucbfuE02T1OwdZBg+ZT5mdhixF/T3I/i5AZgZ0sg3mcE7vMFrgvj17ZX+0Sf23Hy5yjd0MPt3H0hMmEwBZXX29GpuahnpUs2cxtMAxDC66XNftDuU7Gnd37V7vsBNA3ElZgbuWVyH/8sPFQrg0ksZ5dTGTXWZAx4A3kmzkbLqDDOtVGPAIAry0xDUQi6imrlLNzRnLtRnbjhl+uX7KZH445gTwjj848weplLMshllsrIylnIulEctj4y9lxxw8yHbkyVh3KgAUjQPAYB57wLg2bZX75+kOsoypHmwoYmRnUPFEr5YvX6rWFtyoYrEGDy6YgMpSKpwPh10FWbZWzWRmbdHfH9Hy5Ss1OBDLuHly1rGGCyz5iQdZcSytMJNwNBiAM8tV+bKxhuX5K3+4aEgZEfB0EJcCADYghVGlkt1auexJtTVvzNjSCuIKnZlfAJcFtGGGlg5klmV3d5+qKpepv28gA7LSKErLfofYg2wHlox5w60uMgcDXGgzGzoCptHC9AFZBiMZHhgwAqVTgwqDqHOyh0tdXNuuWvGE2toAGUNJbMBhC8487w0BbRhvLJwUiwLKzwxTtxtqchuTcN19WlaHJss4LMyyUztaE477ngdZcSx0TgAZz19++eX64he/6GL87uYL0x1kGRcWA0one6SgW0GiRU8vX6CWbaulJCa5I1JqkH1X2w0bh/Dg3PLinLe4wGJKyhkszTimH1qkHMoEu4tVlcuVws0nodjsh/IpNPIgK5RTmXQVa9eu1cc//nHnbxdHbsccc4w7cK5GyAYV58zZiAl4dXnnO9/pHLC5G5PwA83PPffcsBFWBMDoGx85SCqmvTMCPWLtGvPXnYp2rlDrurvVvvqPWvXgedpa+Sv1rr5N/ZsWKoxudcZInVN3N2okL7xEAJTMK4BiaKM+qRQWg/uUCjuVCnuUdG5ipA0vJ/XH6zfpu995QrfesVFbWzPOOVwLZZpplKIM8tnxKMny3DI5QBYs8CoF90kWaAeTldK0h+W8Y2z08D0ZPqPLXd6OFIx9pwKbgTj+g0DCJZdcopkzZw5fwyhjlg0rWRgh3Hrrrc79rQHS3Zzgn3Xr1jm7i8ZYi8dPBgKENso4eMCsPTBxrpC0Vd1bbtWqOZ/ShjlHqHXOQeqY/RZtuO19alz4Pal/ubMmnHGUQRYMIVlexwkUnUCR1EFDMqEgbFcq3KCEtjqL+hu2JnTqyc9qt4qFqqh4VLvvM1tnXvCMtuK7niLylgPos48i6eHfQyCyfwKybMfstMNYq9T2v1LFyCgg37x5s7OAXTo5GD+FFfgW49P1xsZGl9t//ud/6nWve92wCxrTDNlgw3Y+AU32nve8xzl7s+cTFdOA2OkHZGvWrHGGPXGdyryyNDQklQoSiqfw1hJoEFv7QaB4vE1B/3L1rL1C6+88St2zD1Jy9gyl5++j7vlvVc9TX1XYuUDxaIMG4gkN4lTeeXHBln1EqVQy42i+YA84KaUoeyDUwGCHYoktisTaFRkIdc01LZq5+0Ltt1er/mGvdu02Y4X2eu0czX9kMMODZKAgiVuhzDHCF7ysJLOOwr2uwHd4jAzQ2drKNCDDna3ds5h0Ns8fKb8wbzaFpGctATmgowdkOChEZqdScEv4RhBzsw984APCFzQBYu3FtIHNrnmOp81zzjnHgRRPnRN5oIEZJuJQfuHChU7zUj720Hk2Xlqqamq0pLZeT9Wu1OKaVXqqepWqqqu1ovZhNTx9h9orf6INt71fg7MPUnB7hQbuqtDWO1+ljQ98Uq1PX6PVKx7SylUrVFNbr+qaKtXVLFZdzVOqrqnR0pp6VVXXFUhjlWqq6lVf84JzrbtqVZXqlj2tqqpuffWLK7TfjFq9dq+I9t6jX3vuuUUz91mqs7+9UvX161VbXaua6mWqqalTTQ1xbVaZVaqurhw6OC+s/XBfi+tYnDtwwO/Vq1e7dsD1FufcQ+B5jjtb/lNo/sWmQ0Egt4zEHn/88WHH7FMJaBVm2hk1e8YZZ2ju3LnOL1m2bzJT/cT0LlaBWbNmucUSNElra6vThmjEiTwYothYnPkZnhZLUf6Wpha93NKmDc2d2tDYrc2NnWpqalDLppXq2fSA+lZeqsZZ/6rEnLcofdteGrx7hhruOUBNi09S3+ab1LSpUls2v6Rt25rU1Nik5oYtamrcom1NTdrS1KqGxuaC6WxoaNXWTR3ashHeNmjrllY1bA10yU/Wa8+KB7VPRYPesG9Ke++5QXv9w0P6zf9tUXv7gCu3qalFja6sZjU1ZZfZoMZGeMXBeeHthi875IX5DzELZWgxGxFxD1sbxLhFxtNKMfkXmpZyaW+jh/LRZFMtVKDO8cryxz/+UYsXL3b0PfDAA24IBqg4AJWpfK5Rz4TbbrtNhx12mPNuPxkVgy4YjNse6CplYBZFLTmYgSZYwHDvvzql4Hn1vvgHvXjHcWq7/d3qu/2N6ph7sDbe80611H5Tij8uiRVaFokYEgz5KBty4sfcrugBDQ5IceGE2yXnKkZ64vEuHXnoPZq52wLNqFikvfacpw9++G5t2JbhhbGE0ZOdj/CINI64sSZvI8l3coawM3SfrMAIiw4XQKM4kNepEioYX3/lK1/R61//en3yk5/U+9//fn3wgx90PQ9EAkLGvQQEmfR2DciOOOIIZ5JsMioEPXgEpRdFwxIAXikAR24Zf9OZBY9M7kh6rxRsUO+meVpz/7e05f4vqHH+J7X1oRO09qFTtKXuF1KchQ8cEsbd5zBOmN1qYMot4dP8GRgUzjW2ayWSvUoErUqk25QMmROldd99zfr0px/T2//pT/rC6Y+q5lmcIBaTP3Avlhr8Kma8bVoNGEUwTLR2IEbwJypADyMaNCcya6OtiSp/rHIqmNccddRRDliHHnqo3vGOd+ikk04aJjJXaLOv2fFx+OGHT+oSfrl24aeF69iEcInu+nvw5ZwPJhSG3UonXlRqoEbJ3ke0peoy9bz8ZwXRRUoPrpLCJqU1oGQYuH+7/Y5O++AIMKUkK3PmlW+s1hl+xrJ/TIG6lFKjkmpQUj0u71haemlrTA88ulUNnTgZzPhnK1pTDpe18xNkwA5LnbuET0dnaUrR6Vk5o8XkD6gB+ZQ0CYfbHQuszu0sUCFj2it5WxXL7qEiTrhD52I38/4JIcYXaCLsU6A2pYKNemb5HLU3LHPvz3Axi6O+hALnTxOoplnCd+5lyTOhZBongEMv4HbGcPec19eALKJAnQrUmvFJHeIYV+qIBKpauV597NoRDgIHhtuooOyLTGTgIbYwFUCGJpuSIGN+hXplGGhhrPHsdAEZg0Xnmzo9KDnH7jh4z2yaYo7Wl06pXwn1pvpVufwpNTRsdROfZCpULMy8EYOjqZCFoqTk9jTGFYRxxdMxBc6lrHF87Bg9FvCZDd4xoQXwh9GMq12F6uhNamntWvVGAeKAghBf18UPAcemYuSpB9kILwo5c3sXbXxNwwC2scbS0wVkoZIKWfYIY0M76zNTF+ZTgCcShuJj/55USkvq67WlsdUNKxm+AcKYyGEIGLyVZlU2RAcCskEFbrd+IU2UmTFRrlvAYHLo5neUQEmBuroDVVdvUDSSoY77zOHKFTzIiuOs24XPX2xFBsDZ5HW0rKYLyBigZXmpzuxDZFEljUYLlUgHSoRpDfJl9LLlahhyZ4s791iYUDxMKIlvaD47ARgp5iiBGNDFwoFM3gUqGzRZyn0omtl3nEEbgAJkg+rpGVBt9QuKRhiWshUs5UE2mvBO0r0KtBbAsiGj9VL56JkuIAMXDMxY9nC75p2j+KSU5FOXuNLJQYWpuFKxAdXXVKmpie/JAFFE8XSfkmFUQTqhMAgzn5ilMiv5CSU0qGiRIGO5JK4UCw5giB+3KAiFferpbVZtbaWiETYth27ySDuVK5iMEFvwczLjxI6x+zLaNJc1jMU7Js8s49vzV/bCx8juPjdgY0KGULl3ZYGCVFzpIKFkYlB11ZVqbtrm3n6x6BGEMaVDTDhkNhi7caTbKAwMMxoS6BYenC5z8yyHHfso1CEtod6+tgzIor3ZRBeefZEpPciKY5i3VlUcv4ZT0zEhbIwEsh2z0wFlH8N/KOOJd8zu7S6WUbykcr0n2xnR+UC2s/+V47kHmQdZOeRqOE8PMrltbezbs32ow8wp04kfLhbHWD9cLI5fw6m9JvM+o4eFYScnHmQ7YVC+xx5kHmT5ZCP3vgdZLkcKvPYg8yArUFTkQVYop3LSATIOVheZDzUPvYzOSTYhl96ri1/4KKugTebChweZfxldiHB7TVYIl0ZJ4zWZHy6OIhaj3vIgG5UtO7/pQeZBtnMpyaTwICuUUznpPMg8yHJEIu+lB1le1oz9wINseoDM9umaNIx2bfeyt9PZOf/zIDPuFRl7kE0PkNm3lqwi0+Zc255V7vH1ih3Z/iR4xuFBViSwspN7kE0PkKGRABWvSQAN1wDNPm4GWFxjzNXAxzn3SYtpRa/JspFTxLkH2fQAGcABMMQc9nEzooIMACgLpOMa0FnwIDNO7ELsQTY9QEY7mwZDe3GNVsPoFKDiGlBhuxR7OQCR53wZwTlDSa/JdgFg/MWD7JUPMhsaEgMWQEXAB8QPf/hDfec739HFF1+sn/70p/qf//kf5xMCwP31r3/VBRdcoPPPP1/f+ta3PMh2EWNTCmT+e7KRbVVYMi5lAFgAjIBGA0SYngNI733ve1VRUaH9999ff/7znx0ISbt06VKdeOKJ+ud//mf96le/Kh5kFGSIxhY+/skmy/44PQwWYzHQCk1co2GIyxkoI3sIgQOGUjduIfRTTw5sxy9ZssR5NuF/5a4/+SNsDIeMBtvexn27l52mkPrsahrKoz3YQ4q/PejiGC1wH7qYW/E/hoAmz9y3EYrVzdra/se1BZxpHHjggdprr73061//2m47U+Gnn366c7TBzaKGi1YQxBFuvvlmZ0G4q6vLXRuBExVTKLbPMRHNeBiGQVs5yyd/+EDDUA6NhZlwBJ1QzrJz80YoOHD2QUdjq1pGW276Ul3TW1MWfLCwfv1658UFYSeYANMupSp3tHyov82VoIFOl3vQAX25/7G2g0ccxkPS8Qy6rY3Jl7pyn/xIY4E0hCuuuGJYm6HByPPb3/62/vd//9c9J/+iQEYhZGIBTXbkkUcOm+k2Aicqhh4EHEcDViaVsvNyxJRpDQgfWD2iRwPshHKUubM8W1panIlqho3Uv9x0IHQEeGEdG84mcJUEb5ARYkK24O6sHrv6nLIA/fPPP+/MUYyVDzQDfIINA41OdxPrfVlamvTkRz1Mtoi5zz062RNOOMEB7dhjj9Wll14qfPzh98+wUhTIIMII4BxPm9jPp5EJY1Wu1M8oj4rSe3FwDrONKaUuj/ysTBqUBuIejESLmJ/tcpSbL08TdjQZPrpY1TKa8v2nFPcdI4bmKPCCPBkuwgdogjeAz0IpysyXh7U55QFyNBlpoWO0/yC//IdnBIb6f/rTn5x3IFsdNLqJkafs+yZn5GMygDekgw46SLvttpubPi1fjsORDIiho2iQUYg17g033OAcVGQzNJvAiTincWHuZAXqjrUqA9lk0MFwHWcL7e3tk1G8KxP3VYwqTDYmmhCAgOPBYm3h/+IXv9Duu+/upj1nnXWWFi1a5EYn2fSbYkH2OSdQTwMc5//93//ttBlztEcffXT476xXFAUyMrMCyQVPm29/+9tdL0rlcApXjsMczpnTOa45NmzY4HyTWQ/GNfMzfJaVgw7ypKfkMFoYJiFcCFk2neUq3/KlLHhOudBgCw/Uv5xtYeXDaxZ7KJ+yORhRcJ8YGuBTuXlCOVZ3aKH+8MN4kF0+58Y3Yv533nnnOXCwSsjxqle9yrkD+8lPfuIAhyyh+Qh0qMi/KRpiUzD493vDG97g8vj3f/93dXR0uHQMG507WxubokKzMyBjCrDeydSwoRlV++53v9sB7U1vepPKdbztbW/Tm9/8Zpc/529961udeqa8z33uc+74p3/6J732ta91mtXSloMenNiTLzFMpf6sJB199NHOxxv3OYwGi8dLS3a55PWWt7zFHfScLBV/7Wtf0/ve9z4dfPDBw2WPt8x8/7f64WaLtqCjZT6CcOFDHF93TCP4f3bb5cuvkPvGR+Ov8QM+wAPa4T/+4z/0iU98wsmGPYc+zkkHnZRlz6Cf6z322EMzZ850sYHNYnz3mddZA5QpGnABPnDBe+qppzqnmMghmvFnP/uZAyY/zkw3qpY/AjbLgD8zqbNnFECmgJB5CIAjPUvH11xzjRg6luvgHQR501sQc805Y2nOb7rpJnf/+uuvd9c33nhj2WihDMqmjOuuu86d42MbWow+ew6t3C8VX8iL8v/whz+4fKGBg+trr73W0cM5R6nKHC0f4/1VV13l6IEPtAOrzcTQaPwwnoyWTzH3rE3JL/ugrpRHXpRv7UOaq6++Wr/73e/cM9JBJ7HRRNrPfvazDlwAzYBFzLuvL37xi260hrwj68g+MZggJrCqTOfyt7/9zV3bsBGN+OSTT7p7w47ZARRAMm0GyMgc0BHzzLQaabjP4YPnwN8zB375y18Og4uREBr597//vVupRIMRWNzhYGGJ2HCB0mG3Bzs7LLC96lOf+pTL85hjjnEgd+5sAQ0AshjEZgcyI2Puk46YtATAZytMpCvHYb2HlUm5RiMxZVqw63LQYXlarwYv6NWILWR3PvCMA7rtv+OJrY3Ig3KI4T3BeEMMfaUqczR6yZvyrQ2s7sR9fX1OJnhusjJaHrtyz+pP+XYYv+HzaE4suW/Kw2imbGsXNCBgACi8zDYNRV0sHQtLlA2vuWcBd85oO+7BC2gi8ErpXe96l3tJzYvqCh5QIAnJCEIIbB1B5eNUgndAPDNiScs52o+C+Y9VuhwxFaA8HMZffvnlevjhh13Z0AktHATKLjctlGM8IjZBq6ysdJN+ew5P4Q18M9rGwxvK4bB2IH8CbUBjM2Rlt0M26MZT3lj/pVxoIc2aNWtce7Cfr6qqyrWT0Uq7cE4YK79CnmW3M/mxIMFrC4DFM2I0D4sxs2fPdvsLWZAimKwS0ZSyTgAABi9JREFUAyJ4B9/4H52k8czotLLoMEyb8R/qAuCQQfYtMt/7wAc+4LZYkR+BBQ+GpICMYacDGRmSAQJjhd1zzz36whe+oAcffNDNt775zW+6dyDGPJhCY0MwhHO/EEbtShoIp7JsxPzLX/7iGMi+MDZeor5HC7tSTjH/gWekJyawfP6Rj3xEc+fOddfwA6YTW9pi8h8trQEansN78mX17uyzzxZzIzqg4447zvXGEDFaHqW6Z/VidY55DsLOsvWPfvSj4bkJaaCzVGWSD4B4/PHHXZkM684880wnt/AGGYYfLAAxF6MtzjjjDN13332OV7QH9HCQFv4BIOsIs9uJNNBPmcg3+RNzADI2YTCfmz9/vuvcHnroISeLtA0yCW7o+MDRnXfemVn4IEMyIhExEzkqQOBFJysmZEqAGAMl1xDC/8sZWG6dMWOGm7BSDj0FvQTaA3osWIPadbliyrRy4cX3vvc9N3lGAAjw0I5S8IayyI9AGxHoeBBqhI3AXOBjH/uYe2fnbpTxB3rg9bx589yqmnXOV155pdtSRNHwxYSZtOMNCD7lsPEBjc1qLvUlwBvKYJHj8MMPH97D+aUvfUmnnHLK8GcngIR05EUMaK0u5GH0Wp7Zbcx/7Xq0uvDc8st97vyTWeYUTkKWXdmqTwBkRx11lFjKHKuQ3IxLec27Bl4a8sqAwHAAkNFLEWCYHdYDuQdl+rHGgh/333+/+8yBxl2wYIErERp4Zo05XjKo22ggY5cBGp33Q/Sm8Ikem/QTEajvPvvso5NOOsmtpP3Xf/2X5syZ48qHXupfqvaAn9n1QhF8/vOfd/eM39/97nf1/ve/f7gjYqWPDey8tyPQQWXnsas8KjYP5842uwKMsXnvwPCMgHo8/vjj3dZ99sZNRkCoCdBJ4AUiY+Hs3f9UHGZzlDMgOCbwvB9h6MDeRd5PPfLII65onkNrqQSMTK1cayvmHgcccIAbIrLj5MILL9TXv/51t+ujWCEoll8Ms2gTAM13VXR4HAzjswUZWrOviy0nOz15ZQ/tkEnATYDf8JqhczbI0KwoDIbzEyEb2fRmn7slfCqANiO88MILbkLHdzAEQMYGSBgIUycjQJvRx7zs5JNPduNvo8UYSExdyhloUPjAChJjfybczEkAGWNxyjd6SkkHQm2dDfmyGMUQGmARmB8BOobS5QYZ9YcP7NFjqMxCAJ3ennvuqYsuusiVDw35hk+7whfyy9aMDBU/85nPDJeFfDAHgw4bUv/2t791L6FtuxdtU27ejFa3CgqGYSbEaCtWTeihCAwXWeKkMUk3GQHaYDBLrEzyuYYutC4B4YM2GFhukFEePSoAu+SSS9yQ9Te/+Y3bRYDAsROcAL0cpQrUy9qKPNHi++23n3784x+7IthOdNhhh233zqZUZefmQycCD37wgx/osssuc4+ZE37jG99wmsQ++6GdSinUVn9A/ulPf9qBjLa3To1Fj0MOOWSY73ytzA4UtnoRSDcZwYEsWxgg5P/9v/+nc845x9GDJkPlIlSTGdAcTPIRaOZk0PfEE084kmhMY2C5QWYdEkNEdrvwqoMVNrbloEVYXTLQw1ejazy8Q1DJh5g8iemtP/nJT4qVXwLzDuYfTP7LHeABQ0a2k/E9lQV24bOtibkhwUBRCqBZna0shovMyQgmv2hUOho0KIHFO4aU8Ar+jfYezSUs88/wnMyEh8owoaUCTOphIsv5zAEQ5skI7C7/0Ic+NDz2Z/zP0MQmtDSmHaVo0LHqSDnwwXiB5uJF5t57763vf//7DnQGBGLSjzdQJ4SEvEzYiPlIkL2bbGViks8WIVZiyx2sXsjJl7/8ZVc+HR803Hvvva546EPj2NCtVDQxRKXDP+KII/TBD37QdWymqVgAYsjINj/oYFoBjcg2HZ+1S6loKTQfp8lInC2kLA/TYGgLYtSupSk041KmY77B/ANwsfmS73b23Xff4Q8lrSwadiICAs9BwNYDQxJoo+F5eW+hXPQY2OixWaKmV//oRz/q7ElY2eWOqRva7LTTTnPDNoSbORK73y0g3MYnuzfemPdP//Zv/+b2FrJBG6DxEtyCdTbnnnuuUxSMxOAXdJSrPazsfPH/BxlBlxgbdUssAAAAAElFTkSuQmCC)" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": { 45 | "id": "gHRz5Vgilw56" 46 | }, 47 | "source": [ 48 | "K-nearest neighbors (KNN) algorithm is a type of supervised ML algorithm which can be used\n", 49 | "for both classification as well as regression predictive problems. However, it is mainly used for\n", 50 | "classification predictive problems in industry. It takes a bunch of labeled points and uses them to learn how to label other points. It is supervised because you are trying to classify a point based on the known classification of other points.\n", 51 | "\n", 52 | "By observing the given data we can conclude that the input features and output labels are distinctly known, hence satisfying the rules necessary for the use of supervised learning.\n", 53 | "\n", 54 | "\n" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": { 60 | "id": "Wz0HE9MMD47D" 61 | }, 62 | "source": [ 63 | "## Objectives:\n", 64 | "* **Evaluate** the significance of distance measures and k value in k Nearest Neighbors algorithm\n", 65 | "\n", 66 | "* **Analyze** the data and determine why k-NN is the adviced method for the given task\n", 67 | "\n", 68 | "* **Apply** k Nearest Neighbors algorithm on the given data\n", 69 | "\n", 70 | "* **Understand and Remember** k Nearest Neighbors algorithm and its variations" 71 | ] 72 | }, 73 | { 74 | "cell_type": "markdown", 75 | "metadata": { 76 | "id": "JyS0P3wJcvMx" 77 | }, 78 | "source": [ 79 | "# **Choosing the right value for K .**\n", 80 | "\n", 81 | "Here are some things to keep in mind:\n", 82 | "\n", 83 | "---\n", 84 | "\n", 85 | "\n", 86 | "\n", 87 | "1. As we decrease the value of K to 1, our predictions become less stable. Just think for a minute, imagine K=1 and we have a query point surrounded by several reds and one green (I’m thinking about the top left corner of the colored plot above), but the green is the single nearest neighbor. Reasonably, we would think the query point is most likely red, but because K=1, KNN incorrectly predicts that the query point is green. \n", 88 | "\n", 89 | "2. Inversely, as we increase the value of K, our predictions become more stable due to majority voting / averaging, and thus, more likely to make more accurate predictions (up to a certain point). Eventually, we begin to witness an increasing number of errors. It is at this point we know we have pushed the value of K too far. \n", 90 | "\n", 91 | "3. In cases where we are taking a majority vote (e.g. picking the mode in a classification problem) among labels, we usually make K an odd number to have a tiebreaker" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": { 97 | "id": "NgpZFSdmN8xW" 98 | }, 99 | "source": [ 100 | "" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": { 106 | "id": "oVkSZfzJD47F" 107 | }, 108 | "source": [ 109 | "## Programmer's Perspective:\n", 110 | "\n", 111 | "Let S be the programmer's perspective of the linear regression, such that S = {s, e, X, Y, $f_{me}$, $f_{i}^{f}$ $Mem_{shared}$| Φ}\n", 112 | "\n", 113 | "s = Start State\n", 114 | "- {($X_{i}$, $y_{i}$): i ∈ N, $X_{i}$ = ($X_{i}^{0}$,$X_{i}^{1}$), $X_{i}^{0}$ $\\large \\epsilon$ $\\mathbb{R}$, $X_{i}^{1}$ $\\large \\epsilon$ $\\mathbb{R}$, $y_{i}$ $\\large \\epsilon$ {orange, blue} }\n", 115 | "- $X_{i}^{0}$ : x-coordinate\n", 116 | "- $X_{i}^{1}$ : y-coordinate\n", 117 | "- k = { number of neighbors }, k $\\large \\epsilon$ [3,length of the dataset]\n", 118 | "\n", 119 | "e = { Mapping the given point with the appropriate class }\n", 120 | "\n", 121 | "X = {X,y}\n", 122 | "* X: Feature values\n", 123 | " - x: { x-coordinate | $x$ $\\large \\epsilon$ $\\mathbb{R}$ }\n", 124 | " - y: { y-coordinate | $y$ $\\large \\epsilon$ $\\mathbb{R}$ }\n", 125 | " - k: { number of neighbors | k $\\large \\epsilon$ [3,length of the dataset] }\n", 126 | "* y: Output values = { $ y_i $ | $ y_i $ is the predicted class for point $ X_i $, $ y_i $ $ \\large \\epsilon $ {orange, blue}, $ i $ $ \\large \\epsilon $ $ \\mathbb{N} $ },\n", 127 | "\n", 128 | "$f_{me}$ = Function $f_{me}$ can be defined as $\\large f_{me}: X \\rightarrow y$
    \n", 129 | "$f_{me}$: { KNearestNeighbors | X = (df, k, input_val, weight, metric), y=prediction}\n", 130 | " - df : {(X,y)}\n", 131 | " - k : { number of neighbors }, k $\\large \\epsilon$ [3,length of the dataset] \n", 132 | " - input_val : { x, y | x=x-coordinate, y=y-coordinate }\n", 133 | " - weight : { type of k-NN }, weight $\\large \\epsilon $ {distance, uniform}\n", 134 | " - metric : { method for distance calculation }, metric $\\large \\epsilon $ {manhatten, euclidean}\n", 135 | " - y = prediction: { output label | y $\\large \\epsilon $ {blue, orange} }\n", 136 | " - Method to implement k nearest neighbors algorithm\n", 137 | "\n", 138 | "$f_{i}^{f}$ = friend functions: {$ f_1 $, $ f_2 $, $ f_3 $}\n", 139 | "For ever function $f_{i}$ in $f_{i}^{f}$:
    \n", 140 | "$$\\large f_{i}: X \\rightarrow y$$\n", 141 | "\n", 142 | "- f1: { euclidean_distance | X=(point_a, point_b), y=distance }\n", 143 | " - point_a, point_b : { coordinates of a point in the dataset }\n", 144 | " - y = distance : { Euclidean distance between two points }, distance $\\large \\epsilon $ [0, $\\infty$)\n", 145 | " - Method to calculate euclidian distance between two points point_a and point_b\n", 146 | " \n", 147 | " \n", 148 | "- f2: { manhattan_distance | X=(point_a, point_b), y=distance }\n", 149 | " - point_a, point_b : { coordinates of a point in the dataset }\n", 150 | " - y = distance : { Manhattan distance between two points }, distance $\\large \\epsilon $ [0, $\\infty$)\n", 151 | " - Method to calculate manhattan distance between two points point_a and point_b\n", 152 | " \n", 153 | " \n", 154 | "- f3: { weighted_prediction | X = nearest_neighbors, y = prediction } \n", 155 | " - nearest_neighbors: { [($X_{0}^{0}$,$X_{0}^{1}$), ($X_{1}^{0}$,$X_{1}^{1}$),... ($X_{k-1}^{0}$,$X_{k-1}^{1}$)] | $X_{i}^{0}$ = x-coordinate, $X_{i}^{1}$ = y-coordinate }\n", 156 | " - y = prediction: { output label | y $\\large \\epsilon $ {blue, orange} }\n", 157 | " - Method to predict class based on the weighted frequency of nearest neighbors\n", 158 | " \n", 159 | "$Mem_{shared}$ = { Shared resource for all threads to store prediction for given set of input }" 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "metadata": { 165 | "id": "wPc2iuO0h-cn" 166 | }, 167 | "source": [ 168 | "# Importing libraries\n", 169 | "import pandas as pd\n", 170 | "import numpy as np\n", 171 | "import matplotlib.pyplot as plt\n", 172 | "import threading\n", 173 | "from sklearn.neighbors import KNeighborsClassifier\n", 174 | "from sklearn.model_selection import train_test_split\n", 175 | "from sklearn.metrics import confusion_matrix ,classification_report\n", 176 | "import warnings\n", 177 | "warnings.filterwarnings('ignore')\n", 178 | "import sys" 179 | ], 180 | "execution_count": 1, 181 | "outputs": [] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "metadata": { 186 | "id": "NSWNt96Ph-co" 187 | }, 188 | "source": [ 189 | "data = {\n", 190 | " 'x': [2, 4, 4, 4, 6, 6], \n", 191 | " 'y': [4, 2, 4, 6, 2, 4],\n", 192 | " 'label':[\"orange\", \"orange\", \"blue\", \"orange\", \"blue\", \"orange\"]\n", 193 | "} \n", 194 | "df = pd.DataFrame.from_dict(data) \n", 195 | "label = \"label\"" 196 | ], 197 | "execution_count": 2, 198 | "outputs": [] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "metadata": { 203 | "id": "jhdeHb_9h-cp", 204 | "colab": { 205 | "base_uri": "https://localhost:8080/", 206 | "height": 206 207 | }, 208 | "outputId": "1753e282-1898-4679-8373-5dc1b93595e8" 209 | }, 210 | "source": [ 211 | "df.head()" 212 | ], 213 | "execution_count": 3, 214 | "outputs": [ 215 | { 216 | "output_type": "execute_result", 217 | "data": { 218 | "text/html": [ 219 | "
    \n", 220 | "\n", 233 | "\n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | "
    xylabel
    024orange
    142orange
    244blue
    346orange
    462blue
    \n", 275 | "
    " 276 | ], 277 | "text/plain": [ 278 | " x y label\n", 279 | "0 2 4 orange\n", 280 | "1 4 2 orange\n", 281 | "2 4 4 blue\n", 282 | "3 4 6 orange\n", 283 | "4 6 2 blue" 284 | ] 285 | }, 286 | "metadata": { 287 | "tags": [] 288 | }, 289 | "execution_count": 3 290 | } 291 | ] 292 | }, 293 | { 294 | "cell_type": "code", 295 | "metadata": { 296 | "id": "rHATRjKyh-cr", 297 | "colab": { 298 | "base_uri": "https://localhost:8080/", 299 | "height": 112 300 | }, 301 | "outputId": "1de28d6e-e162-4457-980a-7128f0d2b639" 302 | }, 303 | "source": [ 304 | "df.describe().T" 305 | ], 306 | "execution_count": 4, 307 | "outputs": [ 308 | { 309 | "output_type": "execute_result", 310 | "data": { 311 | "text/html": [ 312 | "
    \n", 313 | "\n", 326 | "\n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | "
    countmeanstdmin25%50%75%max
    x6.04.3333331.5055452.04.04.05.56.0
    y6.03.6666671.5055452.02.54.04.06.0
    \n", 365 | "
    " 366 | ], 367 | "text/plain": [ 368 | " count mean std min 25% 50% 75% max\n", 369 | "x 6.0 4.333333 1.505545 2.0 4.0 4.0 5.5 6.0\n", 370 | "y 6.0 3.666667 1.505545 2.0 2.5 4.0 4.0 6.0" 371 | ] 372 | }, 373 | "metadata": { 374 | "tags": [] 375 | }, 376 | "execution_count": 4 377 | } 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "metadata": { 383 | "id": "sNs0j7yVh-cr", 384 | "colab": { 385 | "base_uri": "https://localhost:8080/" 386 | }, 387 | "outputId": "4cc0a2b8-3017-4121-b255-3804de198bd8" 388 | }, 389 | "source": [ 390 | "df['label'].value_counts()" 391 | ], 392 | "execution_count": 5, 393 | "outputs": [ 394 | { 395 | "output_type": "execute_result", 396 | "data": { 397 | "text/plain": [ 398 | "orange 4\n", 399 | "blue 2\n", 400 | "Name: label, dtype: int64" 401 | ] 402 | }, 403 | "metadata": { 404 | "tags": [] 405 | }, 406 | "execution_count": 5 407 | } 408 | ] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "metadata": { 413 | "id": "Bsp3IHO4h-cs", 414 | "colab": { 415 | "base_uri": "https://localhost:8080/" 416 | }, 417 | "outputId": "c65e15f0-4ec0-4312-8309-8d4381d8da12" 418 | }, 419 | "source": [ 420 | "df.shape" 421 | ], 422 | "execution_count": null, 423 | "outputs": [ 424 | { 425 | "output_type": "execute_result", 426 | "data": { 427 | "text/plain": [ 428 | "(6, 3)" 429 | ] 430 | }, 431 | "metadata": { 432 | "tags": [] 433 | }, 434 | "execution_count": 6 435 | } 436 | ] 437 | }, 438 | { 439 | "cell_type": "code", 440 | "metadata": { 441 | "id": "y71UWrxrh-cs" 442 | }, 443 | "source": [ 444 | "# Function to validate the provided data to k-NN algorithm\n", 445 | "def check_data(df, k, input_val, weight, metric):\n", 446 | " if len(input_val) != df.shape[1]-1:\n", 447 | " print(\"Provided input points are invalid\")\n", 448 | " return False\n", 449 | " if k > len(df):\n", 450 | " print(\"k value cannot be greater than size of the dataset\")\n", 451 | " return False\n", 452 | " if weight not in ['distance', 'uniform']:\n", 453 | " print(\"Param weight takes values distance or uniform\")\n", 454 | " return False\n", 455 | " if metric not in ['manhattan','euclidean']:\n", 456 | " print(\"Param metric takes values manhattan or euclidean\")\n", 457 | " return False\n", 458 | " return True" 459 | ], 460 | "execution_count": 6, 461 | "outputs": [] 462 | }, 463 | { 464 | "cell_type": "markdown", 465 | "metadata": { 466 | "id": "vFCXRROmLL4c" 467 | }, 468 | "source": [ 469 | "" 470 | ] 471 | }, 472 | { 473 | "cell_type": "code", 474 | "metadata": { 475 | "id": "K8hAuq_hh-ct" 476 | }, 477 | "source": [ 478 | "# Function to calculate euclidean distance between two points\n", 479 | "def euclidean_distance(point_a, point_b):\n", 480 | " '''\n", 481 | " params: {point_a, point_b}\n", 482 | " - point_a, point_b : { coordinates of a point in the dataset }\n", 483 | " - type : list\n", 484 | " \n", 485 | " - returns: {distance}\n", 486 | " - distance : { Euclidean distance between point_a and point_b }\n", 487 | " - type: float\n", 488 | " '''\n", 489 | " distance = 0\n", 490 | " for i in range(len(point_a)):\n", 491 | " distance = distance + (point_a[i]-point_b[i])**2\n", 492 | " return distance**0.5" 493 | ], 494 | "execution_count": 7, 495 | "outputs": [] 496 | }, 497 | { 498 | "cell_type": "code", 499 | "metadata": { 500 | "id": "qHaikliuh-ct" 501 | }, 502 | "source": [ 503 | "# Function to calculate manhattan distance between two points\n", 504 | "def manhattan_distance(point_a, point_b):\n", 505 | " '''\n", 506 | " params: {point_a, point_b}\n", 507 | " - point_a, point_b : { coordinates of a point in the dataset }\n", 508 | " - type : list\n", 509 | " \n", 510 | " - returns: {distance}\n", 511 | " - distance : { Manhattan distance between point_a and point_b }\n", 512 | " - type: float\n", 513 | " '''\n", 514 | " distance = 0\n", 515 | " for i in range(len(point_a)):\n", 516 | " distance = distance + abs(point_a[i]-point_b[i])\n", 517 | " return distance" 518 | ], 519 | "execution_count": 8, 520 | "outputs": [] 521 | }, 522 | { 523 | "cell_type": "code", 524 | "metadata": { 525 | "id": "ghsovYCbh-cu" 526 | }, 527 | "source": [ 528 | "# Method to predict class based on the weighted frequency of nearest neighbors\n", 529 | "def weighted_prediction(nearest_neighbors):\n", 530 | " '''\n", 531 | " params: {nearest_neighbors}\n", 532 | " - nearest_neighbors : { distance and class of k points from the dataset, nearest to input value }\n", 533 | " - type : list - [(distance, class),(distance, class), ...]\n", 534 | " \n", 535 | " - returns: {prediction}\n", 536 | " - prediction : { Output label i.e blue or orange }\n", 537 | " - type: string\n", 538 | " '''\n", 539 | " label_frequency = {}\n", 540 | " # Calculate weight for each label\n", 541 | " for distance, label in nearest_neighbors:\n", 542 | " if int(distance) == 0:\n", 543 | " label_frequency[label] = sys.maxsize\n", 544 | " break\n", 545 | " if label in label_frequency:\n", 546 | " label_frequency[label] += 1/distance\n", 547 | " else: label_frequency[label] = 1/distance\n", 548 | " # Return label having maximum weight\n", 549 | " return max(label_frequency, key=label_frequency.get) " 550 | ], 551 | "execution_count": 9, 552 | "outputs": [] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "metadata": { 557 | "id": "knDll1Yf4lZF" 558 | }, 559 | "source": [ 560 | "def chooseK(arr):\n", 561 | " print(\"Size of array :\",arr.shape[0])\n", 562 | " k=round(math.sqrt(arr.shape[0]))\n", 563 | " if(k%2==0):\n", 564 | " \n", 565 | " k=k+1;\n", 566 | " #k should be odd so that classfication can be done properly(No chance of 50%-50% classification)\n", 567 | " print(\"Choosen value of K : \",k)\n", 568 | " return k;" 569 | ], 570 | "execution_count": 10, 571 | "outputs": [] 572 | }, 573 | { 574 | "cell_type": "code", 575 | "metadata": { 576 | "id": "M0OlYdSkh-cv" 577 | }, 578 | "source": [ 579 | "# Method to implement k nearest neighbors algorithm\n", 580 | "def KNearestNeighbors(X, y, k, input_val, weight, metric):\n", 581 | " '''\n", 582 | " params: {X, y, k, input_val, weight, metric}\n", 583 | " - X : { Input data }\n", 584 | " - type : list \n", 585 | " \n", 586 | " - y : {Ouput label}\n", 587 | " - type : list\n", 588 | " \n", 589 | " - k : { number of neighbors }\n", 590 | " - type : int\n", 591 | " \n", 592 | " - input_val : { value for which output label is to be determined }\n", 593 | " - type : list - [x-coordinate, y-coordinate]\n", 594 | " \n", 595 | " - weight : { type of k-NN }\n", 596 | " - type : string\n", 597 | " \n", 598 | " - metric : { method for calculating distance }\n", 599 | " - type : string\n", 600 | " \n", 601 | " - returns: {prediction}\n", 602 | " - prediction : { Output label i.e blue or orange }\n", 603 | " - type: string\n", 604 | " '''\n", 605 | " # Calculate distance depending on the metrics\n", 606 | " distances = []\n", 607 | " if metric == 'manhattan':\n", 608 | " for i in range(len(X)):\n", 609 | " distances.append((manhattan_distance(X[i], input_val),y[i]))\n", 610 | " else:\n", 611 | " for i in range(len(X)):\n", 612 | " distances.append((euclidean_distance(X[i], input_val),y[i]))\n", 613 | " \n", 614 | " # Sort points according to the calculated distance \n", 615 | " distances.sort(key=lambda distance: distance[0])\n", 616 | " if weight == 'distance': # Perform prediction using distance as weight\n", 617 | " nearest_neighbors = distances[:k].copy()\n", 618 | " prediction = weighted_prediction(nearest_neighbors)\n", 619 | " else: # Perform prediction based on frequency of ouput label in nearest neighbors(uniform)\n", 620 | " nearest_neighbors = distances[:k].copy()\n", 621 | " if int(distances[0][0]) == 0:\n", 622 | " prediction = distances[0][1]\n", 623 | " return prediction\n", 624 | " neighbor_classes = [label[1] for label in nearest_neighbors]\n", 625 | " prediction = max(set(neighbor_classes), key=neighbor_classes.count)\n", 626 | " return prediction" 627 | ], 628 | "execution_count": 11, 629 | "outputs": [] 630 | }, 631 | { 632 | "cell_type": "code", 633 | "metadata": { 634 | "id": "yhIXjFYmh-cw", 635 | "colab": { 636 | "base_uri": "https://localhost:8080/" 637 | }, 638 | "outputId": "516e4a76-9a7a-4a23-9b2b-8330be6541b9" 639 | }, 640 | "source": [ 641 | "k = 3\n", 642 | "metric = 'euclidean'\n", 643 | "weight = 'uniform'\n", 644 | "input_val = [4,4]\n", 645 | "X=None\n", 646 | "y=None\n", 647 | "if check_data(df, k, input_val, weight, metric):\n", 648 | " X = df.drop(columns=[label]).values.tolist()\n", 649 | " y = df[label].values.tolist()\n", 650 | " print(\"Predicted value: \",KNearestNeighbors(X, y, k, input_val, weight, metric))" 651 | ], 652 | "execution_count": 15, 653 | "outputs": [ 654 | { 655 | "output_type": "stream", 656 | "text": [ 657 | "Predicted value: blue\n" 658 | ], 659 | "name": "stdout" 660 | } 661 | ] 662 | }, 663 | { 664 | "cell_type": "code", 665 | "metadata": { 666 | "id": "m2SUjfD9h-cx" 667 | }, 668 | "source": [ 669 | "# Function to take input values from the user\n", 670 | "def predict(X,y):\n", 671 | " '''\n", 672 | " params: {X, y, k, input_val, weight, metric}\n", 673 | " - X : { Input data }\n", 674 | " - type : list \n", 675 | " \n", 676 | " - y : {Ouput label}\n", 677 | " - type : list\n", 678 | " \n", 679 | " - returns: {prediction}\n", 680 | " - prediction : { Output label i.e blue or orange }\n", 681 | " - type: string\n", 682 | " '''\n", 683 | " x_c = float(input('Enter x-coordinate: '))\n", 684 | " y_c = float(input('Enter y-coordinate: '))\n", 685 | " \n", 686 | " k = 3\n", 687 | " \n", 688 | " '''flag = True\n", 689 | " while flag:\n", 690 | " k = int(input('Enter k value: '))\n", 691 | " if k<3 or k>len(X):\n", 692 | " print(\"Please select provide a valid k value!\")\n", 693 | " else:\n", 694 | " flag = False '''\n", 695 | " \n", 696 | " flag = True\n", 697 | " while flag:\n", 698 | " weight_inp = int(input('For distance weighted K-NN enter 1 otherwise enter 0: '))\n", 699 | " if weight_inp not in [0,1]:\n", 700 | " print(\"Please select provide a valid input!\")\n", 701 | " else:\n", 702 | " if weight_inp == 1: weight = 'distance'\n", 703 | " else: weight = 'uniform'\n", 704 | " flag = False\n", 705 | " \n", 706 | " flag = True\n", 707 | " while flag:\n", 708 | " metric_inp = int(input('Metric - For manhatten distance enter 0 for euclidean distance enter 1: '))\n", 709 | " if metric_inp not in [0,1]:\n", 710 | " print(\"Please select provide a valid input!\")\n", 711 | " else:\n", 712 | " if metric_inp == 1: metric = 'manhattan'\n", 713 | " else: metric = 'euclidean'\n", 714 | " flag = False\n", 715 | " print(\"\\nPredicted value: \",KNearestNeighbors(X, y, k, [x_c,y_c], weight=weight, metric=metric))\n", 716 | " return {'k':k, 'input_val': [x_c,y_c], 'weight':weight, 'metric':metric}" 717 | ], 718 | "execution_count": 13, 719 | "outputs": [] 720 | }, 721 | { 722 | "cell_type": "code", 723 | "metadata": { 724 | "id": "pE9g8ljMh-cy", 725 | "colab": { 726 | "base_uri": "https://localhost:8080/" 727 | }, 728 | "outputId": "c33c0ed0-93e3-40ec-c690-bca8ae26a2ad" 729 | }, 730 | "source": [ 731 | "input_dict = predict(X, y)" 732 | ], 733 | "execution_count": 20, 734 | "outputs": [ 735 | { 736 | "output_type": "stream", 737 | "text": [ 738 | "Enter x-coordinate: 6\n", 739 | "Enter y-coordinate: 2\n", 740 | "For distance weighted K-NN enter 1 otherwise enter 0: 0\n", 741 | "Metric - For manhatten distance enter 0 for euclidean distance enter 1: 1\n", 742 | "\n", 743 | "Predicted value: blue\n" 744 | ], 745 | "name": "stdout" 746 | } 747 | ] 748 | }, 749 | { 750 | "cell_type": "code", 751 | "metadata": { 752 | "id": "H8WgcpWU4lZJ" 753 | }, 754 | "source": [ 755 | "" 756 | ], 757 | "execution_count": null, 758 | "outputs": [] 759 | }, 760 | { 761 | "cell_type": "code", 762 | "metadata": { 763 | "id": "u5AoBe2L45WX" 764 | }, 765 | "source": [ 766 | "" 767 | ], 768 | "execution_count": null, 769 | "outputs": [] 770 | } 771 | ] 772 | } --------------------------------------------------------------------------------