From b63a4c4b734eb3123b72a9d2fbbd35777648129d Mon Sep 17 00:00:00 2001 From: Imam Suyuti Date: Mon, 3 Oct 2022 10:53:47 +0700 Subject: [PATCH] Add heart failure prediction project --- Heart-Failure-Prediction/Data/heart.csv | 919 +++++ Heart-Failure-Prediction/Exercise/Readme.md | 13 + .../Solution/Heart_disease_prediction.ipynb | 3185 +++++++++++++++++ Heart-Failure-Prediction/Solution/Readme.md | 13 + 4 files changed, 4130 insertions(+) create mode 100644 Heart-Failure-Prediction/Data/heart.csv create mode 100644 Heart-Failure-Prediction/Exercise/Readme.md create mode 100644 Heart-Failure-Prediction/Solution/Heart_disease_prediction.ipynb create mode 100644 Heart-Failure-Prediction/Solution/Readme.md diff --git a/Heart-Failure-Prediction/Data/heart.csv b/Heart-Failure-Prediction/Data/heart.csv new file mode 100644 index 00000000..5d9bce69 --- /dev/null +++ b/Heart-Failure-Prediction/Data/heart.csv @@ -0,0 +1,919 @@ +Age,Sex,ChestPainType,RestingBP,Cholesterol,FastingBS,RestingECG,MaxHR,ExerciseAngina,Oldpeak,ST_Slope,HeartDisease +40,M,ATA,140,289,0,Normal,172,N,0,Up,0 +49,F,NAP,160,180,0,Normal,156,N,1,Flat,1 +37,M,ATA,130,283,0,ST,98,N,0,Up,0 +48,F,ASY,138,214,0,Normal,108,Y,1.5,Flat,1 +54,M,NAP,150,195,0,Normal,122,N,0,Up,0 +39,M,NAP,120,339,0,Normal,170,N,0,Up,0 +45,F,ATA,130,237,0,Normal,170,N,0,Up,0 +54,M,ATA,110,208,0,Normal,142,N,0,Up,0 +37,M,ASY,140,207,0,Normal,130,Y,1.5,Flat,1 +48,F,ATA,120,284,0,Normal,120,N,0,Up,0 +37,F,NAP,130,211,0,Normal,142,N,0,Up,0 +58,M,ATA,136,164,0,ST,99,Y,2,Flat,1 +39,M,ATA,120,204,0,Normal,145,N,0,Up,0 +49,M,ASY,140,234,0,Normal,140,Y,1,Flat,1 +42,F,NAP,115,211,0,ST,137,N,0,Up,0 +54,F,ATA,120,273,0,Normal,150,N,1.5,Flat,0 +38,M,ASY,110,196,0,Normal,166,N,0,Flat,1 +43,F,ATA,120,201,0,Normal,165,N,0,Up,0 +60,M,ASY,100,248,0,Normal,125,N,1,Flat,1 +36,M,ATA,120,267,0,Normal,160,N,3,Flat,1 +43,F,TA,100,223,0,Normal,142,N,0,Up,0 +44,M,ATA,120,184,0,Normal,142,N,1,Flat,0 +49,F,ATA,124,201,0,Normal,164,N,0,Up,0 +44,M,ATA,150,288,0,Normal,150,Y,3,Flat,1 +40,M,NAP,130,215,0,Normal,138,N,0,Up,0 +36,M,NAP,130,209,0,Normal,178,N,0,Up,0 +53,M,ASY,124,260,0,ST,112,Y,3,Flat,0 +52,M,ATA,120,284,0,Normal,118,N,0,Up,0 +53,F,ATA,113,468,0,Normal,127,N,0,Up,0 +51,M,ATA,125,188,0,Normal,145,N,0,Up,0 +53,M,NAP,145,518,0,Normal,130,N,0,Flat,1 +56,M,NAP,130,167,0,Normal,114,N,0,Up,0 +54,M,ASY,125,224,0,Normal,122,N,2,Flat,1 +41,M,ASY,130,172,0,ST,130,N,2,Flat,1 +43,F,ATA,150,186,0,Normal,154,N,0,Up,0 +32,M,ATA,125,254,0,Normal,155,N,0,Up,0 +65,M,ASY,140,306,1,Normal,87,Y,1.5,Flat,1 +41,F,ATA,110,250,0,ST,142,N,0,Up,0 +48,F,ATA,120,177,1,ST,148,N,0,Up,0 +48,F,ASY,150,227,0,Normal,130,Y,1,Flat,0 +54,F,ATA,150,230,0,Normal,130,N,0,Up,0 +54,F,NAP,130,294,0,ST,100,Y,0,Flat,1 +35,M,ATA,150,264,0,Normal,168,N,0,Up,0 +52,M,NAP,140,259,0,ST,170,N,0,Up,0 +43,M,ASY,120,175,0,Normal,120,Y,1,Flat,1 +59,M,NAP,130,318,0,Normal,120,Y,1,Flat,0 +37,M,ASY,120,223,0,Normal,168,N,0,Up,0 +50,M,ATA,140,216,0,Normal,170,N,0,Up,0 +36,M,NAP,112,340,0,Normal,184,N,1,Flat,0 +41,M,ASY,110,289,0,Normal,170,N,0,Flat,1 +50,M,ASY,130,233,0,Normal,121,Y,2,Flat,1 +47,F,ASY,120,205,0,Normal,98,Y,2,Flat,1 +45,M,ATA,140,224,1,Normal,122,N,0,Up,0 +41,F,ATA,130,245,0,Normal,150,N,0,Up,0 +52,F,ASY,130,180,0,Normal,140,Y,1.5,Flat,0 +51,F,ATA,160,194,0,Normal,170,N,0,Up,0 +31,M,ASY,120,270,0,Normal,153,Y,1.5,Flat,1 +58,M,NAP,130,213,0,ST,140,N,0,Flat,1 +54,M,ASY,150,365,0,ST,134,N,1,Up,0 +52,M,ASY,112,342,0,ST,96,Y,1,Flat,1 +49,M,ATA,100,253,0,Normal,174,N,0,Up,0 +43,F,NAP,150,254,0,Normal,175,N,0,Up,0 +45,M,ASY,140,224,0,Normal,144,N,0,Up,0 +46,M,ASY,120,277,0,Normal,125,Y,1,Flat,1 +50,F,ATA,110,202,0,Normal,145,N,0,Up,0 +37,F,ATA,120,260,0,Normal,130,N,0,Up,0 +45,F,ASY,132,297,0,Normal,144,N,0,Up,0 +32,M,ATA,110,225,0,Normal,184,N,0,Up,0 +52,M,ASY,160,246,0,ST,82,Y,4,Flat,1 +44,M,ASY,150,412,0,Normal,170,N,0,Up,0 +57,M,ATA,140,265,0,ST,145,Y,1,Flat,1 +44,M,ATA,130,215,0,Normal,135,N,0,Up,0 +52,M,ASY,120,182,0,Normal,150,N,0,Flat,1 +44,F,ASY,120,218,0,ST,115,N,0,Up,0 +55,M,ASY,140,268,0,Normal,128,Y,1.5,Flat,1 +46,M,NAP,150,163,0,Normal,116,N,0,Up,0 +32,M,ASY,118,529,0,Normal,130,N,0,Flat,1 +35,F,ASY,140,167,0,Normal,150,N,0,Up,0 +52,M,ATA,140,100,0,Normal,138,Y,0,Up,0 +49,M,ASY,130,206,0,Normal,170,N,0,Flat,1 +55,M,NAP,110,277,0,Normal,160,N,0,Up,0 +54,M,ATA,120,238,0,Normal,154,N,0,Up,0 +63,M,ASY,150,223,0,Normal,115,N,0,Flat,1 +52,M,ATA,160,196,0,Normal,165,N,0,Up,0 +56,M,ASY,150,213,1,Normal,125,Y,1,Flat,1 +66,M,ASY,140,139,0,Normal,94,Y,1,Flat,1 +65,M,ASY,170,263,1,Normal,112,Y,2,Flat,1 +53,F,ATA,140,216,0,Normal,142,Y,2,Flat,0 +43,M,TA,120,291,0,ST,155,N,0,Flat,1 +55,M,ASY,140,229,0,Normal,110,Y,0.5,Flat,0 +49,F,ATA,110,208,0,Normal,160,N,0,Up,0 +39,M,ASY,130,307,0,Normal,140,N,0,Up,0 +52,F,ATA,120,210,0,Normal,148,N,0,Up,0 +48,M,ASY,160,329,0,Normal,92,Y,1.5,Flat,1 +39,F,NAP,110,182,0,ST,180,N,0,Up,0 +58,M,ASY,130,263,0,Normal,140,Y,2,Flat,1 +43,M,ATA,142,207,0,Normal,138,N,0,Up,0 +39,M,NAP,160,147,1,Normal,160,N,0,Up,0 +56,M,ASY,120,85,0,Normal,140,N,0,Up,0 +41,M,ATA,125,269,0,Normal,144,N,0,Up,0 +65,M,ASY,130,275,0,ST,115,Y,1,Flat,1 +51,M,ASY,130,179,0,Normal,100,N,0,Up,0 +40,F,ASY,150,392,0,Normal,130,N,2,Flat,1 +40,M,ASY,120,466,1,Normal,152,Y,1,Flat,1 +46,M,ASY,118,186,0,Normal,124,N,0,Flat,1 +57,M,ATA,140,260,1,Normal,140,N,0,Up,0 +48,F,ASY,120,254,0,ST,110,N,0,Up,0 +34,M,ATA,150,214,0,ST,168,N,0,Up,0 +50,M,ASY,140,129,0,Normal,135,N,0,Up,0 +39,M,ATA,190,241,0,Normal,106,N,0,Up,0 +59,F,ATA,130,188,0,Normal,124,N,1,Flat,0 +57,M,ASY,150,255,0,Normal,92,Y,3,Flat,1 +47,M,ASY,140,276,1,Normal,125,Y,0,Up,0 +38,M,ATA,140,297,0,Normal,150,N,0,Up,0 +49,F,NAP,130,207,0,ST,135,N,0,Up,0 +33,F,ASY,100,246,0,Normal,150,Y,1,Flat,1 +38,M,ASY,120,282,0,Normal,170,N,0,Flat,1 +59,F,ASY,130,338,1,ST,130,Y,1.5,Flat,1 +35,F,TA,120,160,0,ST,185,N,0,Up,0 +34,M,TA,140,156,0,Normal,180,N,0,Flat,1 +47,F,NAP,135,248,1,Normal,170,N,0,Flat,1 +52,F,NAP,125,272,0,Normal,139,N,0,Up,0 +46,M,ASY,110,240,0,ST,140,N,0,Up,0 +58,F,ATA,180,393,0,Normal,110,Y,1,Flat,1 +58,M,ATA,130,230,0,Normal,150,N,0,Up,0 +54,M,ATA,120,246,0,Normal,110,N,0,Up,0 +34,F,ATA,130,161,0,Normal,190,N,0,Up,0 +48,F,ASY,108,163,0,Normal,175,N,2,Up,0 +54,F,ATA,120,230,1,Normal,140,N,0,Up,0 +42,M,NAP,120,228,0,Normal,152,Y,1.5,Flat,0 +38,M,NAP,145,292,0,Normal,130,N,0,Up,0 +46,M,ASY,110,202,0,Normal,150,Y,0,Flat,1 +56,M,ASY,170,388,0,ST,122,Y,2,Flat,1 +56,M,ASY,150,230,0,ST,124,Y,1.5,Flat,1 +61,F,ASY,130,294,0,ST,120,Y,1,Flat,0 +49,M,NAP,115,265,0,Normal,175,N,0,Flat,1 +43,F,ATA,120,215,0,ST,175,N,0,Up,0 +39,M,ATA,120,241,0,ST,146,N,2,Up,0 +54,M,ASY,140,166,0,Normal,118,Y,0,Flat,1 +43,M,ASY,150,247,0,Normal,130,Y,2,Flat,1 +52,M,ASY,160,331,0,Normal,94,Y,2.5,Flat,1 +50,M,ASY,140,341,0,ST,125,Y,2.5,Flat,1 +47,M,ASY,160,291,0,ST,158,Y,3,Flat,1 +53,M,ASY,140,243,0,Normal,155,N,0,Up,0 +56,F,ATA,120,279,0,Normal,150,N,1,Flat,1 +39,M,ASY,110,273,0,Normal,132,N,0,Up,0 +42,M,ATA,120,198,0,Normal,155,N,0,Up,0 +43,F,ATA,120,249,0,ST,176,N,0,Up,0 +50,M,ATA,120,168,0,Normal,160,N,0,Up,0 +54,M,ASY,130,603,1,Normal,125,Y,1,Flat,1 +39,M,ATA,130,215,0,Normal,120,N,0,Up,0 +48,M,ATA,100,159,0,Normal,100,N,0,Up,0 +40,M,ATA,130,275,0,Normal,150,N,0,Up,0 +55,M,ASY,120,270,0,Normal,140,N,0,Up,0 +41,M,ATA,120,291,0,ST,160,N,0,Up,0 +56,M,ASY,155,342,1,Normal,150,Y,3,Flat,1 +38,M,ASY,110,190,0,Normal,150,Y,1,Flat,1 +49,M,ASY,140,185,0,Normal,130,N,0,Up,0 +44,M,ASY,130,290,0,Normal,100,Y,2,Flat,1 +54,M,ATA,160,195,0,ST,130,N,1,Up,0 +59,M,ASY,140,264,1,LVH,119,Y,0,Flat,1 +49,M,ASY,128,212,0,Normal,96,Y,0,Flat,1 +47,M,ATA,160,263,0,Normal,174,N,0,Up,0 +42,M,ATA,120,196,0,Normal,150,N,0,Up,0 +52,F,ATA,140,225,0,Normal,140,N,0,Up,0 +46,M,TA,140,272,1,Normal,175,N,2,Flat,1 +50,M,ASY,140,231,0,ST,140,Y,5,Flat,1 +48,M,ATA,140,238,0,Normal,118,N,0,Up,0 +58,M,ASY,135,222,0,Normal,100,N,0,Up,0 +58,M,NAP,140,179,0,Normal,160,N,0,Up,0 +29,M,ATA,120,243,0,Normal,160,N,0,Up,0 +40,M,NAP,140,235,0,Normal,188,N,0,Up,0 +53,M,ATA,140,320,0,Normal,162,N,0,Up,0 +49,M,NAP,140,187,0,Normal,172,N,0,Up,0 +52,M,ASY,140,266,0,Normal,134,Y,2,Flat,1 +43,M,ASY,140,288,0,Normal,135,Y,2,Flat,1 +54,M,ASY,140,216,0,Normal,105,N,1.5,Flat,1 +59,M,ATA,140,287,0,Normal,150,N,0,Up,0 +37,M,NAP,130,194,0,Normal,150,N,0,Up,0 +46,F,ASY,130,238,0,Normal,90,N,0,Up,0 +52,M,ASY,130,225,0,Normal,120,Y,2,Flat,1 +51,M,ATA,130,224,0,Normal,150,N,0,Up,0 +52,M,ASY,140,404,0,Normal,124,Y,2,Flat,1 +46,M,ASY,110,238,0,ST,140,Y,1,Flat,0 +54,F,ATA,160,312,0,Normal,130,N,0,Up,0 +58,M,NAP,160,211,1,ST,92,N,0,Flat,1 +58,M,ATA,130,251,0,Normal,110,N,0,Up,0 +41,M,ASY,120,237,1,Normal,138,Y,1,Flat,1 +50,F,ASY,120,328,0,Normal,110,Y,1,Flat,0 +53,M,ASY,180,285,0,ST,120,Y,1.5,Flat,1 +46,M,ASY,180,280,0,ST,120,N,0,Up,0 +50,M,ATA,170,209,0,ST,116,N,0,Up,0 +48,M,ATA,130,245,0,Normal,160,N,0,Up,0 +45,M,NAP,135,192,0,Normal,110,N,0,Up,0 +41,F,ATA,125,184,0,Normal,180,N,0,Up,0 +62,F,TA,160,193,0,Normal,116,N,0,Up,0 +49,M,ASY,120,297,0,Normal,132,N,1,Flat,0 +42,M,ATA,150,268,0,Normal,136,N,0,Up,0 +53,M,ASY,120,246,0,Normal,116,Y,0,Flat,1 +57,F,TA,130,308,0,Normal,98,N,1,Flat,0 +47,M,TA,110,249,0,Normal,150,N,0,Up,0 +46,M,NAP,120,230,0,Normal,150,N,0,Up,0 +42,M,NAP,160,147,0,Normal,146,N,0,Up,0 +31,F,ATA,100,219,0,ST,150,N,0,Up,0 +56,M,ATA,130,184,0,Normal,100,N,0,Up,0 +50,M,ASY,150,215,0,Normal,140,Y,0,Up,0 +35,M,ATA,120,308,0,LVH,180,N,0,Up,0 +35,M,ATA,110,257,0,Normal,140,N,0,Flat,1 +28,M,ATA,130,132,0,LVH,185,N,0,Up,0 +54,M,ASY,125,216,0,Normal,140,N,0,Flat,1 +48,M,ASY,106,263,1,Normal,110,N,0,Flat,1 +50,F,NAP,140,288,0,Normal,140,Y,0,Flat,1 +56,M,NAP,130,276,0,Normal,128,Y,1,Up,0 +56,F,NAP,130,219,0,ST,164,N,0,Up,0 +47,M,ASY,150,226,0,Normal,98,Y,1.5,Flat,1 +30,F,TA,170,237,0,ST,170,N,0,Up,0 +39,M,ASY,110,280,0,Normal,150,N,0,Flat,1 +54,M,NAP,120,217,0,Normal,137,N,0,Up,0 +55,M,ATA,140,196,0,Normal,150,N,0,Up,0 +29,M,ATA,140,263,0,Normal,170,N,0,Up,0 +46,M,ASY,130,222,0,Normal,112,N,0,Flat,1 +51,F,ASY,160,303,0,Normal,150,Y,1,Flat,1 +48,F,NAP,120,195,0,Normal,125,N,0,Up,0 +33,M,NAP,120,298,0,Normal,185,N,0,Up,0 +55,M,ATA,120,256,1,Normal,137,N,0,Up,0 +50,M,ASY,145,264,0,Normal,150,N,0,Flat,1 +53,M,NAP,120,195,0,Normal,140,N,0,Up,0 +38,M,ASY,92,117,0,Normal,134,Y,2.5,Flat,1 +41,M,ATA,120,295,0,Normal,170,N,0,Up,0 +37,F,ASY,130,173,0,ST,184,N,0,Up,0 +37,M,ASY,130,315,0,Normal,158,N,0,Up,0 +40,M,NAP,130,281,0,Normal,167,N,0,Up,0 +38,F,ATA,120,275,0,Normal,129,N,0,Up,0 +41,M,ASY,112,250,0,Normal,142,N,0,Up,0 +54,F,ATA,140,309,0,ST,140,N,0,Up,0 +39,M,ATA,120,200,0,Normal,160,Y,1,Flat,0 +41,M,ASY,120,336,0,Normal,118,Y,3,Flat,1 +55,M,TA,140,295,0,Normal,136,N,0,Flat,1 +48,M,ASY,160,355,0,Normal,99,Y,2,Flat,1 +48,M,ASY,160,193,0,Normal,102,Y,3,Flat,1 +55,M,ATA,145,326,0,Normal,155,N,0,Up,0 +54,M,ASY,200,198,0,Normal,142,Y,2,Flat,1 +55,M,ATA,160,292,1,Normal,143,Y,2,Flat,1 +43,F,ATA,120,266,0,Normal,118,N,0,Up,0 +48,M,ASY,160,268,0,Normal,103,Y,1,Flat,1 +54,M,TA,120,171,0,Normal,137,N,2,Up,0 +54,M,NAP,120,237,0,Normal,150,Y,1.5,Flat,1 +48,M,ASY,122,275,1,ST,150,Y,2,Down,1 +45,M,ASY,130,219,0,ST,130,Y,1,Flat,1 +49,M,ASY,130,341,0,Normal,120,Y,1,Flat,1 +44,M,ASY,135,491,0,Normal,135,N,0,Flat,1 +48,M,ASY,120,260,0,Normal,115,N,2,Flat,1 +61,M,ASY,125,292,0,ST,115,Y,0,Up,0 +62,M,ATA,140,271,0,Normal,152,N,1,Up,0 +55,M,ASY,145,248,0,Normal,96,Y,2,Flat,1 +53,F,NAP,120,274,0,Normal,130,N,0,Up,0 +55,F,ATA,130,394,0,LVH,150,N,0,Up,0 +36,M,NAP,150,160,0,Normal,172,N,0,Up,0 +51,F,NAP,150,200,0,Normal,120,N,0.5,Up,0 +55,F,ATA,122,320,0,Normal,155,N,0,Up,0 +46,M,ATA,140,275,0,Normal,165,Y,0,Up,0 +54,F,ATA,120,221,0,Normal,138,N,1,Up,0 +46,M,ASY,120,231,0,Normal,115,Y,0,Flat,1 +59,M,ASY,130,126,0,Normal,125,N,0,Flat,1 +47,M,NAP,140,193,0,Normal,145,Y,1,Flat,1 +54,M,ATA,160,305,0,Normal,175,N,0,Up,0 +52,M,ASY,130,298,0,Normal,110,Y,1,Flat,1 +34,M,ATA,98,220,0,Normal,150,N,0,Up,0 +54,M,ASY,130,242,0,Normal,91,Y,1,Flat,1 +47,F,NAP,130,235,0,Normal,145,N,2,Flat,0 +45,M,ASY,120,225,0,Normal,140,N,0,Up,0 +32,F,ATA,105,198,0,Normal,165,N,0,Up,0 +55,M,ASY,140,201,0,Normal,130,Y,3,Flat,1 +55,M,NAP,120,220,0,LVH,134,N,0,Up,0 +45,F,ATA,180,295,0,Normal,180,N,0,Up,0 +59,M,NAP,180,213,0,Normal,100,N,0,Up,0 +51,M,NAP,135,160,0,Normal,150,N,2,Flat,1 +52,M,ASY,170,223,0,Normal,126,Y,1.5,Flat,1 +57,F,ASY,180,347,0,ST,126,Y,0.8,Flat,0 +54,F,ATA,130,253,0,ST,155,N,0,Up,0 +60,M,NAP,120,246,0,LVH,135,N,0,Up,0 +49,M,ASY,150,222,0,Normal,122,N,2,Flat,1 +51,F,NAP,130,220,0,Normal,160,Y,2,Up,0 +55,F,ATA,110,344,0,ST,160,N,0,Up,0 +42,M,ASY,140,358,0,Normal,170,N,0,Up,0 +51,F,NAP,110,190,0,Normal,120,N,0,Up,0 +59,M,ASY,140,169,0,Normal,140,N,0,Up,0 +53,M,ATA,120,181,0,Normal,132,N,0,Up,0 +48,F,ATA,133,308,0,ST,156,N,2,Up,0 +36,M,ATA,120,166,0,Normal,180,N,0,Up,0 +48,M,NAP,110,211,0,Normal,138,N,0,Up,0 +47,F,ATA,140,257,0,Normal,135,N,1,Up,0 +53,M,ASY,130,182,0,Normal,148,N,0,Up,0 +65,M,ASY,115,0,0,Normal,93,Y,0,Flat,1 +32,M,TA,95,0,1,Normal,127,N,0.7,Up,1 +61,M,ASY,105,0,1,Normal,110,Y,1.5,Up,1 +50,M,ASY,145,0,1,Normal,139,Y,0.7,Flat,1 +57,M,ASY,110,0,1,ST,131,Y,1.4,Up,1 +51,M,ASY,110,0,1,Normal,92,N,0,Flat,1 +47,M,ASY,110,0,1,ST,149,N,2.1,Up,1 +60,M,ASY,160,0,1,Normal,149,N,0.4,Flat,1 +55,M,ATA,140,0,0,ST,150,N,0.2,Up,0 +53,M,ASY,125,0,1,Normal,120,N,1.5,Up,1 +62,F,ASY,120,0,1,ST,123,Y,1.7,Down,1 +51,M,ASY,95,0,1,Normal,126,N,2.2,Flat,1 +51,F,ASY,120,0,1,Normal,127,Y,1.5,Up,1 +55,M,ASY,115,0,1,Normal,155,N,0.1,Flat,1 +53,M,ATA,130,0,0,ST,120,N,0.7,Down,0 +58,M,ASY,115,0,1,Normal,138,N,0.5,Up,1 +57,M,ASY,95,0,1,Normal,182,N,0.7,Down,1 +65,M,ASY,155,0,0,Normal,154,N,1,Up,0 +60,M,ASY,125,0,1,Normal,110,N,0.1,Up,1 +41,M,ASY,125,0,1,Normal,176,N,1.6,Up,1 +34,M,ASY,115,0,1,Normal,154,N,0.2,Up,1 +53,M,ASY,80,0,0,Normal,141,Y,2,Down,0 +74,M,ATA,145,0,1,ST,123,N,1.3,Up,1 +57,M,NAP,105,0,1,Normal,148,N,0.3,Flat,1 +56,M,ASY,140,0,1,Normal,121,Y,1.8,Up,1 +61,M,ASY,130,0,1,Normal,77,N,2.5,Flat,1 +68,M,ASY,145,0,1,Normal,136,N,1.8,Up,1 +59,M,NAP,125,0,1,Normal,175,N,2.6,Flat,1 +63,M,ASY,100,0,1,Normal,109,N,-0.9,Flat,1 +38,F,ASY,105,0,1,Normal,166,N,2.8,Up,1 +62,M,ASY,115,0,1,Normal,128,Y,2.5,Down,1 +46,M,ASY,100,0,1,ST,133,N,-2.6,Flat,1 +42,M,ASY,105,0,1,Normal,128,Y,-1.5,Down,1 +45,M,NAP,110,0,0,Normal,138,N,-0.1,Up,0 +59,M,ASY,125,0,1,Normal,119,Y,0.9,Up,1 +52,M,ASY,95,0,1,Normal,82,Y,0.8,Flat,1 +60,M,ASY,130,0,1,ST,130,Y,1.1,Down,1 +60,M,NAP,115,0,1,Normal,143,N,2.4,Up,1 +56,M,ASY,115,0,1,ST,82,N,-1,Up,1 +38,M,NAP,100,0,0,Normal,179,N,-1.1,Up,0 +40,M,ASY,95,0,1,ST,144,N,0,Up,1 +51,M,ASY,130,0,1,Normal,170,N,-0.7,Up,1 +62,M,TA,120,0,1,LVH,134,N,-0.8,Flat,1 +72,M,NAP,160,0,0,LVH,114,N,1.6,Flat,0 +63,M,ASY,150,0,1,ST,154,N,3.7,Up,1 +63,M,ASY,140,0,1,LVH,149,N,2,Up,1 +64,F,ASY,95,0,1,Normal,145,N,1.1,Down,1 +43,M,ASY,100,0,1,Normal,122,N,1.5,Down,1 +64,M,ASY,110,0,1,Normal,114,Y,1.3,Down,1 +61,M,ASY,110,0,1,Normal,113,N,1.4,Flat,1 +52,M,ASY,130,0,1,Normal,120,N,0,Flat,1 +51,M,ASY,120,0,1,Normal,104,N,0,Flat,1 +69,M,ASY,135,0,0,Normal,130,N,0,Flat,1 +59,M,ASY,120,0,0,Normal,115,N,0,Flat,1 +48,M,ASY,115,0,1,Normal,128,N,0,Flat,1 +69,M,ASY,137,0,0,ST,104,Y,1.6,Flat,1 +36,M,ASY,110,0,1,Normal,125,Y,1,Flat,1 +53,M,ASY,120,0,1,Normal,120,N,0,Flat,1 +43,M,ASY,140,0,0,ST,140,Y,0.5,Up,1 +56,M,ASY,120,0,0,ST,100,Y,-1,Down,1 +58,M,ASY,130,0,0,ST,100,Y,1,Flat,1 +55,M,ASY,120,0,0,ST,92,N,0.3,Up,1 +67,M,TA,145,0,0,LVH,125,N,0,Flat,1 +46,M,ASY,115,0,0,Normal,113,Y,1.5,Flat,1 +53,M,ATA,120,0,0,Normal,95,N,0,Flat,1 +38,M,NAP,115,0,0,Normal,128,Y,0,Flat,1 +53,M,NAP,105,0,0,Normal,115,N,0,Flat,1 +62,M,NAP,160,0,0,Normal,72,Y,0,Flat,1 +47,M,ASY,160,0,0,Normal,124,Y,0,Flat,1 +56,M,NAP,155,0,0,ST,99,N,0,Flat,1 +56,M,ASY,120,0,0,ST,148,N,0,Flat,1 +56,M,NAP,120,0,0,Normal,97,N,0,Flat,0 +64,F,ASY,200,0,0,Normal,140,Y,1,Flat,1 +61,M,ASY,150,0,0,Normal,117,Y,2,Flat,1 +68,M,ASY,135,0,0,ST,120,Y,0,Up,1 +57,M,ASY,140,0,0,Normal,120,Y,2,Flat,1 +63,M,ASY,150,0,0,Normal,86,Y,2,Flat,1 +60,M,ASY,135,0,0,Normal,63,Y,0.5,Up,1 +66,M,ASY,150,0,0,Normal,108,Y,2,Flat,1 +63,M,ASY,185,0,0,Normal,98,Y,0,Up,1 +59,M,ASY,135,0,0,Normal,115,Y,1,Flat,1 +61,M,ASY,125,0,0,Normal,105,Y,0,Down,1 +73,F,NAP,160,0,0,ST,121,N,0,Up,1 +47,M,NAP,155,0,0,Normal,118,Y,1,Flat,1 +65,M,ASY,160,0,1,ST,122,N,1.2,Flat,1 +70,M,ASY,140,0,1,Normal,157,Y,2,Flat,1 +50,M,ASY,120,0,0,ST,156,Y,0,Up,1 +60,M,ASY,160,0,0,ST,99,Y,0.5,Flat,1 +50,M,ASY,115,0,0,Normal,120,Y,0.5,Flat,1 +43,M,ASY,115,0,0,Normal,145,Y,2,Flat,1 +38,F,ASY,110,0,0,Normal,156,N,0,Flat,1 +54,M,ASY,120,0,0,Normal,155,N,0,Flat,1 +61,M,ASY,150,0,0,Normal,105,Y,0,Flat,1 +42,M,ASY,145,0,0,Normal,99,Y,0,Flat,1 +53,M,ASY,130,0,0,LVH,135,Y,1,Flat,1 +55,M,ASY,140,0,0,Normal,83,N,0,Flat,1 +61,M,ASY,160,0,1,ST,145,N,1,Flat,1 +51,M,ASY,140,0,0,Normal,60,N,0,Flat,1 +70,M,ASY,115,0,0,ST,92,Y,0,Flat,1 +61,M,ASY,130,0,0,LVH,115,N,0,Flat,1 +38,M,ASY,150,0,1,Normal,120,Y,0.7,Flat,1 +57,M,ASY,160,0,1,Normal,98,Y,2,Flat,1 +38,M,ASY,135,0,1,Normal,150,N,0,Flat,1 +62,F,TA,140,0,1,Normal,143,N,0,Flat,1 +58,M,ASY,170,0,1,ST,105,Y,0,Flat,1 +52,M,ASY,165,0,1,Normal,122,Y,1,Up,1 +61,M,NAP,200,0,1,ST,70,N,0,Flat,1 +50,F,ASY,160,0,1,Normal,110,N,0,Flat,1 +51,M,ASY,130,0,1,ST,163,N,0,Flat,1 +65,M,ASY,145,0,1,ST,67,N,0.7,Flat,1 +52,M,ASY,135,0,1,Normal,128,Y,2,Flat,1 +47,M,NAP,110,0,1,Normal,120,Y,0,Flat,1 +35,M,ASY,120,0,1,Normal,130,Y,1.2,Flat,1 +57,M,ASY,140,0,1,Normal,100,Y,0,Flat,1 +62,M,ASY,115,0,1,Normal,72,Y,-0.5,Flat,1 +59,M,ASY,110,0,1,Normal,94,N,0,Flat,1 +53,M,NAP,160,0,1,LVH,122,Y,0,Flat,1 +62,M,ASY,150,0,1,ST,78,N,2,Flat,1 +54,M,ASY,180,0,1,Normal,150,N,1.5,Flat,1 +56,M,ASY,125,0,1,Normal,103,Y,1,Flat,1 +56,M,NAP,125,0,1,Normal,98,N,-2,Flat,1 +54,M,ASY,130,0,1,Normal,110,Y,3,Flat,1 +66,F,ASY,155,0,1,Normal,90,N,0,Flat,1 +63,M,ASY,140,260,0,ST,112,Y,3,Flat,1 +44,M,ASY,130,209,0,ST,127,N,0,Up,0 +60,M,ASY,132,218,0,ST,140,Y,1.5,Down,1 +55,M,ASY,142,228,0,ST,149,Y,2.5,Up,1 +66,M,NAP,110,213,1,LVH,99,Y,1.3,Flat,0 +66,M,NAP,120,0,0,ST,120,N,-0.5,Up,0 +65,M,ASY,150,236,1,ST,105,Y,0,Flat,1 +60,M,NAP,180,0,0,ST,140,Y,1.5,Flat,0 +60,M,NAP,120,0,1,Normal,141,Y,2,Up,1 +60,M,ATA,160,267,1,ST,157,N,0.5,Flat,1 +56,M,ATA,126,166,0,ST,140,N,0,Up,0 +59,M,ASY,140,0,0,ST,117,Y,1,Flat,1 +62,M,ASY,110,0,0,Normal,120,Y,0.5,Flat,1 +63,M,NAP,133,0,0,LVH,120,Y,1,Flat,1 +57,M,ASY,128,0,1,ST,148,Y,1,Flat,1 +62,M,ASY,120,220,0,ST,86,N,0,Up,0 +63,M,ASY,170,177,0,Normal,84,Y,2.5,Down,1 +46,M,ASY,110,236,0,Normal,125,Y,2,Flat,1 +63,M,ASY,126,0,0,ST,120,N,1.5,Down,0 +60,M,ASY,152,0,0,ST,118,Y,0,Up,0 +58,M,ASY,116,0,0,Normal,124,N,1,Up,1 +64,M,ASY,120,0,1,ST,106,N,2,Flat,1 +63,M,NAP,130,0,0,ST,111,Y,0,Flat,1 +74,M,NAP,138,0,0,Normal,116,N,0.2,Up,0 +52,M,NAP,128,0,0,ST,180,N,3,Up,1 +69,M,ASY,130,0,1,ST,129,N,1,Flat,1 +51,M,ASY,128,0,1,ST,125,Y,1.2,Flat,1 +60,M,ASY,130,186,1,ST,140,Y,0.5,Flat,1 +56,M,ASY,120,100,0,Normal,120,Y,1.5,Flat,1 +55,M,NAP,136,228,0,ST,124,Y,1.6,Flat,1 +54,M,ASY,130,0,0,ST,117,Y,1.4,Flat,1 +77,M,ASY,124,171,0,ST,110,Y,2,Up,1 +63,M,ASY,160,230,1,Normal,105,Y,1,Flat,1 +55,M,NAP,0,0,0,Normal,155,N,1.5,Flat,1 +52,M,NAP,122,0,0,Normal,110,Y,2,Down,1 +64,M,ASY,144,0,0,ST,122,Y,1,Flat,1 +60,M,ASY,140,281,0,ST,118,Y,1.5,Flat,1 +60,M,ASY,120,0,0,Normal,133,Y,2,Up,0 +58,M,ASY,136,203,1,Normal,123,Y,1.2,Flat,1 +59,M,ASY,154,0,0,ST,131,Y,1.5,Up,0 +61,M,NAP,120,0,0,Normal,80,Y,0,Flat,1 +40,M,ASY,125,0,1,Normal,165,N,0,Flat,1 +61,M,ASY,134,0,1,ST,86,N,1.5,Flat,1 +41,M,ASY,104,0,0,ST,111,N,0,Up,0 +57,M,ASY,139,277,1,ST,118,Y,1.9,Flat,1 +63,M,ASY,136,0,0,Normal,84,Y,0,Flat,1 +59,M,ASY,122,233,0,Normal,117,Y,1.3,Down,1 +51,M,ASY,128,0,0,Normal,107,N,0,Up,0 +59,M,NAP,131,0,0,Normal,128,Y,2,Down,1 +42,M,NAP,134,240,0,Normal,160,N,0,Up,0 +55,M,NAP,120,0,0,ST,125,Y,2.5,Flat,1 +63,F,ATA,132,0,0,Normal,130,N,0.1,Up,0 +62,M,ASY,152,153,0,ST,97,Y,1.6,Up,1 +56,M,ATA,124,224,1,Normal,161,N,2,Flat,0 +53,M,ASY,126,0,0,Normal,106,N,0,Flat,1 +68,M,ASY,138,0,0,Normal,130,Y,3,Flat,1 +53,M,ASY,154,0,1,ST,140,Y,1.5,Flat,1 +60,M,NAP,141,316,1,ST,122,Y,1.7,Flat,1 +62,M,ATA,131,0,0,Normal,130,N,0.1,Up,0 +59,M,ASY,178,0,1,LVH,120,Y,0,Flat,1 +51,M,ASY,132,218,1,LVH,139,N,0.1,Up,0 +61,M,ASY,110,0,1,Normal,108,Y,2,Down,1 +57,M,ASY,130,311,1,ST,148,Y,2,Flat,1 +56,M,NAP,170,0,0,LVH,123,Y,2.5,Flat,1 +58,M,ATA,126,0,1,Normal,110,Y,2,Flat,1 +69,M,NAP,140,0,1,ST,118,N,2.5,Down,1 +67,M,TA,142,270,1,Normal,125,N,2.5,Up,1 +58,M,ASY,120,0,0,LVH,106,Y,1.5,Down,1 +65,M,ASY,134,0,0,Normal,112,Y,1.1,Flat,1 +63,M,ATA,139,217,1,ST,128,Y,1.2,Flat,1 +55,M,ATA,110,214,1,ST,180,N,0.4,Up,0 +57,M,ASY,140,214,0,ST,144,Y,2,Flat,1 +65,M,TA,140,252,0,Normal,135,N,0.3,Up,0 +54,M,ASY,136,220,0,Normal,140,Y,3,Flat,1 +72,M,NAP,120,214,0,Normal,102,Y,1,Flat,1 +75,M,ASY,170,203,1,ST,108,N,0,Flat,1 +49,M,TA,130,0,0,ST,145,N,3,Flat,1 +51,M,NAP,137,339,0,Normal,127,Y,1.7,Flat,1 +60,M,ASY,142,216,0,Normal,110,Y,2.5,Flat,1 +64,F,ASY,142,276,0,Normal,140,Y,1,Flat,1 +58,M,ASY,132,458,1,Normal,69,N,1,Down,0 +61,M,ASY,146,241,0,Normal,148,Y,3,Down,1 +67,M,ASY,160,384,1,ST,130,Y,0,Flat,1 +62,M,ASY,135,297,0,Normal,130,Y,1,Flat,1 +65,M,ASY,136,248,0,Normal,140,Y,4,Down,1 +63,M,ASY,130,308,0,Normal,138,Y,2,Flat,1 +69,M,ASY,140,208,0,ST,140,Y,2,Flat,1 +51,M,ASY,132,227,1,ST,138,N,0.2,Up,0 +62,M,ASY,158,210,1,Normal,112,Y,3,Down,1 +55,M,NAP,136,245,1,ST,131,Y,1.2,Flat,1 +75,M,ASY,136,225,0,Normal,112,Y,3,Flat,1 +40,M,NAP,106,240,0,Normal,80,Y,0,Up,0 +67,M,ASY,120,0,1,Normal,150,N,1.5,Down,1 +58,M,ASY,110,198,0,Normal,110,N,0,Flat,1 +60,M,ASY,136,195,0,Normal,126,N,0.3,Up,0 +63,M,ASY,160,267,1,ST,88,Y,2,Flat,1 +35,M,NAP,123,161,0,ST,153,N,-0.1,Up,0 +62,M,TA,112,258,0,ST,150,Y,1.3,Flat,1 +43,M,ASY,122,0,0,Normal,120,N,0.5,Up,1 +63,M,NAP,130,0,1,ST,160,N,3,Flat,0 +68,M,NAP,150,195,1,Normal,132,N,0,Flat,1 +65,M,ASY,150,235,0,Normal,120,Y,1.5,Flat,1 +48,M,NAP,102,0,1,ST,110,Y,1,Down,1 +63,M,ASY,96,305,0,ST,121,Y,1,Up,1 +64,M,ASY,130,223,0,ST,128,N,0.5,Flat,0 +61,M,ASY,120,282,0,ST,135,Y,4,Down,1 +50,M,ASY,144,349,0,LVH,120,Y,1,Up,1 +59,M,ASY,124,160,0,Normal,117,Y,1,Flat,1 +55,M,ASY,150,160,0,ST,150,N,0,Up,0 +45,M,NAP,130,236,0,Normal,144,N,0.1,Up,0 +65,M,ASY,144,312,0,LVH,113,Y,1.7,Flat,1 +61,M,ATA,139,283,0,Normal,135,N,0.3,Up,0 +49,M,NAP,131,142,0,Normal,127,Y,1.5,Flat,1 +72,M,ASY,143,211,0,Normal,109,Y,1.4,Flat,1 +50,M,ASY,133,218,0,Normal,128,Y,1.1,Flat,1 +64,M,ASY,143,306,1,ST,115,Y,1.8,Flat,1 +55,M,ASY,116,186,1,ST,102,N,0,Flat,1 +63,M,ASY,110,252,0,ST,140,Y,2,Flat,1 +59,M,ASY,125,222,0,Normal,135,Y,2.5,Down,1 +56,M,ASY,130,0,0,LVH,122,Y,1,Flat,1 +62,M,NAP,133,0,1,ST,119,Y,1.2,Flat,1 +74,M,ASY,150,258,1,ST,130,Y,4,Down,1 +54,M,ASY,130,202,1,Normal,112,Y,2,Flat,1 +57,M,ASY,110,197,0,LVH,100,N,0,Up,0 +62,M,NAP,138,204,0,ST,122,Y,1.2,Flat,1 +76,M,NAP,104,113,0,LVH,120,N,3.5,Down,1 +54,F,ASY,138,274,0,Normal,105,Y,1.5,Flat,1 +70,M,ASY,170,192,0,ST,129,Y,3,Down,1 +61,F,ATA,140,298,1,Normal,120,Y,0,Up,0 +48,M,ASY,132,272,0,ST,139,N,0.2,Up,0 +48,M,NAP,132,220,1,ST,162,N,0,Flat,1 +61,M,TA,142,200,1,ST,100,N,1.5,Down,1 +66,M,ASY,112,261,0,Normal,140,N,1.5,Up,1 +68,M,TA,139,181,1,ST,135,N,0.2,Up,0 +55,M,ASY,172,260,0,Normal,73,N,2,Flat,1 +62,M,NAP,120,220,0,LVH,86,N,0,Up,0 +71,M,NAP,144,221,0,Normal,108,Y,1.8,Flat,1 +74,M,TA,145,216,1,Normal,116,Y,1.8,Flat,1 +53,M,NAP,155,175,1,ST,160,N,0.3,Up,0 +58,M,NAP,150,219,0,ST,118,Y,0,Flat,1 +75,M,ASY,160,310,1,Normal,112,Y,2,Down,0 +56,M,NAP,137,208,1,ST,122,Y,1.8,Flat,1 +58,M,NAP,137,232,0,ST,124,Y,1.4,Flat,1 +64,M,ASY,134,273,0,Normal,102,Y,4,Down,1 +54,M,NAP,133,203,0,ST,137,N,0.2,Up,0 +54,M,ATA,132,182,0,ST,141,N,0.1,Up,0 +59,M,ASY,140,274,0,Normal,154,Y,2,Flat,0 +55,M,ASY,135,204,1,ST,126,Y,1.1,Flat,1 +57,M,ASY,144,270,1,ST,160,Y,2,Flat,1 +61,M,ASY,141,292,0,ST,115,Y,1.7,Flat,1 +41,M,ASY,150,171,0,Normal,128,Y,1.5,Flat,0 +71,M,ASY,130,221,0,ST,115,Y,0,Flat,1 +38,M,ASY,110,289,0,Normal,105,Y,1.5,Down,1 +55,M,ASY,158,217,0,Normal,110,Y,2.5,Flat,1 +56,M,ASY,128,223,0,ST,119,Y,2,Down,1 +69,M,ASY,140,110,1,Normal,109,Y,1.5,Flat,1 +64,M,ASY,150,193,0,ST,135,Y,0.5,Flat,1 +72,M,ASY,160,123,1,LVH,130,N,1.5,Flat,1 +69,M,ASY,142,210,1,ST,112,Y,1.5,Flat,1 +56,M,ASY,137,282,1,Normal,126,Y,1.2,Flat,1 +62,M,ASY,139,170,0,ST,120,Y,3,Flat,1 +67,M,ASY,146,369,0,Normal,110,Y,1.9,Flat,1 +57,M,ASY,156,173,0,LVH,119,Y,3,Down,1 +69,M,ASY,145,289,1,ST,110,Y,1.8,Flat,1 +51,M,ASY,131,152,1,LVH,130,Y,1,Flat,1 +48,M,ASY,140,208,0,Normal,159,Y,1.5,Up,1 +69,M,ASY,122,216,1,LVH,84,Y,0,Flat,1 +69,M,NAP,142,271,0,LVH,126,N,0.3,Up,0 +64,M,ASY,141,244,1,ST,116,Y,1.5,Flat,1 +57,M,ATA,180,285,1,ST,120,N,0.8,Flat,1 +53,M,ASY,124,243,0,Normal,122,Y,2,Flat,1 +37,M,NAP,118,240,0,LVH,165,N,1,Flat,0 +67,M,ASY,140,219,0,ST,122,Y,2,Flat,1 +74,M,NAP,140,237,1,Normal,94,N,0,Flat,1 +63,M,ATA,136,165,0,ST,133,N,0.2,Up,0 +58,M,ASY,100,213,0,ST,110,N,0,Up,0 +61,M,ASY,190,287,1,LVH,150,Y,2,Down,1 +64,M,ASY,130,258,1,LVH,130,N,0,Flat,1 +58,M,ASY,160,256,1,LVH,113,Y,1,Up,1 +60,M,ASY,130,186,1,LVH,140,Y,0.5,Flat,1 +57,M,ASY,122,264,0,LVH,100,N,0,Flat,1 +55,M,NAP,133,185,0,ST,136,N,0.2,Up,0 +55,M,ASY,120,226,0,LVH,127,Y,1.7,Down,1 +56,M,ASY,130,203,1,Normal,98,N,1.5,Flat,1 +57,M,ASY,130,207,0,ST,96,Y,1,Flat,0 +61,M,NAP,140,284,0,Normal,123,Y,1.3,Flat,1 +61,M,NAP,120,337,0,Normal,98,Y,0,Flat,1 +74,M,ASY,155,310,0,Normal,112,Y,1.5,Down,1 +68,M,NAP,134,254,1,Normal,151,Y,0,Up,0 +51,F,ASY,114,258,1,LVH,96,N,1,Up,0 +62,M,ASY,160,254,1,ST,108,Y,3,Flat,1 +53,M,ASY,144,300,1,ST,128,Y,1.5,Flat,1 +62,M,ASY,158,170,0,ST,138,Y,0,Flat,1 +46,M,ASY,134,310,0,Normal,126,N,0,Flat,1 +54,F,ASY,127,333,1,ST,154,N,0,Flat,1 +62,M,TA,135,139,0,ST,137,N,0.2,Up,0 +55,M,ASY,122,223,1,ST,100,N,0,Flat,1 +58,M,ASY,140,385,1,LVH,135,N,0.3,Up,0 +62,M,ATA,120,254,0,LVH,93,Y,0,Flat,1 +70,M,ASY,130,322,0,LVH,109,N,2.4,Flat,1 +67,F,NAP,115,564,0,LVH,160,N,1.6,Flat,0 +57,M,ATA,124,261,0,Normal,141,N,0.3,Up,1 +64,M,ASY,128,263,0,Normal,105,Y,0.2,Flat,0 +74,F,ATA,120,269,0,LVH,121,Y,0.2,Up,0 +65,M,ASY,120,177,0,Normal,140,N,0.4,Up,0 +56,M,NAP,130,256,1,LVH,142,Y,0.6,Flat,1 +59,M,ASY,110,239,0,LVH,142,Y,1.2,Flat,1 +60,M,ASY,140,293,0,LVH,170,N,1.2,Flat,1 +63,F,ASY,150,407,0,LVH,154,N,4,Flat,1 +59,M,ASY,135,234,0,Normal,161,N,0.5,Flat,0 +53,M,ASY,142,226,0,LVH,111,Y,0,Up,0 +44,M,NAP,140,235,0,LVH,180,N,0,Up,0 +61,M,TA,134,234,0,Normal,145,N,2.6,Flat,1 +57,F,ASY,128,303,0,LVH,159,N,0,Up,0 +71,F,ASY,112,149,0,Normal,125,N,1.6,Flat,0 +46,M,ASY,140,311,0,Normal,120,Y,1.8,Flat,1 +53,M,ASY,140,203,1,LVH,155,Y,3.1,Down,1 +64,M,TA,110,211,0,LVH,144,Y,1.8,Flat,0 +40,M,TA,140,199,0,Normal,178,Y,1.4,Up,0 +67,M,ASY,120,229,0,LVH,129,Y,2.6,Flat,1 +48,M,ATA,130,245,0,LVH,180,N,0.2,Flat,0 +43,M,ASY,115,303,0,Normal,181,N,1.2,Flat,0 +47,M,ASY,112,204,0,Normal,143,N,0.1,Up,0 +54,F,ATA,132,288,1,LVH,159,Y,0,Up,0 +48,F,NAP,130,275,0,Normal,139,N,0.2,Up,0 +46,F,ASY,138,243,0,LVH,152,Y,0,Flat,0 +51,F,NAP,120,295,0,LVH,157,N,0.6,Up,0 +58,M,NAP,112,230,0,LVH,165,N,2.5,Flat,1 +71,F,NAP,110,265,1,LVH,130,N,0,Up,0 +57,M,NAP,128,229,0,LVH,150,N,0.4,Flat,1 +66,M,ASY,160,228,0,LVH,138,N,2.3,Up,0 +37,F,NAP,120,215,0,Normal,170,N,0,Up,0 +59,M,ASY,170,326,0,LVH,140,Y,3.4,Down,1 +50,M,ASY,144,200,0,LVH,126,Y,0.9,Flat,1 +48,M,ASY,130,256,1,LVH,150,Y,0,Up,1 +61,M,ASY,140,207,0,LVH,138,Y,1.9,Up,1 +59,M,TA,160,273,0,LVH,125,N,0,Up,1 +42,M,NAP,130,180,0,Normal,150,N,0,Up,0 +48,M,ASY,122,222,0,LVH,186,N,0,Up,0 +40,M,ASY,152,223,0,Normal,181,N,0,Up,1 +62,F,ASY,124,209,0,Normal,163,N,0,Up,0 +44,M,NAP,130,233,0,Normal,179,Y,0.4,Up,0 +46,M,ATA,101,197,1,Normal,156,N,0,Up,0 +59,M,NAP,126,218,1,Normal,134,N,2.2,Flat,1 +58,M,NAP,140,211,1,LVH,165,N,0,Up,0 +49,M,NAP,118,149,0,LVH,126,N,0.8,Up,1 +44,M,ASY,110,197,0,LVH,177,N,0,Up,1 +66,M,ATA,160,246,0,Normal,120,Y,0,Flat,1 +65,F,ASY,150,225,0,LVH,114,N,1,Flat,1 +42,M,ASY,136,315,0,Normal,125,Y,1.8,Flat,1 +52,M,ATA,128,205,1,Normal,184,N,0,Up,0 +65,F,NAP,140,417,1,LVH,157,N,0.8,Up,0 +63,F,ATA,140,195,0,Normal,179,N,0,Up,0 +45,F,ATA,130,234,0,LVH,175,N,0.6,Flat,0 +41,F,ATA,105,198,0,Normal,168,N,0,Up,0 +61,M,ASY,138,166,0,LVH,125,Y,3.6,Flat,1 +60,F,NAP,120,178,1,Normal,96,N,0,Up,0 +59,F,ASY,174,249,0,Normal,143,Y,0,Flat,1 +62,M,ATA,120,281,0,LVH,103,N,1.4,Flat,1 +57,M,NAP,150,126,1,Normal,173,N,0.2,Up,0 +51,F,ASY,130,305,0,Normal,142,Y,1.2,Flat,1 +44,M,NAP,120,226,0,Normal,169,N,0,Up,0 +60,F,TA,150,240,0,Normal,171,N,0.9,Up,0 +63,M,TA,145,233,1,LVH,150,N,2.3,Down,0 +57,M,ASY,150,276,0,LVH,112,Y,0.6,Flat,1 +51,M,ASY,140,261,0,LVH,186,Y,0,Up,0 +58,F,ATA,136,319,1,LVH,152,N,0,Up,1 +44,F,NAP,118,242,0,Normal,149,N,0.3,Flat,0 +47,M,NAP,108,243,0,Normal,152,N,0,Up,1 +61,M,ASY,120,260,0,Normal,140,Y,3.6,Flat,1 +57,F,ASY,120,354,0,Normal,163,Y,0.6,Up,0 +70,M,ATA,156,245,0,LVH,143,N,0,Up,0 +76,F,NAP,140,197,0,ST,116,N,1.1,Flat,0 +67,F,ASY,106,223,0,Normal,142,N,0.3,Up,0 +45,M,ASY,142,309,0,LVH,147,Y,0,Flat,1 +45,M,ASY,104,208,0,LVH,148,Y,3,Flat,0 +39,F,NAP,94,199,0,Normal,179,N,0,Up,0 +42,F,NAP,120,209,0,Normal,173,N,0,Flat,0 +56,M,ATA,120,236,0,Normal,178,N,0.8,Up,0 +58,M,ASY,146,218,0,Normal,105,N,2,Flat,1 +35,M,ASY,120,198,0,Normal,130,Y,1.6,Flat,1 +58,M,ASY,150,270,0,LVH,111,Y,0.8,Up,1 +41,M,NAP,130,214,0,LVH,168,N,2,Flat,0 +57,M,ASY,110,201,0,Normal,126,Y,1.5,Flat,0 +42,M,TA,148,244,0,LVH,178,N,0.8,Up,0 +62,M,ATA,128,208,1,LVH,140,N,0,Up,0 +59,M,TA,178,270,0,LVH,145,N,4.2,Down,0 +41,F,ATA,126,306,0,Normal,163,N,0,Up,0 +50,M,ASY,150,243,0,LVH,128,N,2.6,Flat,1 +59,M,ATA,140,221,0,Normal,164,Y,0,Up,0 +61,F,ASY,130,330,0,LVH,169,N,0,Up,1 +54,M,ASY,124,266,0,LVH,109,Y,2.2,Flat,1 +54,M,ASY,110,206,0,LVH,108,Y,0,Flat,1 +52,M,ASY,125,212,0,Normal,168,N,1,Up,1 +47,M,ASY,110,275,0,LVH,118,Y,1,Flat,1 +66,M,ASY,120,302,0,LVH,151,N,0.4,Flat,0 +58,M,ASY,100,234,0,Normal,156,N,0.1,Up,1 +64,F,NAP,140,313,0,Normal,133,N,0.2,Up,0 +50,F,ATA,120,244,0,Normal,162,N,1.1,Up,0 +44,F,NAP,108,141,0,Normal,175,N,0.6,Flat,0 +67,M,ASY,120,237,0,Normal,71,N,1,Flat,1 +49,F,ASY,130,269,0,Normal,163,N,0,Up,0 +57,M,ASY,165,289,1,LVH,124,N,1,Flat,1 +63,M,ASY,130,254,0,LVH,147,N,1.4,Flat,1 +48,M,ASY,124,274,0,LVH,166,N,0.5,Flat,1 +51,M,NAP,100,222,0,Normal,143,Y,1.2,Flat,0 +60,F,ASY,150,258,0,LVH,157,N,2.6,Flat,1 +59,M,ASY,140,177,0,Normal,162,Y,0,Up,1 +45,F,ATA,112,160,0,Normal,138,N,0,Flat,0 +55,F,ASY,180,327,0,ST,117,Y,3.4,Flat,1 +41,M,ATA,110,235,0,Normal,153,N,0,Up,0 +60,F,ASY,158,305,0,LVH,161,N,0,Up,1 +54,F,NAP,135,304,1,Normal,170,N,0,Up,0 +42,M,ATA,120,295,0,Normal,162,N,0,Up,0 +49,F,ATA,134,271,0,Normal,162,N,0,Flat,0 +46,M,ASY,120,249,0,LVH,144,N,0.8,Up,1 +56,F,ASY,200,288,1,LVH,133,Y,4,Down,1 +66,F,TA,150,226,0,Normal,114,N,2.6,Down,0 +56,M,ASY,130,283,1,LVH,103,Y,1.6,Down,1 +49,M,NAP,120,188,0,Normal,139,N,2,Flat,1 +54,M,ASY,122,286,0,LVH,116,Y,3.2,Flat,1 +57,M,ASY,152,274,0,Normal,88,Y,1.2,Flat,1 +65,F,NAP,160,360,0,LVH,151,N,0.8,Up,0 +54,M,NAP,125,273,0,LVH,152,N,0.5,Down,0 +54,F,NAP,160,201,0,Normal,163,N,0,Up,0 +62,M,ASY,120,267,0,Normal,99,Y,1.8,Flat,1 +52,F,NAP,136,196,0,LVH,169,N,0.1,Flat,0 +52,M,ATA,134,201,0,Normal,158,N,0.8,Up,0 +60,M,ASY,117,230,1,Normal,160,Y,1.4,Up,1 +63,F,ASY,108,269,0,Normal,169,Y,1.8,Flat,1 +66,M,ASY,112,212,0,LVH,132,Y,0.1,Up,1 +42,M,ASY,140,226,0,Normal,178,N,0,Up,0 +64,M,ASY,120,246,0,LVH,96,Y,2.2,Down,1 +54,M,NAP,150,232,0,LVH,165,N,1.6,Up,0 +46,F,NAP,142,177,0,LVH,160,Y,1.4,Down,0 +67,F,NAP,152,277,0,Normal,172,N,0,Up,0 +56,M,ASY,125,249,1,LVH,144,Y,1.2,Flat,1 +34,F,ATA,118,210,0,Normal,192,N,0.7,Up,0 +57,M,ASY,132,207,0,Normal,168,Y,0,Up,0 +64,M,ASY,145,212,0,LVH,132,N,2,Flat,1 +59,M,ASY,138,271,0,LVH,182,N,0,Up,0 +50,M,NAP,140,233,0,Normal,163,N,0.6,Flat,1 +51,M,TA,125,213,0,LVH,125,Y,1.4,Up,0 +54,M,ATA,192,283,0,LVH,195,N,0,Up,1 +53,M,ASY,123,282,0,Normal,95,Y,2,Flat,1 +52,M,ASY,112,230,0,Normal,160,N,0,Up,1 +40,M,ASY,110,167,0,LVH,114,Y,2,Flat,1 +58,M,NAP,132,224,0,LVH,173,N,3.2,Up,1 +41,F,NAP,112,268,0,LVH,172,Y,0,Up,0 +41,M,NAP,112,250,0,Normal,179,N,0,Up,0 +50,F,NAP,120,219,0,Normal,158,N,1.6,Flat,0 +54,F,NAP,108,267,0,LVH,167,N,0,Up,0 +64,F,ASY,130,303,0,Normal,122,N,2,Flat,0 +51,F,NAP,130,256,0,LVH,149,N,0.5,Up,0 +46,F,ATA,105,204,0,Normal,172,N,0,Up,0 +55,M,ASY,140,217,0,Normal,111,Y,5.6,Down,1 +45,M,ATA,128,308,0,LVH,170,N,0,Up,0 +56,M,TA,120,193,0,LVH,162,N,1.9,Flat,0 +66,F,ASY,178,228,1,Normal,165,Y,1,Flat,1 +38,M,TA,120,231,0,Normal,182,Y,3.8,Flat,1 +62,F,ASY,150,244,0,Normal,154,Y,1.4,Flat,1 +55,M,ATA,130,262,0,Normal,155,N,0,Up,0 +58,M,ASY,128,259,0,LVH,130,Y,3,Flat,1 +43,M,ASY,110,211,0,Normal,161,N,0,Up,0 +64,F,ASY,180,325,0,Normal,154,Y,0,Up,0 +50,F,ASY,110,254,0,LVH,159,N,0,Up,0 +53,M,NAP,130,197,1,LVH,152,N,1.2,Down,0 +45,F,ASY,138,236,0,LVH,152,Y,0.2,Flat,0 +65,M,TA,138,282,1,LVH,174,N,1.4,Flat,1 +69,M,TA,160,234,1,LVH,131,N,0.1,Flat,0 +69,M,NAP,140,254,0,LVH,146,N,2,Flat,1 +67,M,ASY,100,299,0,LVH,125,Y,0.9,Flat,1 +68,F,NAP,120,211,0,LVH,115,N,1.5,Flat,0 +34,M,TA,118,182,0,LVH,174,N,0,Up,0 +62,F,ASY,138,294,1,Normal,106,N,1.9,Flat,1 +51,M,ASY,140,298,0,Normal,122,Y,4.2,Flat,1 +46,M,NAP,150,231,0,Normal,147,N,3.6,Flat,1 +67,M,ASY,125,254,1,Normal,163,N,0.2,Flat,1 +50,M,NAP,129,196,0,Normal,163,N,0,Up,0 +42,M,NAP,120,240,1,Normal,194,N,0.8,Down,0 +56,F,ASY,134,409,0,LVH,150,Y,1.9,Flat,1 +41,M,ASY,110,172,0,LVH,158,N,0,Up,1 +42,F,ASY,102,265,0,LVH,122,N,0.6,Flat,0 +53,M,NAP,130,246,1,LVH,173,N,0,Up,0 +43,M,NAP,130,315,0,Normal,162,N,1.9,Up,0 +56,M,ASY,132,184,0,LVH,105,Y,2.1,Flat,1 +52,M,ASY,108,233,1,Normal,147,N,0.1,Up,0 +62,F,ASY,140,394,0,LVH,157,N,1.2,Flat,0 +70,M,NAP,160,269,0,Normal,112,Y,2.9,Flat,1 +54,M,ASY,140,239,0,Normal,160,N,1.2,Up,0 +70,M,ASY,145,174,0,Normal,125,Y,2.6,Down,1 +54,M,ATA,108,309,0,Normal,156,N,0,Up,0 +35,M,ASY,126,282,0,LVH,156,Y,0,Up,1 +48,M,NAP,124,255,1,Normal,175,N,0,Up,0 +55,F,ATA,135,250,0,LVH,161,N,1.4,Flat,0 +58,F,ASY,100,248,0,LVH,122,N,1,Flat,0 +54,F,NAP,110,214,0,Normal,158,N,1.6,Flat,0 +69,F,TA,140,239,0,Normal,151,N,1.8,Up,0 +77,M,ASY,125,304,0,LVH,162,Y,0,Up,1 +68,M,NAP,118,277,0,Normal,151,N,1,Up,0 +58,M,ASY,125,300,0,LVH,171,N,0,Up,1 +60,M,ASY,125,258,0,LVH,141,Y,2.8,Flat,1 +51,M,ASY,140,299,0,Normal,173,Y,1.6,Up,1 +55,M,ASY,160,289,0,LVH,145,Y,0.8,Flat,1 +52,M,TA,152,298,1,Normal,178,N,1.2,Flat,0 +60,F,NAP,102,318,0,Normal,160,N,0,Up,0 +58,M,NAP,105,240,0,LVH,154,Y,0.6,Flat,0 +64,M,NAP,125,309,0,Normal,131,Y,1.8,Flat,1 +37,M,NAP,130,250,0,Normal,187,N,3.5,Down,0 +59,M,TA,170,288,0,LVH,159,N,0.2,Flat,1 +51,M,NAP,125,245,1,LVH,166,N,2.4,Flat,0 +43,F,NAP,122,213,0,Normal,165,N,0.2,Flat,0 +58,M,ASY,128,216,0,LVH,131,Y,2.2,Flat,1 +29,M,ATA,130,204,0,LVH,202,N,0,Up,0 +41,F,ATA,130,204,0,LVH,172,N,1.4,Up,0 +63,F,NAP,135,252,0,LVH,172,N,0,Up,0 +51,M,NAP,94,227,0,Normal,154,Y,0,Up,0 +54,M,NAP,120,258,0,LVH,147,N,0.4,Flat,0 +44,M,ATA,120,220,0,Normal,170,N,0,Up,0 +54,M,ASY,110,239,0,Normal,126,Y,2.8,Flat,1 +65,M,ASY,135,254,0,LVH,127,N,2.8,Flat,1 +57,M,NAP,150,168,0,Normal,174,N,1.6,Up,0 +63,M,ASY,130,330,1,LVH,132,Y,1.8,Up,1 +35,F,ASY,138,183,0,Normal,182,N,1.4,Up,0 +41,M,ATA,135,203,0,Normal,132,N,0,Flat,0 +62,F,NAP,130,263,0,Normal,97,N,1.2,Flat,1 +43,F,ASY,132,341,1,LVH,136,Y,3,Flat,1 +58,F,TA,150,283,1,LVH,162,N,1,Up,0 +52,M,TA,118,186,0,LVH,190,N,0,Flat,0 +61,F,ASY,145,307,0,LVH,146,Y,1,Flat,1 +39,M,ASY,118,219,0,Normal,140,N,1.2,Flat,1 +45,M,ASY,115,260,0,LVH,185,N,0,Up,0 +52,M,ASY,128,255,0,Normal,161,Y,0,Up,1 +62,M,NAP,130,231,0,Normal,146,N,1.8,Flat,0 +62,F,ASY,160,164,0,LVH,145,N,6.2,Down,1 +53,F,ASY,138,234,0,LVH,160,N,0,Up,0 +43,M,ASY,120,177,0,LVH,120,Y,2.5,Flat,1 +47,M,NAP,138,257,0,LVH,156,N,0,Up,0 +52,M,ATA,120,325,0,Normal,172,N,0.2,Up,0 +68,M,NAP,180,274,1,LVH,150,Y,1.6,Flat,1 +39,M,NAP,140,321,0,LVH,182,N,0,Up,0 +53,F,ASY,130,264,0,LVH,143,N,0.4,Flat,0 +62,F,ASY,140,268,0,LVH,160,N,3.6,Down,1 +51,F,NAP,140,308,0,LVH,142,N,1.5,Up,0 +60,M,ASY,130,253,0,Normal,144,Y,1.4,Up,1 +65,M,ASY,110,248,0,LVH,158,N,0.6,Up,1 +65,F,NAP,155,269,0,Normal,148,N,0.8,Up,0 +60,M,NAP,140,185,0,LVH,155,N,3,Flat,1 +60,M,ASY,145,282,0,LVH,142,Y,2.8,Flat,1 +54,M,ASY,120,188,0,Normal,113,N,1.4,Flat,1 +44,M,ATA,130,219,0,LVH,188,N,0,Up,0 +44,M,ASY,112,290,0,LVH,153,N,0,Up,1 +51,M,NAP,110,175,0,Normal,123,N,0.6,Up,0 +59,M,NAP,150,212,1,Normal,157,N,1.6,Up,0 +71,F,ATA,160,302,0,Normal,162,N,0.4,Up,0 +61,M,NAP,150,243,1,Normal,137,Y,1,Flat,0 +55,M,ASY,132,353,0,Normal,132,Y,1.2,Flat,1 +64,M,NAP,140,335,0,Normal,158,N,0,Up,1 +43,M,ASY,150,247,0,Normal,171,N,1.5,Up,0 +58,F,NAP,120,340,0,Normal,172,N,0,Up,0 +60,M,ASY,130,206,0,LVH,132,Y,2.4,Flat,1 +58,M,ATA,120,284,0,LVH,160,N,1.8,Flat,1 +49,M,ATA,130,266,0,Normal,171,N,0.6,Up,0 +48,M,ATA,110,229,0,Normal,168,N,1,Down,1 +52,M,NAP,172,199,1,Normal,162,N,0.5,Up,0 +44,M,ATA,120,263,0,Normal,173,N,0,Up,0 +56,F,ATA,140,294,0,LVH,153,N,1.3,Flat,0 +57,M,ASY,140,192,0,Normal,148,N,0.4,Flat,0 +67,M,ASY,160,286,0,LVH,108,Y,1.5,Flat,1 +53,F,NAP,128,216,0,LVH,115,N,0,Up,0 +52,M,NAP,138,223,0,Normal,169,N,0,Up,0 +43,M,ASY,132,247,1,LVH,143,Y,0.1,Flat,1 +52,M,ASY,128,204,1,Normal,156,Y,1,Flat,1 +59,M,TA,134,204,0,Normal,162,N,0.8,Up,1 +64,M,TA,170,227,0,LVH,155,N,0.6,Flat,0 +66,F,NAP,146,278,0,LVH,152,N,0,Flat,0 +39,F,NAP,138,220,0,Normal,152,N,0,Flat,0 +57,M,ATA,154,232,0,LVH,164,N,0,Up,1 +58,F,ASY,130,197,0,Normal,131,N,0.6,Flat,0 +57,M,ASY,110,335,0,Normal,143,Y,3,Flat,1 +47,M,NAP,130,253,0,Normal,179,N,0,Up,0 +55,F,ASY,128,205,0,ST,130,Y,2,Flat,1 +35,M,ATA,122,192,0,Normal,174,N,0,Up,0 +61,M,ASY,148,203,0,Normal,161,N,0,Up,1 +58,M,ASY,114,318,0,ST,140,N,4.4,Down,1 +58,F,ASY,170,225,1,LVH,146,Y,2.8,Flat,1 +58,M,ATA,125,220,0,Normal,144,N,0.4,Flat,0 +56,M,ATA,130,221,0,LVH,163,N,0,Up,0 +56,M,ATA,120,240,0,Normal,169,N,0,Down,0 +67,M,NAP,152,212,0,LVH,150,N,0.8,Flat,1 +55,F,ATA,132,342,0,Normal,166,N,1.2,Up,0 +44,M,ASY,120,169,0,Normal,144,Y,2.8,Down,1 +63,M,ASY,140,187,0,LVH,144,Y,4,Up,1 +63,F,ASY,124,197,0,Normal,136,Y,0,Flat,1 +41,M,ATA,120,157,0,Normal,182,N,0,Up,0 +59,M,ASY,164,176,1,LVH,90,N,1,Flat,1 +57,F,ASY,140,241,0,Normal,123,Y,0.2,Flat,1 +45,M,TA,110,264,0,Normal,132,N,1.2,Flat,1 +68,M,ASY,144,193,1,Normal,141,N,3.4,Flat,1 +57,M,ASY,130,131,0,Normal,115,Y,1.2,Flat,1 +57,F,ATA,130,236,0,LVH,174,N,0,Flat,1 +38,M,NAP,138,175,0,Normal,173,N,0,Up,0 diff --git a/Heart-Failure-Prediction/Exercise/Readme.md b/Heart-Failure-Prediction/Exercise/Readme.md new file mode 100644 index 00000000..307515c3 --- /dev/null +++ b/Heart-Failure-Prediction/Exercise/Readme.md @@ -0,0 +1,13 @@ +# Exercise Statement + +In this exercise, one would be able to know how to predict whether person has heart failure or not heart failure and advanced algorithms along with textual data processing techniques, such as: + +* Random Forest Classifier + +# Prerequisites + +This exercise goes from basic methods to advanced ones, so there are no hard requisites for this exercise. But it is recommended that one should know basic ML workflow to grasp things conveniently. + +# Data source/summary: +The two files in `./data` concern product reviews and metadata from Kaggle platform. +They have been taken from [kaggle.com/datasets/fedesoriano/heart-failure-prediction](https://www.kaggle.com/datasets/fedesoriano/heart-failure-prediction). diff --git a/Heart-Failure-Prediction/Solution/Heart_disease_prediction.ipynb b/Heart-Failure-Prediction/Solution/Heart_disease_prediction.ipynb new file mode 100644 index 00000000..0e10bd8e --- /dev/null +++ b/Heart-Failure-Prediction/Solution/Heart_disease_prediction.ipynb @@ -0,0 +1,3185 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Heart_disease_prediction.ipynb", + "provenance": [], + "collapsed_sections": [], + "authorship_tag": "ABX9TyPZrGTcjl9XeOGx8Y+tRtVx" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "9_oWNhyr5IzP" + }, + "source": [ + "\n", + "# Project Problems:\n", + "\n", + "How to predict the heart failure?" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0p3eyUF34GC3", + "outputId": "cc22a7fa-0ba6-4675-ad4c-667d2d91ee86" + }, + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/gdrive/')" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/gdrive/\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "mQrOCehN5-hk" + }, + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import os\n", + "import joblib\n", + "import time" + ], + "execution_count": 70, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "WghlxC93o76q" + }, + "source": [ + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier\n", + "from sklearn.metrics import confusion_matrix, roc_curve, roc_auc_score\n", + "from sklearn.model_selection import GridSearchCV, RandomizedSearchCV" + ], + "execution_count": 50, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "i6sNZQK46bfE" + }, + "source": [ + "path = 'gdrive/MyDrive/DATA/Heart Failure/'" + ], + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "kTtqd6Xo6bQY", + "outputId": "91cf3b44-a08c-4dc8-d956-211206d1a8b2" + }, + "source": [ + "os.listdir(path)" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['heart.csv', 'hf_v1.pkl', 'data_interim.csv', 'standardS_hfv1.pkl']" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dzM8eG0P6xRd" + }, + "source": [ + "## Get the Data" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "S0aygCUV6VQa" + }, + "source": [ + "df = pd.read_csv(path + 'heart.csv')" + ], + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "id": "CHlRdLx26s1q", + "outputId": "825c7151-c3cb-4ef3-ba3c-32b34857aeb7" + }, + "source": [ + "df.head()" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AgeSexChestPainTypeRestingBPCholesterolFastingBSRestingECGMaxHRExerciseAnginaOldpeakST_SlopeHeartDisease
040MATA1402890Normal172N0.0Up0
149FNAP1601800Normal156N1.0Flat1
237MATA1302830ST98N0.0Up0
348FASY1382140Normal108Y1.5Flat1
454MNAP1501950Normal122N0.0Up0
\n", + "
" + ], + "text/plain": [ + " Age Sex ChestPainType ... Oldpeak ST_Slope HeartDisease\n", + "0 40 M ATA ... 0.0 Up 0\n", + "1 49 F NAP ... 1.0 Flat 1\n", + "2 37 M ATA ... 0.0 Up 0\n", + "3 48 F ASY ... 1.5 Flat 1\n", + "4 54 M NAP ... 0.0 Up 0\n", + "\n", + "[5 rows x 12 columns]" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "E6jPmtM760ho", + "outputId": "67520e19-1ef2-4f84-c07c-64278d2d1acc" + }, + "source": [ + "df.shape" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(918, 12)" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CVOVs6ZRYpKS", + "outputId": "6b784aae-2f18-4983-92e2-09cbb61059d7" + }, + "source": [ + "df.columns" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index(['Age', 'Sex', 'ChestPainType', 'RestingBP', 'Cholesterol', 'FastingBS',\n", + " 'RestingECG', 'MaxHR', 'ExerciseAngina', 'Oldpeak', 'ST_Slope',\n", + " 'HeartDisease'],\n", + " dtype='object')" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Kqg2oEQLYaHN", + "outputId": "65f29490-24cb-42ea-fa8e-cbcb27baed43" + }, + "source": [ + "df.isnull().sum()" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Age 0\n", + "Sex 0\n", + "ChestPainType 0\n", + "RestingBP 0\n", + "Cholesterol 0\n", + "FastingBS 0\n", + "RestingECG 0\n", + "MaxHR 0\n", + "ExerciseAngina 0\n", + "Oldpeak 0\n", + "ST_Slope 0\n", + "HeartDisease 0\n", + "dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gtmBBtNvZe0x" + }, + "source": [ + "## Data Preparation\n", + "It will consist the simple EDA and Feature Engineering" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uzbwFoszYZzG" + }, + "source": [ + "def plot_compare(mydata, col_target, col_x):\n", + " d1=mydata[mydata[col_target==1]][col_x]\n", + " d2=mydata[mydata[col_target==0]][col_x]\n", + " plt.figure(figsize=(7.5,7.5))\n", + " sns.distplot(d1, label='Heart Disease')\n", + " sns.distplot(d2, label='Not Heart Disease')\n", + " plt.legend(loc='upper left')" + ], + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "oi_gNF1rbE_Q" + }, + "source": [ + "" + ], + "execution_count": 99, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4QktwN2NbVQ3" + }, + "source": [ + "### Devide the columns type" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "f36uFpFwbcFg", + "outputId": "4515f7a5-0feb-4055-f568-ec862f5153a0" + }, + "source": [ + "df.dtypes" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Age int64\n", + "Sex object\n", + "ChestPainType object\n", + "RestingBP int64\n", + "Cholesterol int64\n", + "FastingBS int64\n", + "RestingECG object\n", + "MaxHR int64\n", + "ExerciseAngina object\n", + "Oldpeak float64\n", + "ST_Slope object\n", + "HeartDisease int64\n", + "dtype: object" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2CAqGK-n7AOc" + }, + "source": [ + "#### predictor \n", + "col_num = ['Age', 'RestingBP', 'Cholesterol','MaxHR','Oldpeak'] ## --> pure number\n", + "col_cat = ['Sex', 'ChestPainType', 'FastingBS','RestingECG','ExerciseAngina', 'ST_Slope'] ## --> categorical\n", + "other_col = list(set(df.columns)-set(col_num + col_cat)) ## --> others" + ], + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DorRlzj5-nT7", + "outputId": "c712b7e8-690c-4e44-84b4-2cea5e68fb9b" + }, + "source": [ + "other_col" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['HeartDisease']" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wpjLJzPF-4Fb" + }, + "source": [ + "col_target = ['HeartDisease']" + ], + "execution_count": 17, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "v8lx8rP-cQmL", + "outputId": "a79d4703-9b80-4ae6-f381-d5ace73d205e" + }, + "source": [ + "target_count = df[col_target].value_counts()\n", + "target_count/target_count.sum()" + ], + "execution_count": 18, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "HeartDisease\n", + "1 0.553377\n", + "0 0.446623\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "gIyApu40c5ej", + "outputId": "1fb46e43-3983-43b2-d452-e14a0ce7c955" + }, + "source": [ + "col_cat" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['Sex',\n", + " 'ChestPainType',\n", + " 'FastingBS',\n", + " 'RestingECG',\n", + " 'ExerciseAngina',\n", + " 'ST_Slope']" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ParmwivTn1cj", + "outputId": "a428fb65-0c02-46e0-a09c-fc88099fa032" + }, + "source": [ + "# Check Unique values in categorical columns\n", + "for col in col_cat:\n", + " print('{} has {} values '.format(col,df[col].unique()))\n", + " print('\\n')" + ], + "execution_count": 29, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Sex has ['M' 'F'] values \n", + "\n", + "\n", + "ChestPainType has ['ATA' 'NAP' 'ASY' 'TA'] values \n", + "\n", + "\n", + "FastingBS has [0 1] values \n", + "\n", + "\n", + "RestingECG has ['Normal' 'ST' 'LVH'] values \n", + "\n", + "\n", + "ExerciseAngina has ['N' 'Y'] values \n", + "\n", + "\n", + "ST_Slope has ['Up' 'Flat' 'Down'] values \n", + "\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 173 + }, + "id": "hu7BCt4Hc9Aq", + "outputId": "fdbac62c-a183-4e52-dcc5-e3a208f60bae" + }, + "source": [ + "df.groupby('Sex').agg({col_target[0]:[np.mean,np.std,np.size]})" + ], + "execution_count": 21, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HeartDisease
meanstdsize
Sex
F0.2590670.439262193
M0.6317240.482670725
\n", + "
" + ], + "text/plain": [ + " HeartDisease \n", + " mean std size\n", + "Sex \n", + "F 0.259067 0.439262 193\n", + "M 0.631724 0.482670 725" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 235 + }, + "id": "jDQWKm5gc8v9", + "outputId": "9f371783-c946-4b5c-c8f2-f1c977e545ee" + }, + "source": [ + "df.groupby('ChestPainType').agg({col_target[0]:[np.mean,np.std,np.size]})" + ], + "execution_count": 22, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HeartDisease
meanstdsize
ChestPainType
ASY0.7903230.407489496
ATA0.1387280.346666173
NAP0.3546800.479599203
TA0.4347830.50120646
\n", + "
" + ], + "text/plain": [ + " HeartDisease \n", + " mean std size\n", + "ChestPainType \n", + "ASY 0.790323 0.407489 496\n", + "ATA 0.138728 0.346666 173\n", + "NAP 0.354680 0.479599 203\n", + "TA 0.434783 0.501206 46" + ] + }, + "metadata": {}, + "execution_count": 22 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 173 + }, + "id": "ih4fFq9tc8rj", + "outputId": "4334cfc5-c546-479a-848c-133c8d19d40e" + }, + "source": [ + "df.groupby('FastingBS').agg({col_target[0]:[np.mean,np.std,np.size]})" + ], + "execution_count": 23, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HeartDisease
meanstdsize
FastingBS
00.4801140.499960704
10.7943930.405092214
\n", + "
" + ], + "text/plain": [ + " HeartDisease \n", + " mean std size\n", + "FastingBS \n", + "0 0.480114 0.499960 704\n", + "1 0.794393 0.405092 214" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "id": "0tDP_tYmc8n8", + "outputId": "3b7e2465-a6dd-4659-d5bd-c92ee868564a" + }, + "source": [ + "df.groupby('RestingECG').agg({col_target[0]:[np.mean,np.std,np.size]})" + ], + "execution_count": 24, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HeartDisease
meanstdsize
RestingECG
LVH0.5638300.497233188
Normal0.5163040.500187552
ST0.6573030.475950178
\n", + "
" + ], + "text/plain": [ + " HeartDisease \n", + " mean std size\n", + "RestingECG \n", + "LVH 0.563830 0.497233 188\n", + "Normal 0.516304 0.500187 552\n", + "ST 0.657303 0.475950 178" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 173 + }, + "id": "uHUGwGJ9c8hz", + "outputId": "7309f553-b588-4850-de8c-798dbf87497d" + }, + "source": [ + "df.groupby('ExerciseAngina').agg({col_target[0]:[np.mean,np.std,np.size]})" + ], + "execution_count": 25, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HeartDisease
meanstdsize
ExerciseAngina
N0.3510050.477722547
Y0.8517520.355826371
\n", + "
" + ], + "text/plain": [ + " HeartDisease \n", + " mean std size\n", + "ExerciseAngina \n", + "N 0.351005 0.477722 547\n", + "Y 0.851752 0.355826 371" + ] + }, + "metadata": {}, + "execution_count": 25 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "id": "N0YnlCcseSmF", + "outputId": "6ba72707-81b5-4012-a4b9-e0d841e3170b" + }, + "source": [ + "df.groupby('ST_Slope').agg({col_target[0]:[np.mean,np.std,np.size]})" + ], + "execution_count": 26, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HeartDisease
meanstdsize
ST_Slope
Down0.7777780.41907963
Flat0.8282610.377564460
Up0.1974680.398594395
\n", + "
" + ], + "text/plain": [ + " HeartDisease \n", + " mean std size\n", + "ST_Slope \n", + "Down 0.777778 0.419079 63\n", + "Flat 0.828261 0.377564 460\n", + "Up 0.197468 0.398594 395" + ] + }, + "metadata": {}, + "execution_count": 26 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JL521uuhfAgf" + }, + "source": [ + "### Feature Engineering" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "s_tBLbAye_65", + "outputId": "dd4a4bf9-0eee-4da7-ebfc-303253555f9f" + }, + "source": [ + "## Categorical Handling\n", + "## One Hot, Dummy, Hashing\n", + "\n", + "onehot = OneHotEncoder()\n", + "onehot.fit(df[col_cat])" + ], + "execution_count": 27, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "OneHotEncoder(categories='auto', drop=None, dtype=,\n", + " handle_unknown='error', sparse=True)" + ] + }, + "metadata": {}, + "execution_count": 27 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "t9M8dDnze_3O" + }, + "source": [ + "# [1,2,1,3,2,1] --> [[1,0,0],\n", + " # [0,1,0],\n", + " # [1,0,0],\n", + " # [0,0,1],\n", + " # [0,1,0],\n", + " # [1,0,0]]\n", + "\n", + "# [1,2,1,3,2,1] --> [[1,0],\n", + " # [0,1],\n", + " # [1,0],\n", + " # [0,0],\n", + " # [0,1],\n", + " # [1,0]]" + ], + "execution_count": 28, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Uc66bA_6e_zj" + }, + "source": [ + "col_cat2 = []\n", + "for i,j in zip(col_cat, onehot.categories_):\n", + " for e in j:\n", + " col_cat2.append(str(i)+'_'+str(e))" + ], + "execution_count": 30, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "DVbqbq1Xe_v7" + }, + "source": [ + "df[col_cat2] = pd.DataFrame(onehot.transform(df[col_cat]).toarray())" + ], + "execution_count": 31, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 224 + }, + "id": "wcTctv19e_pm", + "outputId": "5d374df4-1cae-49d8-fb5e-30fea5249510" + }, + "source": [ + "df[col_cat2].head()" + ], + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Sex_FSex_MChestPainType_ASYChestPainType_ATAChestPainType_NAPChestPainType_TAFastingBS_0FastingBS_1RestingECG_LVHRestingECG_NormalRestingECG_STExerciseAngina_NExerciseAngina_YST_Slope_DownST_Slope_FlatST_Slope_Up
00.01.00.01.00.00.01.00.00.01.00.01.00.00.00.01.0
11.00.00.00.01.00.01.00.00.01.00.01.00.00.01.00.0
20.01.00.01.00.00.01.00.00.00.01.01.00.00.00.01.0
31.00.01.00.00.00.01.00.00.01.00.00.01.00.01.00.0
40.01.00.00.01.00.01.00.00.01.00.01.00.00.00.01.0
\n", + "
" + ], + "text/plain": [ + " Sex_F Sex_M ChestPainType_ASY ... ST_Slope_Down ST_Slope_Flat ST_Slope_Up\n", + "0 0.0 1.0 0.0 ... 0.0 0.0 1.0\n", + "1 1.0 0.0 0.0 ... 0.0 1.0 0.0\n", + "2 0.0 1.0 0.0 ... 0.0 0.0 1.0\n", + "3 1.0 0.0 1.0 ... 0.0 1.0 0.0\n", + "4 0.0 1.0 0.0 ... 0.0 0.0 1.0\n", + "\n", + "[5 rows x 16 columns]" + ] + }, + "metadata": {}, + "execution_count": 34 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wIw7YERXo5PP" + }, + "source": [ + "## Numerical Handling\n", + "## Standarized, Caping.. Remember, the real data should have the same standarization or any transformation\n", + "\n", + "SS = StandardScaler()\n", + "SS.fit(df[col_num])\n", + "\n", + "col_num2 = [c+'_SS' for c in col_num]\n", + "df[col_num2] = pd.DataFrame(SS.transform(df[col_num]))" + ], + "execution_count": 35, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "SnlcXpRMp15-", + "outputId": "7c5a62bd-819d-44d5-d0cd-00987e32f282" + }, + "source": [ + "joblib.dump(SS, path + 'standardS_hfv1.pkl')" + ], + "execution_count": 36, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['gdrive/MyDrive/DATA/Heart Failure/standardS_hfv1.pkl']" + ] + }, + "metadata": {}, + "execution_count": 36 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "id": "8VS4AharqX92", + "outputId": "4d22221a-5ecc-4e81-aac3-736f2c5ef197" + }, + "source": [ + "df[col_num2].sample(5)" + ], + "execution_count": 37, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Age_SSRestingBP_SSCholesterol_SSMaxHR_SSOldpeak_SS
3660.7943910.951331-1.818435-0.7784721.043759
7331.3247560.9513310.248804-0.8963671.606617
5620.5822460.4109090.6878640.6755611.043759
8750.476173-0.6699351.2915711.382928-0.832432
879-0.584556-1.2103560.2762461.2257350.105664
\n", + "
" + ], + "text/plain": [ + " Age_SS RestingBP_SS Cholesterol_SS MaxHR_SS Oldpeak_SS\n", + "366 0.794391 0.951331 -1.818435 -0.778472 1.043759\n", + "733 1.324756 0.951331 0.248804 -0.896367 1.606617\n", + "562 0.582246 0.410909 0.687864 0.675561 1.043759\n", + "875 0.476173 -0.669935 1.291571 1.382928 -0.832432\n", + "879 -0.584556 -1.210356 0.276246 1.225735 0.105664" + ] + }, + "metadata": {}, + "execution_count": 37 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YhlFLbq4qnSd", + "outputId": "64820501-742a-40d0-9797-d7135ed4afe5" + }, + "source": [ + "col_cat2,col_num2" + ], + "execution_count": 38, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(['Sex_F',\n", + " 'Sex_M',\n", + " 'ChestPainType_ASY',\n", + " 'ChestPainType_ATA',\n", + " 'ChestPainType_NAP',\n", + " 'ChestPainType_TA',\n", + " 'FastingBS_0',\n", + " 'FastingBS_1',\n", + " 'RestingECG_LVH',\n", + " 'RestingECG_Normal',\n", + " 'RestingECG_ST',\n", + " 'ExerciseAngina_N',\n", + " 'ExerciseAngina_Y',\n", + " 'ST_Slope_Down',\n", + " 'ST_Slope_Flat',\n", + " 'ST_Slope_Up'],\n", + " ['Age_SS', 'RestingBP_SS', 'Cholesterol_SS', 'MaxHR_SS', 'Oldpeak_SS'])" + ] + }, + "metadata": {}, + "execution_count": 38 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "nND6v4YMqnNf", + "outputId": "e3ea6e65-f293-4328-cbce-165c71c415f7" + }, + "source": [ + "## Then explore it again... if necessery\n", + "corr_values = df[col_cat2+col_num2+col_target].corr()[col_target[0]].abs().sort_values()\n", + "corr_values" + ], + "execution_count": 40, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "RestingECG_LVH 0.010670\n", + "ChestPainType_TA 0.054790\n", + "RestingECG_Normal 0.091580\n", + "RestingECG_ST 0.102527\n", + "RestingBP_SS 0.107589\n", + "ST_Slope_Down 0.122527\n", + "ChestPainType_NAP 0.212964\n", + "Cholesterol_SS 0.232741\n", + "FastingBS_0 0.267291\n", + "FastingBS_1 0.267291\n", + "Age_SS 0.282039\n", + "Sex_F 0.305445\n", + "Sex_M 0.305445\n", + "MaxHR_SS 0.400421\n", + "ChestPainType_ATA 0.401924\n", + "Oldpeak_SS 0.403951\n", + "ExerciseAngina_Y 0.494282\n", + "ExerciseAngina_N 0.494282\n", + "ChestPainType_ASY 0.516716\n", + "ST_Slope_Flat 0.554134\n", + "ST_Slope_Up 0.622164\n", + "HeartDisease 1.000000\n", + "Name: HeartDisease, dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 40 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wxc41h__qnJQ", + "outputId": "161e7c42-cc41-4124-a172-6de53bcaac45" + }, + "source": [ + "corr_values[corr_values>0.12].index.tolist()" + ], + "execution_count": 41, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['ST_Slope_Down',\n", + " 'ChestPainType_NAP',\n", + " 'Cholesterol_SS',\n", + " 'FastingBS_0',\n", + " 'FastingBS_1',\n", + " 'Age_SS',\n", + " 'Sex_F',\n", + " 'Sex_M',\n", + " 'MaxHR_SS',\n", + " 'ChestPainType_ATA',\n", + " 'Oldpeak_SS',\n", + " 'ExerciseAngina_Y',\n", + " 'ExerciseAngina_N',\n", + " 'ChestPainType_ASY',\n", + " 'ST_Slope_Flat',\n", + " 'ST_Slope_Up',\n", + " 'HeartDisease']" + ] + }, + "metadata": {}, + "execution_count": 41 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "40YVRz60qnFW", + "outputId": "adb30cb4-882f-4b56-e52f-3e28e2eb3469" + }, + "source": [ + "## Summarize all the column that will be used \n", + "col_used = corr_values[corr_values>0.12].index.tolist()\n", + "col_used.sort()\n", + "col_used.remove(col_target[0])\n", + "\n", + "#or\n", + "#col_used = col_cat2 + col_num2\n", + "col_used" + ], + "execution_count": 42, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['Age_SS',\n", + " 'ChestPainType_ASY',\n", + " 'ChestPainType_ATA',\n", + " 'ChestPainType_NAP',\n", + " 'Cholesterol_SS',\n", + " 'ExerciseAngina_N',\n", + " 'ExerciseAngina_Y',\n", + " 'FastingBS_0',\n", + " 'FastingBS_1',\n", + " 'MaxHR_SS',\n", + " 'Oldpeak_SS',\n", + " 'ST_Slope_Down',\n", + " 'ST_Slope_Flat',\n", + " 'ST_Slope_Up',\n", + " 'Sex_F',\n", + " 'Sex_M']" + ] + }, + "metadata": {}, + "execution_count": 42 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "fPiDJwuYqnAb" + }, + "source": [ + "## Prepare the consumable data\n", + "X = df[col_used]\n", + "Y = df[col_target].values.reshape(len(df))" + ], + "execution_count": 43, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "P3w7uxWRqm2L", + "outputId": "2f0bcedd-a59a-43dc-fdb4-66aefa0be8cd" + }, + "source": [ + "X.shape" + ], + "execution_count": 44, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(918, 16)" + ] + }, + "metadata": {}, + "execution_count": 44 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "VY5oJYUft8aa", + "outputId": "b15a5866-31b4-4f6c-e3a5-d11d7af52720" + }, + "source": [ + "Y.shape" + ], + "execution_count": 45, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(918,)" + ] + }, + "metadata": {}, + "execution_count": 45 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_V8tkRm1uXX4" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "P_hH5_RIuWzS" + }, + "source": [ + "### Train-Test Splitting\n", + "80:20 splitting" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "So9ueKI0uWmu" + }, + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=123)" + ], + "execution_count": 47, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jKby3jA8vgff", + "outputId": "634a080f-6cfa-444e-a21d-52f57a07d25f" + }, + "source": [ + "X_train.shape" + ], + "execution_count": 48, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(734, 16)" + ] + }, + "metadata": {}, + "execution_count": 48 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "kP0bS7uPvgaC", + "outputId": "e2d4869c-4c97-4e80-9c65-aa7eab4ca90a" + }, + "source": [ + "X_test.shape" + ], + "execution_count": 49, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(184, 16)" + ] + }, + "metadata": {}, + "execution_count": 49 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "NvrtLip1vgP6" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FK29cPxLQXlA" + }, + "source": [ + "##Model Training\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zA5P7lZ5QXKb" + }, + "source": [ + "model_hf = RandomForestClassifier(n_estimators=10, max_depth=15, min_samples_split=3)" + ], + "execution_count": 51, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "iHXgsXILQXGs", + "outputId": "2aa4425d-a544-4414-b687-fe90d3f53a6b" + }, + "source": [ + "model_hf.fit(X_train,y_train)" + ], + "execution_count": 52, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n", + " criterion='gini', max_depth=15, max_features='auto',\n", + " max_leaf_nodes=None, max_samples=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=1, min_samples_split=3,\n", + " min_weight_fraction_leaf=0.0, n_estimators=10,\n", + " n_jobs=None, oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False)" + ] + }, + "metadata": {}, + "execution_count": 52 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "HVaXnCAqX36t" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6_he7O0hX2bs" + }, + "source": [ + "## Model Validation\n", + "### Basic Evaluation\n", + "This is the basic evaluation for classification problem" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "9MRiyr_zX2IN" + }, + "source": [ + "def model_validation_metrics(confusion_matrix):\n", + " tn, fp, fn, tp = confusion_matrix.ravel()\n", + " return (tp + tn)/(tp+tn+fp+fn), tp/(tp+fp), tp/(tp+fn)\n", + "\n", + "def roc_curve_func(y_true, y_score):\n", + " # compute fpr, tpr, thresholds and roc_auc\n", + " fpr, tpr, thresholds = roc_curve(y_true, y_score)\n", + " roc_auc = roc_auc_score(y_true, y_score)\n", + "\n", + " # plot ROC curve\n", + " plt.plot(fpr, tpr, label='ROC curve (area = %0.3f)' % roc_auc)\n", + " plt.plot([0, 1], [0, 1], 'k--') #random prediction curve\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.0])\n", + " plt.xlabel('False Positive Rate or (1 - specifity)')\n", + " plt.ylabel('True Positive Rate or (specifity')\n", + " plt.title('Receiver Operating Characteristic')\n", + " plt.legend(loc='lower right')" + ], + "execution_count": 53, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "v1vk5uVFXvNB", + "outputId": "ec595f1f-273f-4d41-e769-4b446f104044" + }, + "source": [ + "## Benchmark Accuracy of the good model\n", + "max(1-df[col_target].mean().values[0], df[col_target].mean().values[0])" + ], + "execution_count": 54, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.5533769063180828" + ] + }, + "metadata": {}, + "execution_count": 54 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OCIlW__4cLAg" + }, + "source": [ + "## Predict using the trained model and check the confusion matrix\n", + "y_train_pred = model_hf.predict(X_train)\n", + "y_train_pred_proba = model_hf.predict_proba(X_train)[:,1]\n", + "\n", + "cm_train = confusion_matrix(y_train, y_train_pred)" + ], + "execution_count": 55, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 391 + }, + "id": "6mCBIn2idVKn", + "outputId": "45ae211c-5151-4c6a-da3f-84a2477a461a" + }, + "source": [ + "plt.figure(figsize=(6,6))\n", + "sns.heatmap(cm_train, annot=True, fmt=',.0f', linewidths=3, annot_kws={'fontsize':16})" + ], + "execution_count": 56, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 56 + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ng6Dy6wZd0Cj", + "outputId": "a890bedc-f223-4057-899d-e058fd8cbb3a" + }, + "source": [ + "accuracy, precision, recall = model_validation_metrics(cm_train)\n", + "print(accuracy, precision, recall)" + ], + "execution_count": 57, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0.9741144414168937 0.9825 0.9703703703703703\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + }, + "id": "k0_oazEHeH3H", + "outputId": "b0246e2c-9ff1-4470-f1f9-486b8f51298a" + }, + "source": [ + "roc_curve_func(y_train, y_train_pred_proba)" + ], + "execution_count": 58, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YIxmmYDaeX5f" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OEds1eXeei2V" + }, + "source": [ + "## Cross Validation" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "RCVC62qQeige" + }, + "source": [ + "y_train_pred = model_hf.predict(X_train)\n", + "y_test_pred = model_hf.predict(X_test)" + ], + "execution_count": 59, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "1K78gpBjeib-" + }, + "source": [ + "cm_train = confusion_matrix(y_train, y_train_pred)\n", + "cm_test = confusion_matrix(y_test, y_test_pred)" + ], + "execution_count": 60, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "TYy2TRK8eiVr" + }, + "source": [ + "def basic_eval(tm,cm):\n", + " plt.figure(figsize=(6,6))\n", + " plt.title(tm+' Evaluation')\n", + " sns.heatmap(cm, annot=True, fmt=',.0f', linewidths=3, annot_kws={'fontsize':16})\n", + " accuracy,precision,recall = model_validation_metrics(cm)\n", + " print('accuracy :',accuracy)\n", + " print('precision :',precision)\n", + " print('recall :',recall)" + ], + "execution_count": 61, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 441 + }, + "id": "eFqT1sJWgFTP", + "outputId": "11904bc6-683b-4346-85c1-3ffb6fc91923" + }, + "source": [ + "basic_eval('Train', cm_train)" + ], + "execution_count": 62, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "accuracy : 0.9741144414168937\n", + "precision : 0.9825\n", + "recall : 0.9703703703703703\n" + ] + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 441 + }, + "id": "pClMHNVCgNCI", + "outputId": "f4051013-d5f2-47cd-a102-0e4d7d598561" + }, + "source": [ + "basic_eval('Test', cm_test)" + ], + "execution_count": 63, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "accuracy : 0.8532608695652174\n", + "precision : 0.8518518518518519\n", + "recall : 0.8932038834951457\n" + ] + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "tYI4lOQmgTIw" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qCcgUpWdguik" + }, + "source": [ + "## Bias-variance trade-off" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YTDl3MUeguTb" + }, + "source": [ + "## Check on hyperparameter changing\n", + "hyper_param_list= [2,3,4,5,6,7,8,9,10,11,12,13]" + ], + "execution_count": 64, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "KYLXHPr7guOG" + }, + "source": [ + "df_trade_off = []\n", + "for md in hyper_param_list:\n", + " model_hf_trade_off = RandomForestClassifier(n_estimators=10, max_depth=md, min_samples_split=3)\n", + "\n", + " # model_base = RandomForestClassifier(n_estimators=10, max_depth=md, min_samples_split=3)\n", + " # model_hf_trade_off = AdaBoostClassifier(base_estimator=model_base ,n_estimators=15, learning_rate=0.2, random_state=321)\n", + "\n", + " model_hf_trade_off.fit(X_train, y_train)\n", + " y_train_pred_temp = model_hf_trade_off.predict(X_train)\n", + " y_test_pred_temp = model_hf_trade_off.predict(X_test)\n", + " cm_train = confusion_matrix(y_train, y_train_pred_temp)\n", + " cm_test = confusion_matrix(y_test, y_test_pred_temp)\n", + " acc_train,p,r = model_validation_metrics(cm_train)\n", + " acc_test,p,r = model_validation_metrics(cm_test)\n", + " df_trade_off.append([acc_train, acc_test])\n", + "df_trade_off = pd.DataFrame(df_trade_off,columns=['train_accuracy','test_accuracy'], index=hyper_param_list)" + ], + "execution_count": 66, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 483 + }, + "id": "6bXXX2wBmbMO", + "outputId": "adf91d80-98ca-4217-a2ef-6ed6cbf258af" + }, + "source": [ + "df_trade_off.plot(figsize=(15,8))\n", + "plt.show()" + ], + "execution_count": 67, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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x5kwtyemYilkfDKER3obv4jUvaJ8tzJXsfRS/1cEPSVwIiIiwWT/Jpj3MOz41H2uq+oicjZOt1ofEe06XWq1PqApgRMREQk21sLeFRDTVvtaRKR6yvbLls14/MZ+2eb+oePaLxso6mKQt4iIiNQkY9wJlYhIdRkDsZ3crffN7r5Tdaz99C+n7lib1B/a9IXoGO9+B/maEjgRERERkVATHgEJvdyt/1h339czIyt0vlw3z/8FmhkZKJTAiYiIiIgIRDWC9he5W5mCvMr76TYvgpUz3LHwKEjoXXmPbssuEBbmTfwhQnvgRERERESkaqyFw7srlF4ud7fifHe8QQwk9i1P6BJTICZRTVLOkvbAiYiIiIhI9RkDzdu5W/J33X2+UjfDsmLp5ed/c2NQAJok+BM6f6OUxH7QsIV3v0OQUwInIiIiIiLnLiwcWvdwt353uPtOFELOmvKVuj3psOGd8q9p2aVy6WVCb4iM9ib+IKMETkREREREalZkNLRNdbcyxw+VjzHIWg7bPobVc9yxsAg3ZLxi6WVcN5ccSiVK4EREREREpPY1bA6dB7tbmSNZlUsvV8+FtCnuWGRj/3zyT1brAAAF1ElEQVS6CjPqmrUL+f10SuBERERERMQbMYnu1mOk+9zngwOb/Z0v/aWXX/0TSovd8cZxlUsvk1KgUax38XtACZyIiIiIiASGsDCI6+pufUa5+0qKy/fTlZVgbloI+Lvpt+hYufSyTR83EqGeUgInIiIiIiKBKyKqfHh4mcIjsHdl+Srdzq9gzWvumAmH1j0rl17G9XDDy+uB+vFbiIiIiIhI6IiOgU6XuVuZozmVSy/XvgUZ092xiIZuZa6s7DIpBVp0Csr9dBrkLSIiIiIi9Y+1kLfVNUgpS+z2roSSQne8YQuX0F39FLTs7G2sJ9EgbxERERERCS3GuMSsZWe44BZ3X+kJ2Le2vOvlnoygGyquBE5EREREREJDeKQrpWzTB1Lv9jqacxLmdQAiIiIiIiJSNUrgREREREREgoQSOBERERERkSChBE5ERERERCRIKIETEREREREJEkrgREREREREgoQSOBERERERkSChBE5ERERERCRIKIETEREREREJEkrgREREREREgoQSOBERERERkSChBE5ERERERCRIKIETEREREREJEkrgREREREREgoQSOBERERERkSChBE5ERERERCRIKIETEREREREJEkrgREREREREgoSx1nodQyXGmFxgh9dxnEIrYL/XQUhQ0HNFqkLPE6kqPVekKvQ8karQ8yR4dLDWxp3qQMAlcIHKGJNmrU31Og4JfHquSFXoeSJVpeeKVIWeJ1IVep7UDyqhFBERERERCRJK4ERERERERIKEEriqm+h1ABI09FyRqtDzRKpKzxWpCj1PpCr0PKkHtAdOREREREQkSGgFTkREREREJEgogTsDY0w7Y8wHxpi1xphMY8yPvY5JApcxJtwYs9wY87bXsUjgMsY0N8bMNcasN8asM8Zc7HVMEniMMT/xv++sMcbMNMZEex2TBAZjzBRjzD5jzJoK98UaYxYZYzb5/2zhZYzivW95njztf+9ZZYx5wxjT3MsY5dwogTuzEuARa21P4CLgQWNMT49jksD1Y2Cd10FIwHsOeM9a2x3og54zchJjTBLwIyDVWtsLCAdGeRuVBJCpwIiT7nsUWGKtPR9Y4v9cQttUvvk8WQT0stZeAGwEHqvroKT6lMCdgbV2r7U2w//xUdyJVpK3UUkgMsa0Ba4FJnsdiwQuY0wz4DvASwDW2mJr7SFvo5IAFQE0NMZEAI2ALI/jkQBhrf0YyDvp7huAaf6PpwHfrdOgJOCc6nlirV1orS3xf/ol0LbOA5NqUwJ3FowxHYF+wFfeRiIB6lng54DP60AkoHUCcoGX/eW2k40xjb0OSgKLtXYP8CdgJ7AXOGytXehtVBLg4q21e/0fZwPxXgYjQeEe4F2vg5CzpwSuiowxTYDXgIettUe8jkcCizHmOmCftTbd61gk4EUAKcDfrbX9gGOo1ElO4t+/dAMu4U8EGhtj7vA2KgkW1rUYV5tx+VbGmP/BbRN61etY5OwpgasCY0wkLnl71Vr7utfxSEC6BLjeGLMdmAUMMca84m1IEqB2A7uttWUr+XNxCZ1IRUOBbdbaXGvtCeB1YJDHMUlgyzHGtAHw/7nP43gkQBljxgHXAbdbzRMLSkrgzsAYY3B7VdZZa//sdTwSmKy1j1lr21prO+IaDbxvrdXVcvkGa202sMsY081/15XAWg9DksC0E7jIGNPI/z50JWp2I6f3FjDW//FY4E0PY5EAZYwZgdvucb21tsDreOTcKIE7s0uAO3ErKiv8t2u8DkpEgtoPgVeNMauAvsD/ehyPBBj/Cu1cIANYjXu/nuhpUBIwjDEzgS+AbsaY3caYe4EngauMMZtwK7hPehmjeO9bnifPA02BRf5z2n94GqScE6OVUxERERERkeCgFTgREREREZEgoQROREREREQkSCiBExERERERCRJK4ERERERERIKEEjgREREREZEgoQROREREREQkSCiBExERERERCRJK4ERERERERILE/wOwL+qt0uI+pAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "F-N6jIrembJs" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bc_emKWqpKhu" + }, + "source": [ + "## Model selection\n", + "Grid Search" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "i_N_CLBspKRu" + }, + "source": [ + "parameters = {'n_estimators':[10,20,30,40], 'max_depth':[5,6,7,8,9,10], 'min_samples_split':[3,5,7,9,11], 'max_leaf_nodes':[8,12,16,20]}\n", + "model_base = RandomForestClassifier(n_estimators=10, max_depth=md, min_samples_split=3,min_samples_leaf=2, max_leaf_nodes=4)\n", + "clf_search1 = GridSearchCV(model_base, parameters, cv=5, verbose=1)" + ], + "execution_count": 68, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "E3CAtohBmbGl", + "outputId": "322f7c34-ad08-4670-99f8-2d9f4f2d17e0" + }, + "source": [ + "L0 = time.time()\n", + "clf_search1.fit(X_train,y_train)\n", + "print(time.time() - L0)" + ], + "execution_count": 71, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Fitting 5 folds for each of 480 candidates, totalling 2400 fits\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "106.52611255645752\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[Parallel(n_jobs=1)]: Done 2400 out of 2400 | elapsed: 1.8min finished\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XcBKo7sarh4q", + "outputId": "1b7075b6-b322-43f4-b8e2-1f7b35d80485" + }, + "source": [ + "# clf.cv_results_\n", + "clf_search1.best_estimator_" + ], + "execution_count": 72, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n", + " criterion='gini', max_depth=5, max_features='auto',\n", + " max_leaf_nodes=20, max_samples=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=2, min_samples_split=11,\n", + " min_weight_fraction_leaf=0.0, n_estimators=20,\n", + " n_jobs=None, oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False)" + ] + }, + "metadata": {}, + "execution_count": 72 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XSkuSLrru5Fs", + "outputId": "2a4fe716-a07c-455f-8c16-d3513544d40e" + }, + "source": [ + "clf_search1.best_score_" + ], + "execution_count": 73, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.8842139595564253" + ] + }, + "metadata": {}, + "execution_count": 73 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "yGY3avp2vGBX" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CZf-s_8ovOgg" + }, + "source": [ + "Random search" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1QsY0KF1vexp" + }, + "source": [ + "parameters = {'n_estimators':[10,20,30,40], 'max_depth':[5,6,7,8,9,10], 'min_samples_split':[3,5,7,9,11], 'max_leaf_nodes':[8,12,16,20]}\n", + "model_base = RandomForestClassifier(n_estimators=10, max_depth=md, min_samples_split=3,min_samples_leaf=2, max_leaf_nodes=4)\n", + "clf_search2 = RandomizedSearchCV(model_base, param_distributions=parameters, n_iter=60, cv=5, verbose=1)" + ], + "execution_count": 74, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wzUZajZjvexr", + "outputId": "175975df-de62-43d0-c4b3-ce2214a8414e" + }, + "source": [ + "L0 = time.time()\n", + "clf_search2.fit(X_train,y_train)\n", + "print(time.time() - L0)" + ], + "execution_count": 75, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Fitting 5 folds for each of 60 candidates, totalling 300 fits\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "11.992514371871948\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[Parallel(n_jobs=1)]: Done 300 out of 300 | elapsed: 11.9s finished\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZYRdRJRGvext", + "outputId": "da2c2695-ceb0-4f13-990b-e7765009f42f" + }, + "source": [ + "# clf.cv_results_\n", + "clf_search2.best_estimator_" + ], + "execution_count": 76, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n", + " criterion='gini', max_depth=7, max_features='auto',\n", + " max_leaf_nodes=16, max_samples=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=2, min_samples_split=11,\n", + " min_weight_fraction_leaf=0.0, n_estimators=30,\n", + " n_jobs=None, oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False)" + ] + }, + "metadata": {}, + "execution_count": 76 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uSqY03Krvexu", + "outputId": "7d0cbd2f-cb66-419b-97d7-b99312454b34" + }, + "source": [ + "clf_search2.best_score_" + ], + "execution_count": 77, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.8842139595564253" + ] + }, + "metadata": {}, + "execution_count": 77 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ityBcIjOvOK6" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HWnpaPw2wJUq" + }, + "source": [ + "## Select the model" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "JwuQqNiOvODu" + }, + "source": [ + "model_hf = RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n", + " criterion='gini', max_depth=5, max_features='auto',\n", + " max_leaf_nodes=20, max_samples=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=2, min_samples_split=11,\n", + " min_weight_fraction_leaf=0.0, n_estimators=20,\n", + " n_jobs=None, oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False)" + ], + "execution_count": 78, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Lw3mJz47vOAm", + "outputId": "460d4d3f-93c3-41c5-cc21-ba54e1092ca0" + }, + "source": [ + "model_hf.fit(X_train,y_train)" + ], + "execution_count": 79, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n", + " criterion='gini', max_depth=5, max_features='auto',\n", + " max_leaf_nodes=20, max_samples=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=2, min_samples_split=11,\n", + " min_weight_fraction_leaf=0.0, n_estimators=20,\n", + " n_jobs=None, oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False)" + ] + }, + "metadata": {}, + "execution_count": 79 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YEIwlUmQvN9J" + }, + "source": [ + "y_train_pred = model_hf.predict(X_train)\n", + "y_test_pred = model_hf.predict(X_test)\n", + "\n", + "cm_train = confusion_matrix(y_train, y_train_pred)\n", + "cm_test = confusion_matrix(y_test, y_test_pred)" + ], + "execution_count": 80, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 441 + }, + "id": "mZ3AjQQXxSr_", + "outputId": "68cd0d33-98f6-48e9-b812-413a90e66ee4" + }, + "source": [ + "basic_eval('Train', cm_train)" + ], + "execution_count": 81, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "accuracy : 0.8950953678474114\n", + "precision : 0.8813953488372093\n", + "recall : 0.9358024691358025\n" + ] + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 441 + }, + "id": "f0tc3nRaxa-G", + "outputId": "87c1a8fa-5004-4f7a-e545-dd5cd7e252eb" + }, + "source": [ + "basic_eval('Test', cm_test)" + ], + "execution_count": 82, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "accuracy : 0.8532608695652174\n", + "precision : 0.8333333333333334\n", + "recall : 0.9223300970873787\n" + ] + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cAyKg5IJxgQf", + "outputId": "92bd1a0c-6bd3-4ec9-eb41-79e025d38ca0" + }, + "source": [ + "model_hf" + ], + "execution_count": 83, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n", + " criterion='gini', max_depth=5, max_features='auto',\n", + " max_leaf_nodes=20, max_samples=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=2, min_samples_split=11,\n", + " min_weight_fraction_leaf=0.0, n_estimators=20,\n", + " n_jobs=None, oob_score=False, random_state=None,\n", + " verbose=0, warm_start=False)" + ] + }, + "metadata": {}, + "execution_count": 83 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "UbZU2-T7x051" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7sZe0vRCx2fk" + }, + "source": [ + "## Best Features" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "r_qNQy_Bx19T", + "outputId": "e98964fe-72ad-455e-fc72-9f7961d4f883" + }, + "source": [ + "col_used" + ], + "execution_count": 84, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['Age_SS',\n", + " 'ChestPainType_ASY',\n", + " 'ChestPainType_ATA',\n", + " 'ChestPainType_NAP',\n", + " 'Cholesterol_SS',\n", + " 'ExerciseAngina_N',\n", + " 'ExerciseAngina_Y',\n", + " 'FastingBS_0',\n", + " 'FastingBS_1',\n", + " 'MaxHR_SS',\n", + " 'Oldpeak_SS',\n", + " 'ST_Slope_Down',\n", + " 'ST_Slope_Flat',\n", + " 'ST_Slope_Up',\n", + " 'Sex_F',\n", + " 'Sex_M']" + ] + }, + "metadata": {}, + "execution_count": 84 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KEUYLTMrx17R", + "outputId": "a581a17b-1287-44a4-d2c4-e1d3d5da5c3b" + }, + "source": [ + "\n", + "model_hf.feature_importances_" + ], + "execution_count": 85, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([0.034375 , 0.12072173, 0.01878678, 0.00686828, 0.05836448,\n", + " 0.05073022, 0.0494848 , 0.01817228, 0.01476113, 0.04878354,\n", + " 0.05662494, 0.00590169, 0.07900267, 0.37185316, 0.05026042,\n", + " 0.01530889])" + ] + }, + "metadata": {}, + "execution_count": 85 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1ROYhMaMx14s" + }, + "source": [ + "df_imp = pd.DataFrame({'cols':col_used, 'importance':model_hf.feature_importances_})\n", + "df_imp = df_imp.set_index('cols')" + ], + "execution_count": 86, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "id": "Ds_V_IwWx10b", + "outputId": "9fa12594-ad12-4a04-f796-2353e3d6215c" + }, + "source": [ + "df_imp.sort_values('importance').plot(kind='barh')" + ], + "execution_count": 87, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 87 + }, + { + "output_type": "display_data", + "data": { + "image/png": "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lCnsuuuu7LDDDgwePJh3332XpUuXcvrpp7PzzjvTv39/Lr/88mZ/N3W9ZprrcX69zKYri/Y5qej1NNJybqndy/T9Iulmn4JJZfZZBPxnhdh655dvka7VFtovKNlvbvF2SeuRrl3eVNLlvIg4sKStSakEi2IqxP6pos2fLrN/oSzck9X0b2ZWK9OnT2f27NlstNFGbLnllhxzzDFMnjyZiy66iEsuuYQLL7wQSEu1kydP5pVXXmGPPfbg5Zdf5tJLL0USM2fO5Pnnn2fYsGG8+OKLADz99NPMmDGDjTbaiIkTJ3LBBRcsH4Tff/99xo8fT5cuXXjppZcYMWIEhYIdzzzzDLNmzeJTn/oUu+22G48++iiDBw/m0EMPZezYsey88878+9//pmvXrlx11VX06NGDKVOmsGjRInbbbTeGDRtW9WMw5TgDUhNI2os0YxwVEX62xMw6rJ133plevdJC23/8x38wbNgwAPr167d8pgnw9a9/nU6dOtGnTx+23HJLnn/+eR555BFOPvlkALbeems233zz5YPp3nvvzUYbbVT2nIsXL+akk05i2rRpdO7cefkxAIMHD2bTTTcFYMCAAcydO5cePXrQq1cvdt55ZwA22CBdGbzvvvuYMWMGt96a8u8sWLCAl156yYNpS4mI+8nFw0vaR5OupVZF0pPAuiXNR0bEzObEZ2bWUtZdd8WvsE6dOi1/36lTJ5YsWbJ8W+kjJo09crL++utX3DZq1Cg+8YlPMH36dJYtW0aXLivuJy2Op3PnzivFUCoiuOSSS9hnn30ajKUp6vmcqVUQEZ/Lz8cW/3ggNbM1zi233MKyZct45ZVXePXVV+nbty9DhgxhzJgxALz44ov89a9/pW/fvqsc2717d959993l7xcsWECvXr3o1KkT119/PUuXLm3w3H379uWNN95gypQpALz77rssWbKEffbZh9/97ncsXrx4eQzvvfdesz6nZ6ZmZu1QeylK8ZnPfIbBgwfz73//m8suu4wuXbpwwgkn8J3vfId+/fqx1lprMXr06JVmlgX9+/enc+fO7LDDDowcOZITTjiBgw8+mOuuu4599923wVkswDrrrMPYsWM5+eST+eCDD+jatSv3338/xxxzDHPnzmWnnXYiIthkk024446GUhg0Tn62v2Nat1ef6HXUhSu1tZf/Oc06otmzZ7PNNtu0dhhN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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ftTzlBI9y2iE" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sv73VB0nzH2K" + }, + "source": [ + "## Save and Load model\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TS1BGwQOzHm8", + "outputId": "cc7a688a-759e-40d5-d4a0-ef3017c785c8" + }, + "source": [ + "joblib.dump(model_hf, path + 'hf_v1.pkl')" + ], + "execution_count": 88, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['gdrive/MyDrive/DATA/Heart Failure/hf_v1.pkl']" + ] + }, + "metadata": {}, + "execution_count": 88 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "lrx0kq4CzHkC" + }, + "source": [ + "model_hf_load = joblib.load(path + 'hf_v1.pkl')\n", + "model_standard_scaler = joblib.load(path + 'standardS_hfv1.pkl')" + ], + "execution_count": 89, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "buJTsvvRzHa1", + "outputId": "c5c880bd-4894-4940-b753-243913dc4959" + }, + "source": [ + "unit_data = X_test.sample()\n", + "model_hf_load.predict(unit_data)" + ], + "execution_count": 94, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([0])" + ] + }, + "metadata": {}, + "execution_count": 94 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 100 + }, + "id": "tjAH_woF3fdF", + "outputId": "2bdddf32-a9c6-4987-d289-64e709f3c1df" + }, + "source": [ + "unit_data" + ], + "execution_count": 95, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Age_SSChestPainType_ASYChestPainType_ATAChestPainType_NAPCholesterol_SSExerciseAngina_NExerciseAngina_YFastingBS_0FastingBS_1MaxHR_SSOldpeak_SSST_Slope_DownST_Slope_FlatST_Slope_UpSex_FSex_M
170-2.5999420.01.00.00.4043051.00.01.00.00.91135-0.8324320.00.01.00.01.0
\n", + "
" + ], + "text/plain": [ + " Age_SS ChestPainType_ASY ChestPainType_ATA ... ST_Slope_Up Sex_F Sex_M\n", + "170 -2.599942 0.0 1.0 ... 1.0 0.0 1.0\n", + "\n", + "[1 rows x 16 columns]" + ] + }, + "metadata": {}, + "execution_count": 95 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "30pjDU2w4gP9" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/Heart-Failure-Prediction/Solution/Readme.md b/Heart-Failure-Prediction/Solution/Readme.md new file mode 100644 index 00000000..2056b37d --- /dev/null +++ b/Heart-Failure-Prediction/Solution/Readme.md @@ -0,0 +1,13 @@ +# My Solution + +In this folder, you will find the following jupyter notebook using +a variety of classification methods, including Random Forest Classifier: + +`Heart_disease_prediction.ipynb` + +[![Open in colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gimseng/99-ML-Learning-Projects/blob/add_imams/Heart-Failure-Prediction/Solution/Heart_disease_prediction.ipynb) +[![View in nbviewer](https://github.com/jupyter/design/blob/master/logos/Badges/nbviewer_badge.svg)](https://nbviewer.jupyter.org/github/gimseng/99-ML-Learning-Projects/blob/add_imams/Heart-Failure-Prediction/Solution/Heart_disease_prediction.ipynb) + +The first part of the notebook consists of loading and exploring the data + +Finally, we will perform training and evaluation of the prediction.