{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "7fHNlA6e9mLk", "outputId": "fae6ee37-4cb9-4af3-e661-60f2c79950c7" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Requirement already satisfied: pgmpy in /usr/local/lib/python3.9/dist-packages (0.1.22)\n", "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.9/dist-packages (from pgmpy) (1.2.2)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from pgmpy) (1.22.4)\n", "Requirement already satisfied: pandas in /usr/local/lib/python3.9/dist-packages (from pgmpy) (1.5.3)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.9/dist-packages (from pgmpy) (3.1)\n", "Requirement already satisfied: pyparsing in /usr/local/lib/python3.9/dist-packages (from pgmpy) (3.0.9)\n", "Requirement already satisfied: joblib in /usr/local/lib/python3.9/dist-packages (from pgmpy) (1.2.0)\n", "Requirement already satisfied: opt-einsum in /usr/local/lib/python3.9/dist-packages (from pgmpy) (3.3.0)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.9/dist-packages (from pgmpy) (4.65.0)\n", "Requirement already satisfied: statsmodels in /usr/local/lib/python3.9/dist-packages (from pgmpy) (0.13.5)\n", "Requirement already satisfied: torch in /usr/local/lib/python3.9/dist-packages (from pgmpy) (2.0.0+cu118)\n", "Requirement already satisfied: scipy in /usr/local/lib/python3.9/dist-packages (from pgmpy) (1.10.1)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.9/dist-packages (from pandas->pgmpy) (2022.7.1)\n", "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.9/dist-packages (from pandas->pgmpy) (2.8.2)\n", "Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.9/dist-packages (from scikit-learn->pgmpy) (3.1.0)\n", "Requirement already satisfied: patsy>=0.5.2 in /usr/local/lib/python3.9/dist-packages (from statsmodels->pgmpy) (0.5.3)\n", "Requirement already satisfied: packaging>=21.3 in /usr/local/lib/python3.9/dist-packages (from statsmodels->pgmpy) (23.1)\n", "Requirement already satisfied: sympy in /usr/local/lib/python3.9/dist-packages (from torch->pgmpy) (1.11.1)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.9/dist-packages (from torch->pgmpy) (4.5.0)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.9/dist-packages (from torch->pgmpy) (3.11.0)\n", "Requirement already satisfied: triton==2.0.0 in /usr/local/lib/python3.9/dist-packages (from torch->pgmpy) (2.0.0)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.9/dist-packages (from torch->pgmpy) (3.1.2)\n", "Requirement already satisfied: cmake in /usr/local/lib/python3.9/dist-packages (from triton==2.0.0->torch->pgmpy) (3.25.2)\n", "Requirement already satisfied: lit in /usr/local/lib/python3.9/dist-packages (from triton==2.0.0->torch->pgmpy) (16.0.1)\n", "Requirement already satisfied: six in /usr/local/lib/python3.9/dist-packages (from patsy>=0.5.2->statsmodels->pgmpy) (1.16.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.9/dist-packages (from jinja2->torch->pgmpy) (2.1.2)\n", "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.9/dist-packages (from sympy->torch->pgmpy) (1.3.0)\n" ] } ], "source": [ "!pip install pgmpy" ] }, { "cell_type": "code", "source": [ "import numpy as np\n", "import pandas as pd\n", "import csv\n", "from pgmpy.estimators import MaximumLikelihoodEstimator\n", "from pgmpy.models import BayesianModel\n", "from pgmpy.inference import VariableElimination" ], "metadata": { "id": "mYD5nYge-M1L" }, "execution_count": 2, "outputs": [] }, { "cell_type": "code", "source": [ "heartDisease = pd.read_csv('heart.csv')\n" ], "metadata": { "id": "SicB0xRR-TnU" }, "execution_count": 3, "outputs": [] }, { "cell_type": "code", "source": [ "print('Sample instances from the dataset are given below')\n", "print(heartDisease.head())" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Efs_-WCk_nY3", "outputId": "98450f94-80f0-415c-853b-25b25e5550d1" }, "execution_count": 4, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Sample instances from the dataset are given below\n", " age gender cp trestbps chol fbs restecg thalach exang oldpeak \\\n", "0 63 1 1 145 233 1 2 150 0 2.3 \n", "1 67 1 4 160 286 0 2 108 1 1.5 \n", "2 67 1 4 120 229 0 2 129 1 2.6 \n", "3 37 1 3 130 250 0 0 187 0 3.5 \n", "4 41 0 2 130 204 0 2 172 0 1.4 \n", "\n", " slope ca thal heartdisease \n", "0 3 0 6 0 \n", "1 2 3 3 2 \n", "2 2 2 7 1 \n", "3 3 0 3 0 \n", "4 1 0 3 0 \n" ] } ] }, { "cell_type": "code", "source": [ "print('\\n Attributes and datatypes')\n", "print(heartDisease.dtypes)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "dAIYVg7W_trr", "outputId": "a0f1e409-811f-40a4-fdc0-9adbf5f309d9" }, "execution_count": 5, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", " Attributes and datatypes\n", "age int64\n", "gender int64\n", "cp int64\n", "trestbps int64\n", "chol int64\n", "fbs int64\n", "restecg int64\n", "thalach int64\n", "exang int64\n", "oldpeak float64\n", "slope int64\n", "ca object\n", "thal object\n", "heartdisease int64\n", "dtype: object\n" ] } ] }, { "cell_type": "code", "source": [ "model= BayesianModel([('age','heartdisease'),('gender','heartdisease'),('exang','heartdisease'),('cp','heartdisease'),('heartdisease','restecg'),('heartdisease','chol')])" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Njbi_BN0AKGh", "outputId": "89643e23-4ca2-4b91-e080-d3c74e232825" }, "execution_count": 11, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.9/dist-packages/pgmpy/models/BayesianModel.py:8: FutureWarning: BayesianModel has been renamed to BayesianNetwork. Please use BayesianNetwork class, BayesianModel will be removed in future.\n", " warnings.warn(\n" ] } ] }, { "cell_type": "code", "source": [ "print('\\nLearning CPD using Maximum likelihood estimators')\n", "model.fit(heartDisease,estimator=MaximumLikelihoodEstimator)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "cdZ1tqVhDski", "outputId": "07d2b351-1106-4b23-9cf7-7989bba79c24" }, "execution_count": 12, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "Learning CPD using Maximum likelihood estimators\n" ] } ] }, { "cell_type": "code", "source": [ "print('\\n Inferencing with Bayesian Network:')\n", "HeartDiseasetest_infer = VariableElimination(model)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ptRiItyBEuQz", "outputId": "c8378dbc-a4f2-446e-b59b-8f50de372e92" }, "execution_count": 13, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", " Inferencing with Bayesian Network:\n" ] } ] }, { "cell_type": "code", "source": [ "print('\\n 1. Probability of HeartDisease given evidence= restecg')\n", "q1=HeartDiseasetest_infer.query(variables=['heartdisease'],evidence={'restecg':1})\n", "print(q1)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "NxxNITR9EgR-", "outputId": "f9b197dd-5483-4881-e980-6512d35caff3" }, "execution_count": 14, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", " 1. Probability of HeartDisease given evidence= restecg\n", "+-----------------+---------------------+\n", "| heartdisease | phi(heartdisease) |\n", "+=================+=====================+\n", "| heartdisease(0) | 0.1016 |\n", "+-----------------+---------------------+\n", "| heartdisease(1) | 0.0000 |\n", "+-----------------+---------------------+\n", "| heartdisease(2) | 0.2361 |\n", "+-----------------+---------------------+\n", "| heartdisease(3) | 0.2017 |\n", "+-----------------+---------------------+\n", "| heartdisease(4) | 0.4605 |\n", "+-----------------+---------------------+\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.9/dist-packages/pgmpy/models/BayesianModel.py:8: FutureWarning: BayesianModel has been renamed to BayesianNetwork. Please use BayesianNetwork class, BayesianModel will be removed in future.\n", " warnings.warn(\n" ] } ] }, { "cell_type": "code", "source": [ "print('\\n 2. Probability of HeartDisease given evidence= cp ')\n", "q2=HeartDiseasetest_infer.query(variables=['heartdisease'],evidence={'cp':2})\n", "print(q2)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "yD2r58HGGpZQ", "outputId": "1a13a181-fa7b-432d-f056-a127de72482b" }, "execution_count": 15, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", " 2. Probability of HeartDisease given evidence= cp \n", "+-----------------+---------------------+\n", "| heartdisease | phi(heartdisease) |\n", "+=================+=====================+\n", "| heartdisease(0) | 0.3742 |\n", "+-----------------+---------------------+\n", "| heartdisease(1) | 0.2018 |\n", "+-----------------+---------------------+\n", "| heartdisease(2) | 0.1375 |\n", "+-----------------+---------------------+\n", "| heartdisease(3) | 0.1541 |\n", "+-----------------+---------------------+\n", "| heartdisease(4) | 0.1323 |\n", "+-----------------+---------------------+\n" ] } ] }, { "cell_type": "code", "source": [], "metadata": { "id": "UwUGNLvPGtTT" }, "execution_count": null, "outputs": [] } ] }