├── ML LAB SYLLABUS.pdf ├── tennis.csv ├── enjoysport.csv ├── LICENSE ├── find s.ipynb ├── program1.ipynb ├── README.md ├── Candidate_Elimination.ipynb ├── program2.ipynb ├── program4.ipynb ├── program8.ipynb ├── program5.ipynb ├── program3.ipynb ├── program6.ipynb ├── program10.ipynb └── program7.ipynb /ML LAB SYLLABUS.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FarhaKousar1601/Machine-Learning-Laboratory-21AIL66-/main/ML LAB SYLLABUS.pdf -------------------------------------------------------------------------------- /tennis.csv: -------------------------------------------------------------------------------- 1 | Sky AirTemp Humidity Wind Water Forecast EnjoySport 2 | Sunny Warm Normal Strong Warm Same Yes 3 | Sunny Warm High Strong Warm Same Yes 4 | Rainy Cold High Strong Warm Change No 5 | Sunny Warm High Strong Cool Change Yes -------------------------------------------------------------------------------- /enjoysport.csv: -------------------------------------------------------------------------------- 1 | sky,airtemp,humidity,wind,water,forcast,enjoysport 2 | sunny,warm,normal,strong,warm,same,yes 3 | sunny,warm,high,strong,warm,same,yes 4 | rainy,cold,high,strong,warm,change,no 5 | sunny,warm,high,strong,cool,change,yes 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Farha Kousar 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 | -------------------------------------------------------------------------------- /find s.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "88a645af", 7 | "metadata": { 8 | "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", 9 | "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", 10 | "execution": { 11 | "iopub.execute_input": "2024-08-01T08:08:53.509685Z", 12 | "iopub.status.busy": "2024-08-01T08:08:53.509240Z", 13 | "iopub.status.idle": "2024-08-01T08:08:53.536356Z", 14 | "shell.execute_reply": "2024-08-01T08:08:53.534886Z" 15 | }, 16 | "papermill": { 17 | "duration": 0.033489, 18 | "end_time": "2024-08-01T08:08:53.538819", 19 | "exception": false, 20 | "start_time": "2024-08-01T08:08:53.505330", 21 | "status": "completed" 22 | }, 23 | "tags": [] 24 | }, 25 | "outputs": [ 26 | { 27 | "name": "stdout", 28 | "output_type": "stream", 29 | "text": [ 30 | "['sunny', 'warm', 'normal', 'strong', 'warm', 'same', 'yes']\n", 31 | "['sunny', 'warm', 'high', 'strong', 'warm', 'same', 'yes']\n", 32 | "['rainy', 'cold', 'high', 'strong', 'warm', 'change', 'no']\n", 33 | "['sunny', 'warm', 'high', 'strong', 'cool', 'change', 'yes']\n", 34 | "\n", 35 | "\n", 36 | "The Maximally specific hypothesis for training instances is ['sunny', 'warm', '?', 'strong', '?', '?']\n" 37 | ] 38 | } 39 | ], 40 | "source": [ 41 | "import csv \n", 42 | "with open('/kaggle/input/enjoysport-csv/enjoysport.csv','r') as file:\n", 43 | " data = [row for row in csv.reader(file)]\n", 44 | " #print(\"The total number of training instances are:\",\n", 45 | "\n", 46 | " for row in data[1:]:\n", 47 | " print(row)\n", 48 | " print()\n", 49 | "num_attribute = len(data[0])-1\n", 50 | "hypothesis = ['0']*num_attribute\n", 51 | "\n", 52 | "for i in range(0,len(data)):\n", 53 | " if data[i][num_attribute ] == 'yes':\n", 54 | " for j in range(0,num_attribute):\n", 55 | " if hypothesis[j] == '0' or hypothesis[j] == data[i][j]:\n", 56 | " hypothesis[j] = data[i][j]\n", 57 | " else:\n", 58 | " hypothesis[j] = '?'\n", 59 | "print(\"\\nThe Maximally specific hypothesis for training instances is\",hypothesis)" 60 | ] 61 | } 62 | ], 63 | "metadata": { 64 | "kaggle": { 65 | "accelerator": "none", 66 | "dataSources": [ 67 | { 68 | "datasetId": 5477690, 69 | "sourceId": 9079671, 70 | "sourceType": "datasetVersion" 71 | } 72 | ], 73 | "dockerImageVersionId": 30746, 74 | "isGpuEnabled": false, 75 | "isInternetEnabled": true, 76 | "language": "python", 77 | "sourceType": "notebook" 78 | }, 79 | "kernelspec": { 80 | "display_name": "Python 3", 81 | "language": "python", 82 | "name": "python3" 83 | }, 84 | "language_info": { 85 | "codemirror_mode": { 86 | "name": "ipython", 87 | "version": 3 88 | }, 89 | "file_extension": ".py", 90 | "mimetype": "text/x-python", 91 | "name": "python", 92 | "nbconvert_exporter": "python", 93 | "pygments_lexer": "ipython3", 94 | "version": "3.10.13" 95 | }, 96 | "papermill": { 97 | "default_parameters": {}, 98 | "duration": 3.602061, 99 | "end_time": "2024-08-01T08:08:53.961764", 100 | "environment_variables": {}, 101 | "exception": null, 102 | "input_path": "__notebook__.ipynb", 103 | "output_path": "__notebook__.ipynb", 104 | "parameters": {}, 105 | "start_time": "2024-08-01T08:08:50.359703", 106 | "version": "2.5.0" 107 | } 108 | }, 109 | "nbformat": 4, 110 | "nbformat_minor": 5 111 | } 112 | -------------------------------------------------------------------------------- /program1.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "4f3fd18a", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.002133, 9 | "end_time": "2024-07-21T16:36:48.221078", 10 | "exception": false, 11 | "start_time": "2024-07-21T16:36:48.218945", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "**Aim: Illustrate and Demonstrate the working model and principle of Find-S algorithm.\n", 18 | "Program: For a given set of training data examples stored in a .CSV file, implement and demonstrate the Find-S algorithm to output a description of the set of all hypotheses consistent with the training examples.**" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 1, 24 | "id": "99191800", 25 | "metadata": { 26 | "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", 27 | "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", 28 | "execution": { 29 | "iopub.execute_input": "2024-07-21T16:36:48.226132Z", 30 | "iopub.status.busy": "2024-07-21T16:36:48.225743Z", 31 | "iopub.status.idle": "2024-07-21T16:36:48.247342Z", 32 | "shell.execute_reply": "2024-07-21T16:36:48.246124Z" 33 | }, 34 | "papermill": { 35 | "duration": 0.027498, 36 | "end_time": "2024-07-21T16:36:48.250332", 37 | "exception": false, 38 | "start_time": "2024-07-21T16:36:48.222834", 39 | "status": "completed" 40 | }, 41 | "tags": [] 42 | }, 43 | "outputs": [ 44 | { 45 | "name": "stdout", 46 | "output_type": "stream", 47 | "text": [ 48 | "['Sunny', 'Warm', 'Normal', 'Strong', 'Warm', 'Same', 'Yes']\n", 49 | "['Sunny', 'Warm', 'High', 'Strong', 'Warm', 'Same', 'Yes']\n", 50 | "['Rainy', 'Cold', 'High', 'Strong', 'Warm', 'Change', 'No']\n", 51 | "['Sunny', 'Warm', 'High', 'Strong', 'Cool', 'Change', 'Yes']\n", 52 | "Most specific hypothesis is\n", 53 | "[['0', '0', '0', '0', '0', '0']]\n" 54 | ] 55 | } 56 | ], 57 | "source": [ 58 | "import csv\n", 59 | "\n", 60 | "# Open the CSV file\n", 61 | "with open('/kaggle/input/find-s-algorithm-dataset/ws.csv', 'r') as f:\n", 62 | " reader = csv.reader(f)\n", 63 | " your_list = list(reader)\n", 64 | "\n", 65 | "# Initialize the hypothesis\n", 66 | "h = [['0', '0', '0', '0', '0', '0']]\n", 67 | "\n", 68 | "# Process each row in the dataset\n", 69 | "for i in your_list:\n", 70 | " print(i)\n", 71 | " if i[-1] == \"True\":\n", 72 | " j = 0\n", 73 | " for x in i:\n", 74 | " if x != \"True\":\n", 75 | " if x != h[0][j] and h[0][j] == '0':\n", 76 | " h[0][j] = x\n", 77 | " elif x != h[0][j] and h[0][j] != '0':\n", 78 | " h[0][j] = '?'\n", 79 | " else:\n", 80 | " pass\n", 81 | " j += 1\n", 82 | "\n", 83 | "# Print the most specific hypothesis\n", 84 | "print(\"Most specific hypothesis is\")\n", 85 | "print(h)" 86 | ] 87 | } 88 | ], 89 | "metadata": { 90 | "kaggle": { 91 | "accelerator": "none", 92 | "dataSources": [ 93 | { 94 | "datasetId": 1284212, 95 | "sourceId": 2140252, 96 | "sourceType": "datasetVersion" 97 | } 98 | ], 99 | "dockerImageVersionId": 30746, 100 | "isGpuEnabled": false, 101 | "isInternetEnabled": true, 102 | "language": "python", 103 | "sourceType": "notebook" 104 | }, 105 | "kernelspec": { 106 | "display_name": "Python 3", 107 | "language": "python", 108 | "name": "python3" 109 | }, 110 | "language_info": { 111 | "codemirror_mode": { 112 | "name": "ipython", 113 | "version": 3 114 | }, 115 | "file_extension": ".py", 116 | "mimetype": "text/x-python", 117 | "name": "python", 118 | "nbconvert_exporter": "python", 119 | "pygments_lexer": "ipython3", 120 | "version": "3.10.13" 121 | }, 122 | "papermill": { 123 | "default_parameters": {}, 124 | "duration": 3.141406, 125 | "end_time": "2024-07-21T16:36:48.572240", 126 | "environment_variables": {}, 127 | "exception": null, 128 | "input_path": "__notebook__.ipynb", 129 | "output_path": "__notebook__.ipynb", 130 | "parameters": {}, 131 | "start_time": "2024-07-21T16:36:45.430834", 132 | "version": "2.5.0" 133 | } 134 | }, 135 | "nbformat": 4, 136 | "nbformat_minor": 5 137 | } 138 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Machine Learning Laboratory (21AIL66) 2 | 3 | ![Course Code](https://img.shields.io/badge/Course-21AIL66-blue) 4 | ![Machine Learning](https://img.shields.io/badge/Subject-Machine%20Learning-orange) 5 | ![Laboratory](https://img.shields.io/badge/Type-Laboratory-green) 6 | ![Python](https://img.shields.io/badge/Python-3.x-blue.svg) 7 | ![Pandas](https://img.shields.io/badge/Library-Pandas-green) 8 | ![NumPy](https://img.shields.io/badge/Library-NumPy-yellow) 9 | ![Scikit-Learn](https://img.shields.io/badge/Library-Scikit--Learn-orange) 10 | 11 | Welcome to the Machine Learning Laboratory (21AIL66) repository. This repository contains a list of problems and solutions developed as part of the Machine Learning lab coursework. 12 | 13 | ## List of Programs 14 | 15 | Here is a list of programs covered in this lab course: 16 | 17 | 1. **Find-S Algorithm** 18 | - **Aim**: Illustrate and demonstrate the working model and principle of the Find-S algorithm. 19 | - **Program**: Implement the Find-S algorithm for a given set of training data examples stored in a .CSV file. 20 | 21 | 2. **Candidate Elimination Algorithm** 22 | - **Aim**: Demonstrate the working model and principle of the Candidate Elimination algorithm. 23 | - **Program**: Implement the Candidate Elimination algorithm for a given set of training data examples stored in a .CSV file. 24 | 25 | 3. **Decision Tree (ID3 Algorithm)** 26 | - **Aim**: Construct the decision tree using training data sets under supervised learning. 27 | - **Program**: Write a program to demonstrate the ID3 algorithm. Use an appropriate data set for building the decision tree and classify a new sample. 28 | 29 | 4. **Artificial Neural Network (Backpropagation)** 30 | - **Aim**: Understand the working principle of Artificial Neural Networks with feed-forward and feed-backward principles. 31 | - **Program**: Build an Artificial Neural Network using the Backpropagation algorithm and test it with appropriate datasets. 32 | 33 | 5. **Naive Bayes Classifier** 34 | - **Aim**: Demonstrate the text classifier using the Naïve Bayes classifier algorithm. 35 | - **Program**: Implement the Naive Bayes classifier for a sample training data set stored in a .CSV file and compute its accuracy. 36 | 37 | 6. **Bayesian Belief Network** 38 | - **Aim**: Demonstrate and analyze the results sets obtained from Bayesian belief network principles. 39 | - **Program**: Construct a Bayesian network using medical data and diagnose heart patients with a standard Heart Disease Data Set. 40 | 41 | 7. **K-Means Clustering (Expectation Maximization)** 42 | - **Aim**: Implement and demonstrate the working model of K-means clustering algorithm with Expectation Maximization concept. 43 | - **Program**: Apply the EM algorithm and K-Means clustering to a dataset stored in a .CSV file, compare the results, and analyze the quality of clustering. 44 | 45 | 8. **K-Nearest Neighbour (KNN)** 46 | - **Aim**: Demonstrate and analyze the results of classification based on the KNN Algorithm. 47 | - **Program**: Implement the KNN algorithm to classify the iris dataset, printing both correct and wrong predictions. 48 | 49 | 9. **Locally Weighted Regression** 50 | - **Aim**: Understand and analyze the concept of Regression algorithm techniques. 51 | - **Program**: Implement the Locally Weighted Regression algorithm to fit data points and visualize the results with appropriate graphs. 52 | 53 | 10. **Support Vector Machine (SVM)** 54 | - **Aim**: Implement and demonstrate classification algorithm using Support Vector Machine Algorithm. 55 | - **Program**: Implement and demonstrate the working of SVM algorithm for classification purposes. 56 | 57 | ## Kaggle Notebook 58 | 59 | You can view and run all the programs in a Kaggle notebook. Click the link below to access the notebook: 60 | 61 | - [Machine Learning Laboratory (21AIL66) Notebook](https://www.kaggle.com/code/farhakouser/machine-learning-laboratory-21ail66-ipynb/edit) 62 | 63 | Please upvote the notebook and follow me on Kaggle if you find it useful. 64 | 65 | ## Viva Questions 66 | 67 | For detailed viva questions and answers, you can refer to the [Viva Questions Wiki](https://github.com/FarhaKousar1601/Machine-Learning-Laboratory-21AIL66-/wiki/viva-vtu). 68 | 69 | ## How to Use 70 | 71 | 1. Clone the repository: 72 | ```sh 73 | git clone https://github.com/FarhaKousar1601/Machine-Learning-Laboratory-21AIL66-.git 74 | ``` 75 | 2. Navigate to the project directory: 76 | ```sh 77 | cd Machine-Learning-Laboratory-21AIL66- 78 | ``` 79 | 3. Open the relevant program file and run it using your preferred Python environment. 80 | 81 | ## Prerequisites 82 | 83 | - Python 3.x 84 | - Required libraries: numpy, pandas, scikit-learn, matplotlib (Install using pip if not already installed) 85 | 86 | ```sh 87 | pip install numpy pandas scikit-learn matplotlib 88 | ``` 89 | 90 | ## Contributing 91 | 92 | Contributions are welcome! Please fork the repository, star it, learn from the code, discuss any improvements, and create a pull request with your changes. 93 | 94 | ## License 95 | 96 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 97 | 98 | --- 99 | ## Connect with me 100 | [LinkedIn](https://www.linkedin.com/in/farhakousar16) 101 | [GitHub](https://github.com/FarhaKousar1601) 102 | 103 | © 2024 Department of AIML, KNS Institute of Technology 104 | -------------------------------------------------------------------------------- /Candidate_Elimination.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "5b3cf8cb", 7 | "metadata": { 8 | "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", 9 | "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", 10 | "execution": { 11 | "iopub.execute_input": "2024-08-01T09:59:13.700244Z", 12 | "iopub.status.busy": "2024-08-01T09:59:13.699259Z", 13 | "iopub.status.idle": "2024-08-01T09:59:13.720744Z", 14 | "shell.execute_reply": "2024-08-01T09:59:13.719746Z" 15 | }, 16 | "papermill": { 17 | "duration": 0.027829, 18 | "end_time": "2024-08-01T09:59:13.723541", 19 | "exception": false, 20 | "start_time": "2024-08-01T09:59:13.695712", 21 | "status": "completed" 22 | }, 23 | "tags": [] 24 | }, 25 | "outputs": [ 26 | { 27 | "name": "stdout", 28 | "output_type": "stream", 29 | "text": [ 30 | "\n", 31 | "Steps of Candidate Elimination Algorithm, training instance 2\n", 32 | "S: ['sunny', 'warm', 'normal', 'strong', 'warm', 'same']\n", 33 | "G: [['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]\n", 34 | "\n", 35 | "Steps of Candidate Elimination Algorithm, training instance 3\n", 36 | "S: ['sunny', 'warm', 'normal', 'strong', 'warm', 'same']\n", 37 | "G: [['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]\n", 38 | "\n", 39 | "Steps of Candidate Elimination Algorithm, training instance 4\n", 40 | "S: ['sunny', 'warm', 'normal', 'strong', 'warm', 'same']\n", 41 | "G: [['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]\n", 42 | "\n", 43 | "Steps of Candidate Elimination Algorithm, training instance 5\n", 44 | "S: ['sunny', 'warm', 'normal', 'strong', 'warm', 'same']\n", 45 | "G: [['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]\n", 46 | "\n", 47 | "Final specific hypothesis:\n", 48 | " ['sunny', 'warm', 'normal', 'strong', 'warm', 'same']\n", 49 | "\n", 50 | "Final general hypothesis:\n", 51 | " []\n" 52 | ] 53 | } 54 | ], 55 | "source": [ 56 | "import csv\n", 57 | "\n", 58 | "# Load data from CSV file\n", 59 | "with open('/kaggle/input/enjoysport-csv/enjoysport.csv') as f:\n", 60 | " csv_file = csv.reader(f)\n", 61 | " data = list(csv_file)\n", 62 | "\n", 63 | "# Initialize S and G\n", 64 | "s = data[1][:-1]\n", 65 | "g = [['?' for _ in range(len(s))] for _ in range(len(s))]\n", 66 | "\n", 67 | "# Process each training instance\n", 68 | "for i in data[1:]:\n", 69 | " if i[-1] == \"Yes\":\n", 70 | " for j in range(len(s)):\n", 71 | " if i[j] != s[j]:\n", 72 | " s[j] = '?'\n", 73 | " g[j][j] = '?'\n", 74 | " elif i[-1] == \"No\":\n", 75 | " for j in range(len(s)):\n", 76 | " if i[j] != s[j]:\n", 77 | " g[j][j] = s[j]\n", 78 | " else:\n", 79 | " g[j][j] = '?'\n", 80 | " \n", 81 | " # Print the current hypotheses\n", 82 | " print(f\"\\nSteps of Candidate Elimination Algorithm, training instance {data.index(i) + 1}\")\n", 83 | " print(\"S:\", s)\n", 84 | " print(\"G:\", g)\n", 85 | "\n", 86 | "# Collect and print final general hypotheses\n", 87 | "gh = [i for i in g if any(j != '?' for j in i)]\n", 88 | "\n", 89 | "print(\"\\nFinal specific hypothesis:\\n\", s)\n", 90 | "print(\"\\nFinal general hypothesis:\\n\", gh)\n" 91 | ] 92 | } 93 | ], 94 | "metadata": { 95 | "kaggle": { 96 | "accelerator": "none", 97 | "dataSources": [ 98 | { 99 | "datasetId": 5477690, 100 | "sourceId": 9079671, 101 | "sourceType": "datasetVersion" 102 | } 103 | ], 104 | "dockerImageVersionId": 30746, 105 | "isGpuEnabled": false, 106 | "isInternetEnabled": true, 107 | "language": "python", 108 | "sourceType": "notebook" 109 | }, 110 | "kernelspec": { 111 | "display_name": "Python 3", 112 | "language": "python", 113 | "name": "python3" 114 | }, 115 | "language_info": { 116 | "codemirror_mode": { 117 | "name": "ipython", 118 | "version": 3 119 | }, 120 | "file_extension": ".py", 121 | "mimetype": "text/x-python", 122 | "name": "python", 123 | "nbconvert_exporter": "python", 124 | "pygments_lexer": "ipython3", 125 | "version": "3.10.13" 126 | }, 127 | "papermill": { 128 | "default_parameters": {}, 129 | "duration": 2.95831, 130 | "end_time": "2024-08-01T09:59:14.044536", 131 | "environment_variables": {}, 132 | "exception": null, 133 | "input_path": "__notebook__.ipynb", 134 | "output_path": "__notebook__.ipynb", 135 | "parameters": {}, 136 | "start_time": "2024-08-01T09:59:11.086226", 137 | "version": "2.5.0" 138 | } 139 | }, 140 | "nbformat": 4, 141 | "nbformat_minor": 5 142 | } 143 | -------------------------------------------------------------------------------- /program2.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "e1fded58", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.002442, 9 | "end_time": "2024-07-21T16:45:51.237614", 10 | "exception": false, 11 | "start_time": "2024-07-21T16:45:51.235172", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "**2.Aim: Demonstrate the working model and principle of candidate elimination algorithm. Program: For a given set of training data examples stored in a .CSV file, implement and demonstrate the Candidate-Elimination algorithm to output a description of the set of all hypotheses consistent with the training examples.**" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "7da4fedd", 24 | "metadata": { 25 | "execution": { 26 | "iopub.execute_input": "2024-07-21T16:45:51.243907Z", 27 | "iopub.status.busy": "2024-07-21T16:45:51.243348Z", 28 | "iopub.status.idle": "2024-07-21T16:45:51.276830Z", 29 | "shell.execute_reply": "2024-07-21T16:45:51.275030Z" 30 | }, 31 | "papermill": { 32 | "duration": 0.041262, 33 | "end_time": "2024-07-21T16:45:51.280938", 34 | "exception": false, 35 | "start_time": "2024-07-21T16:45:51.239676", 36 | "status": "completed" 37 | }, 38 | "tags": [] 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "Steps of Candidate Elimination Algorithm 1\n", 46 | "[]\n", 47 | "[]\n", 48 | "Steps of Candidate Elimination Algorithm 2\n", 49 | "[]\n", 50 | "[]\n", 51 | "Steps of Candidate Elimination Algorithm 3\n", 52 | "[]\n", 53 | "[]\n", 54 | "Steps of Candidate Elimination Algorithm 4\n", 55 | "[]\n", 56 | "[]\n", 57 | "Steps of Candidate Elimination Algorithm 5\n", 58 | "[]\n", 59 | "[]\n", 60 | "\n", 61 | "Final specific hypothesis:\n", 62 | " []\n", 63 | "\n", 64 | "Final general hypothesis:\n", 65 | " []\n" 66 | ] 67 | } 68 | ], 69 | "source": [ 70 | "import csv\n", 71 | "\n", 72 | "# Opens the CSV file \"tennis.csv\" and reads its contents\n", 73 | "with open(\"/kaggle/input/tennis-csv/tennis.csv\") as f:\n", 74 | " csv_file = csv.reader(f)\n", 75 | " data = list(csv_file)\n", 76 | "\n", 77 | "# Initializes the specific hypothesis 's' and the general hypothesis 'gh'\n", 78 | "s = ['?' for _ in range(len(data[0])-1)]\n", 79 | "gh = [['?' for _ in range(len(s))] for _ in range(len(s))]\n", 80 | "\n", 81 | "# Iterates through each data instance in 'data'\n", 82 | "for instance in data:\n", 83 | " # Checks if the last attribute of the instance is \"Yes\"\n", 84 | " if instance[-1] == \"Yes\":\n", 85 | " # Updates 's' and 'gh' based on positive instance\n", 86 | " for j in range(len(s)):\n", 87 | " if instance[j] != s[j] and s[j] == '?':\n", 88 | " s[j] = instance[j]\n", 89 | " elif instance[j] != s[j] and s[j] != '?':\n", 90 | " s[j] = '?'\n", 91 | " elif instance[-1] == \"No\":\n", 92 | " # Updates 'gh' based on negative instance\n", 93 | " for j in range(len(s)):\n", 94 | " if instance[j] != s[j]:\n", 95 | " gh[j][j] = s[j]\n", 96 | " else:\n", 97 | " gh[j][j] = '?'\n", 98 | "\n", 99 | " # Prints the steps of the Candidate Elimination Algorithm\n", 100 | " print(\"Steps of Candidate Elimination Algorithm\", data.index(instance) + 1)\n", 101 | " print(s)\n", 102 | " print(gh)\n", 103 | "\n", 104 | " # Removes inconsistent hypotheses from 'gh'\n", 105 | " g = []\n", 106 | " for i in gh:\n", 107 | " if i not in g:\n", 108 | " g.append(i)\n", 109 | "\n", 110 | " # Ends the loop if 's' becomes the final hypothesis\n", 111 | " if len(g) == 1:\n", 112 | " break\n", 113 | "\n", 114 | "# Prints the final specific and general hypotheses\n", 115 | "print(\"\\nFinal specific hypothesis:\\n\", s)\n", 116 | "print(\"\\nFinal general hypothesis:\\n\", g)\n" 117 | ] 118 | } 119 | ], 120 | "metadata": { 121 | "kaggle": { 122 | "accelerator": "none", 123 | "dataSources": [ 124 | { 125 | "datasetId": 5405088, 126 | "sourceId": 8976764, 127 | "sourceType": "datasetVersion" 128 | } 129 | ], 130 | "dockerImageVersionId": 30746, 131 | "isGpuEnabled": false, 132 | "isInternetEnabled": true, 133 | "language": "python", 134 | "sourceType": "notebook" 135 | }, 136 | "kernelspec": { 137 | "display_name": "Python 3", 138 | "language": "python", 139 | "name": "python3" 140 | }, 141 | "language_info": { 142 | "codemirror_mode": { 143 | "name": "ipython", 144 | "version": 3 145 | }, 146 | "file_extension": ".py", 147 | "mimetype": "text/x-python", 148 | "name": "python", 149 | "nbconvert_exporter": "python", 150 | "pygments_lexer": "ipython3", 151 | "version": "3.10.13" 152 | }, 153 | "papermill": { 154 | "default_parameters": {}, 155 | "duration": 3.452149, 156 | "end_time": "2024-07-21T16:45:51.705493", 157 | "environment_variables": {}, 158 | "exception": null, 159 | "input_path": "__notebook__.ipynb", 160 | "output_path": "__notebook__.ipynb", 161 | "parameters": {}, 162 | "start_time": "2024-07-21T16:45:48.253344", 163 | "version": "2.5.0" 164 | } 165 | }, 166 | "nbformat": 4, 167 | "nbformat_minor": 5 168 | } 169 | -------------------------------------------------------------------------------- /program4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "c0effbc9", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.002405, 9 | "end_time": "2024-07-21T16:53:04.583449", 10 | "exception": false, 11 | "start_time": "2024-07-21T16:53:04.581044", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "**4)Aim: To understand the working principle of Artificial Neural network with feed forward and feed backward principle. Program: Build an Artificial Neural Network by implementing the Backpropagation algorithm and test the same using appropriate data sets**" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "f5fac3af", 24 | "metadata": { 25 | "execution": { 26 | "iopub.execute_input": "2024-07-21T16:53:04.589615Z", 27 | "iopub.status.busy": "2024-07-21T16:53:04.589176Z", 28 | "iopub.status.idle": "2024-07-21T16:53:09.662257Z", 29 | "shell.execute_reply": "2024-07-21T16:53:09.660775Z" 30 | }, 31 | "papermill": { 32 | "duration": 5.079468, 33 | "end_time": "2024-07-21T16:53:09.665049", 34 | "exception": false, 35 | "start_time": "2024-07-21T16:53:04.585581", 36 | "status": "completed" 37 | }, 38 | "tags": [] 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "Epoch: 0, Loss: 0.2949\n", 46 | "Epoch: 1000, Loss: 0.5025\n", 47 | "Epoch: 2000, Loss: 0.5025\n", 48 | "Epoch: 3000, Loss: 0.5025\n", 49 | "Epoch: 4000, Loss: 0.5025\n", 50 | "Epoch: 5000, Loss: 0.5025\n", 51 | "Epoch: 6000, Loss: 0.5025\n", 52 | "Epoch: 7000, Loss: 0.5025\n", 53 | "Epoch: 8000, Loss: 0.5025\n", 54 | "Epoch: 9000, Loss: 0.5025\n", 55 | "Accuracy: 51.00%\n" 56 | ] 57 | } 58 | ], 59 | "source": [ 60 | "import numpy as np\n", 61 | "from sklearn.model_selection import train_test_split\n", 62 | "from sklearn.datasets import make_moons\n", 63 | "from sklearn.preprocessing import OneHotEncoder\n", 64 | "\n", 65 | "# Activation function and its derivative\n", 66 | "sigmoid = lambda x: 1 / (1 + np.exp(-x))\n", 67 | "sigmoid_derivative = lambda x: x * (1 - x)\n", 68 | "\n", 69 | "# ANN class\n", 70 | "class NeuralNetwork:\n", 71 | " def __init__(self, input_size, hidden_size, output_size):\n", 72 | " self.W1 = np.random.randn(input_size, hidden_size)\n", 73 | " self.b1 = np.zeros((1, hidden_size))\n", 74 | " self.W2 = np.random.randn(hidden_size, output_size)\n", 75 | " self.b2 = np.zeros((1, output_size))\n", 76 | "\n", 77 | " def forward(self, X):\n", 78 | " self.a1 = sigmoid(np.dot(X, self.W1) + self.b1)\n", 79 | " self.a2 = sigmoid(np.dot(self.a1, self.W2) + self.b2)\n", 80 | " return self.a2\n", 81 | "\n", 82 | " def backward(self, X, y, output):\n", 83 | " d_output = (y - output) * sigmoid_derivative(output)\n", 84 | " d_hidden = d_output.dot(self.W2.T) * sigmoid_derivative(self.a1)\n", 85 | "\n", 86 | " self.W2 += self.a1.T.dot(d_output)\n", 87 | " self.b2 += np.sum(d_output, axis=0, keepdims=True)\n", 88 | " self.W1 += X.T.dot(d_hidden)\n", 89 | " self.b1 += np.sum(d_hidden, axis=0, keepdims=True)\n", 90 | "\n", 91 | " def train(self, X, y, epochs=10000):\n", 92 | " for epoch in range(epochs):\n", 93 | " output = self.forward(X)\n", 94 | " self.backward(X, y, output)\n", 95 | " if epoch % 1000 == 0:\n", 96 | " loss = np.mean(np.square(y - output))\n", 97 | " print(f'Epoch: {epoch}, Loss: {loss:.4f}')\n", 98 | "\n", 99 | "# Create and preprocess dataset\n", 100 | "X, y = make_moons(n_samples=1000, noise=0.2)\n", 101 | "y = OneHotEncoder().fit_transform(y.reshape(-1, 1)).toarray()\n", 102 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", 103 | "\n", 104 | "# Initialize and train network\n", 105 | "nn = NeuralNetwork(X_train.shape[1], 10, y_train.shape[1])\n", 106 | "nn.train(X_train, y_train)\n", 107 | "\n", 108 | "# Test network\n", 109 | "output = nn.forward(X_test)\n", 110 | "predictions = np.argmax(output, axis=1)\n", 111 | "accuracy = np.mean(predictions == np.argmax(y_test, axis=1))\n", 112 | "print(f'Accuracy: {accuracy * 100:.2f}%')\n" 113 | ] 114 | } 115 | ], 116 | "metadata": { 117 | "kaggle": { 118 | "accelerator": "none", 119 | "dataSources": [], 120 | "dockerImageVersionId": 30746, 121 | "isGpuEnabled": false, 122 | "isInternetEnabled": true, 123 | "language": "python", 124 | "sourceType": "notebook" 125 | }, 126 | "kernelspec": { 127 | "display_name": "Python 3", 128 | "language": "python", 129 | "name": "python3" 130 | }, 131 | "language_info": { 132 | "codemirror_mode": { 133 | "name": "ipython", 134 | "version": 3 135 | }, 136 | "file_extension": ".py", 137 | "mimetype": "text/x-python", 138 | "name": "python", 139 | "nbconvert_exporter": "python", 140 | "pygments_lexer": "ipython3", 141 | "version": "3.10.13" 142 | }, 143 | "papermill": { 144 | "default_parameters": {}, 145 | "duration": 9.037337, 146 | "end_time": "2024-07-21T16:53:10.191528", 147 | "environment_variables": {}, 148 | "exception": null, 149 | "input_path": "__notebook__.ipynb", 150 | "output_path": "__notebook__.ipynb", 151 | "parameters": {}, 152 | "start_time": "2024-07-21T16:53:01.154191", 153 | "version": "2.5.0" 154 | } 155 | }, 156 | "nbformat": 4, 157 | "nbformat_minor": 5 158 | } 159 | -------------------------------------------------------------------------------- /program8.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "739e1301", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.002575, 9 | "end_time": "2024-07-21T18:45:09.280269", 10 | "exception": false, 11 | "start_time": "2024-07-21T18:45:09.277694", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "**8)Aim: Demonstrate and analyse the results of classification based on KNN Algorithm. Program: Write a program to implement k-Nearest Neighbour algorithm to classify the iris data set. Print both correct and wrong predictions. Java/Python ML library classes can be used for this problem.**" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "2475f658", 24 | "metadata": { 25 | "execution": { 26 | "iopub.execute_input": "2024-07-21T18:45:09.286394Z", 27 | "iopub.status.busy": "2024-07-21T18:45:09.285910Z", 28 | "iopub.status.idle": "2024-07-21T18:45:11.346976Z", 29 | "shell.execute_reply": "2024-07-21T18:45:11.345675Z" 30 | }, 31 | "papermill": { 32 | "duration": 2.067371, 33 | "end_time": "2024-07-21T18:45:11.349877", 34 | "exception": false, 35 | "start_time": "2024-07-21T18:45:09.282506", 36 | "status": "completed" 37 | }, 38 | "tags": [] 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "Accuracy: 1.0\n", 46 | "\n", 47 | "Correct predictions:\n", 48 | "Predicted: 1 Actual: 1\n", 49 | "Predicted: 0 Actual: 0\n", 50 | "Predicted: 2 Actual: 2\n", 51 | "Predicted: 1 Actual: 1\n", 52 | "Predicted: 1 Actual: 1\n", 53 | "Predicted: 0 Actual: 0\n", 54 | "Predicted: 1 Actual: 1\n", 55 | "Predicted: 2 Actual: 2\n", 56 | "Predicted: 1 Actual: 1\n", 57 | "Predicted: 1 Actual: 1\n", 58 | "Predicted: 2 Actual: 2\n", 59 | "Predicted: 0 Actual: 0\n", 60 | "Predicted: 0 Actual: 0\n", 61 | "Predicted: 0 Actual: 0\n", 62 | "Predicted: 0 Actual: 0\n", 63 | "Predicted: 1 Actual: 1\n", 64 | "Predicted: 2 Actual: 2\n", 65 | "Predicted: 1 Actual: 1\n", 66 | "Predicted: 1 Actual: 1\n", 67 | "Predicted: 2 Actual: 2\n", 68 | "Predicted: 0 Actual: 0\n", 69 | "Predicted: 2 Actual: 2\n", 70 | "Predicted: 0 Actual: 0\n", 71 | "Predicted: 2 Actual: 2\n", 72 | "Predicted: 2 Actual: 2\n", 73 | "Predicted: 2 Actual: 2\n", 74 | "Predicted: 2 Actual: 2\n", 75 | "Predicted: 2 Actual: 2\n", 76 | "Predicted: 0 Actual: 0\n", 77 | "Predicted: 0 Actual: 0\n", 78 | "Predicted: 0 Actual: 0\n", 79 | "Predicted: 0 Actual: 0\n", 80 | "Predicted: 1 Actual: 1\n", 81 | "Predicted: 0 Actual: 0\n", 82 | "Predicted: 0 Actual: 0\n", 83 | "Predicted: 2 Actual: 2\n", 84 | "Predicted: 1 Actual: 1\n", 85 | "Predicted: 0 Actual: 0\n", 86 | "Predicted: 0 Actual: 0\n", 87 | "Predicted: 0 Actual: 0\n", 88 | "Predicted: 2 Actual: 2\n", 89 | "Predicted: 1 Actual: 1\n", 90 | "Predicted: 1 Actual: 1\n", 91 | "Predicted: 0 Actual: 0\n", 92 | "Predicted: 0 Actual: 0\n", 93 | "\n", 94 | "Wrong predictions:\n" 95 | ] 96 | } 97 | ], 98 | "source": [ 99 | "from sklearn.datasets import load_iris\n", 100 | "from sklearn.model_selection import train_test_split\n", 101 | "from sklearn.neighbors import KNeighborsClassifier\n", 102 | "from sklearn.metrics import accuracy_score\n", 103 | "\n", 104 | "# Load Iris dataset\n", 105 | "iris = load_iris()\n", 106 | "X = iris.data\n", 107 | "y = iris.target\n", 108 | "\n", 109 | "# Split dataset into training and testing sets\n", 110 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n", 111 | "\n", 112 | "# Initialize k-NN classifier\n", 113 | "knn = KNeighborsClassifier(n_neighbors=3)\n", 114 | "\n", 115 | "# Train the classifier\n", 116 | "knn.fit(X_train, y_train)\n", 117 | "\n", 118 | "# Predict the labels for test set\n", 119 | "y_pred = knn.predict(X_test)\n", 120 | "\n", 121 | "# Calculate accuracy\n", 122 | "accuracy = accuracy_score(y_test, y_pred)\n", 123 | "print(\"Accuracy:\", accuracy)\n", 124 | "\n", 125 | "# Print correct and wrong predictions\n", 126 | "print(\"\\nCorrect predictions:\")\n", 127 | "for i in range(len(y_test)):\n", 128 | " if y_pred[i] == y_test[i]:\n", 129 | " print(\"Predicted:\", y_pred[i], \"Actual:\", y_test[i])\n", 130 | "\n", 131 | "print(\"\\nWrong predictions:\")\n", 132 | "for i in range(len(y_test)):\n", 133 | " if y_pred[i] != y_test[i]:\n", 134 | " print(\"Predicted:\", y_pred[i], \"Actual:\", y_test[i])\n" 135 | ] 136 | } 137 | ], 138 | "metadata": { 139 | "kaggle": { 140 | "accelerator": "none", 141 | "dataSources": [], 142 | "dockerImageVersionId": 30746, 143 | "isGpuEnabled": false, 144 | "isInternetEnabled": true, 145 | "language": "python", 146 | "sourceType": "notebook" 147 | }, 148 | "kernelspec": { 149 | "display_name": "Python 3", 150 | "language": "python", 151 | "name": "python3" 152 | }, 153 | "language_info": { 154 | "codemirror_mode": { 155 | "name": "ipython", 156 | "version": 3 157 | }, 158 | "file_extension": ".py", 159 | "mimetype": "text/x-python", 160 | "name": "python", 161 | "nbconvert_exporter": "python", 162 | "pygments_lexer": "ipython3", 163 | "version": "3.10.13" 164 | }, 165 | "papermill": { 166 | "default_parameters": {}, 167 | "duration": 5.877774, 168 | "end_time": "2024-07-21T18:45:11.873906", 169 | "environment_variables": {}, 170 | "exception": null, 171 | "input_path": "__notebook__.ipynb", 172 | "output_path": "__notebook__.ipynb", 173 | "parameters": {}, 174 | "start_time": "2024-07-21T18:45:05.996132", 175 | "version": "2.5.0" 176 | } 177 | }, 178 | "nbformat": 4, 179 | "nbformat_minor": 5 180 | } 181 | -------------------------------------------------------------------------------- /program5.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "4c54070c", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.002108, 9 | "end_time": "2024-07-21T18:21:22.560873", 10 | "exception": false, 11 | "start_time": "2024-07-21T18:21:22.558765", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "5)Aim: Demonstrate the text classifier using Naïve bayes classifier algorithm. Program: Write a program to implement the naive Bayesian classifier for a sample training data set stored as a .CSV file. Compute the accuracy of the classifier, considering few test data sets." 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "9fd869f7", 24 | "metadata": { 25 | "execution": { 26 | "iopub.execute_input": "2024-07-21T18:21:22.565886Z", 27 | "iopub.status.busy": "2024-07-21T18:21:22.565488Z", 28 | "iopub.status.idle": "2024-07-21T18:21:24.724688Z", 29 | "shell.execute_reply": "2024-07-21T18:21:24.723559Z" 30 | }, 31 | "papermill": { 32 | "duration": 2.164594, 33 | "end_time": "2024-07-21T18:21:24.727190", 34 | "exception": false, 35 | "start_time": "2024-07-21T18:21:22.562596", 36 | "status": "completed" 37 | }, 38 | "tags": [] 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "\n", 46 | "RangeIndex: 150 entries, 0 to 149\n", 47 | "Data columns (total 6 columns):\n", 48 | " # Column Non-Null Count Dtype \n", 49 | "--- ------ -------------- ----- \n", 50 | " 0 Unnamed: 0 150 non-null int64 \n", 51 | " 1 SepalLengthCm 150 non-null object \n", 52 | " 2 SepalWidthCm 149 non-null float64\n", 53 | " 3 PetalLengthCm 149 non-null object \n", 54 | " 4 PetalWidthCm 150 non-null float64\n", 55 | " 5 Species 149 non-null object \n", 56 | "dtypes: float64(2), int64(1), object(3)\n", 57 | "memory usage: 7.2+ KB\n", 58 | "None\n", 59 | " Unnamed: 0 SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm \\\n", 60 | "0 1 5.1 3.5 1.4 0.2 \n", 61 | "1 2 4.9 NaN 1.4 0.2 \n", 62 | "2 3 4.7 3.2 1.3 0.2 \n", 63 | "3 4 ?? 3.1 1.5 0.2 \n", 64 | "4 5 5 3.6 ### 0.2 \n", 65 | "\n", 66 | " Species \n", 67 | "0 Iris-setosa \n", 68 | "1 NaN \n", 69 | "2 Iris-setosa \n", 70 | "3 Iris-setosa \n", 71 | "4 Iris-setosa \n", 72 | "['Iris-setosa' nan 'Iris-versicolor' 'Iris-virginica']\n", 73 | "Accuracy: 93.33%\n" 74 | ] 75 | } 76 | ], 77 | "source": [ 78 | "import pandas as pd\n", 79 | "import numpy as np\n", 80 | "from sklearn.model_selection import train_test_split\n", 81 | "from collections import defaultdict\n", 82 | "\n", 83 | "class NaiveBayesClassifier:\n", 84 | " def __init__(self):\n", 85 | " self.priors = {}\n", 86 | " self.likelihoods = defaultdict(dict)\n", 87 | "\n", 88 | " def fit(self, X, y):\n", 89 | " self.classes = np.unique(y)\n", 90 | " total_samples = len(y)\n", 91 | "\n", 92 | " for cls in self.classes:\n", 93 | " X_cls = X[y == cls]\n", 94 | " self.priors[cls] = len(X_cls) / total_samples\n", 95 | "\n", 96 | " for column in X.columns:\n", 97 | " self.likelihoods[column][cls] = X_cls[column].value_counts(normalize=True).to_dict()\n", 98 | "\n", 99 | " def predict(self, X):\n", 100 | " results = []\n", 101 | "\n", 102 | " for i in range(len(X)):\n", 103 | " posteriors = {}\n", 104 | "\n", 105 | " for cls in self.classes:\n", 106 | " prior = np.log(self.priors[cls])\n", 107 | " likelihood = sum(\n", 108 | " np.log(self.likelihoods[col].get(cls, {}).get(X.iloc[i][col], 1e-6))\n", 109 | " for col in X.columns\n", 110 | " )\n", 111 | " posteriors[cls] = prior + likelihood\n", 112 | "\n", 113 | " results.append(max(posteriors, key=posteriors.get))\n", 114 | "\n", 115 | " return results\n", 116 | "\n", 117 | " def accuracy(self, y_true, y_pred):\n", 118 | " return np.mean(np.array(y_true) == np.array(y_pred))\n", 119 | "\n", 120 | "# Load data from CSV file\n", 121 | "data = pd.read_csv('/kaggle/input/iris-dataset/Iris_data_sample.csv')\n", 122 | "\n", 123 | "# Inspect data for inconsistencies\n", 124 | "print(data.info())\n", 125 | "print(data.head())\n", 126 | "\n", 127 | "# Check for NaN values and data types in target column\n", 128 | "print(data.iloc[:, -1].unique())\n", 129 | "\n", 130 | "# Separate features and target variable\n", 131 | "X = data.iloc[:, :-1]\n", 132 | "y = data.iloc[:, -1]\n", 133 | "\n", 134 | "# Clean target variable to ensure consistent data type\n", 135 | "y = y.astype(str)\n", 136 | "\n", 137 | "# Split data into training and testing sets\n", 138 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", 139 | "\n", 140 | "# Initialize and train the Naive Bayes Classifier\n", 141 | "nb_classifier = NaiveBayesClassifier()\n", 142 | "nb_classifier.fit(X_train, y_train)\n", 143 | "\n", 144 | "# Make predictions on the test set\n", 145 | "y_pred = nb_classifier.predict(X_test)\n", 146 | "\n", 147 | "# Compute the accuracy\n", 148 | "accuracy = nb_classifier.accuracy(y_test, y_pred)\n", 149 | "print(f'Accuracy: {accuracy * 100:.2f}%')\n" 150 | ] 151 | } 152 | ], 153 | "metadata": { 154 | "kaggle": { 155 | "accelerator": "none", 156 | "dataSources": [ 157 | { 158 | "datasetId": 5367700, 159 | "sourceId": 8923926, 160 | "sourceType": "datasetVersion" 161 | } 162 | ], 163 | "dockerImageVersionId": 30746, 164 | "isGpuEnabled": false, 165 | "isInternetEnabled": true, 166 | "language": "python", 167 | "sourceType": "notebook" 168 | }, 169 | "kernelspec": { 170 | "display_name": "Python 3", 171 | "language": "python", 172 | "name": "python3" 173 | }, 174 | "language_info": { 175 | "codemirror_mode": { 176 | "name": "ipython", 177 | "version": 3 178 | }, 179 | "file_extension": ".py", 180 | "mimetype": "text/x-python", 181 | "name": "python", 182 | "nbconvert_exporter": "python", 183 | "pygments_lexer": "ipython3", 184 | "version": "3.10.13" 185 | }, 186 | "papermill": { 187 | "default_parameters": {}, 188 | "duration": 5.475488, 189 | "end_time": "2024-07-21T18:21:25.249105", 190 | "environment_variables": {}, 191 | "exception": null, 192 | "input_path": "__notebook__.ipynb", 193 | "output_path": "__notebook__.ipynb", 194 | "parameters": {}, 195 | "start_time": "2024-07-21T18:21:19.773617", 196 | "version": "2.5.0" 197 | } 198 | }, 199 | "nbformat": 4, 200 | "nbformat_minor": 5 201 | } 202 | -------------------------------------------------------------------------------- /program3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "9a44e3aa", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.002553, 9 | "end_time": "2024-07-21T16:49:30.098649", 10 | "exception": false, 11 | "start_time": "2024-07-21T16:49:30.096096", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "**3)Aim: To construct the Decision tree using the training data sets under supervised learning concept. Program: Write a program to demonstrate the working of the decision tree based ID3 algorithm. Use an appropriate data set for building the decision tree and apply this knowledge to classify a new sample**" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "815ba59f", 24 | "metadata": { 25 | "execution": { 26 | "iopub.execute_input": "2024-07-21T16:49:30.106000Z", 27 | "iopub.status.busy": "2024-07-21T16:49:30.105482Z", 28 | "iopub.status.idle": "2024-07-21T16:49:31.166308Z", 29 | "shell.execute_reply": "2024-07-21T16:49:31.165149Z" 30 | }, 31 | "papermill": { 32 | "duration": 1.067837, 33 | "end_time": "2024-07-21T16:49:31.169127", 34 | "exception": false, 35 | "start_time": "2024-07-21T16:49:30.101290", 36 | "status": "completed" 37 | }, 38 | "tags": [] 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "Constructed Decision Tree:\n", 46 | "{'Outlook': {'Overcast': 'Yes', 'Rain': {'Wind': {'Strong': 'No', 'Weak': 'Yes'}}, 'Sunny': {'Humidity': {'High': 'No', 'Normal': 'Yes'}}}}\n", 47 | "\n", 48 | "Classification Result for the Sample:\n", 49 | "No\n" 50 | ] 51 | } 52 | ], 53 | "source": [ 54 | "import numpy as np\n", 55 | "import pandas as pd\n", 56 | "from collections import Counter\n", 57 | "\n", 58 | "# Defining the dataset\n", 59 | "data = [\n", 60 | " [\"Outlook\", \"Temperature\", \"Humidity\", \"Wind\", \"PlayTennis\"],\n", 61 | " [\"Sunny\", \"Hot\", \"High\", \"Weak\", \"No\"],\n", 62 | " [\"Sunny\", \"Hot\", \"High\", \"Strong\", \"No\"],\n", 63 | " [\"Overcast\", \"Hot\", \"High\", \"Weak\", \"Yes\"],\n", 64 | " [\"Rain\", \"Mild\", \"High\", \"Weak\", \"Yes\"],\n", 65 | " [\"Rain\", \"Cool\", \"Normal\", \"Weak\", \"Yes\"],\n", 66 | " [\"Rain\", \"Cool\", \"Normal\", \"Strong\", \"No\"],\n", 67 | " [\"Overcast\", \"Cool\", \"Normal\", \"Strong\", \"Yes\"],\n", 68 | " [\"Sunny\", \"Mild\", \"High\", \"Weak\", \"No\"],\n", 69 | " [\"Sunny\", \"Cool\", \"Normal\", \"Weak\", \"Yes\"],\n", 70 | " [\"Rain\", \"Mild\", \"Normal\", \"Weak\", \"Yes\"],\n", 71 | " [\"Sunny\", \"Mild\", \"Normal\", \"Strong\", \"Yes\"],\n", 72 | " [\"Overcast\", \"Mild\", \"High\", \"Strong\", \"Yes\"],\n", 73 | " [\"Overcast\", \"Hot\", \"Normal\", \"Weak\", \"Yes\"],\n", 74 | " [\"Rain\", \"Mild\", \"High\", \"Strong\", \"No\"]\n", 75 | "]\n", 76 | "\n", 77 | "# Creating a DataFrame from the dataset\n", 78 | "df = pd.DataFrame(data[1:], columns=data[0])\n", 79 | "\n", 80 | "def entropy(target_col):\n", 81 | " elements, counts = np.unique(target_col, return_counts=True)\n", 82 | " entropy = np.sum([(-counts[i]/np.sum(counts)) * np.log2(counts[i]/np.sum(counts)) for i in range(len(elements))])\n", 83 | " return entropy\n", 84 | "\n", 85 | "def information_gain(data, split_attribute, target_attribute):\n", 86 | " total_entropy = entropy(data[target_attribute])\n", 87 | " values, counts = np.unique(data[split_attribute], return_counts=True)\n", 88 | " weighted_entropy = np.sum([(counts[i]/np.sum(counts)) * entropy(data[data[split_attribute] == values[i]][target_attribute]) for i in range(len(values))])\n", 89 | " information_gain = total_entropy - weighted_entropy\n", 90 | " return information_gain\n", 91 | "\n", 92 | "def ID3(data, original_data, features, target_attribute, parent_node_class=None):\n", 93 | " if len(np.unique(data[target_attribute])) <= 1:\n", 94 | " return np.unique(data[target_attribute])[0]\n", 95 | " elif len(data) == 0:\n", 96 | " return np.unique(original_data[target_attribute])[np.argmax(np.unique(original_data[target_attribute], return_counts=True)[1])]\n", 97 | " elif len(features) == 0:\n", 98 | " return parent_node_class\n", 99 | " else:\n", 100 | " parent_node_class = np.unique(data[target_attribute])[np.argmax(np.unique(data[target_attribute], return_counts=True)[1])]\n", 101 | " item_values = [information_gain(data, feature, target_attribute) for feature in features]\n", 102 | " best_feature_index = np.argmax(item_values)\n", 103 | " best_feature = features[best_feature_index]\n", 104 | " tree = {best_feature: {}}\n", 105 | " features = [i for i in features if i != best_feature]\n", 106 | " for value in np.unique(data[best_feature]):\n", 107 | " value_sub_data = data[data[best_feature] == value]\n", 108 | " subtree = ID3(value_sub_data, original_data, features, target_attribute, parent_node_class)\n", 109 | " tree[best_feature][value] = subtree\n", 110 | " return tree\n", 111 | "\n", 112 | "def classify(sample, tree):\n", 113 | " for attribute in list(sample.keys()):\n", 114 | " if attribute in tree.keys():\n", 115 | " try:\n", 116 | " result = tree[attribute][sample[attribute]]\n", 117 | " except KeyError:\n", 118 | " return None\n", 119 | " if isinstance(result, dict):\n", 120 | " return classify(sample, result)\n", 121 | " else:\n", 122 | " return result\n", 123 | "\n", 124 | "# List of features\n", 125 | "features = list(df.columns[:-1])\n", 126 | "\n", 127 | "# Target attribute\n", 128 | "target_attribute = df.columns[-1]\n", 129 | "\n", 130 | "# Constructing the decision tree\n", 131 | "decision_tree = ID3(df, df, features, target_attribute)\n", 132 | "\n", 133 | "# Sample to classify\n", 134 | "sample = {\n", 135 | " \"Outlook\": \"Sunny\",\n", 136 | " \"Temperature\": \"Cool\",\n", 137 | " \"Humidity\": \"High\",\n", 138 | " \"Wind\": \"Strong\"\n", 139 | "}\n", 140 | "\n", 141 | "# Classifying the sample\n", 142 | "classification_result = classify(sample, decision_tree)\n", 143 | "\n", 144 | "print(\"Constructed Decision Tree:\")\n", 145 | "print(decision_tree)\n", 146 | "\n", 147 | "print(\"\\nClassification Result for the Sample:\")\n", 148 | "print(classification_result)\n" 149 | ] 150 | } 151 | ], 152 | "metadata": { 153 | "kaggle": { 154 | "accelerator": "none", 155 | "dataSources": [], 156 | "dockerImageVersionId": 30746, 157 | "isGpuEnabled": false, 158 | "isInternetEnabled": true, 159 | "language": "python", 160 | "sourceType": "notebook" 161 | }, 162 | "kernelspec": { 163 | "display_name": "Python 3", 164 | "language": "python", 165 | "name": "python3" 166 | }, 167 | "language_info": { 168 | "codemirror_mode": { 169 | "name": "ipython", 170 | "version": 3 171 | }, 172 | "file_extension": ".py", 173 | "mimetype": "text/x-python", 174 | "name": "python", 175 | "nbconvert_exporter": "python", 176 | "pygments_lexer": "ipython3", 177 | "version": "3.10.13" 178 | }, 179 | "papermill": { 180 | "default_parameters": {}, 181 | "duration": 4.65122, 182 | "end_time": "2024-07-21T16:49:31.692954", 183 | "environment_variables": {}, 184 | "exception": null, 185 | "input_path": "__notebook__.ipynb", 186 | "output_path": "__notebook__.ipynb", 187 | "parameters": {}, 188 | "start_time": "2024-07-21T16:49:27.041734", 189 | "version": "2.5.0" 190 | } 191 | }, 192 | "nbformat": 4, 193 | "nbformat_minor": 5 194 | } 195 | -------------------------------------------------------------------------------- /program6.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "938a2c62", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.002428, 9 | "end_time": "2024-07-21T18:28:56.380650", 10 | "exception": false, 11 | "start_time": "2024-07-21T18:28:56.378222", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "**6)Aim: Demonstrate and Analyse the results sets obtained from Bayesian belief network Principle. Program:- Write a program to construct a Bayesian network considering medical data. Use this model to demonstrate the diagnosis of heart patients using standard Heart Disease Data Set. You can use Python ML library classes/API.**" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "547613b1", 24 | "metadata": { 25 | "execution": { 26 | "iopub.execute_input": "2024-07-21T18:28:56.386295Z", 27 | "iopub.status.busy": "2024-07-21T18:28:56.385901Z", 28 | "iopub.status.idle": "2024-07-21T18:29:10.802399Z", 29 | "shell.execute_reply": "2024-07-21T18:29:10.800946Z" 30 | }, 31 | "papermill": { 32 | "duration": 14.422076, 33 | "end_time": "2024-07-21T18:29:10.804868", 34 | "exception": false, 35 | "start_time": "2024-07-21T18:28:56.382792", 36 | "status": "completed" 37 | }, 38 | "tags": [] 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (1.26.4)\r\n", 46 | "Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (2.2.2)\r\n", 47 | "Collecting pgmpy\r\n", 48 | " Downloading pgmpy-0.1.25-py3-none-any.whl.metadata (6.4 kB)\r\n", 49 | "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas) (2.9.0.post0)\r\n", 50 | "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas) (2023.3.post1)\r\n", 51 | "Requirement already satisfied: tzdata>=2022.7 in /opt/conda/lib/python3.10/site-packages (from pandas) (2023.4)\r\n", 52 | "Requirement already satisfied: networkx in /opt/conda/lib/python3.10/site-packages (from pgmpy) (3.2.1)\r\n", 53 | "Requirement already satisfied: scipy in /opt/conda/lib/python3.10/site-packages (from pgmpy) (1.11.4)\r\n", 54 | "Requirement already satisfied: scikit-learn in /opt/conda/lib/python3.10/site-packages (from pgmpy) (1.2.2)\r\n", 55 | "Requirement already satisfied: pyparsing in /opt/conda/lib/python3.10/site-packages (from pgmpy) (3.1.1)\r\n", 56 | "Requirement already satisfied: torch in /opt/conda/lib/python3.10/site-packages (from pgmpy) (2.1.2+cpu)\r\n", 57 | "Requirement already satisfied: statsmodels in /opt/conda/lib/python3.10/site-packages (from pgmpy) (0.14.1)\r\n", 58 | "Requirement already satisfied: tqdm in /opt/conda/lib/python3.10/site-packages (from pgmpy) (4.66.4)\r\n", 59 | "Requirement already satisfied: joblib in /opt/conda/lib/python3.10/site-packages (from pgmpy) (1.4.2)\r\n", 60 | "Requirement already satisfied: opt-einsum in /opt/conda/lib/python3.10/site-packages (from pgmpy) (3.3.0)\r\n", 61 | "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\r\n", 62 | "Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from scikit-learn->pgmpy) (3.2.0)\r\n", 63 | "Requirement already satisfied: patsy>=0.5.4 in /opt/conda/lib/python3.10/site-packages (from statsmodels->pgmpy) (0.5.6)\r\n", 64 | "Requirement already satisfied: packaging>=21.3 in /opt/conda/lib/python3.10/site-packages (from statsmodels->pgmpy) (21.3)\r\n", 65 | "Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (3.13.1)\r\n", 66 | "Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (4.9.0)\r\n", 67 | "Requirement already satisfied: sympy in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (1.13.0)\r\n", 68 | "Requirement already satisfied: jinja2 in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (3.1.2)\r\n", 69 | "Requirement already satisfied: fsspec in /opt/conda/lib/python3.10/site-packages (from torch->pgmpy) (2024.5.0)\r\n", 70 | "Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.10/site-packages (from jinja2->torch->pgmpy) (2.1.3)\r\n", 71 | "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /opt/conda/lib/python3.10/site-packages (from sympy->torch->pgmpy) (1.3.0)\r\n", 72 | "Downloading pgmpy-0.1.25-py3-none-any.whl (2.0 MB)\r\n", 73 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m20.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n", 74 | "\u001b[?25hInstalling collected packages: pgmpy\r\n", 75 | "Successfully installed pgmpy-0.1.25\r\n", 76 | "Note: you may need to restart the kernel to use updated packages.\n" 77 | ] 78 | } 79 | ], 80 | "source": [ 81 | "pip install numpy pandas pgmpy" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 2, 87 | "id": "ebc6b632", 88 | "metadata": { 89 | "execution": { 90 | "iopub.execute_input": "2024-07-21T18:29:10.813026Z", 91 | "iopub.status.busy": "2024-07-21T18:29:10.812065Z", 92 | "iopub.status.idle": "2024-07-21T18:29:19.482367Z", 93 | "shell.execute_reply": "2024-07-21T18:29:19.481285Z" 94 | }, 95 | "papermill": { 96 | "duration": 8.67744, 97 | "end_time": "2024-07-21T18:29:19.485274", 98 | "exception": false, 99 | "start_time": "2024-07-21T18:29:10.807834", 100 | "status": "completed" 101 | }, 102 | "tags": [] 103 | }, 104 | "outputs": [ 105 | { 106 | "name": "stdout", 107 | "output_type": "stream", 108 | "text": [ 109 | "Sample instances from the dataset are given below:\n", 110 | " age gender cp trestbps chol fbs restecg thalach exang oldpeak \\\n", 111 | "0 63 1 1 145 233 1 2 150 0 2.3 \n", 112 | "1 67 1 4 160 286 0 2 108 1 1.5 \n", 113 | "2 67 1 4 120 229 0 2 129 1 2.6 \n", 114 | "3 37 1 3 130 250 0 0 187 0 3.5 \n", 115 | "4 41 0 2 130 204 0 2 172 0 1.4 \n", 116 | "\n", 117 | " slope ca thal heartdisease \n", 118 | "0 3 0 6 0 \n", 119 | "1 2 3 3 2 \n", 120 | "2 2 2 7 1 \n", 121 | "3 3 0 3 0 \n", 122 | "4 1 0 3 0 \n", 123 | "\n", 124 | "Attributes and datatypes:\n", 125 | "age int64\n", 126 | "gender int64\n", 127 | "cp int64\n", 128 | "trestbps int64\n", 129 | "chol int64\n", 130 | "fbs int64\n", 131 | "restecg int64\n", 132 | "thalach int64\n", 133 | "exang int64\n", 134 | "oldpeak float64\n", 135 | "slope int64\n", 136 | "ca object\n", 137 | "thal object\n", 138 | "heartdisease int64\n", 139 | "dtype: object\n", 140 | "\n", 141 | "Column names in the dataset:\n", 142 | "Index(['age', 'gender', 'cp', 'trestbps', 'chol', 'fbs', 'restecg', 'thalach',\n", 143 | " 'exang', 'oldpeak', 'slope', 'ca', 'thal', 'heartdisease'],\n", 144 | " dtype='object')\n", 145 | "\n", 146 | "Learning CPD using Maximum likelihood estimators\n", 147 | "\n", 148 | "Inferencing with Bayesian Network:\n", 149 | "\n", 150 | "1. Probability of HeartDisease given evidence= restecg\n", 151 | "+-----------------+---------------------+\n", 152 | "| heartdisease | phi(heartdisease) |\n", 153 | "+=================+=====================+\n", 154 | "| heartdisease(0) | 0.1386 |\n", 155 | "+-----------------+---------------------+\n", 156 | "| heartdisease(1) | 0.0000 |\n", 157 | "+-----------------+---------------------+\n", 158 | "| heartdisease(2) | 0.2403 |\n", 159 | "+-----------------+---------------------+\n", 160 | "| heartdisease(3) | 0.2174 |\n", 161 | "+-----------------+---------------------+\n", 162 | "| heartdisease(4) | 0.4036 |\n", 163 | "+-----------------+---------------------+\n", 164 | "\n", 165 | "2. Probability of HeartDisease given evidence= cp\n", 166 | "+-----------------+---------------------+\n", 167 | "| heartdisease | phi(heartdisease) |\n", 168 | "+=================+=====================+\n", 169 | "| heartdisease(0) | 0.3791 |\n", 170 | "+-----------------+---------------------+\n", 171 | "| heartdisease(1) | 0.1944 |\n", 172 | "+-----------------+---------------------+\n", 173 | "| heartdisease(2) | 0.1533 |\n", 174 | "+-----------------+---------------------+\n", 175 | "| heartdisease(3) | 0.1355 |\n", 176 | "+-----------------+---------------------+\n", 177 | "| heartdisease(4) | 0.1377 |\n", 178 | "+-----------------+---------------------+\n" 179 | ] 180 | } 181 | ], 182 | "source": [ 183 | "import numpy as np\n", 184 | "import pandas as pd\n", 185 | "from pgmpy.estimators import MaximumLikelihoodEstimator\n", 186 | "from pgmpy.models import BayesianModel\n", 187 | "from pgmpy.inference import VariableElimination\n", 188 | "\n", 189 | "# Load the dataset\n", 190 | "heartDisease = pd.read_csv('/kaggle/input/heart-disease-csv/heartdisease.csv')\n", 191 | "heartDisease = heartDisease.replace('?', np.nan)\n", 192 | "\n", 193 | "# Print sample instances and data types\n", 194 | "print('Sample instances from the dataset are given below:')\n", 195 | "print(heartDisease.head())\n", 196 | "\n", 197 | "print('\\nAttributes and datatypes:')\n", 198 | "print(heartDisease.dtypes)\n", 199 | "\n", 200 | "# Ensure the column names are correct\n", 201 | "print('\\nColumn names in the dataset:')\n", 202 | "print(heartDisease.columns)\n", 203 | "\n", 204 | "# Define the model structure with the correct column names\n", 205 | "model = BayesianModel([\n", 206 | " ('age', 'heartdisease'), # 'heartdisease' corresponds to the target variable\n", 207 | " ('exang', 'heartdisease'),\n", 208 | " ('cp', 'heartdisease'),\n", 209 | " ('heartdisease', 'restecg'),\n", 210 | " ('heartdisease', 'chol')\n", 211 | "])\n", 212 | "\n", 213 | "# Learning CPD using Maximum Likelihood Estimators\n", 214 | "print('\\nLearning CPD using Maximum likelihood estimators')\n", 215 | "model.fit(heartDisease, estimator=MaximumLikelihoodEstimator)\n", 216 | "\n", 217 | "# Inferencing with Bayesian Network\n", 218 | "print('\\nInferencing with Bayesian Network:')\n", 219 | "HeartDisease_infer = VariableElimination(model)\n", 220 | "\n", 221 | "# Queries\n", 222 | "print('\\n1. Probability of HeartDisease given evidence= restecg')\n", 223 | "q1 = HeartDisease_infer.query(variables=['heartdisease'], evidence={'restecg': 1})\n", 224 | "print(q1)\n", 225 | "\n", 226 | "print('\\n2. Probability of HeartDisease given evidence= cp')\n", 227 | "q2 = HeartDisease_infer.query(variables=['heartdisease'], evidence={'cp': 1})\n", 228 | "print(q2)\n" 229 | ] 230 | } 231 | ], 232 | "metadata": { 233 | "kaggle": { 234 | "accelerator": "none", 235 | "dataSources": [ 236 | { 237 | "datasetId": 5424296, 238 | "sourceId": 9004019, 239 | "sourceType": "datasetVersion" 240 | } 241 | ], 242 | "dockerImageVersionId": 30746, 243 | "isGpuEnabled": false, 244 | "isInternetEnabled": true, 245 | "language": "python", 246 | "sourceType": "notebook" 247 | }, 248 | "kernelspec": { 249 | "display_name": "Python 3", 250 | "language": "python", 251 | "name": "python3" 252 | }, 253 | "language_info": { 254 | "codemirror_mode": { 255 | "name": "ipython", 256 | "version": 3 257 | }, 258 | "file_extension": ".py", 259 | "mimetype": "text/x-python", 260 | "name": "python", 261 | "nbconvert_exporter": "python", 262 | "pygments_lexer": "ipython3", 263 | "version": "3.10.13" 264 | }, 265 | "papermill": { 266 | "default_parameters": {}, 267 | "duration": 27.002744, 268 | "end_time": "2024-07-21T18:29:20.611726", 269 | "environment_variables": {}, 270 | "exception": null, 271 | "input_path": "__notebook__.ipynb", 272 | "output_path": "__notebook__.ipynb", 273 | "parameters": {}, 274 | "start_time": "2024-07-21T18:28:53.608982", 275 | "version": "2.5.0" 276 | } 277 | }, 278 | "nbformat": 4, 279 | "nbformat_minor": 5 280 | } 281 | -------------------------------------------------------------------------------- /program10.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "972bb47e", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.002727, 9 | "end_time": "2024-07-21T18:55:01.677684", 10 | "exception": false, 11 | "start_time": "2024-07-21T18:55:01.674957", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "**10. Implement and demonstrate the working of SVM algorithm for classification.**" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "65e76d7c", 24 | "metadata": { 25 | "execution": { 26 | "iopub.execute_input": "2024-07-21T18:55:01.684070Z", 27 | "iopub.status.busy": "2024-07-21T18:55:01.683648Z", 28 | "iopub.status.idle": "2024-07-21T18:55:03.770743Z", 29 | "shell.execute_reply": "2024-07-21T18:55:03.769465Z" 30 | }, 31 | "papermill": { 32 | "duration": 2.093758, 33 | "end_time": "2024-07-21T18:55:03.773783", 34 | "exception": false, 35 | "start_time": "2024-07-21T18:55:01.680025", 36 | "status": "completed" 37 | }, 38 | "tags": [] 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | "Accuracy: 0.7333333333333333\n" 46 | ] 47 | }, 48 | { 49 | "data": { 50 | "image/png": "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", 51 | "text/plain": [ 52 | "
" 53 | ] 54 | }, 55 | "metadata": {}, 56 | "output_type": "display_data" 57 | } 58 | ], 59 | "source": [ 60 | "# Importing necessary libraries\n", 61 | "import numpy as np\n", 62 | "import matplotlib.pyplot as plt\n", 63 | "from sklearn import datasets\n", 64 | "from sklearn.model_selection import train_test_split\n", 65 | "from sklearn.preprocessing import StandardScaler\n", 66 | "from sklearn.svm import SVC\n", 67 | "from sklearn.metrics import accuracy_score\n", 68 | "\n", 69 | "# Load the iris dataset\n", 70 | "iris = datasets.load_iris()\n", 71 | "X = iris.data[:, :2] # Taking only the first two features for simplicity\n", 72 | "y = iris.target\n", 73 | "\n", 74 | "# Splitting the dataset into training and testing sets\n", 75 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n", 76 | "\n", 77 | "# Feature scaling\n", 78 | "sc = StandardScaler()\n", 79 | "X_train = sc.fit_transform(X_train)\n", 80 | "X_test = sc.transform(X_test)\n", 81 | "\n", 82 | "# Training the SVM model\n", 83 | "svm_classifier = SVC(kernel='linear', random_state=42)\n", 84 | "svm_classifier.fit(X_train, y_train)\n", 85 | "\n", 86 | "# Predicting the test set results\n", 87 | "y_pred = svm_classifier.predict(X_test)\n", 88 | "\n", 89 | "# Calculating the accuracy of the model\n", 90 | "accuracy = accuracy_score(y_test, y_pred)\n", 91 | "print(\"Accuracy:\", accuracy)\n", 92 | "\n", 93 | "# Visualizing the decision boundary\n", 94 | "def plot_decision_boundary(classifier, X, y):\n", 95 | " x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n", 96 | " y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n", 97 | " xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),\n", 98 | " np.arange(y_min, y_max, 0.1))\n", 99 | " Z = classifier.predict(np.c_[xx.ravel(), yy.ravel()])\n", 100 | " Z = Z.reshape(xx.shape)\n", 101 | " plt.contourf(xx, yy, Z, alpha=0.4, cmap=plt.cm.coolwarm)\n", 102 | " plt.scatter(X[:, 0], X[:, 1], c=y, s=20, edgecolors='k', cmap=plt.cm.coolwarm)\n", 103 | " plt.xlabel('Feature 1')\n", 104 | " plt.ylabel('Feature 2')\n", 105 | " plt.title('SVM Decision Boundary')\n", 106 | " plt.show()\n", 107 | "\n", 108 | "# Plotting decision boundary\n", 109 | "plot_decision_boundary(svm_classifier, X_train, y_train)\n" 110 | ] 111 | } 112 | ], 113 | "metadata": { 114 | "kaggle": { 115 | "accelerator": "none", 116 | "dataSources": [], 117 | "dockerImageVersionId": 30746, 118 | "isGpuEnabled": false, 119 | "isInternetEnabled": false, 120 | "language": "python", 121 | "sourceType": "notebook" 122 | }, 123 | "kernelspec": { 124 | "display_name": "Python 3", 125 | "language": "python", 126 | "name": "python3" 127 | }, 128 | "language_info": { 129 | "codemirror_mode": { 130 | "name": "ipython", 131 | "version": 3 132 | }, 133 | "file_extension": ".py", 134 | "mimetype": "text/x-python", 135 | "name": "python", 136 | "nbconvert_exporter": "python", 137 | "pygments_lexer": "ipython3", 138 | "version": "3.10.13" 139 | }, 140 | "papermill": { 141 | "default_parameters": {}, 142 | "duration": 5.97488, 143 | "end_time": "2024-07-21T18:55:04.301514", 144 | "environment_variables": {}, 145 | "exception": null, 146 | "input_path": "__notebook__.ipynb", 147 | "output_path": "__notebook__.ipynb", 148 | "parameters": {}, 149 | "start_time": "2024-07-21T18:54:58.326634", 150 | "version": "2.5.0" 151 | } 152 | }, 153 | "nbformat": 4, 154 | "nbformat_minor": 5 155 | } 156 | -------------------------------------------------------------------------------- /program7.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "4a19aa53", 6 | "metadata": { 7 | "papermill": { 8 | "duration": 0.003095, 9 | "end_time": "2024-07-21T18:41:38.854166", 10 | "exception": false, 11 | "start_time": "2024-07-21T18:41:38.851071", 12 | "status": "completed" 13 | }, 14 | "tags": [] 15 | }, 16 | "source": [ 17 | "**7)Aim: Implement and demonstrate the working model of K-means clustering algorithm with Expectation Maximization Concept. Program: Apply EM algorithm to cluster a set of data stored in a .CSV file. Use the same data set for clustering using k-Means algorithm. Compare the results of these two algorithms and comment on the quality of clustering. You can add Python ML library classes/API in the program.**" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "4c01320a", 24 | "metadata": { 25 | "execution": { 26 | "iopub.execute_input": "2024-07-21T18:41:38.861223Z", 27 | "iopub.status.busy": "2024-07-21T18:41:38.860794Z", 28 | "iopub.status.idle": "2024-07-21T18:41:43.054309Z", 29 | "shell.execute_reply": "2024-07-21T18:41:43.052802Z" 30 | }, 31 | "papermill": { 32 | "duration": 4.201147, 33 | "end_time": "2024-07-21T18:41:43.058389", 34 | "exception": false, 35 | "start_time": "2024-07-21T18:41:38.857242", 36 | "status": "completed" 37 | }, 38 | "tags": [] 39 | }, 40 | "outputs": [ 41 | { 42 | "name": "stdout", 43 | "output_type": "stream", 44 | "text": [ 45 | " 5.1 3.5 1.4 0.2 Iris-setosa\n", 46 | "0 4.9 3.0 1.4 0.2 Iris-setosa\n", 47 | "1 4.7 3.2 1.3 0.2 Iris-setosa\n", 48 | "2 4.6 3.1 1.5 0.2 Iris-setosa\n", 49 | "3 5.0 3.6 1.4 0.2 Iris-setosa\n", 50 | "4 5.4 3.9 1.7 0.4 Iris-setosa\n", 51 | "Index(['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'], dtype='object')\n", 52 | "Number of columns: 5\n", 53 | "The Adjusted Rand Index of K-Means: 0.6150051194844962\n", 54 | "The Silhouette Score of K-Means: 0.45655541185952575\n" 55 | ] 56 | }, 57 | { 58 | "name": "stderr", 59 | "output_type": "stream", 60 | "text": [ 61 | "/opt/conda/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n", 62 | " warnings.warn(\n" 63 | ] 64 | }, 65 | { 66 | "name": "stdout", 67 | "output_type": "stream", 68 | "text": [ 69 | "The Adjusted Rand Index of GMM: 0.9025775147114491\n", 70 | "The Silhouette Score of GMM: 0.37020510233493803\n" 71 | ] 72 | }, 73 | { 74 | "data": { 75 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABbIAAAIQCAYAAABUlpjmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXhTZdrH8e9J0oWu0FI2QRZZK4i4MIAKKCqriiAIAgKKCqKjo6K4o6PjvswI7q+gbIKgoKAssogjKuAIUhwdVFxAFtlaCt2SPO8fsaGhTZqWpE3L79Or1zQnz3Kf4/ty59x58sQyxhhERERERERERERERCKUrbIDEBEREREREREREREJRIVsEREREREREREREYloKmSLiIiIiIiIiIiISERTIVtEREREREREREREIpoK2SIiIiIiIiIiIiIS0VTIFhEREREREREREZGIpkK2iIiIiIiIiIiIiEQ0FbJFREREREREREREJKKpkC0iIiIiIiIiIiIiEU2FbBEpt59//hnLspg2bVplhyIiIiIiIiJyXCzLYtKkSZU2f/fu3enevbvPsd27d3PFFVeQmpqKZVk8//zzrF69GsuyWL16dYXH2KRJE0aNGlXh84qACtki1cK0adOwLMv763A4OOmkkxg1ahQ7duyo7PBERESqlcK8u2HDBp/jmZmZdOzYkdjYWJYsWcKkSZOwLAubzcZvv/1WbJysrCxq1KiBZVncdNNNFRW+iIhIuWzbto2bbrqJli1bEhcXR1xcHOnp6YwfP55vvvnGp215c2DhYinLsnjkkUdKjGPYsGFYlkVCQkLQsW/cuJHhw4fTqFEjYmJiSElJ4cILL2Tq1Km4XK6gx6kMf/vb31i6dCl3330306dPp1evXmGfc+3atUyaNImDBw+GfS6RsnBUdgAiEjoPP/wwTZs2JTc3ly+++IJp06bx73//m4yMDGJjYys7PBERkWorKyuLiy++mG+++Yb33nuPXr168cUXXwAQExPD7NmzufPOO336vPvuu5URqoiISJktWrSIK6+8EofDwbBhw2jfvj02m43vvvuOd999l5deeolt27bRuHFjn37lzYGxsbHMnj2b++67z+f44cOHWbhwYZnub19//XXGjh1L3bp1GTFiBC1atODQoUOsWLGCa6+9lp07d3LPPfcEPV44LVu2rNixlStXctlll3HHHXd4j7Vs2ZKcnByio6PDEsfatWt56KGHGDVqFDVr1vR57vvvv8dm07pYqRwqZItUI7179+ass84CYMyYMdSuXZsnnniC999/n8GDB1dydCIiItXToUOH6NmzJxs3buTdd9+ld+/ePs/36dOnxJv4WbNm0bdvX+bPn1+R4YqIiJTJjz/+yJAhQ2jcuDErVqygfv36Ps8/8cQTvPjiiyUWN8ubA/v06cO7777Lpk2baN++vff4woULyc/Pp1evXqxcubLU2L/44gvGjh1L586d+fDDD0lMTPQ+d+utt7JhwwYyMjJKHaeilFSY3rNnT7Fiss1mq7TFajExMZUyrwhoaxGRau28884DPC88Cn333XdcccUVpKSkEBsby1lnncX777/v02///v3ccccdtGvXjoSEBJKSkujduzebNm2q0PhFREQiXXZ2Nr169eI///kP8+fPp2/fvsXaXHXVVWzcuJHvvvvOe2zXrl2sXLmSq666qsRx8/LyePDBB2nevDkxMTE0atSIO++8k7y8PJ92U6dO5YILLqBOnTrExMSQnp7OSy+9VGy8Jk2a0K9fP/797397tz9p1qwZb731lk+7goICHnroIVq0aEFsbCypqamce+65LF++vDyXR0REqoEnn3ySw4cPM3Xq1GJFbACHw8Ff//pXGjVqVOy58uRAgM6dO9O0aVNmzZrlc3zmzJn06tWLlJSUoGJ/6KGHsCyLmTNn+hSxC5111lkB93v+5ZdfuPHGG2nVqhU1atQgNTWVQYMG8fPPP/u0CyZ/7tq1i9GjR9OwYUNiYmKoX78+l112mc9YRffILtzKzBjDlClTvFuuAH73yP7yyy/p06cPtWrVIj4+ntNOO41//vOf3ue/+eYbRo0aRbNmzYiNjaVevXpcc8017Nu3z9tm0qRJTJgwAYCmTZt65y2Ms6Q9sn/66ScGDRpESkoKcXFxdOrUicWLF/u0KYx57ty5PProozRs2JDY2Fh69OjBDz/84Pe/gUhRWpEtUo0VJppatWoBsGXLFs455xxOOukkJk6cSHx8PHPnzqV///7Mnz+fyy+/HPAkoQULFjBo0CCaNm3K7t27eeWVV+jWrRvffvstDRo0qKxTEhERiRiHDx+md+/erF+/nnnz5tGvX78S23Xt2pWGDRsya9YsHn74YQDmzJlDQkJCiYVvt9vNpZdeyr///W+uv/562rRpw+bNm3nuuef43//+x4IFC7xtX3rpJU499VQuvfRSHA4HH3zwATfeeCNut5vx48f7jPvDDz9wxRVXcO211zJy5EjeeOMNRo0axZlnnsmpp54KeG5eH3vsMcaMGUPHjh3Jyspiw4YN/Oc//+Giiy4K0ZUTEZGqZNGiRTRv3py//OUvZe5b1hxY1NChQ5kxYwaPP/44lmWxd+9eli1bxvTp01myZEmpcx85coQVK1bQtWtXTj755DLHDrB+/XrWrl3LkCFDaNiwIT///DMvvfQS3bt359tvvyUuLg4ILn8OHDiQLVu2cPPNN9OkSRP27NnD8uXL+fXXX2nSpEmxubt27cr06dMZMWIEF110EVdffXXAWJcvX06/fv2oX78+t9xyC/Xq1eO///0vixYt4pZbbvG2+emnnxg9ejT16tVjy5YtvPrqq2zZsoUvvvgCy7IYMGAA//vf/5g9ezbPPfcctWvXBiAtLa3EeXfv3k2XLl04cuQIf/3rX0lNTeXNN9/k0ksvZd68ed46Q6HHH38cm83GHXfcQWZmJk8++STDhg3jyy+/LNN/GzlBGRGp8qZOnWoA8/HHH5s//vjD/Pbbb2bevHkmLS3NxMTEmN9++80YY0yPHj1Mu3btTG5urrev2+02Xbp0MS1atPAey83NNS6Xy2eObdu2mZiYGPPwww/7HAPM1KlTw3uCIiIiEaQw7zZu3NhERUWZBQsWlNjuwQcfNID5448/zB133GGaN2/ufe7ss882o0ePNsYYA5jx48d7n5s+fbqx2Wzm008/9Rnv5ZdfNoD57LPPvMeOHDlSbN6ePXuaZs2a+Rxr3LixAcyaNWu8x/bs2WNiYmLM7bff7j3Wvn1707dv32Aug4iInAAyMzMNYPr371/suQMHDpg//vjD+1s0J5U3BxbeYz711FMmIyPDAN58OGXKFJOQkGAOHz5sRo4caeLj4wPGvmnTJgOYW265JejzBcyDDz7ofVxSnv38888NYN566y3vsdLy54EDB7znFUi3bt1Mt27disVU9BoZY8yqVasMYFatWmWMMcbpdJqmTZuaxo0bmwMHDvi0dbvdAc9n9uzZxV4jPPXUUwYw27ZtK9a+cePGZuTIkd7Ht956q89/J2OMOXTokGnatKlp0qSJt7ZQGHObNm1MXl6et+0///lPA5jNmzeXeE1EitLWIiLVyIUXXkhaWhqNGjXiiiuuID4+nvfff5+GDRuyf/9+Vq5cyeDBgzl06BB79+5l79697Nu3j549e7J161Z27NgBePa8KtzfzOVysW/fPhISEmjVqhX/+c9/KvMURUREIsbu3buJjY0t8aPUx7rqqqv44YcfWL9+vfd//X2k+p133qFNmza0bt3am6/37t3LBRdcAMCqVau8bWvUqOH9OzMzk71799KtWzd++uknMjMzfcZNT0/3bjsGnpVVrVq14qeffvIeq1mzJlu2bGHr1q3BXQQREanWsrKyAEhISCj2XPfu3UlLS/P+TpkypcQxypIDizr11FM57bTTmD17NuDZV/uyyy7zroIONvaSthQJVtE8W1BQwL59+2jevDk1a9b0uTcuLX/WqFGD6OhoVq9ezYEDB8odjz9ff/0127Zt49Zbby22n3bhdiSFcRTKzc1l7969dOrUCaDc9/offvghHTt25Nxzz/UeS0hI4Prrr+fnn3/m22+/9Wk/evRon73AC1+bFH09IuKPCtki1ciUKVNYvnw58+bNo0+fPuzdu9f7RQw//PADxhjuv/9+nxcbaWlpPPjgg4DnSyTA85Hm5557jhYtWhATE0Pt2rVJS0vjm2++KXZTLCIicqJ65ZVXiI6OplevXnz//fcB23bo0IHWrVsza9YsZs6cSb169byF6WNt3bqVLVu2FMvXLVu2BI7ma4DPPvuMCy+8kPj4eGrWrElaWhr33HMPQLGcXdLHqmvVquVzQ/3www9z8OBBWrZsSbt27ZgwYQLffPNNcBdERESqncIicHZ2drHnXnnlFZYvX86MGTMCjlGWHHisq666infeeYcffviBtWvXBlUAL5SUlAR4vpS5vHJycnjggQdo1KiRz73xwYMHffJsafkzJiaGJ554go8++oi6devStWtXnnzySXbt2lXu2Ioq/F6stm3bBmy3f/9+brnlFurWrUuNGjVIS0ujadOmQPHXDcH65ZdfaNWqVbHjbdq08T5f1LGvRwq3Qg1HgV+qH+2RLVKNdOzYkbPOOguA/v37c+6553LVVVfx/fff43a7Abjjjjvo2bNnif2bN28OwD/+8Q/uv/9+rrnmGv7+97+TkpKCzWbj1ltv9Y4jIiJyoktPT+fDDz+kR48eXHTRRXz22WcBV2dfddVVvPTSSyQmJnLllVd6P/10LLfbTbt27Xj22WdLfL5wjh9//JEePXrQunVrnn32WRo1akR0dDQffvghzz33XLGcbbfbSxzPGOP9u2vXrvz4448sXLiQZcuW8frrr/Pcc8/x8ssvM2bMmIDXQ0REqp/k5GTq169PRkZGsecK98w+9osPSxJsDjzW0KFDufvuu7nuuutITU3l4osvDjr25s2b43A42Lx5c9B9jnXzzTczdepUbr31Vjp37kxycjKWZTFkyBCfPBtM/rz11lu55JJLWLBgAUuXLuX+++/nscceY+XKlXTo0KHcMZbF4MGDWbt2LRMmTOD0008nISEBt9tNr169KuxeP5jXIyL+qJAtUk3Z7XYee+wxzj//fCZPnsw111wDQFRUFBdeeGHAvvPmzeP888/n//7v/3yOHzx40PtFDyIiIuJ5E3nBggX07duXiy66iE8//dTvlyFdddVVPPDAA+zcuZPp06f7HfOUU05h06ZN9OjRw+fjwMf64IMPyMvL4/333/dZ3VR065HySElJYfTo0YwePZrs7Gy6du3KpEmTVMgWETlB9e3bl9dff51169bRsWPHco0RbA481sknn8w555zD6tWrGTduHA5H8GWsuLg4LrjgAlauXMlvv/0W1FZgx5o3bx4jR47kmWee8R7Lzc3l4MGDxdoGkz9POeUUbr/9dm6//Xa2bt3K6aefzjPPPFPqqvbSnHLKKQBkZGT4vd8/cOAAK1as4KGHHuKBBx7wHi9pO5RArz+O1bhx4xI/mfbdd995nxcJFW0tIlKNde/enY4dO/L888+TlJRE9+7deeWVV9i5c2extn/88Yf3b7vdXuzd0Hfeece7h7aIiIgc1aNHD2bPns0PP/xAr169vHtyHuuUU07h+eef57HHHgtYCBg8eDA7duzgtddeK/ZcTk4Ohw8fBo6uaCqaszMzM5k6dWq5z2Xfvn0+jxMSEmjevDl5eXnlHlNERKq2O++8k7i4OK655hp2795d7PlgVtIGmwNL8sgjj/Dggw9y8803l6kfwIMPPogxhhEjRpS4PcpXX33Fm2++6bd/SffGL7zwAi6Xy+dYafnzyJEj5Obm+rQ55ZRTSExMDEmOPeOMM2jatCnPP/98sSJ7YfwlvW4AeP7554uNFx8fD1Biwf5Yffr0Yd26dXz++efeY4cPH+bVV1+lSZMmpKenl+FMRALTimyRam7ChAkMGjSIadOmMWXKFM4991zatWvHddddR7Nmzdi9ezeff/4527dvZ9OmTQD069ePhx9+mNGjR9OlSxc2b97MzJkzadasWSWfjYiISGS6/PLLee2117jmmmu49NJLWbJkSYntbrnlllLHGjFiBHPnzmXs2LGsWrWKc845B5fLxXfffcfcuXNZunQpZ511FhdffDHR0dFccskl3HDDDWRnZ/Paa69Rp06dEt+0DkZ6ejrdu3fnzDPPJCUlhQ0bNjBv3jxuuummco0nIiJVX4sWLZg1axZDhw6lVatWDBs2jPbt22OMYdu2bcyaNQubzUbDhg0DjhNMDixJt27d6NatW7n6dunShSlTpnDjjTfSunVrRowYQYsWLTh06BCrV6/m/fff55FHHvHbv1+/fkyfPp3k5GTS09P5/PPP+fjjj0lNTfVpV1r+/N///kePHj0YPHgw6enpOBwO3nvvPXbv3s2QIUPKdW5F2Ww2XnrpJS655BJOP/10Ro8eTf369fnuu+/YsmULS5cuJSkpybs3d0FBASeddBLLli1j27ZtxcY788wzAbj33nsZMmQIUVFRXHLJJd4Cd1ETJ05k9uzZ9O7dm7/+9a+kpKTw5ptvsm3bNubPnx/0NjIiwVAhW6SaGzBgAKeccgpPP/001113HRs2bOChhx5i2rRp7Nu3jzp16tChQwefjxbdc889HD58mFmzZjFnzhzOOOMMFi9ezMSJEyvxTERERCLb6NGj2b9/P3fccQeDBg2iffv25RrHZrOxYMECnnvuOd566y3ee+894uLiaNasGbfccov3Sx9btWrFvHnzuO+++7jjjjuoV68e48aNIy0tzbulWFn99a9/5f3332fZsmXk5eXRuHFjHnnkESZMmFCu8UREpHq47LLL2Lx5M8888wzLli3jjTfewLIsGjduTN++fRk7dmy581643XDDDZx99tk888wzvPXWW/zxxx8kJCRwxhlnMHXqVIYPH+637z//+U/sdjszZ84kNzeXc845h48//rjY906Vlj8bNWrE0KFDWbFiBdOnT8fhcNC6dWvmzp3LwIEDQ3KePXv2ZNWqVTz00EM888wzuN1uTjnlFK677jpvm1mzZnHzzTczZcoUjDFcfPHFfPTRRzRo0MBnrLPPPpu///3vvPzyyyxZsgS32822bdtKLGTXrVuXtWvXctddd/HCCy+Qm5vLaaedxgcffEDfvn1Dcm4ihSyj3dRFREREREREREREJIJpfb+IiIiIiIiIiIiIRDQVskVEREREREREREQkoqmQLSIiIiIiIiIiIiIRTYVsEREREREREREREYloKmSLiIiIiIiIiIiISERTIVtEREREREREREREIpqjsgMINbfbze+//05iYiKWZVV2OCIiUg0ZYzh06BANGjTAZtN7wuWlnC0iIuGkfB0aytciIhJOZcnX1a6Q/fvvv9OoUaPKDkNERE4Av/32Gw0bNqzsMKos5WwREakIytfHR/laREQqQjD5utoVshMTEwHPySclJVVyNCIiUh1lZWXRqFEjb86R8lHOFhGRcFK+Dg3laxERCaey5OtqV8gu/KhTUlKSkqyIiISVPl57fJSzRUSkIihfHx/laxERqQjB5GttFCYiIiIiIiIiIiIiEU2FbBERERERERERERGJaCpki4iIiIiIiIiIiEhEUyFbRERERERERERERCKaCtkiIiIiIiIiIiIiEtFUyBYRERERERERERGRiKZCtoiIiIiIiIiIiIhENBWyRURERERERERERCSiqZAtIiIiIiIiIiIiIhFNhWwRERERERERERERiWgqZIuIiIiIiIiIiIhIRFMhW0REREREREREREQimgrZIiIiIiIiIiIiIhLRHJUdgIiIlI0xhtWrV/PRRx+Rn5/P2WefzcCBA4mNjS3zWG63mxUrVrBs2TKcTid/+ctfGDBgANHR0WzdupXZs2ezd+9eGjduzPDhw6lbt24YzkhERKSa+uUXmDkTdu2CBg1g+HBo2LB8Y/30E8yaBXv2eMYYMQLq14fsbJg9GzIyIC4OLr8cOnYM7XmIiIhUYznkMJe5fM3XxBBDP/pxLudiYZV5rMMcZg5z2MQmalCDS7mUznQGYBWrWMIS8snnbM7mCq4ghphQn061ZhljTGUHEUpZWVkkJyeTmZlJUlJSZYcjIhJSO3bsoF+/fmzcuBGHw4FlWRQUFJCamsr8+fPp1q1b0GP98ssv9O3bly1btviMlZaWRqdOnfjggw+w2+3YbDZcLhc2m41HHnmEu+66K4xnWDUo14SGrqOIVFtuN0yYAM89Bzab59ftBmNg4kR45BGwgrw5drngllvgxRePjuVyefoPGgSLFsHhw+BweMZ3OuH882H+fKhVK7znGeGUZ0JD11FEqrPlLGcwgznIQaKIwmBw4qQjHXmf96lL8Iu5FrGIq7iKQxzyGetszuYIR9jCFhw4sLAooIBUUnmXd+lK1zCeYeQrS55RIVtEpIrIz8+nffv2/PDDDzidTp/nbDYb0dHRbNy4kVatWpU6Vk5ODm3btuXXX38tNlZpXnvtNcaMGVOmPtWNck1o6DqKSLX10EMwaZL/55980lPoDsbEiZ72Zblts9vhnHNg9ergC+bVkPJMaOg6ikh19Q3fcDZnU0ABBt88a8dOW9ryFV9hx17qWBvYQGc648JVbCx/bNiIIYaNbKQlLct1DtVBWfKM9sgWEaki3n33Xb777rsSC89utxun08mzzz4b1Fhz5szhp59+KnMRG2DSpEm4XK4y9xMRETkhZGd7Cs+BPPoo5OaWPtaBA/D882UrYoNnxfaaNfDvf5etn4iIyAnkSZ7EjbvEwrMLF5vYxId8GNRYj/EY5s+fYLlxU0ABz/Fc0H1OdCpki4hUEfPnz8dm8//PttPpZM6cOUGN9c477wQcK5AdO3bw1VdflauviIhItbd8ORw5ErhNZiZ88knpY330EeTllS8OhwPmzStfXxERkWrOYJjHPJz4X9zlwME8Ss+lTpwsZCEuyr7gy4mTt3m7zP1OVCpki4hUEYcOHcLtdgdsc6S0G+c/ZWVllTpWabGIiIhICbKzQ9cu2LHC1V9ERKSacuEij8BvFrtwcYjS733zyCtXEbvQEYK7jxcVskVEqow2bdrgcDj8Pm9ZFi1bBrev1qmnnhpwrEDKMo+IiMgJp3Xr0LVr06b8cbjdx9dfRESkGnPgoClNA7axYaMNpefSOOKoT/1yxWFh0YrSv+dKPFTIFhGpIq6//vpS97QeP358UGPdcMMN5dof226307t3bxo1alTmviIiIieEs86C007zfOFiSex26NwZTj219LHOPRdatoTybAdmt8PIkWXvJyIicoIYz3hsAUqjbtyMYUyp41hY3MiNAccqLQ4JjgrZIiJVRJs2bXj44YcBiu1vbbPZuOCCC7j22muDGqtDhw7cfffdgGeFdVGWZWGz2bAfcwPucDioVasWL7zwQnlPQUREpPqzLJg6FWJjixez7XaIj4dXXw1+rDffhJiYksey24sXuQsfv/gipKWV7xxEREROAOMZT2c6FytAFz5+kidLXbVd6DZu40zO9DvWsX8XPu5BD67hmvKEf0JSIVtEpAq5//77mTlzJunp6d5jaWlpPPjggyxevJjo6Oigx3r00UeZNm0arVod/RhTvXr1ePTRR/n888/p06ePt2AeHR3N8OHD2bBhA82aNQvdCYmIiFRHZ5wB69bBgAFHC9AOBwweDOvXQ9u2wY/VqRN88QVccsnRInVUFAwdCl99BbfdBsnJR9t37AiLF8OY0leQiYiInMhiiWU5y7mHe0ghxXu8Pe15h3e4gzuCHiuOOFaykju5k5rU9B4/kzNZwAJmMMNnm5I61GESk1jEIqKICsn5nAgsY4yp7CBCKSsri+TkZDIzM0lKSqrscEREwsIYw+7du8nPz6dBgwbl3u+6cKxdu3bhdDpp0KCBz0rszMxMDhw4QFpaGvHx8aEIvVpQrgkNXUcROSEcOgT79kHt2pCQcHxjZWXB/v2eldZF83J+PuzaBTVqaBV2EcozoaHrKCInggIK2MlOYoihLnVDMlYssdShjve4wbCb3eSTTwMa4KD89/HVSVnyjK6YiEgVZFkW9erVC9lY9euX/MUUycnJJBdd5SUiIiJlk5jo+Q2FpCTP77Gio+Hkk0Mzh4iIyAkoiihOJjS51N9YFhb1CM19/IlKW4uIiIiIiIiIiIiISERTIVtEREREREREREREIpoK2SIiIiIiIiIiIiIS0VTIFhEREREREREREZGIpkK2iIiIiIiIiIiIiEQ0FbJFREpx5MgRDhw4gDGmwud2u91s27aNvXv3VvjcIiIiVYnT6WT//v3k5+dXTgB79sAvv4DbXTnzi4iIVAEGQyaZZJNdKfMf4Qg/8iNHOFIp88vxUSFbRMSPFStW0KNHD+Lj40lJSaFhw4Y8/vjj5OXlhX3urKwsevXqRVRUFM2aNSMtLY2UlBSeeuqpsM8tIiJSlezYsYObbrqJ5ORkUlNTSUxMZPTo0WzdurViAnjkEahZE+rWhSZNIDoaLrkEjugGWUREpJALF5OZTAtaUJOaJJJIJzqxgAUVMv/nfE466cQTT3OaE088rWjFGtZUyPwSGpapjCWGYZSVlUVycjKZmZkkJSVVdjgiUkVNnTqVa6+9FpvNhsvl8h632Wx07dqVJUuWEBMTE5a5s7KyaNy4MQcPHizx+dGjR/PGG2+EZW4JjnJNaOg6isjx+vnnn+nUqRP79u3D6XR6jzscDuLi4lizZg3t27cPXwBDh8Lbb5f8XO3anhXacXHhm18CUp4JDV1HETlebtwMYQjzmAd4VmUD2LDhxs1jPMZEJoZt/qUspTe9vfMWZWHxPu/Tj35hm18CK0ue0YpsEZFj7N69mxtuuAFjjE8RGzxbfaxZs4Z//etfYZv/qquu8lvEBk+R/Ztvvgnb/CIiIlXF2LFj2bt3r08RGzzbjBw+fJjhw4eHb2uwzz/3X8QG2LsXRo0Kz9wiIiJVyCxm8Q7vYP78KeTGsx3X3dzNFraEbf7BDC6xiA2eovoQhoRtbgktFbJFRI7xxhtvFCtgF+V2u5k8eXJYbozdbjdLliwptd2ECRNCPreIiEhV8vPPP7N06VK/OdvlcpGRkcGXX34ZngDuuqv0NgsWhGduERGRKmQyk7EFKEHasfMKr4Rl7kUsIousgG0Oc9i7WlwimwrZIiLH2Lx5M5ZlBWzz66+/kpubG/K59+/fH7CIXuj7778P+dwiIiJVyZYtwa3cysjICE8AP/xQepuCAjhmtbiIiMiJJoMM7+rrkrhwsYlNYZl7JSuDareKVWGZX0JLhWwRkWPExcWVWsi22WxERUWFfO6EhISg2oVrf24REZGqIi7Ivadr1KgRngCio4NrZ9Mtl4iInNhqEDgXW1jEEx+WuZMIbm//BIK7F5fKpVdVIiLH6N+/f7G9NotyOBz069cPh8MR8rljY2OpW7duqe2GDh0a8rlFRESqki5dulCzZs2AbaKioujVq1d4AhgwoPQ2J5+sQraIiJzwruAKHPi/fzYYBhBEXi2HG7kxqHY3c3NY5pfQ0qsqEZFj9O7dm7Zt25ZYqLYsC7fbzV3B7ItZTg8//HDA52NiYrjnnnvCNr+IiEhVEBMTw9133+33ecuyGDduHKmpqeEJ4JFHoLRPZ/3jH+GZW0REpAq5lVtx4Chxn2w7dhrSkKGEZ7FWHerQjW4B23SmMw1pGJb5JbRUyBYROYbdbmfp0qWkp6cDnhXYDocDy7KIjo5m9uzZdOnSJWzzX3/99fztb38r8bmYmBjWrl1LdLAfZxYREanGJkyYwG233QZ48ndhzgYYPnw4Tz/9dPgmj4uDTz7xv8XIPffAsGHhm19ERKSKaEUrFrGIBBKwsHD8+QNwMiezkpVh21oE4GM+pi1tS3yuNa1ZzeqwzS2hZRljTGUHEUpZWVkkJyeTmZlJUlJw++CIiJTE7XazfPlyFi5cSG5uLqeddhpXX301KSkpFTL/jz/+yIQJE8jIyCA6OpohQ4YwceLEsGxpImWjXBMauo4iEipbt27lzTffZPv27dSpU4cRI0bQrl27ipk8P9+zOnv+fM+XO7ZvD88849lWRCqV8kxo6DqKSKhkk81MZrKOdThw0JOeXMqlAbcdCaUP+ZBHeIQ97CGNNO7mbi7l0gqZW/wrS54JayF7zZo1PPXUU3z11Vfs3LmT9957j/79+/ttv3r1as4///xix3fu3Em9evWCmlNJVkREwq065hrlbBERqW6qY55RvhYRkeqmLHkmrFuLHD58mPbt2zNlypQy9fv+++/ZuXOn97dOnTphilBERERAOVtERKQqUL4WEZETWVjX7vfu3ZvevXuXuV+dOnVK/QZyERERCR3lbBERkcinfC0iIieyiPyyx9NPP5369etz0UUX8dlnn1V2OCIiIuKHcraIiEjkU74WEZHqIKK+Max+/fq8/PLLnHXWWeTl5fH666/TvXt3vvzyS84444wS++Tl5ZGXl+d9nJWVVVHhioiInLCUs0VERCKf8rWIiFQnEVXIbtWqFa1atfI+7tKlCz/++CPPPfcc06dPL7HPY489xkMPPVRRIYqIiAjK2SIiIlWB8rWIiFQnEbm1SFEdO3bkhx9+8Pv83XffTWZmpvf3t99+q8DoREREpJBytoiISORTvhYRkaoqolZkl2Tjxo3Ur1/f7/MxMTHExMRUYEQicqIwxvD555/z/vvvk5OTQ/v27RkyZAhxcXFs376dGTNm8Pvvv1OvXj2GDRtG48aNycnJYe7cuXz99ddER0fTr18/zjvvPAA+/fRTFi9eTF5eHh06dGDw4MHUqFGjXHGtXr2ajz76iPz8fM4++2wGDhxIbGys3z7Z2dnMnj2bjIwM4uLi6N+/Px07dsSyLL99tm7dyuzZs9m7dy+NGzdm+PDh1K1bt8zxVjan08nixYv55JNPsCyLbt260bdvX+x2e2WHVu0oZ4tIpfn9d5gxA7Zvhzp1YNgwaNoUcnNh/nxYvx6io6F3b+je3dPn88/h/fchJwdOPx2uvBLi4jxjzJjhGbNePRg+HE4+uXxx/fILzJwJu3ZBgwaesRo29N/eGFi1CpYsgfx8OPtsuOIKCPRvZ3Y2zJ4NGRme+C+/HDp2LF+8lW3LFpgzBw4ehObNPdcrJaWyo6p2lK9FpLLkk8985rOOdThwcDEXcyEXArCOdSxgAUc4QjvaMYQhJJDA7/zODGawne3UoQ7DGEZTmpJLLvOYxwY2EE00velNd7pj4f8e158ccpjLXL7ma2KIoR/9OJdzA471C78wk5nsYhcNaMBwhtMQ/zneYFjFKpawhHzyOZuzuYIriKHq/Xt7kIPMZCb/438kksggBtGe9hUzuQmjQ4cOma+//tp8/fXXBjDPPvus+frrr80vv/xijDFm4sSJZsSIEd72zz33nFmwYIHZunWr2bx5s7nllluMzWYzH3/8cdBzZmZmGsBkZmaG/HxE5MTxxx9/mHPPPdcAxuFwmKioKAOYxMREM3jwYGOz2YzdbjdRUVHGbrcby7LMwIEDTc2aNQ1goqKijMPhMIA5/fTTTYcOHYqNVatWLbNs2bIyxbV9+3Zz+umnFxsrNTXVrF69usQ+7777rklISDCWZfnEdf7555v9+/cXa19QUGDGjBljAO852mw243A4zOOPP16u61lZNm/ebE4++WTvf5PC69W0aVOzZcuWco9bHXONcraIVElutzGTJhljtxtjsxkTFeX527KM6d/fmJQUY8Bz3OHw/N22rTFnneX52+HwPAfGJCYaM3iwZxy73Xes2283xuUKPi6Xy5jbbvP0LTqWzWbMPfd44j7W9u3GnH568bhSU4355JOS53n3XWMSEjzzFD3H8883poQcH7FycjzXHo5eL5vNmOhoY156qdzDVsc8o3wtIlXVWrPWpJk0g8FEmSjjMA6DwbQxbUwn08lgMA7jMFEmyljGMgkmwVxprjR2Yzc2YzNRJsrYjd1YxjKXm8tNikkpNtbp5nSz3WwvU1zLzDJT09QsNlZH09HsMruKtXcZl7nN3GYsYxm7sXvjshmbudfca9ymeI7/zfxm2pv2PueIwaSaVPOJ8ZPjI9Q0M83EmlhjGcvnel1mLjPZJrtcY5Ylz4S1kL1q1SoDFPsdOXKkMcaYkSNHmm7dunnbP/HEE+aUU04xsbGxJiUlxXTv3t2sXLmyTHMqyYrI8XK5XObss882dru9xH/DAv1alhV0W5vNZqKjo80333wTVFx5eXmmdevW3kL0sWPFxsaa7777zqfPZ5995i20H9vHbreb8847z7iPuZn+61//GvA8XnvttZBd63Das2ePqV27don/He12u6lTp47Zt29fucaujrlGOVtEqqR/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mE1Hq5CsrCySk5PJzMwkKSmp9A4iIhFq//79TJ8+nU2bNhEbG8ull17KxRdfHHAP7c2bNzN9+nT27NlDw4YNGTVqFM0Lb7CrAWMM69at4+233+bgwYOccsopjBo1ioYNG1ZoHMo1oaHrKCLVgssFH30EixdDXp6neD1iBCQn+++zfz+89RZ88w3ExsJll8FFF5W+h3ZVsmsXTJvm+cLLpCQYNAjOOafk1ehhojwTGrqOIlJdfMd3vMVb/M7v1Kc+IxhBOul+27tw8REfsZjF5JHHGZzBCEaQTIAcX8Xkk897vMcKVuDGTRe6MIQhQe8tHgplyTMqZIuIiJSRck1o6DqKiEg4Kc+Ehq6jiIiEU1nyTDV6y19EREREREREREREqiMVskVEREREREREREQkoqmQLSIiIiIiIiIiIiIRTYVsEREREREREREREYloKmSLiIiIiIiIiIiISERTIVtEREREREREREREIpqjsgMQETkRGGP49NNPWbx4MXl5eXTo0IHBgwdTo0YNfv31V2bMmMGuXbto0KABw4cPp2HDhhw5coQ5c+awceNGatSowaWXXkrnzp0BWL16NR999BH5+fmcffbZDBw4kNjYWL/zZ2dnM3v2bDIyMoiLi6N///507NgRy7Iq6hKUicvl4qOPPmLVqlUYYzjvvPO45JJLcDiUtkREJMy2b4cZM+D336FePRg+HE4+GXJyYO5c+PpriImBvn3hvPM8fT79FBYtgvx8OOMMGDQIatSAX36BmTNh1y5o0MAzVsOG/uc2BlatgiVLPGOdfTZccYVnvkj13Xfw9tuwfz80beo5x7S0yo5KRESquVxymcc8NrCBaKLpTW+60x2AtazlAz4gl1za054ruZI44viN35jBDHayk3rUYzjDOZmTySGHuczla74mhhj60Y9zORcL//fLv/ALM5nJLnbRgAYMZzgNCZDjK1kWWcxiFv/lvySQwEAGcgZnVHZYZWYZY0xlBxFKWVlZJCcnk5mZSVJSUmWHIyLC7t27ueSSS1i/fj0OhwPLsigoKKBWrVpccMEFvPvuu9hsNmw2G263G2MMV1xxBUuWLCErK4uoqCiMMTidTs466yxyc3PJyMjwGSs1NZX58+fTrVu3YvO/9957XH311Rw+fBiHw+Ed6/zzz2f+/PnUqlWrEq6Kf9999x19+/blp59+IioqCoCC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2Xyv11/+AgsWeK5jMC6/HCZP9vz3OHasc8+FuXPDcgonCuVrEalsFhYLWUhHOgKeVcAOHNiwEUUUfeiDhYUdu/c5gO50J5FELCyf4ydzMqdyarGxoolmOtPp7snygmc7kJWspCENAXyuYwIJLGYxLWgR1Fg1qckqVlGPesXGSiaZJSyhCU1CfxLHyTIV9C1olmXx3nvv0b9/f79t7rrrLhYvXuzzRWlDhgzh4MGDLFmyJKh5srKySE5OJjMzk6SkpOMNW0SqkR9++IE333yT3377jTp16jBixAjatWvHoUOHmDFjBuvXryc6OprevXvTt29fbDYby5cvZ+HCheTm5nLaaadx9dVXk5KSwvfff89bb73Fjh07qFevHldffTXp6emVfYoRa/369cyePZv9+/fTtGlTRo0aRePGjcs8jjGGdevW8fbbb3Pw4EFOOeUURo0aRcOGDcMQtX/VPdcoZ4tIZcrOzmbWrFl8+eWXOBwOevbsySWXXILdbmflypUsWLCAI0eO0LZtW0aOHElqaips3Qpvvgnbt0OdOjBiBLRrB1lZMHMmrF8P0dHQp4/ntxxbmJwQ9uyBadPgv/+FhAQYOBC6dQu+iF3Url2esb7/HpKSYNAgOOec8o1VTtU9zyhfi0hlMhhWs5p3eZdsskknnVGMIo00fuIn3uRNfuEX0khjGMM4ndPJJpuZzGQd63DgoCc9uZRLsWFjBStYyEKOcIS2tGUkI0kltbJPMyIVUMD7vM8yluHESSc6MZShQe17fax88nmP91jBCty46UIXhjCEuLJt2nZcypJnIqqQ3bVrV8444wyef/5577GpU6dy6623kplZ8jeU5uXlkZeX532clZVFo0aNlGRFRCRsqvsNnXK2iIhUB8rXytciIhL5ypKvI+rLHnft2kXdunV9jtWtW5esrCxycnJK7PPYY4+RnJzs/W3UqFFFhCoiInJCU84WERGJfMrXIiJSnURUIbs87r77bjIzM72/v/32W2WHJCIiIiVQzhYREYl8ytciIhKpImpzuHr16rF7926fY7t37yYpKYkaNWqU2CcmJoaYmJiKCE9ERET+pJwtIiIS+ZSvRUSkOomoFdmdO3dmxYoVPseWL19O586dKykiERERKYlytoiISORTvhYRkeokrIXs7OxsNm7cyMaNGwHYtm0bGzdu5NdffwU8H1m6+uqr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qPXnJ56K5sU6deqwcuXKYm/wXnfddTz00ENYllUsl1566aUB/70IVitasYhFJd7Hn8zJrGRlRG0tEk00H/MxzWkO+NYEalCD+cznDM6o5ChPTGH9XHzt2rWx2+3s3r3b5/ju3bupV69eUGNERUXRoUMHfvjhhxKfj4mJ0SpDkSoshRQ+4zM+4RPmM59ssmlDG0YxijrUKbHPBVzADnYwi1l8yZc4cNCTnlzCJSHbt7oBDfiar1nOchaykFxyOY3TuJqrfbY6iRRRUVG89dZbTJgwgenTp7Nnzx4aNmzIqFGjaN68eWWHJxGuIvI1KGeLVGmW5VmVffXVMG0abNsGKSlw1VVw1lkl90lNhc8+g08+gfnzITvbU6wdORLqlJzjyx6WxTPPPMPYsWN588032b59O3Xq1GHEiBG0a9cuJHOE3ODBcOGF8NZb8M03EBsLl10GF11U+h7ackJTvhaRYHTq1InffvuNuXPn8umnn2JZFueffz4DBw4s8f+3LcvigQceYOTIkUybNo1t27aRmprK0KFDOctfji+HHvRgBzuYyUzWsc57H38pl0bMtp1FnczJZJDBR3zEYhaTRx5ncAYjGEEyyZUd3gnLMiaYb2Epv7/85S907NiRF154AfBsEn/yySdz0003MXHixFL7u1wuTj31VPr06cOzzz5bavusrCySk5PJzMwkKSnpuOMXERE5VnXMNRWdr6F6XkcREYkc1THPKF+LiEh1U5Y8E/a3PG677TZGjhzJWWedRceOHXn++ec5fPjw/7N33/FRVekfxz937qRDKi0BpEsRWMWKuqCCggVBBWmKWLD/XF0bsoqLZV3Luroq4ooKioJSbLi6i2BDmgUUFVGRolQhkBBCSGbm/P4YGTJkJplJZjKT8H3nlZeZM+ee+9wb9cl57p1zufTSSwEYNWoUzZs354EHHgDgnnvu4YQTTqB9+/bs2rWLhx9+mPXr13PFFVdEO1QREZFDlvK1iIhI/FO+FhGRQ1nUC9lDhw7lt99+Y/z48WzZsoUjjzyS9957z/eAig0bNvgtQr9z507GjBnDli1byMrK4uijj2bRokV06dIl2qGKiIgcspSvRURE4p/ytYiIHMqivrRIbdPHnkREJNqUayJD51FERKJJeSYydB5FRCSawskzepqIiIiIiIiIiIiIiMQ1FbJFREREREREREREJK6p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DgeXXnppLUZVPQMGDKBx48Zh35VtWRbp6ekMGTIkSpGJiIjU3JVXXlnlBdvrrruulqKpvuTkZC6//PJKl0kJxu12c+2110YhKpFDmwrZcsizsHiRF0kkERv/BOXESQYZTGRijKILz+mczuVcDhB0uZSDC/Y2Ns1pzgM8EPX4REREauKWW27hyCOPrDCh3F8Q/te//kWzZs1iEVpYEhMTefHFF3E4HBWOxbZtbNuuUOS2bRvLsnjhhRdITU2tzXBFRETCcvjhh3P//fcDVMhnDoeD3r17c+WVV8YitLDdfffdtGvXLmC+3u/g515YlsWwYcMYNGhQbYQockhRIVsEOJETWcxizuEcX6E3gQRGMpLP+ZwOdIhxhKGxsPg3/+ZJnvRbJqQVrXicx/mIjziN03ztKaRwJVeyjGU0pWksQhYREQlZWloaH330EbfccgsZGRm+9mOOOYa33nqLa665JobRhad///588sknnH766b4JcHJyMpdddhkrVqzgmmuu8StY9+rViwULFnD++efHKmQREZGQjRs3junTp/str9GoUSPuuusu3n33XRITE2MYXeiys7NZvHgx119/PQ0aNPC1n3TSScybN49JkybRtm1bX3uLFi145JFHmDZtWrWfhyEiwVnGmKoXB65DCgsLycjIoKCggPR0LZMg4SuggJ3spDGNSaN662HFAw8eNrMZgyGPPL87sfPJZze7aUITUkiJYZQidZNyTWToPEpNlJaWsmXLFlJSUmjcuHGsw6mRnTt3UlhYSJMmTUhJOZCXS0pK2Lp1Kw0bNiQ7OzuGEYrUTcozkaHzKDVhjGHr1q2UlpaSl5dX6drZ8W7fvn1s2bKFBg0akJOT42s3xrBp0yaMMeTl5amALRKmcPJM3f0/iEiUZPz+Vdc5cNCc5gHfy/79S0REpK5KTEzksMMOi3UYEZGVlUVWVlaF9uTkZFq10oOYRUSk7rIsq04s+xWKpKSkgHnZsiyaNw889xaRyNJlIhERERERERERERGJaypki4iIiIiIiIiIiEhcUyFbREREREREREREROKaCtkiIiIiIiIiIiIiEtdUyBYRERERERERERGRuKZCtkgUFVHEGtZQSmnI22xhC7/yKx48IfV34yaffEooqW6YFcbaxz6/doOhkEJ2s7vG+xAREYk3LpeLtWvXkp+fH/I2RUVFrFmzhtLS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iIiIiIiIiIjENRWyRURERERERERERCSuqZAtIiIiIiIiIiIiInFNhWwRERERERERERERiWsqZIuIiIiIiIiIiIhIXFMhW0RERERERERERETimgrZIiIiIiIiIiIiIhLXVMgWERERERERERERkbimQraIiIiIiIiIiIiIxDUVskVEREREREREREQkrqmQLSIiIiIiIiIiIiJxTYVsEREREREREREREYlrKmSLiIiIiIiIiIiISFxTIVtERERERERERERE4poK2SIiIiIiIiIiIiIS11TIFhEREREREREREZG4FtVCdn5+PiNHjiQ9PZ3MzEwuv/xyioqKKt3mlFNOwbIsv++rr746mmGKiIgc0pSvRURE4p/ytYiIHOqc0Rx85MiRbN68mXnz5lFWVsall17KlVdeySuvvFLpdmPGjOGee+7xvU5NTY1mmCIiIoc05WsREZH4p3wtIiKHuqgVsletWsV7773HZ599xjHHHAPAE088wVlnncUjjzxCXl5e0G1TU1Np1qxZtEITERGR3ylfi4iIxD/laxERkSguLbJ48WIyMzN9SRagb9++OBwOli5dWum2L7/8Mo0aNaJr167ccccdFBcXB+27b98+CgsL/b5FREQkNLWVr0E5W0REpLqUr0VERKJ4R/aWLVto0qSJ/86cTrKzs9myZUvQ7UaMGEGrVq3Iy8vj66+/5vbbb2f16tXMmTMnYP8HHniACRMmRDR2ERGRQ0Vt5WtQzhYREaku5WsREZFqFLLHjh3Lgw8+WGmfVatWVTugK6+80vdzt27dyM3NpU+fPqxZs4Z27dpV6H/HHXfw5z//2fe6sLCQli1bVnv/IiIi9UG85WtQzhYRETmY8rWIiEjowi5k33zzzYwePbrSPm3btqVZs2Zs27bNr93lcpGfnx/W+lzHH388AD/99FPARJuUlERSUlLI44mIiBwK4i1fg3K2iIjIwZSvRUREQhd2Ibtx48Y0bty4yn49e/Zk165dfPHFFxx99NEALFiwAI/H40ueoVixYgUAubm54YYqIiJyyFK+FhERiX/K1yIiIqGL2sMeO3fuTP/+/RkzZgzLli3j008/5frrr2fYsGG+Jypv3LiRTp06sWzZMgDWrFnDvffeyxdffMG6det46623GDVqFL169aJ79+7RClVEROSQpXwtIiIS/5SvRUREoljIBu/TkTt16kSfPn0466yzOPnkk/n3v//te7+srIzVq1f7npqcmJjI+++/zxlnnEGnTp24+eabueCCC3j77bejGaaIiMghTflaREQk/ilfi4jIoc4yxphYBxFJhYWFZGRkUFBQQHp6eqzDERGReki5JjJ0HkVEJJqUZyJD51FERKIpnDwT1TuyRURERERERERERERqSoVsEREREREREREREYlrKmSLiIiIiIiIiIiISFxTIVtERERERERERERE4poK2SIiIiIiIiIiIiIS11TIFhEREREREREREZG4pkK2iIiIiIiIiIiIiMQ1FbJFREREREREREREJK6pkC0iIiIiIiIiIiIicU2FbBERERERERERERGJaypki4iIiIiIiIiIiEhcUyFbREREREREREREROKaCtkiIiIiIiIiIiIiEtdUyBYRERERERERERGRuKZCtoiIiIiIiIiIiIjENRWyRURERERERERERCSuqZAtIiIiIiIiIiIiInFNhWwRERERERERERERiWsqZIuIiIiIiIiIiIhIXFMhW0RERERERERERETimgrZIiIiIiIiIiIiIhLXVMgWERERERERERERkbimQraIiIiIiIiIiIiIxDUVskVEREREREREREQkrqmQLSIiIiIiIiIiIiJxTYVsEREREREREREREYlrKmSLiIiIiIiIiIiISFxTIbuuMQYKCqCoKNaRiIiISCVKKGEnO/HgiXUoIiIiEozbDfn5sG9frCMREZEqqJBdV3g88PTT0LEjZGZCw4Zw3HEwa1asIxMREZFylrCEAQwgjTSyyaYpTRnPeHazO9ahiYiIyH47dsCtt0JOjvc7LQ2GDoWvv451ZCIiEoQK2XWBxwOjRsG118JPPx1o/+ILGDIE7rkndrGJiIiIz5u8ycmczLu867sTezvb+Rt/44/8UcVsERGReLBtm/fGsH/+0/uJZ/DemT1nDhx/PHz8cWzjExGRgFTIrgtmz4aXX/b+bMyBds/vH1W++25YsaLWwxIREZED9rCHi7kYDx7cuP3ec+PmG77hHnTxWUREJOZuvRU2bPAWr8tzuaC0FIYP9/4sIiJxRYXsuuCpp8C2g7/vdHqXHREREZGYmcEMdrMbgwn4vhs3z/IspZTWcmQiIiLis3MnTJ8evFDt8cCmTfDuu7Ubl4iIVEmF7Lrg668rXikuz+XSHdkiIiIxtpKV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", 76 | "text/plain": [ 77 | "
" 78 | ] 79 | }, 80 | "metadata": {}, 81 | "output_type": "display_data" 82 | } 83 | ], 84 | "source": [ 85 | "import pandas as pd\n", 86 | "import numpy as np\n", 87 | "import matplotlib.pyplot as plt\n", 88 | "from sklearn.cluster import KMeans\n", 89 | "from sklearn.mixture import GaussianMixture\n", 90 | "from sklearn.preprocessing import StandardScaler\n", 91 | "from sklearn.metrics import silhouette_score, adjusted_rand_score\n", 92 | "\n", 93 | "# Load the dataset\n", 94 | "csv_path = \"/kaggle/input/iris2-csv/iris 2.csv\"\n", 95 | "dataset = pd.read_csv(csv_path)\n", 96 | "\n", 97 | "# Inspect columns\n", 98 | "print(dataset.head())\n", 99 | "print(dataset.columns)\n", 100 | "print(f\"Number of columns: {len(dataset.columns)}\")\n", 101 | "\n", 102 | "# Update column names based on inspection\n", 103 | "# Ensure the number of names matches the number of columns in the dataset\n", 104 | "names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']\n", 105 | "dataset.columns = names\n", 106 | "\n", 107 | "# Prepare features and labels\n", 108 | "X = dataset.iloc[:, :-1] # Features\n", 109 | "y = dataset['class'].map({'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2}) # Labels\n", 110 | "\n", 111 | "# Standardize features\n", 112 | "scaler = StandardScaler()\n", 113 | "X_scaled = scaler.fit_transform(X)\n", 114 | "\n", 115 | "plt.figure(figsize=(18, 6))\n", 116 | "\n", 117 | "# REAL PLOT\n", 118 | "plt.subplot(1, 3, 1)\n", 119 | "plt.title('Real')\n", 120 | "colormap = np.array(['red', 'lime', 'black'])\n", 121 | "plt.scatter(X_scaled[:, 2], X_scaled[:, 3], c=colormap[y])\n", 122 | "\n", 123 | "# K-Means Clustering\n", 124 | "kmeans_model = KMeans(n_clusters=3, random_state=0).fit(X_scaled)\n", 125 | "y_kmeans = kmeans_model.labels_\n", 126 | "plt.subplot(1, 3, 2)\n", 127 | "plt.title('KMeans')\n", 128 | "plt.scatter(X_scaled[:, 2], X_scaled[:, 3], c=colormap[y_kmeans])\n", 129 | "print('The Adjusted Rand Index of K-Means: ', adjusted_rand_score(y, y_kmeans))\n", 130 | "print('The Silhouette Score of K-Means: ', silhouette_score(X_scaled, y_kmeans))\n", 131 | "\n", 132 | "# Gaussian Mixture Model (GMM)\n", 133 | "gmm_model = GaussianMixture(n_components=3, random_state=0).fit(X_scaled)\n", 134 | "y_gmm = gmm_model.predict(X_scaled)\n", 135 | "plt.subplot(1, 3, 3)\n", 136 | "plt.title('GMM Classification')\n", 137 | "plt.scatter(X_scaled[:, 2], X_scaled[:, 3], c=colormap[y_gmm])\n", 138 | "print('The Adjusted Rand Index of GMM: ', adjusted_rand_score(y, y_gmm))\n", 139 | "print('The Silhouette Score of GMM: ', silhouette_score(X_scaled, y_gmm))\n", 140 | "\n", 141 | "plt.show()\n" 142 | ] 143 | } 144 | ], 145 | "metadata": { 146 | "kaggle": { 147 | "accelerator": "none", 148 | "dataSources": [ 149 | { 150 | "datasetId": 5424909, 151 | "sourceId": 9004888, 152 | "sourceType": "datasetVersion" 153 | } 154 | ], 155 | "dockerImageVersionId": 30746, 156 | "isGpuEnabled": false, 157 | "isInternetEnabled": true, 158 | "language": "python", 159 | "sourceType": "notebook" 160 | }, 161 | "kernelspec": { 162 | "display_name": "Python 3", 163 | "language": "python", 164 | "name": "python3" 165 | }, 166 | "language_info": { 167 | "codemirror_mode": { 168 | "name": "ipython", 169 | "version": 3 170 | }, 171 | "file_extension": ".py", 172 | "mimetype": "text/x-python", 173 | "name": "python", 174 | "nbconvert_exporter": "python", 175 | "pygments_lexer": "ipython3", 176 | "version": "3.10.13" 177 | }, 178 | "papermill": { 179 | "default_parameters": {}, 180 | "duration": 8.083042, 181 | "end_time": "2024-07-21T18:41:43.685526", 182 | "environment_variables": {}, 183 | "exception": null, 184 | "input_path": "__notebook__.ipynb", 185 | "output_path": "__notebook__.ipynb", 186 | "parameters": {}, 187 | "start_time": "2024-07-21T18:41:35.602484", 188 | "version": "2.5.0" 189 | } 190 | }, 191 | "nbformat": 4, 192 | "nbformat_minor": 5 193 | } 194 | --------------------------------------------------------------------------------