From 4a0bf3838be97f8d2499fa6fbc7484caeadc36a0 Mon Sep 17 00:00:00 2001 From: Sam Lau Date: Mon, 27 May 2024 21:47:05 -0700 Subject: [PATCH] Update 05-27 --- resources/lectures/lec16/data/diabetes.csv | 769 + resources/lectures/lec16/dsc80_utils.py | 87 + .../lectures/lec16/imgs/dtree-basic-plot.svg | 22 + resources/lectures/lec16/imgs/dtree-basic.svg | 17 + resources/lectures/lec16/imgs/k-fold.png | Bin 0 -> 69443 bytes resources/lectures/lec16/imgs/ml-taxonomy.svg | 59 + .../lectures/lec16/imgs/train-test-first.png | Bin 0 -> 18425 bytes .../lectures/lec16/imgs/train-test-val.png | Bin 0 -> 31340 bytes resources/lectures/lec16/imgs/tt-errors.png | Bin 0 -> 207420 bytes resources/lectures/lec16/lec16-live.html | 11197 ++++++++ resources/lectures/lec16/lec16-live.ipynb | 22968 ++++++++++++++++ resources/lectures/lec16/lec16.html | 11197 ++++++++ resources/lectures/lec16/lec16.ipynb | 22968 ++++++++++++++++ resources/lectures/lec16/lec16_util.py | 127 + resources/lectures/lec16/rise.css | 77 + 15 files changed, 69488 insertions(+) create mode 100644 resources/lectures/lec16/data/diabetes.csv create mode 100644 resources/lectures/lec16/dsc80_utils.py create mode 100644 resources/lectures/lec16/imgs/dtree-basic-plot.svg create mode 100644 resources/lectures/lec16/imgs/dtree-basic.svg create mode 100644 resources/lectures/lec16/imgs/k-fold.png create mode 100644 resources/lectures/lec16/imgs/ml-taxonomy.svg create mode 100644 resources/lectures/lec16/imgs/train-test-first.png create mode 100644 resources/lectures/lec16/imgs/train-test-val.png create mode 100644 resources/lectures/lec16/imgs/tt-errors.png create mode 100644 resources/lectures/lec16/lec16-live.html create mode 100644 resources/lectures/lec16/lec16-live.ipynb create mode 100644 resources/lectures/lec16/lec16.html create mode 100644 resources/lectures/lec16/lec16.ipynb create mode 100644 resources/lectures/lec16/lec16_util.py create mode 100644 resources/lectures/lec16/rise.css diff --git a/resources/lectures/lec16/data/diabetes.csv b/resources/lectures/lec16/data/diabetes.csv new file mode 100644 index 0000000..9e6a362 --- /dev/null +++ b/resources/lectures/lec16/data/diabetes.csv @@ -0,0 +1,769 @@ +Pregnancies,Glucose,BloodPressure,SkinThickness,Insulin,BMI,DiabetesPedigreeFunction,Age,Outcome +6,148,72,35,0,33.6,0.627,50,1 +1,85,66,29,0,26.6,0.351,31,0 +8,183,64,0,0,23.3,0.672,32,1 +1,89,66,23,94,28.1,0.167,21,0 +0,137,40,35,168,43.1,2.288,33,1 +5,116,74,0,0,25.6,0.201,30,0 +3,78,50,32,88,31,0.248,26,1 +10,115,0,0,0,35.3,0.134,29,0 +2,197,70,45,543,30.5,0.158,53,1 +8,125,96,0,0,0,0.232,54,1 +4,110,92,0,0,37.6,0.191,30,0 +10,168,74,0,0,38,0.537,34,1 +10,139,80,0,0,27.1,1.441,57,0 +1,189,60,23,846,30.1,0.398,59,1 +5,166,72,19,175,25.8,0.587,51,1 +7,100,0,0,0,30,0.484,32,1 +0,118,84,47,230,45.8,0.551,31,1 +7,107,74,0,0,29.6,0.254,31,1 +1,103,30,38,83,43.3,0.183,33,0 +1,115,70,30,96,34.6,0.529,32,1 +3,126,88,41,235,39.3,0.704,27,0 +8,99,84,0,0,35.4,0.388,50,0 +7,196,90,0,0,39.8,0.451,41,1 +9,119,80,35,0,29,0.263,29,1 +11,143,94,33,146,36.6,0.254,51,1 +10,125,70,26,115,31.1,0.205,41,1 +7,147,76,0,0,39.4,0.257,43,1 +1,97,66,15,140,23.2,0.487,22,0 +13,145,82,19,110,22.2,0.245,57,0 +5,117,92,0,0,34.1,0.337,38,0 +5,109,75,26,0,36,0.546,60,0 +3,158,76,36,245,31.6,0.851,28,1 +3,88,58,11,54,24.8,0.267,22,0 +6,92,92,0,0,19.9,0.188,28,0 +10,122,78,31,0,27.6,0.512,45,0 +4,103,60,33,192,24,0.966,33,0 +11,138,76,0,0,33.2,0.42,35,0 +9,102,76,37,0,32.9,0.665,46,1 +2,90,68,42,0,38.2,0.503,27,1 +4,111,72,47,207,37.1,1.39,56,1 +3,180,64,25,70,34,0.271,26,0 +7,133,84,0,0,40.2,0.696,37,0 +7,106,92,18,0,22.7,0.235,48,0 +9,171,110,24,240,45.4,0.721,54,1 +7,159,64,0,0,27.4,0.294,40,0 +0,180,66,39,0,42,1.893,25,1 +1,146,56,0,0,29.7,0.564,29,0 +2,71,70,27,0,28,0.586,22,0 +7,103,66,32,0,39.1,0.344,31,1 +7,105,0,0,0,0,0.305,24,0 +1,103,80,11,82,19.4,0.491,22,0 +1,101,50,15,36,24.2,0.526,26,0 +5,88,66,21,23,24.4,0.342,30,0 +8,176,90,34,300,33.7,0.467,58,1 +7,150,66,42,342,34.7,0.718,42,0 +1,73,50,10,0,23,0.248,21,0 +7,187,68,39,304,37.7,0.254,41,1 +0,100,88,60,110,46.8,0.962,31,0 +0,146,82,0,0,40.5,1.781,44,0 +0,105,64,41,142,41.5,0.173,22,0 +2,84,0,0,0,0,0.304,21,0 +8,133,72,0,0,32.9,0.27,39,1 +5,44,62,0,0,25,0.587,36,0 +2,141,58,34,128,25.4,0.699,24,0 +7,114,66,0,0,32.8,0.258,42,1 +5,99,74,27,0,29,0.203,32,0 +0,109,88,30,0,32.5,0.855,38,1 +2,109,92,0,0,42.7,0.845,54,0 +1,95,66,13,38,19.6,0.334,25,0 +4,146,85,27,100,28.9,0.189,27,0 +2,100,66,20,90,32.9,0.867,28,1 +5,139,64,35,140,28.6,0.411,26,0 +13,126,90,0,0,43.4,0.583,42,1 +4,129,86,20,270,35.1,0.231,23,0 +1,79,75,30,0,32,0.396,22,0 +1,0,48,20,0,24.7,0.14,22,0 +7,62,78,0,0,32.6,0.391,41,0 +5,95,72,33,0,37.7,0.37,27,0 +0,131,0,0,0,43.2,0.27,26,1 +2,112,66,22,0,25,0.307,24,0 +3,113,44,13,0,22.4,0.14,22,0 +2,74,0,0,0,0,0.102,22,0 +7,83,78,26,71,29.3,0.767,36,0 +0,101,65,28,0,24.6,0.237,22,0 +5,137,108,0,0,48.8,0.227,37,1 +2,110,74,29,125,32.4,0.698,27,0 +13,106,72,54,0,36.6,0.178,45,0 +2,100,68,25,71,38.5,0.324,26,0 +15,136,70,32,110,37.1,0.153,43,1 +1,107,68,19,0,26.5,0.165,24,0 +1,80,55,0,0,19.1,0.258,21,0 +4,123,80,15,176,32,0.443,34,0 +7,81,78,40,48,46.7,0.261,42,0 +4,134,72,0,0,23.8,0.277,60,1 +2,142,82,18,64,24.7,0.761,21,0 +6,144,72,27,228,33.9,0.255,40,0 +2,92,62,28,0,31.6,0.13,24,0 +1,71,48,18,76,20.4,0.323,22,0 +6,93,50,30,64,28.7,0.356,23,0 +1,122,90,51,220,49.7,0.325,31,1 +1,163,72,0,0,39,1.222,33,1 +1,151,60,0,0,26.1,0.179,22,0 +0,125,96,0,0,22.5,0.262,21,0 +1,81,72,18,40,26.6,0.283,24,0 +2,85,65,0,0,39.6,0.93,27,0 +1,126,56,29,152,28.7,0.801,21,0 +1,96,122,0,0,22.4,0.207,27,0 +4,144,58,28,140,29.5,0.287,37,0 +3,83,58,31,18,34.3,0.336,25,0 +0,95,85,25,36,37.4,0.247,24,1 +3,171,72,33,135,33.3,0.199,24,1 +8,155,62,26,495,34,0.543,46,1 +1,89,76,34,37,31.2,0.192,23,0 +4,76,62,0,0,34,0.391,25,0 +7,160,54,32,175,30.5,0.588,39,1 +4,146,92,0,0,31.2,0.539,61,1 +5,124,74,0,0,34,0.22,38,1 +5,78,48,0,0,33.7,0.654,25,0 +4,97,60,23,0,28.2,0.443,22,0 +4,99,76,15,51,23.2,0.223,21,0 +0,162,76,56,100,53.2,0.759,25,1 +6,111,64,39,0,34.2,0.26,24,0 +2,107,74,30,100,33.6,0.404,23,0 +5,132,80,0,0,26.8,0.186,69,0 +0,113,76,0,0,33.3,0.278,23,1 +1,88,30,42,99,55,0.496,26,1 +3,120,70,30,135,42.9,0.452,30,0 +1,118,58,36,94,33.3,0.261,23,0 +1,117,88,24,145,34.5,0.403,40,1 +0,105,84,0,0,27.9,0.741,62,1 +4,173,70,14,168,29.7,0.361,33,1 +9,122,56,0,0,33.3,1.114,33,1 +3,170,64,37,225,34.5,0.356,30,1 +8,84,74,31,0,38.3,0.457,39,0 +2,96,68,13,49,21.1,0.647,26,0 +2,125,60,20,140,33.8,0.088,31,0 +0,100,70,26,50,30.8,0.597,21,0 +0,93,60,25,92,28.7,0.532,22,0 +0,129,80,0,0,31.2,0.703,29,0 +5,105,72,29,325,36.9,0.159,28,0 +3,128,78,0,0,21.1,0.268,55,0 +5,106,82,30,0,39.5,0.286,38,0 +2,108,52,26,63,32.5,0.318,22,0 +10,108,66,0,0,32.4,0.272,42,1 +4,154,62,31,284,32.8,0.237,23,0 +0,102,75,23,0,0,0.572,21,0 +9,57,80,37,0,32.8,0.096,41,0 +2,106,64,35,119,30.5,1.4,34,0 +5,147,78,0,0,33.7,0.218,65,0 +2,90,70,17,0,27.3,0.085,22,0 +1,136,74,50,204,37.4,0.399,24,0 +4,114,65,0,0,21.9,0.432,37,0 +9,156,86,28,155,34.3,1.189,42,1 +1,153,82,42,485,40.6,0.687,23,0 +8,188,78,0,0,47.9,0.137,43,1 +7,152,88,44,0,50,0.337,36,1 +2,99,52,15,94,24.6,0.637,21,0 +1,109,56,21,135,25.2,0.833,23,0 +2,88,74,19,53,29,0.229,22,0 +17,163,72,41,114,40.9,0.817,47,1 +4,151,90,38,0,29.7,0.294,36,0 +7,102,74,40,105,37.2,0.204,45,0 +0,114,80,34,285,44.2,0.167,27,0 +2,100,64,23,0,29.7,0.368,21,0 +0,131,88,0,0,31.6,0.743,32,1 +6,104,74,18,156,29.9,0.722,41,1 +3,148,66,25,0,32.5,0.256,22,0 +4,120,68,0,0,29.6,0.709,34,0 +4,110,66,0,0,31.9,0.471,29,0 +3,111,90,12,78,28.4,0.495,29,0 +6,102,82,0,0,30.8,0.18,36,1 +6,134,70,23,130,35.4,0.542,29,1 +2,87,0,23,0,28.9,0.773,25,0 +1,79,60,42,48,43.5,0.678,23,0 +2,75,64,24,55,29.7,0.37,33,0 +8,179,72,42,130,32.7,0.719,36,1 +6,85,78,0,0,31.2,0.382,42,0 +0,129,110,46,130,67.1,0.319,26,1 +5,143,78,0,0,45,0.19,47,0 +5,130,82,0,0,39.1,0.956,37,1 +6,87,80,0,0,23.2,0.084,32,0 +0,119,64,18,92,34.9,0.725,23,0 +1,0,74,20,23,27.7,0.299,21,0 +5,73,60,0,0,26.8,0.268,27,0 +4,141,74,0,0,27.6,0.244,40,0 +7,194,68,28,0,35.9,0.745,41,1 +8,181,68,36,495,30.1,0.615,60,1 +1,128,98,41,58,32,1.321,33,1 +8,109,76,39,114,27.9,0.64,31,1 +5,139,80,35,160,31.6,0.361,25,1 +3,111,62,0,0,22.6,0.142,21,0 +9,123,70,44,94,33.1,0.374,40,0 +7,159,66,0,0,30.4,0.383,36,1 +11,135,0,0,0,52.3,0.578,40,1 +8,85,55,20,0,24.4,0.136,42,0 +5,158,84,41,210,39.4,0.395,29,1 +1,105,58,0,0,24.3,0.187,21,0 +3,107,62,13,48,22.9,0.678,23,1 +4,109,64,44,99,34.8,0.905,26,1 +4,148,60,27,318,30.9,0.15,29,1 +0,113,80,16,0,31,0.874,21,0 +1,138,82,0,0,40.1,0.236,28,0 +0,108,68,20,0,27.3,0.787,32,0 +2,99,70,16,44,20.4,0.235,27,0 +6,103,72,32,190,37.7,0.324,55,0 +5,111,72,28,0,23.9,0.407,27,0 +8,196,76,29,280,37.5,0.605,57,1 +5,162,104,0,0,37.7,0.151,52,1 +1,96,64,27,87,33.2,0.289,21,0 +7,184,84,33,0,35.5,0.355,41,1 +2,81,60,22,0,27.7,0.29,25,0 +0,147,85,54,0,42.8,0.375,24,0 +7,179,95,31,0,34.2,0.164,60,0 +0,140,65,26,130,42.6,0.431,24,1 +9,112,82,32,175,34.2,0.26,36,1 +12,151,70,40,271,41.8,0.742,38,1 +5,109,62,41,129,35.8,0.514,25,1 +6,125,68,30,120,30,0.464,32,0 +5,85,74,22,0,29,1.224,32,1 +5,112,66,0,0,37.8,0.261,41,1 +0,177,60,29,478,34.6,1.072,21,1 +2,158,90,0,0,31.6,0.805,66,1 +7,119,0,0,0,25.2,0.209,37,0 +7,142,60,33,190,28.8,0.687,61,0 +1,100,66,15,56,23.6,0.666,26,0 +1,87,78,27,32,34.6,0.101,22,0 +0,101,76,0,0,35.7,0.198,26,0 +3,162,52,38,0,37.2,0.652,24,1 +4,197,70,39,744,36.7,2.329,31,0 +0,117,80,31,53,45.2,0.089,24,0 +4,142,86,0,0,44,0.645,22,1 +6,134,80,37,370,46.2,0.238,46,1 +1,79,80,25,37,25.4,0.583,22,0 +4,122,68,0,0,35,0.394,29,0 +3,74,68,28,45,29.7,0.293,23,0 +4,171,72,0,0,43.6,0.479,26,1 +7,181,84,21,192,35.9,0.586,51,1 +0,179,90,27,0,44.1,0.686,23,1 +9,164,84,21,0,30.8,0.831,32,1 +0,104,76,0,0,18.4,0.582,27,0 +1,91,64,24,0,29.2,0.192,21,0 +4,91,70,32,88,33.1,0.446,22,0 +3,139,54,0,0,25.6,0.402,22,1 +6,119,50,22,176,27.1,1.318,33,1 +2,146,76,35,194,38.2,0.329,29,0 +9,184,85,15,0,30,1.213,49,1 +10,122,68,0,0,31.2,0.258,41,0 +0,165,90,33,680,52.3,0.427,23,0 +9,124,70,33,402,35.4,0.282,34,0 +1,111,86,19,0,30.1,0.143,23,0 +9,106,52,0,0,31.2,0.38,42,0 +2,129,84,0,0,28,0.284,27,0 +2,90,80,14,55,24.4,0.249,24,0 +0,86,68,32,0,35.8,0.238,25,0 +12,92,62,7,258,27.6,0.926,44,1 +1,113,64,35,0,33.6,0.543,21,1 +3,111,56,39,0,30.1,0.557,30,0 +2,114,68,22,0,28.7,0.092,25,0 +1,193,50,16,375,25.9,0.655,24,0 +11,155,76,28,150,33.3,1.353,51,1 +3,191,68,15,130,30.9,0.299,34,0 +3,141,0,0,0,30,0.761,27,1 +4,95,70,32,0,32.1,0.612,24,0 +3,142,80,15,0,32.4,0.2,63,0 +4,123,62,0,0,32,0.226,35,1 +5,96,74,18,67,33.6,0.997,43,0 +0,138,0,0,0,36.3,0.933,25,1 +2,128,64,42,0,40,1.101,24,0 +0,102,52,0,0,25.1,0.078,21,0 +2,146,0,0,0,27.5,0.24,28,1 +10,101,86,37,0,45.6,1.136,38,1 +2,108,62,32,56,25.2,0.128,21,0 +3,122,78,0,0,23,0.254,40,0 +1,71,78,50,45,33.2,0.422,21,0 +13,106,70,0,0,34.2,0.251,52,0 +2,100,70,52,57,40.5,0.677,25,0 +7,106,60,24,0,26.5,0.296,29,1 +0,104,64,23,116,27.8,0.454,23,0 +5,114,74,0,0,24.9,0.744,57,0 +2,108,62,10,278,25.3,0.881,22,0 +0,146,70,0,0,37.9,0.334,28,1 +10,129,76,28,122,35.9,0.28,39,0 +7,133,88,15,155,32.4,0.262,37,0 +7,161,86,0,0,30.4,0.165,47,1 +2,108,80,0,0,27,0.259,52,1 +7,136,74,26,135,26,0.647,51,0 +5,155,84,44,545,38.7,0.619,34,0 +1,119,86,39,220,45.6,0.808,29,1 +4,96,56,17,49,20.8,0.34,26,0 +5,108,72,43,75,36.1,0.263,33,0 +0,78,88,29,40,36.9,0.434,21,0 +0,107,62,30,74,36.6,0.757,25,1 +2,128,78,37,182,43.3,1.224,31,1 +1,128,48,45,194,40.5,0.613,24,1 +0,161,50,0,0,21.9,0.254,65,0 +6,151,62,31,120,35.5,0.692,28,0 +2,146,70,38,360,28,0.337,29,1 +0,126,84,29,215,30.7,0.52,24,0 +14,100,78,25,184,36.6,0.412,46,1 +8,112,72,0,0,23.6,0.84,58,0 +0,167,0,0,0,32.3,0.839,30,1 +2,144,58,33,135,31.6,0.422,25,1 +5,77,82,41,42,35.8,0.156,35,0 +5,115,98,0,0,52.9,0.209,28,1 +3,150,76,0,0,21,0.207,37,0 +2,120,76,37,105,39.7,0.215,29,0 +10,161,68,23,132,25.5,0.326,47,1 +0,137,68,14,148,24.8,0.143,21,0 +0,128,68,19,180,30.5,1.391,25,1 +2,124,68,28,205,32.9,0.875,30,1 +6,80,66,30,0,26.2,0.313,41,0 +0,106,70,37,148,39.4,0.605,22,0 +2,155,74,17,96,26.6,0.433,27,1 +3,113,50,10,85,29.5,0.626,25,0 +7,109,80,31,0,35.9,1.127,43,1 +2,112,68,22,94,34.1,0.315,26,0 +3,99,80,11,64,19.3,0.284,30,0 +3,182,74,0,0,30.5,0.345,29,1 +3,115,66,39,140,38.1,0.15,28,0 +6,194,78,0,0,23.5,0.129,59,1 +4,129,60,12,231,27.5,0.527,31,0 +3,112,74,30,0,31.6,0.197,25,1 +0,124,70,20,0,27.4,0.254,36,1 +13,152,90,33,29,26.8,0.731,43,1 +2,112,75,32,0,35.7,0.148,21,0 +1,157,72,21,168,25.6,0.123,24,0 +1,122,64,32,156,35.1,0.692,30,1 +10,179,70,0,0,35.1,0.2,37,0 +2,102,86,36,120,45.5,0.127,23,1 +6,105,70,32,68,30.8,0.122,37,0 +8,118,72,19,0,23.1,1.476,46,0 +2,87,58,16,52,32.7,0.166,25,0 +1,180,0,0,0,43.3,0.282,41,1 +12,106,80,0,0,23.6,0.137,44,0 +1,95,60,18,58,23.9,0.26,22,0 +0,165,76,43,255,47.9,0.259,26,0 +0,117,0,0,0,33.8,0.932,44,0 +5,115,76,0,0,31.2,0.343,44,1 +9,152,78,34,171,34.2,0.893,33,1 +7,178,84,0,0,39.9,0.331,41,1 +1,130,70,13,105,25.9,0.472,22,0 +1,95,74,21,73,25.9,0.673,36,0 +1,0,68,35,0,32,0.389,22,0 +5,122,86,0,0,34.7,0.29,33,0 +8,95,72,0,0,36.8,0.485,57,0 +8,126,88,36,108,38.5,0.349,49,0 +1,139,46,19,83,28.7,0.654,22,0 +3,116,0,0,0,23.5,0.187,23,0 +3,99,62,19,74,21.8,0.279,26,0 +5,0,80,32,0,41,0.346,37,1 +4,92,80,0,0,42.2,0.237,29,0 +4,137,84,0,0,31.2,0.252,30,0 +3,61,82,28,0,34.4,0.243,46,0 +1,90,62,12,43,27.2,0.58,24,0 +3,90,78,0,0,42.7,0.559,21,0 +9,165,88,0,0,30.4,0.302,49,1 +1,125,50,40,167,33.3,0.962,28,1 +13,129,0,30,0,39.9,0.569,44,1 +12,88,74,40,54,35.3,0.378,48,0 +1,196,76,36,249,36.5,0.875,29,1 +5,189,64,33,325,31.2,0.583,29,1 +5,158,70,0,0,29.8,0.207,63,0 +5,103,108,37,0,39.2,0.305,65,0 +4,146,78,0,0,38.5,0.52,67,1 +4,147,74,25,293,34.9,0.385,30,0 +5,99,54,28,83,34,0.499,30,0 +6,124,72,0,0,27.6,0.368,29,1 +0,101,64,17,0,21,0.252,21,0 +3,81,86,16,66,27.5,0.306,22,0 +1,133,102,28,140,32.8,0.234,45,1 +3,173,82,48,465,38.4,2.137,25,1 +0,118,64,23,89,0,1.731,21,0 +0,84,64,22,66,35.8,0.545,21,0 +2,105,58,40,94,34.9,0.225,25,0 +2,122,52,43,158,36.2,0.816,28,0 +12,140,82,43,325,39.2,0.528,58,1 +0,98,82,15,84,25.2,0.299,22,0 +1,87,60,37,75,37.2,0.509,22,0 +4,156,75,0,0,48.3,0.238,32,1 +0,93,100,39,72,43.4,1.021,35,0 +1,107,72,30,82,30.8,0.821,24,0 +0,105,68,22,0,20,0.236,22,0 +1,109,60,8,182,25.4,0.947,21,0 +1,90,62,18,59,25.1,1.268,25,0 +1,125,70,24,110,24.3,0.221,25,0 +1,119,54,13,50,22.3,0.205,24,0 +5,116,74,29,0,32.3,0.66,35,1 +8,105,100,36,0,43.3,0.239,45,1 +5,144,82,26,285,32,0.452,58,1 +3,100,68,23,81,31.6,0.949,28,0 +1,100,66,29,196,32,0.444,42,0 +5,166,76,0,0,45.7,0.34,27,1 +1,131,64,14,415,23.7,0.389,21,0 +4,116,72,12,87,22.1,0.463,37,0 +4,158,78,0,0,32.9,0.803,31,1 +2,127,58,24,275,27.7,1.6,25,0 +3,96,56,34,115,24.7,0.944,39,0 +0,131,66,40,0,34.3,0.196,22,1 +3,82,70,0,0,21.1,0.389,25,0 +3,193,70,31,0,34.9,0.241,25,1 +4,95,64,0,0,32,0.161,31,1 +6,137,61,0,0,24.2,0.151,55,0 +5,136,84,41,88,35,0.286,35,1 +9,72,78,25,0,31.6,0.28,38,0 +5,168,64,0,0,32.9,0.135,41,1 +2,123,48,32,165,42.1,0.52,26,0 +4,115,72,0,0,28.9,0.376,46,1 +0,101,62,0,0,21.9,0.336,25,0 +8,197,74,0,0,25.9,1.191,39,1 +1,172,68,49,579,42.4,0.702,28,1 +6,102,90,39,0,35.7,0.674,28,0 +1,112,72,30,176,34.4,0.528,25,0 +1,143,84,23,310,42.4,1.076,22,0 +1,143,74,22,61,26.2,0.256,21,0 +0,138,60,35,167,34.6,0.534,21,1 +3,173,84,33,474,35.7,0.258,22,1 +1,97,68,21,0,27.2,1.095,22,0 +4,144,82,32,0,38.5,0.554,37,1 +1,83,68,0,0,18.2,0.624,27,0 +3,129,64,29,115,26.4,0.219,28,1 +1,119,88,41,170,45.3,0.507,26,0 +2,94,68,18,76,26,0.561,21,0 +0,102,64,46,78,40.6,0.496,21,0 +2,115,64,22,0,30.8,0.421,21,0 +8,151,78,32,210,42.9,0.516,36,1 +4,184,78,39,277,37,0.264,31,1 +0,94,0,0,0,0,0.256,25,0 +1,181,64,30,180,34.1,0.328,38,1 +0,135,94,46,145,40.6,0.284,26,0 +1,95,82,25,180,35,0.233,43,1 +2,99,0,0,0,22.2,0.108,23,0 +3,89,74,16,85,30.4,0.551,38,0 +1,80,74,11,60,30,0.527,22,0 +2,139,75,0,0,25.6,0.167,29,0 +1,90,68,8,0,24.5,1.138,36,0 +0,141,0,0,0,42.4,0.205,29,1 +12,140,85,33,0,37.4,0.244,41,0 +5,147,75,0,0,29.9,0.434,28,0 +1,97,70,15,0,18.2,0.147,21,0 +6,107,88,0,0,36.8,0.727,31,0 +0,189,104,25,0,34.3,0.435,41,1 +2,83,66,23,50,32.2,0.497,22,0 +4,117,64,27,120,33.2,0.23,24,0 +8,108,70,0,0,30.5,0.955,33,1 +4,117,62,12,0,29.7,0.38,30,1 +0,180,78,63,14,59.4,2.42,25,1 +1,100,72,12,70,25.3,0.658,28,0 +0,95,80,45,92,36.5,0.33,26,0 +0,104,64,37,64,33.6,0.51,22,1 +0,120,74,18,63,30.5,0.285,26,0 +1,82,64,13,95,21.2,0.415,23,0 +2,134,70,0,0,28.9,0.542,23,1 +0,91,68,32,210,39.9,0.381,25,0 +2,119,0,0,0,19.6,0.832,72,0 +2,100,54,28,105,37.8,0.498,24,0 +14,175,62,30,0,33.6,0.212,38,1 +1,135,54,0,0,26.7,0.687,62,0 +5,86,68,28,71,30.2,0.364,24,0 +10,148,84,48,237,37.6,1.001,51,1 +9,134,74,33,60,25.9,0.46,81,0 +9,120,72,22,56,20.8,0.733,48,0 +1,71,62,0,0,21.8,0.416,26,0 +8,74,70,40,49,35.3,0.705,39,0 +5,88,78,30,0,27.6,0.258,37,0 +10,115,98,0,0,24,1.022,34,0 +0,124,56,13,105,21.8,0.452,21,0 +0,74,52,10,36,27.8,0.269,22,0 +0,97,64,36,100,36.8,0.6,25,0 +8,120,0,0,0,30,0.183,38,1 +6,154,78,41,140,46.1,0.571,27,0 +1,144,82,40,0,41.3,0.607,28,0 +0,137,70,38,0,33.2,0.17,22,0 +0,119,66,27,0,38.8,0.259,22,0 +7,136,90,0,0,29.9,0.21,50,0 +4,114,64,0,0,28.9,0.126,24,0 +0,137,84,27,0,27.3,0.231,59,0 +2,105,80,45,191,33.7,0.711,29,1 +7,114,76,17,110,23.8,0.466,31,0 +8,126,74,38,75,25.9,0.162,39,0 +4,132,86,31,0,28,0.419,63,0 +3,158,70,30,328,35.5,0.344,35,1 +0,123,88,37,0,35.2,0.197,29,0 +4,85,58,22,49,27.8,0.306,28,0 +0,84,82,31,125,38.2,0.233,23,0 +0,145,0,0,0,44.2,0.63,31,1 +0,135,68,42,250,42.3,0.365,24,1 +1,139,62,41,480,40.7,0.536,21,0 +0,173,78,32,265,46.5,1.159,58,0 +4,99,72,17,0,25.6,0.294,28,0 +8,194,80,0,0,26.1,0.551,67,0 +2,83,65,28,66,36.8,0.629,24,0 +2,89,90,30,0,33.5,0.292,42,0 +4,99,68,38,0,32.8,0.145,33,0 +4,125,70,18,122,28.9,1.144,45,1 +3,80,0,0,0,0,0.174,22,0 +6,166,74,0,0,26.6,0.304,66,0 +5,110,68,0,0,26,0.292,30,0 +2,81,72,15,76,30.1,0.547,25,0 +7,195,70,33,145,25.1,0.163,55,1 +6,154,74,32,193,29.3,0.839,39,0 +2,117,90,19,71,25.2,0.313,21,0 +3,84,72,32,0,37.2,0.267,28,0 +6,0,68,41,0,39,0.727,41,1 +7,94,64,25,79,33.3,0.738,41,0 +3,96,78,39,0,37.3,0.238,40,0 +10,75,82,0,0,33.3,0.263,38,0 +0,180,90,26,90,36.5,0.314,35,1 +1,130,60,23,170,28.6,0.692,21,0 +2,84,50,23,76,30.4,0.968,21,0 +8,120,78,0,0,25,0.409,64,0 +12,84,72,31,0,29.7,0.297,46,1 +0,139,62,17,210,22.1,0.207,21,0 +9,91,68,0,0,24.2,0.2,58,0 +2,91,62,0,0,27.3,0.525,22,0 +3,99,54,19,86,25.6,0.154,24,0 +3,163,70,18,105,31.6,0.268,28,1 +9,145,88,34,165,30.3,0.771,53,1 +7,125,86,0,0,37.6,0.304,51,0 +13,76,60,0,0,32.8,0.18,41,0 +6,129,90,7,326,19.6,0.582,60,0 +2,68,70,32,66,25,0.187,25,0 +3,124,80,33,130,33.2,0.305,26,0 +6,114,0,0,0,0,0.189,26,0 +9,130,70,0,0,34.2,0.652,45,1 +3,125,58,0,0,31.6,0.151,24,0 +3,87,60,18,0,21.8,0.444,21,0 +1,97,64,19,82,18.2,0.299,21,0 +3,116,74,15,105,26.3,0.107,24,0 +0,117,66,31,188,30.8,0.493,22,0 +0,111,65,0,0,24.6,0.66,31,0 +2,122,60,18,106,29.8,0.717,22,0 +0,107,76,0,0,45.3,0.686,24,0 +1,86,66,52,65,41.3,0.917,29,0 +6,91,0,0,0,29.8,0.501,31,0 +1,77,56,30,56,33.3,1.251,24,0 +4,132,0,0,0,32.9,0.302,23,1 +0,105,90,0,0,29.6,0.197,46,0 +0,57,60,0,0,21.7,0.735,67,0 +0,127,80,37,210,36.3,0.804,23,0 +3,129,92,49,155,36.4,0.968,32,1 +8,100,74,40,215,39.4,0.661,43,1 +3,128,72,25,190,32.4,0.549,27,1 +10,90,85,32,0,34.9,0.825,56,1 +4,84,90,23,56,39.5,0.159,25,0 +1,88,78,29,76,32,0.365,29,0 +8,186,90,35,225,34.5,0.423,37,1 +5,187,76,27,207,43.6,1.034,53,1 +4,131,68,21,166,33.1,0.16,28,0 +1,164,82,43,67,32.8,0.341,50,0 +4,189,110,31,0,28.5,0.68,37,0 +1,116,70,28,0,27.4,0.204,21,0 +3,84,68,30,106,31.9,0.591,25,0 +6,114,88,0,0,27.8,0.247,66,0 +1,88,62,24,44,29.9,0.422,23,0 +1,84,64,23,115,36.9,0.471,28,0 +7,124,70,33,215,25.5,0.161,37,0 +1,97,70,40,0,38.1,0.218,30,0 +8,110,76,0,0,27.8,0.237,58,0 +11,103,68,40,0,46.2,0.126,42,0 +11,85,74,0,0,30.1,0.3,35,0 +6,125,76,0,0,33.8,0.121,54,1 +0,198,66,32,274,41.3,0.502,28,1 +1,87,68,34,77,37.6,0.401,24,0 +6,99,60,19,54,26.9,0.497,32,0 +0,91,80,0,0,32.4,0.601,27,0 +2,95,54,14,88,26.1,0.748,22,0 +1,99,72,30,18,38.6,0.412,21,0 +6,92,62,32,126,32,0.085,46,0 +4,154,72,29,126,31.3,0.338,37,0 +0,121,66,30,165,34.3,0.203,33,1 +3,78,70,0,0,32.5,0.27,39,0 +2,130,96,0,0,22.6,0.268,21,0 +3,111,58,31,44,29.5,0.43,22,0 +2,98,60,17,120,34.7,0.198,22,0 +1,143,86,30,330,30.1,0.892,23,0 +1,119,44,47,63,35.5,0.28,25,0 +6,108,44,20,130,24,0.813,35,0 +2,118,80,0,0,42.9,0.693,21,1 +10,133,68,0,0,27,0.245,36,0 +2,197,70,99,0,34.7,0.575,62,1 +0,151,90,46,0,42.1,0.371,21,1 +6,109,60,27,0,25,0.206,27,0 +12,121,78,17,0,26.5,0.259,62,0 +8,100,76,0,0,38.7,0.19,42,0 +8,124,76,24,600,28.7,0.687,52,1 +1,93,56,11,0,22.5,0.417,22,0 +8,143,66,0,0,34.9,0.129,41,1 +6,103,66,0,0,24.3,0.249,29,0 +3,176,86,27,156,33.3,1.154,52,1 +0,73,0,0,0,21.1,0.342,25,0 +11,111,84,40,0,46.8,0.925,45,1 +2,112,78,50,140,39.4,0.175,24,0 +3,132,80,0,0,34.4,0.402,44,1 +2,82,52,22,115,28.5,1.699,25,0 +6,123,72,45,230,33.6,0.733,34,0 +0,188,82,14,185,32,0.682,22,1 +0,67,76,0,0,45.3,0.194,46,0 +1,89,24,19,25,27.8,0.559,21,0 +1,173,74,0,0,36.8,0.088,38,1 +1,109,38,18,120,23.1,0.407,26,0 +1,108,88,19,0,27.1,0.4,24,0 +6,96,0,0,0,23.7,0.19,28,0 +1,124,74,36,0,27.8,0.1,30,0 +7,150,78,29,126,35.2,0.692,54,1 +4,183,0,0,0,28.4,0.212,36,1 +1,124,60,32,0,35.8,0.514,21,0 +1,181,78,42,293,40,1.258,22,1 +1,92,62,25,41,19.5,0.482,25,0 +0,152,82,39,272,41.5,0.27,27,0 +1,111,62,13,182,24,0.138,23,0 +3,106,54,21,158,30.9,0.292,24,0 +3,174,58,22,194,32.9,0.593,36,1 +7,168,88,42,321,38.2,0.787,40,1 +6,105,80,28,0,32.5,0.878,26,0 +11,138,74,26,144,36.1,0.557,50,1 +3,106,72,0,0,25.8,0.207,27,0 +6,117,96,0,0,28.7,0.157,30,0 +2,68,62,13,15,20.1,0.257,23,0 +9,112,82,24,0,28.2,1.282,50,1 +0,119,0,0,0,32.4,0.141,24,1 +2,112,86,42,160,38.4,0.246,28,0 +2,92,76,20,0,24.2,1.698,28,0 +6,183,94,0,0,40.8,1.461,45,0 +0,94,70,27,115,43.5,0.347,21,0 +2,108,64,0,0,30.8,0.158,21,0 +4,90,88,47,54,37.7,0.362,29,0 +0,125,68,0,0,24.7,0.206,21,0 +0,132,78,0,0,32.4,0.393,21,0 +5,128,80,0,0,34.6,0.144,45,0 +4,94,65,22,0,24.7,0.148,21,0 +7,114,64,0,0,27.4,0.732,34,1 +0,102,78,40,90,34.5,0.238,24,0 +2,111,60,0,0,26.2,0.343,23,0 +1,128,82,17,183,27.5,0.115,22,0 +10,92,62,0,0,25.9,0.167,31,0 +13,104,72,0,0,31.2,0.465,38,1 +5,104,74,0,0,28.8,0.153,48,0 +2,94,76,18,66,31.6,0.649,23,0 +7,97,76,32,91,40.9,0.871,32,1 +1,100,74,12,46,19.5,0.149,28,0 +0,102,86,17,105,29.3,0.695,27,0 +4,128,70,0,0,34.3,0.303,24,0 +6,147,80,0,0,29.5,0.178,50,1 +4,90,0,0,0,28,0.61,31,0 +3,103,72,30,152,27.6,0.73,27,0 +2,157,74,35,440,39.4,0.134,30,0 +1,167,74,17,144,23.4,0.447,33,1 +0,179,50,36,159,37.8,0.455,22,1 +11,136,84,35,130,28.3,0.26,42,1 +0,107,60,25,0,26.4,0.133,23,0 +1,91,54,25,100,25.2,0.234,23,0 +1,117,60,23,106,33.8,0.466,27,0 +5,123,74,40,77,34.1,0.269,28,0 +2,120,54,0,0,26.8,0.455,27,0 +1,106,70,28,135,34.2,0.142,22,0 +2,155,52,27,540,38.7,0.24,25,1 +2,101,58,35,90,21.8,0.155,22,0 +1,120,80,48,200,38.9,1.162,41,0 +11,127,106,0,0,39,0.19,51,0 +3,80,82,31,70,34.2,1.292,27,1 +10,162,84,0,0,27.7,0.182,54,0 +1,199,76,43,0,42.9,1.394,22,1 +8,167,106,46,231,37.6,0.165,43,1 +9,145,80,46,130,37.9,0.637,40,1 +6,115,60,39,0,33.7,0.245,40,1 +1,112,80,45,132,34.8,0.217,24,0 +4,145,82,18,0,32.5,0.235,70,1 +10,111,70,27,0,27.5,0.141,40,1 +6,98,58,33,190,34,0.43,43,0 +9,154,78,30,100,30.9,0.164,45,0 +6,165,68,26,168,33.6,0.631,49,0 +1,99,58,10,0,25.4,0.551,21,0 +10,68,106,23,49,35.5,0.285,47,0 +3,123,100,35,240,57.3,0.88,22,0 +8,91,82,0,0,35.6,0.587,68,0 +6,195,70,0,0,30.9,0.328,31,1 +9,156,86,0,0,24.8,0.23,53,1 +0,93,60,0,0,35.3,0.263,25,0 +3,121,52,0,0,36,0.127,25,1 +2,101,58,17,265,24.2,0.614,23,0 +2,56,56,28,45,24.2,0.332,22,0 +0,162,76,36,0,49.6,0.364,26,1 +0,95,64,39,105,44.6,0.366,22,0 +4,125,80,0,0,32.3,0.536,27,1 +5,136,82,0,0,0,0.64,69,0 +2,129,74,26,205,33.2,0.591,25,0 +3,130,64,0,0,23.1,0.314,22,0 +1,107,50,19,0,28.3,0.181,29,0 +1,140,74,26,180,24.1,0.828,23,0 +1,144,82,46,180,46.1,0.335,46,1 +8,107,80,0,0,24.6,0.856,34,0 +13,158,114,0,0,42.3,0.257,44,1 +2,121,70,32,95,39.1,0.886,23,0 +7,129,68,49,125,38.5,0.439,43,1 +2,90,60,0,0,23.5,0.191,25,0 +7,142,90,24,480,30.4,0.128,43,1 +3,169,74,19,125,29.9,0.268,31,1 +0,99,0,0,0,25,0.253,22,0 +4,127,88,11,155,34.5,0.598,28,0 +4,118,70,0,0,44.5,0.904,26,0 +2,122,76,27,200,35.9,0.483,26,0 +6,125,78,31,0,27.6,0.565,49,1 +1,168,88,29,0,35,0.905,52,1 +2,129,0,0,0,38.5,0.304,41,0 +4,110,76,20,100,28.4,0.118,27,0 +6,80,80,36,0,39.8,0.177,28,0 +10,115,0,0,0,0,0.261,30,1 +2,127,46,21,335,34.4,0.176,22,0 +9,164,78,0,0,32.8,0.148,45,1 +2,93,64,32,160,38,0.674,23,1 +3,158,64,13,387,31.2,0.295,24,0 +5,126,78,27,22,29.6,0.439,40,0 +10,129,62,36,0,41.2,0.441,38,1 +0,134,58,20,291,26.4,0.352,21,0 +3,102,74,0,0,29.5,0.121,32,0 +7,187,50,33,392,33.9,0.826,34,1 +3,173,78,39,185,33.8,0.97,31,1 +10,94,72,18,0,23.1,0.595,56,0 +1,108,60,46,178,35.5,0.415,24,0 +5,97,76,27,0,35.6,0.378,52,1 +4,83,86,19,0,29.3,0.317,34,0 +1,114,66,36,200,38.1,0.289,21,0 +1,149,68,29,127,29.3,0.349,42,1 +5,117,86,30,105,39.1,0.251,42,0 +1,111,94,0,0,32.8,0.265,45,0 +4,112,78,40,0,39.4,0.236,38,0 +1,116,78,29,180,36.1,0.496,25,0 +0,141,84,26,0,32.4,0.433,22,0 +2,175,88,0,0,22.9,0.326,22,0 +2,92,52,0,0,30.1,0.141,22,0 +3,130,78,23,79,28.4,0.323,34,1 +8,120,86,0,0,28.4,0.259,22,1 +2,174,88,37,120,44.5,0.646,24,1 +2,106,56,27,165,29,0.426,22,0 +2,105,75,0,0,23.3,0.56,53,0 +4,95,60,32,0,35.4,0.284,28,0 +0,126,86,27,120,27.4,0.515,21,0 +8,65,72,23,0,32,0.6,42,0 +2,99,60,17,160,36.6,0.453,21,0 +1,102,74,0,0,39.5,0.293,42,1 +11,120,80,37,150,42.3,0.785,48,1 +3,102,44,20,94,30.8,0.4,26,0 +1,109,58,18,116,28.5,0.219,22,0 +9,140,94,0,0,32.7,0.734,45,1 +13,153,88,37,140,40.6,1.174,39,0 +12,100,84,33,105,30,0.488,46,0 +1,147,94,41,0,49.3,0.358,27,1 +1,81,74,41,57,46.3,1.096,32,0 +3,187,70,22,200,36.4,0.408,36,1 +6,162,62,0,0,24.3,0.178,50,1 +4,136,70,0,0,31.2,1.182,22,1 +1,121,78,39,74,39,0.261,28,0 +3,108,62,24,0,26,0.223,25,0 +0,181,88,44,510,43.3,0.222,26,1 +8,154,78,32,0,32.4,0.443,45,1 +1,128,88,39,110,36.5,1.057,37,1 +7,137,90,41,0,32,0.391,39,0 +0,123,72,0,0,36.3,0.258,52,1 +1,106,76,0,0,37.5,0.197,26,0 +6,190,92,0,0,35.5,0.278,66,1 +2,88,58,26,16,28.4,0.766,22,0 +9,170,74,31,0,44,0.403,43,1 +9,89,62,0,0,22.5,0.142,33,0 +10,101,76,48,180,32.9,0.171,63,0 +2,122,70,27,0,36.8,0.34,27,0 +5,121,72,23,112,26.2,0.245,30,0 +1,126,60,0,0,30.1,0.349,47,1 +1,93,70,31,0,30.4,0.315,23,0 \ No newline at end of file diff --git a/resources/lectures/lec16/dsc80_utils.py b/resources/lectures/lec16/dsc80_utils.py new file mode 100644 index 0000000..5bb9ad3 --- /dev/null +++ b/resources/lectures/lec16/dsc80_utils.py @@ -0,0 +1,87 @@ +""" +Imports and helpful functions that we use in DSC 80 lectures. Use `make +setup-lec` to copy this (and custom-rise-styles.css) to the lecture folders. + +Usage: + +from dsc80_utils import * +""" +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from matplotlib_inline.backend_inline import set_matplotlib_formats +from IPython.display import display, IFrame, HTML + +import plotly +import plotly.figure_factory as ff +import plotly.graph_objects as go +import plotly.express as px +from plotly.subplots import make_subplots +import plotly.io as pio +pio.renderers.default = "notebook" + +# DSC 80 preferred styles +pio.templates["dsc80"] = go.layout.Template( + layout=dict( + margin=dict(l=30, r=30, t=30, b=30), + autosize=True, + width=600, + height=400, + xaxis=dict(showgrid=True), + yaxis=dict(showgrid=True), + title=dict(x=0.5, xanchor="center"), + ) +) +pio.templates.default = "simple_white+dsc80" + +set_matplotlib_formats("svg") +sns.set_context("poster") +sns.set_style("whitegrid") +plt.rcParams["figure.figsize"] = (10, 5) + +# display options for numpy and pandas +np.set_printoptions(threshold=20, precision=2, suppress=True) +pd.set_option("display.max_rows", 7) +pd.set_option("display.max_columns", 8) +pd.set_option("display.precision", 2) + +# Use plotly as default plotting engine +pd.options.plotting.backend = "plotly" + + +def display_df( + df, rows=pd.options.display.max_rows, cols=pd.options.display.max_columns +): + """Displays n rows and cols from df""" + with pd.option_context( + "display.max_rows", rows, "display.max_columns", cols + ): + display(df) + + +def dfs_side_by_side(*dfs): + """ + Displays two or more dataframes side by side. + """ + display( + HTML( + f""" +
+ {''.join(df.to_html() for df in dfs)} +
+ """ + ) + ) + +from pathlib import Path + +# Used for plotting examples. +def create_kde_plotly(df, group_col, group1, group2, vals_col, title=''): + fig = ff.create_distplot( + hist_data=[df.loc[df[group_col] == group1, vals_col], df.loc[df[group_col] == group2, vals_col]], + group_labels=[group1, group2], + show_rug=False, show_hist=False, + colors=['#ef553b', '#636efb'], + ) + return fig.update_layout(title=title) \ No newline at end of file diff --git a/resources/lectures/lec16/imgs/dtree-basic-plot.svg b/resources/lectures/lec16/imgs/dtree-basic-plot.svg new file mode 100644 index 0000000..611d1d1 --- /dev/null +++ b/resources/lectures/lec16/imgs/dtree-basic-plot.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/lectures/lec16/imgs/dtree-basic.svg b/resources/lectures/lec16/imgs/dtree-basic.svg new file mode 100644 index 0000000..eb06485 --- /dev/null +++ b/resources/lectures/lec16/imgs/dtree-basic.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/resources/lectures/lec16/imgs/k-fold.png b/resources/lectures/lec16/imgs/k-fold.png new file mode 100644 index 0000000000000000000000000000000000000000..ea77c0466a98d7f1bfe23f5aa8dcc1b9c3074313 GIT binary patch literal 69443 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 Ib4q9e0IJVmCjbBd literal 0 HcmV?d00001 diff --git a/resources/lectures/lec16/imgs/ml-taxonomy.svg b/resources/lectures/lec16/imgs/ml-taxonomy.svg new file mode 100644 index 0000000..a3a893e --- /dev/null +++ b/resources/lectures/lec16/imgs/ml-taxonomy.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/lectures/lec16/imgs/train-test-first.png b/resources/lectures/lec16/imgs/train-test-first.png new file mode 100644 index 0000000000000000000000000000000000000000..d7ebee07c49998b6f1d6e9a65286733ea923414e GIT binary patch literal 18425 zcmeIaWmuG5^e;>)p#p+}NR5O@3n)mBbc%GBfHX+QkfNd@-6A1K3rKe;NJ@7j3?L0d zNzU0b==13Fo-gOyd(QRey6&0#zW3g1uk~B8*Is)rUOjvueTm>Y0R{%fC0Q8>6$}h) zI0gnL8QyvDW+P6Y1q0)vwWYZDLs@Zg$U{f_$Cfr`7#K3IqBU`~RNKgsbR)vTda&?h z@N4nu?)pU$>-?x4#gm1+Z;B&UTQyVuTpDys!}+Sj=OU~}E%|J(YdOi(qFj{8DOv2r zu&UNsrv(odrbNxVjx$Yf?$co05q-iK;iY!L56j{Gof~W~!();@Lxj)a9a~_s^voel zNi_8IuK01gBdcqwF>T-Lxu`rjaXPJkO=t+2!}NRe{9X{}+*PO-6^56v5*<5^UsjLq z1CFR$n>H_9(r-gwYBE0wA<<-g5<@~u^GR0DNZgA8<1R}qYbPdjj%I-8wL5>9^c+tU z$D=x#i+&4uFHbzgIA|Y9uF?|_++=xjuF18>0E_Dl?(O2bxo-!QzC*;Ku?alSqCGCX z)cGWHvu*LgiKzT`eLBQY-7M1>cUDXH)axtiY39>?8^7Gc%B((Zq4oy_@lR#+rXA!gHs zb46hi(VdT%nsA~yOK#}4KhEA+tmwn6Com*}d$h4#MN+=^OPg)E^ZL1LHnA$CjD;k< z3HlMUu$YaLOT~<*N~<-5q9nYX^vag*{dW-Jz;nz8g{d}{7EjyjN}#-PoMqa#W}C7$ z>%@#zDvCr#m}%S~K5-XZwIPogi4b_EmdXK@o98~?XrCxt#By*risukfh4t2noD#1L3bed&8c227ln?>G#A7xJ1nfM1hY^r&n-Gr|+<3 zy;8A+2hdQw4TxzXesr7b-8H$Amf$D86Xc;!hoSfM9B!@)$F=amzNm@`e!u)(;C;Xo z*i(!AoxodZ_i^Dw>VtGEM>;dSVg1-dUrr!`rp>z!^fS+@#YNeKFg*ACbjn!lB-O8p zK0&evZ1`M?rXGF%CL%B#yUkTJf8a^a=Cw!41BXY4w@f;(=kUQS7Nn7@8# `>nL> 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 literal 0 HcmV?d00001 diff --git a/resources/lectures/lec16/imgs/train-test-val.png b/resources/lectures/lec16/imgs/train-test-val.png new file mode 100644 index 0000000000000000000000000000000000000000..5ade8fb1d93c763ecc58165d2e6e44725c992632 GIT binary patch literal 31340 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 literal 0 HcmV?d00001 diff --git a/resources/lectures/lec16/imgs/tt-errors.png b/resources/lectures/lec16/imgs/tt-errors.png new file mode 100644 index 0000000000000000000000000000000000000000..5181b0a30dd5111a9cb3d11191ce1c0854c2e7bb GIT binary patch literal 207420 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 Go_If^Bti(de8eW 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 %(p8 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%0A@jn(w?UiW1o`1LJWaRGlvz>7yS_nJ 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 literal 0 HcmV?d00001 diff --git a/resources/lectures/lec16/lec16-live.html b/resources/lectures/lec16/lec16-live.html new file mode 100644 index 0000000..a799ca7 --- /dev/null +++ b/resources/lectures/lec16/lec16-live.html @@ -0,0 +1,11197 @@ + + + + + +Notebook + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/resources/lectures/lec16/lec16-live.ipynb b/resources/lectures/lec16/lec16-live.ipynb new file mode 100644 index 0000000..c99f330 --- /dev/null +++ b/resources/lectures/lec16/lec16-live.ipynb @@ -0,0 +1,22968 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "8c8a44b8", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "from dsc80_utils import *\n", + "import lec16_util as util" + ] + }, + { + "cell_type": "markdown", + "id": "6ca51859", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Lecture 16 – Hyperparameters, Cross-Validation, and Decision Trees\n", + "\n", + "## DSC 80, Spring 2024" + ] + }, + { + "cell_type": "markdown", + "id": "22824200", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Announcements 📣\n", + "\n", + "- Lab 8 is due on **Wednesday**.\n", + "- Final Project Checkpoint 2 is due **Friday**.\n", + "- The Final Exam is on **Saturday, June 8 from 8-11AM** (room TBD).\n", + " - You can bring two double-sided notes sheets (you can bring your midterm notes sheet, if you want).\n", + " - More details to come." + ] + }, + { + "cell_type": "markdown", + "id": "bd851d5b", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Agenda 📆\n", + "\n", + "- Hyperparameters.\n", + "- Cross-validation.\n", + "- Decision trees." + ] + }, + { + "cell_type": "markdown", + "id": "ea74dd70", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "

Question 🤔 (Answer at q.dsc80.com)

\n", + "
\n", + " \n", + "Remember, you can always ask questions at [**q.dsc80.com**](https://docs.google.com/forms/d/e/1FAIpQLScWbVZv9hBv-wX-ItKHUVRnkPMMtfJZVfErKE9GS7_8dFcRBQ/viewform)!" + ] + }, + { + "cell_type": "markdown", + "id": "b176323a", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Review: Hyperparameters" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "874cfdb7", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "np.random.seed(23) # For reproducibility.\n", + "\n", + "def sample_from_pop(n=100):\n", + " x = np.linspace(-2, 3, n)\n", + " y = x ** 3 + (np.random.normal(0, 3, size=n))\n", + " return pd.DataFrame({'x': x, 'y': y})\n", + "\n", + "sample_1 = sample_from_pop()\n", + "sample_2 = sample_from_pop()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d2538011", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.scatter(sample_1, x='x', y='y', title='Sample 1')" + ] + }, + { + "cell_type": "markdown", + "id": "86b338d4", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example: Polynomial regression\n", + "\n", + "We recently looked at an example of **polynomial regression**." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "72af7566", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = util.train_and_plot(train_sample=sample_1, test_sample=sample_2, degs=[1, 3, 25], data_name='Sample 2')\n", + "fig.update_layout(title='Trained on Sample 1, Performance on Sample 2')" + ] + }, + { + "cell_type": "markdown", + "id": "42a671d7", + "metadata": {}, + "source": [ + "When building these models:\n", + "- We **got to choose** the degree of the polynomials (i.e. we chose 1, 3, and 25).\n", + "- We didn't get to choose the exact formulas for the three polynomials – their formulas were **learned from data**." + ] + }, + { + "cell_type": "markdown", + "id": "95f0e314", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Parameters vs. hyperparameters" + ] + }, + { + "cell_type": "markdown", + "id": "33d7d0c9", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- A **parameter** defines the relationship between variables in a model. \n", + " - **We learn parameters from data**.\n", + " - For instance, suppose we fit a degree 3 polynomial to data, and end up with\n", + " \n", + " $$H(x) = 1 - 2x + 13x^2 - 4x^3$$\n", + " \n", + " - 1, -2, 13, and -4 are parameters." + ] + }, + { + "cell_type": "markdown", + "id": "6778dd62", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- A **hyperparameter** is a parameter that we get to choose **before our model is fit to the data**.\n", + " - Think of hyperparameters as knobs 🎛 – **we get to pick and tune them!**\n", + " - **Polynomial degree** was a hyperparameter in the previous example, and we tried three different values: 1, 3, and 25." + ] + }, + { + "cell_type": "markdown", + "id": "1d1dfbc3", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **Question**: How do we choose the \"right\" hyperparameter(s)?" + ] + }, + { + "cell_type": "markdown", + "id": "e2f97b99", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Training error vs. test error" + ] + }, + { + "cell_type": "markdown", + "id": "2cd2e40f", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We know that a model's performance on a **test set** is a good estimate of its ability to generalize to unseen data." + ] + }, + { + "cell_type": "markdown", + "id": "926bc6c1", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We want to find the hyperparameter that leads to the best **test set performance**." + ] + }, + { + "cell_type": "markdown", + "id": "e6e28be9", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Idea:\n", + " 1. Come up with a **list** of hyperparameters to try.\n", + " 2. For each hyperparameter, train the model on the training set and compute its performance on the test set.\n", + " 3. Pick the hyperparameter with the best performance on the test set." + ] + }, + { + "cell_type": "markdown", + "id": "b31001a9", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Training error vs. test error\n", + "\n", + "- Let's try this strategy on Sample 1 from our earlier example. \n", + "\n", + "- We'll try to fit a polynomial model on the dataset; we'll choose the polynomial's degree from the list [1, 2, ..., 25]." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "587b788e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.scatter(sample_1, x='x', y='y', title='Sample 1')" + ] + }, + { + "cell_type": "markdown", + "id": "324c1eb4", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "First, we perform a train-test split." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "184d686f", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "10ab3ddd", + "metadata": {}, + "outputs": [], + "source": [ + "X = sample_1[['x']]\n", + "y = sample_1['y']\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=100)" + ] + }, + { + "cell_type": "markdown", + "id": "e98ff996", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Polynomial degree vs. train/test error\n", + "\n", + "Now, we'll create models with degree-1 through degree-25 polynomial features and compute their train and test errors." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "19abdbc7", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import mean_squared_error" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "825c48e8", + "metadata": {}, + "outputs": [], + "source": [ + "train_errs = []\n", + "test_errs = []\n", + "\n", + "for d in range(1, 26):\n", + " pl = make_pipeline(PolynomialFeatures(d), LinearRegression())\n", + " pl.fit(X_train, y_train)\n", + " train_errs.append(mean_squared_error(y_train, pl.predict(X_train), squared=False))\n", + " test_errs.append(mean_squared_error(y_test, pl.predict(X_test), squared=False))\n", + "\n", + "errs = pd.DataFrame({'Train Error': train_errs, 'Test Error': test_errs})" + ] + }, + { + "cell_type": "markdown", + "id": "ed06ac65", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Let's look at the plots of training error vs. degree and test error vs. degree." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7bdc8ddf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = px.line(errs)\n", + "fig.update_layout(showlegend=True, xaxis_title='Polynomial Degree', yaxis_title='RMSE')" + ] + }, + { + "cell_type": "markdown", + "id": "128dfbf6", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Training error appears to decrease as polynomial degree increases." + ] + }, + { + "cell_type": "markdown", + "id": "b724335d", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Test error appears to decrease until a \"valley\", and then increases again." + ] + }, + { + "cell_type": "markdown", + "id": "d76e0bee", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Here, we'd choose a degree of 3, since that degree has the **lowest test error**." + ] + }, + { + "cell_type": "markdown", + "id": "d0abe896", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Training error vs. test error\n", + "\n", + "The pattern we saw in the previous example is true more generally.\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "e728db66", + "metadata": {}, + "source": [ + "We pick the hyperparameter(s) at the \"valley\" of test error.\n", + "\n", + "Note that training error **tends** to underestimate test error, but it doesn't have to – i.e., it is possible for test error to be lower than training error (say, if the test set is \"easier\" to predict than the training set)." + ] + }, + { + "cell_type": "markdown", + "id": "0f6bc281", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Conducting train-test splits" + ] + }, + { + "cell_type": "markdown", + "id": "88811055", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Recall, training data is used to fit our model, and test data is used to evaluate our model.\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "ebc6b2ad", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **Question**: _How_ should we split?\n", + " - `sklearn`'s `train_test_split` splits **randomly**, which usually works well.\n", + " - However, if there is some element of **time** in the training data (say, when predicting the future price of a stock), a better split is \"past\" and \"future\"." + ] + }, + { + "cell_type": "markdown", + "id": "1ec1df4b", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **Question**: How _large_ should the split be, e.g. 90%-10% vs. 75%-25%?\n", + " - There's a tradeoff – a larger training set should lead to a \"better\" model, while a larger test set should lead to a better estimate of our model's ability to generalize.\n", + " - There's no \"right\" choice, but we usually choose between 10% to 25% for the test set." + ] + }, + { + "cell_type": "markdown", + "id": "5ddf0394", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### But wait..." + ] + }, + { + "cell_type": "markdown", + "id": "17c19ac8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- With our current strategy, we are choosing the hyperparameter that creates the model that **performs best on the test set**." + ] + }, + { + "cell_type": "markdown", + "id": "4427cc42", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- As such, we are **overfitting to the test set** – the best hyperparameter for the test set might not be the best hyperparameter for a totally unseen dataset!" + ] + }, + { + "cell_type": "markdown", + "id": "01584eef", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- It seems like we need **another** split." + ] + }, + { + "cell_type": "markdown", + "id": "3b36a7aa", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Cross-validation" + ] + }, + { + "cell_type": "markdown", + "id": "39c7b052", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Idea: A single validation set\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "d344ac51", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "1. Split the data into three sets: training, validation, and test." + ] + }, + { + "cell_type": "markdown", + "id": "ac8d7d91", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "2. For each hyperparameter choice, train the model only on the training set, and evaluate the model's performance on the validation set." + ] + }, + { + "cell_type": "markdown", + "id": "0b66367d", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "3. Find the hyperparameter with the best validation performance." + ] + }, + { + "cell_type": "markdown", + "id": "fad93210", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "4. Retrain the final model on the training and validation sets, and report its performance on the test set." + ] + }, + { + "cell_type": "markdown", + "id": "f30e49e7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Issue**: This strategy is too dependent on the validation set, which may be small and/or not a representative sample of the data. **We're not going to do this.** ❌" + ] + }, + { + "cell_type": "markdown", + "id": "a9131a04", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### A better idea: $k$-fold cross-validation\n", + "\n", + "Instead of relying on a single validation set, we can create $k$ validation sets, where $k$ is some positive integer (5 in the example below).\n", + "\n", + "
\n", + "\n", + "Since each data point is used for training $k-1$ times and validation once, the (averaged) validation performance should be a good metric of a model's ability to generalize to unseen data.\n", + "\n", + "$k$-fold cross-validation (or simply \"cross-validation\") is **the** technique we will use for finding hyperparameters, or more generally, for choosing between different possible models. **It's what you should use in your Final Project!** ✅" + ] + }, + { + "cell_type": "markdown", + "id": "b7a4b3f7", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Creating folds in `sklearn`\n", + "\n", + "`sklearn` has a `KFold` class that splits data into training and validation folds." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4555f6c0", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import KFold" + ] + }, + { + "cell_type": "markdown", + "id": "319b67ce", + "metadata": {}, + "source": [ + "Let's use a simple dataset for illustration." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "04fcf601", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([10, 20, 30, 40, 50, 60])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = np.arange(10, 70, 10)\n", + "data" + ] + }, + { + "cell_type": "markdown", + "id": "5a43ac2a", + "metadata": {}, + "source": [ + "Let's instantiate a `KFold` object with $k=3$." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "062e7597", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KFold(n_splits=3, random_state=1, shuffle=True)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kfold = KFold(3, shuffle=True, random_state=1)\n", + "kfold" + ] + }, + { + "cell_type": "markdown", + "id": "fbdf8557", + "metadata": {}, + "source": [ + "Finally, let's use `kfold` to `split` `data`:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "79701be4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train: [10 40 50 60], validation: [20 30]\n", + "train: [20 30 40 60], validation: [10 50]\n", + "train: [10 20 30 50], validation: [40 60]\n" + ] + } + ], + "source": [ + "for train, val in kfold.split(data):\n", + " print(f'train: {data[train]}, validation: {data[val]}')" + ] + }, + { + "cell_type": "markdown", + "id": "7367e39b", + "metadata": {}, + "source": [ + "Note that each value in `data` is used for validation exactly once and for training exactly twice. Also note that because we set `shuffle=True` the folds are not simply `[10, 20]`, `[30, 40]`, and `[50, 60]`." + ] + }, + { + "cell_type": "markdown", + "id": "08de2c3f", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### $k$-fold cross-validation\n", + "\n", + "First, **shuffle** the entire training set randomly and **split** it into $k$ disjoint folds, or \"slices\". Then:" + ] + }, + { + "cell_type": "markdown", + "id": "86b39156", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- For each hyperparameter:\n", + " - For each slice:\n", + " - Let the slice be the \"validation set\", $V$.\n", + " - Let the rest of the data be the \"training set\", $T$.\n", + " - Train a model using the selected hyperparameter on the training set $T$.\n", + " - Evaluate the model on the validation set $V$.\n", + " - Compute the **average** validation score (e.g. RMSE) for the particular hyperparameter." + ] + }, + { + "cell_type": "markdown", + "id": "7abb6540", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Choose the hyperparameter with the best average validation score." + ] + }, + { + "cell_type": "markdown", + "id": "4620c78d", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### $k$-fold cross-validation in `sklearn`\n", + "\n", + "While you could manually use `KFold` to perform cross-validation, the `cross_val_score` function in `sklearn` implements $k$-fold cross-validation for us! \n", + "\n", + "```py\n", + "cross_val_score(estimator, X_train, y_train, cv)\n", + "```\n", + "\n", + "Specifically, it takes in:\n", + "- A `Pipeline` or estimator **that has not already been `fit`**.\n", + "- Training data.\n", + "- A value of $k$ (through the `cv` argument).\n", + "- (Optionally) A `scoring` metric.\n", + "\n", + "and performs $k$-fold cross-validation, returning the values of the scoring metric on each fold." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ca1244ea", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import cross_val_score" + ] + }, + { + "cell_type": "markdown", + "id": "b95ca832", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### $k$-fold cross-validation in `sklearn`" + ] + }, + { + "cell_type": "markdown", + "id": "48eaa524", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Let's perform $k$-fold cross validation in order to help us pick a degree for polynomial regression from the list [1, 2, ..., 25]." + ] + }, + { + "cell_type": "markdown", + "id": "af6df303", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We'll use $k=5$ since it's a common choice (and the default in `sklearn`)." + ] + }, + { + "cell_type": "markdown", + "id": "4c570d08", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- For the sake of this example, we'll suppose `sample_1` is our \"training + validation data\", i.e. that our test data is in some other dataset.\n", + " - If this were not true, we'd first need to split `sample_1` into separate training and test sets." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "d2e26f47", + "metadata": {}, + "outputs": [], + "source": [ + "errs_df = pd.DataFrame()\n", + "\n", + "for d in range(1, 26):\n", + " pl = make_pipeline(PolynomialFeatures(d), LinearRegression())\n", + " \n", + " # The `scoring` argument is used to specify that we want to compute the RMSE; \n", + " # the default is R^2. It's called \"neg\" RMSE because, \n", + " # by default, sklearn likes to \"maximize\" scores, and maximizing -RMSE is the same\n", + " # as minimizing RMSE.\n", + " errs = cross_val_score(pl, sample_1[['x']], sample_1['y'], \n", + " cv=5, scoring='neg_root_mean_squared_error')\n", + " errs_df[f'Deg {d}'] = -errs # Negate to turn positive (sklearn computed negative RMSE).\n", + " \n", + "errs_df.index = [f'Fold {i}' for i in range(1, 6)]\n", + "errs_df.index.name = 'Validation Fold'" + ] + }, + { + "cell_type": "markdown", + "id": "e8c7311d", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Next class, we'll look at how to implement this procedure without needing to `for`-loop over values of `d`." + ] + }, + { + "cell_type": "markdown", + "id": "5b6ed7f0", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### $k$-fold cross-validation in `sklearn`\n", + "\n", + "Note that for each choice of degree (our hyperparameter), we have **five** RMSEs, one for each \"fold\" of the data. This means that in total, $5 \\cdot 25 = 125$ models were trained/fit to data!" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d01ba737", + "metadata": {}, + "outputs": [ + { + "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", + "
Deg 1Deg 2Deg 3Deg 4...Deg 22Deg 23Deg 24Deg 25
Validation Fold
Fold 14.7912.815.044.93...8.78e+066.57e+071.41e+085.90e+08
Fold 23.975.363.193.22...2.93e+017.85e+017.53e+013.13e+01
Fold 34.772.562.082.11...3.03e+013.09e+014.24e+013.72e+01
Fold 46.134.662.932.93...6.27e+003.33e+015.80e+019.69e+00
Fold 511.7011.923.244.37...8.36e+062.28e+088.17e+086.63e+09
\n", + "

5 rows × 25 columns

\n", + "
" + ], + "text/plain": [ + " Deg 1 Deg 2 Deg 3 Deg 4 ... Deg 22 Deg 23 \\\n", + "Validation Fold ... \n", + "Fold 1 4.79 12.81 5.04 4.93 ... 8.78e+06 6.57e+07 \n", + "Fold 2 3.97 5.36 3.19 3.22 ... 2.93e+01 7.85e+01 \n", + "Fold 3 4.77 2.56 2.08 2.11 ... 3.03e+01 3.09e+01 \n", + "Fold 4 6.13 4.66 2.93 2.93 ... 6.27e+00 3.33e+01 \n", + "Fold 5 11.70 11.92 3.24 4.37 ... 8.36e+06 2.28e+08 \n", + "\n", + " Deg 24 Deg 25 \n", + "Validation Fold \n", + "Fold 1 1.41e+08 5.90e+08 \n", + "Fold 2 7.53e+01 3.13e+01 \n", + "Fold 3 4.24e+01 3.72e+01 \n", + "Fold 4 5.80e+01 9.69e+00 \n", + "Fold 5 8.17e+08 6.63e+09 \n", + "\n", + "[5 rows x 25 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "errs_df" + ] + }, + { + "cell_type": "markdown", + "id": "c914d676", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "We should choose the degree with the lowest **average** validation RMSE." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "3dc1361c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Deg 3'" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "errs_df.mean().idxmin()" + ] + }, + { + "cell_type": "markdown", + "id": "43aeacff", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Note that if we didn't perform $k$-fold cross-validation, but instead just used a single validation set, we may have ended up with a different result:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "de811f8a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Validation Fold\n", + "Fold 1 Deg 1\n", + "Fold 2 Deg 6\n", + "Fold 3 Deg 8\n", + "Fold 4 Deg 3\n", + "Fold 5 Deg 3\n", + "dtype: object" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "errs_df.idxmin(axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "50e5db5f", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + " \n", + "The RMSEs in Folds 1 and 5 are much higher than in other folds. Why? How we might fix this?" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "c95f912b", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.scatter(sample_1, x='x', y='y', title='Sample 1')" + ] + }, + { + "cell_type": "markdown", + "id": "aa8239bf", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Another example: Tips\n", + "\n", + "We can also use $k$-fold cross-validation to determine which subset of features to use in a linear model that predicts tips by making one pipeline for each subset of features we want to evaluate." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "a721435f", + "metadata": {}, + "outputs": [], + "source": [ + "# make_column_transformer is a shortcut for the ColumnTransformer class\n", + "from sklearn.compose import make_column_transformer, make_column_selector\n", + "from sklearn.preprocessing import FunctionTransformer, OneHotEncoder" + ] + }, + { + "cell_type": "markdown", + "id": "77f774ac", + "metadata": {}, + "source": [ + "As we should always do, we'll perform a train-test split on `tips` and will only use the training data for cross-validation." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "e04a69f3", + "metadata": {}, + "outputs": [ + { + "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", + "
total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4
\n", + "
" + ], + "text/plain": [ + " total_bill tip sex smoker day time size\n", + "0 16.99 1.01 Female No Sun Dinner 2\n", + "1 10.34 1.66 Male No Sun Dinner 3\n", + "2 21.01 3.50 Male No Sun Dinner 3\n", + "3 23.68 3.31 Male No Sun Dinner 2\n", + "4 24.59 3.61 Female No Sun Dinner 4" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tips = sns.load_dataset('tips')\n", + "tips.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "078f4566", + "metadata": {}, + "outputs": [], + "source": [ + "X = tips.drop('tip', axis=1)\n", + "y = tips['tip']\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "4e2853dc", + "metadata": {}, + "outputs": [], + "source": [ + "# A dictionary that maps names to Pipeline objects.\n", + "select = FunctionTransformer(lambda x: x)\n", + "pipes = {\n", + " 'total_bill only': make_pipeline(\n", + " make_column_transformer( (select, ['total_bill']) ),\n", + " LinearRegression(),\n", + " ),\n", + " 'total_bill + size': make_pipeline(\n", + " make_column_transformer( (select, ['total_bill', 'size']) ),\n", + " LinearRegression(),\n", + " ),\n", + " 'total_bill + size + OHE smoker': make_pipeline(\n", + " make_column_transformer(\n", + " (select, ['total_bill', 'size']),\n", + " (OneHotEncoder(drop='first'), ['smoker']),\n", + " ),\n", + " LinearRegression(),\n", + " ),\n", + " 'total_bill + size + OHE all': make_pipeline(\n", + " make_column_transformer(\n", + " (select, ['total_bill', 'size']),\n", + " (OneHotEncoder(drop='first'), ['smoker', 'sex', 'time', 'day']),\n", + " ),\n", + " LinearRegression(),\n", + " ),\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "23b42ccf", + "metadata": {}, + "outputs": [], + "source": [ + "pipe_df = pd.DataFrame()\n", + "\n", + "for pipe in pipes:\n", + " errs = cross_val_score(pipes[pipe], X_train, y_train,\n", + " cv=5, scoring='neg_root_mean_squared_error')\n", + " pipe_df[pipe] = -errs\n", + " \n", + "pipe_df.index = [f'Fold {i}' for i in range(1, 6)]\n", + "pipe_df.index.name = 'Validation Fold'" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "09420210", + "metadata": {}, + "outputs": [ + { + "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", + "
total_bill onlytotal_bill + sizetotal_bill + size + OHE smokertotal_bill + size + OHE all
Validation Fold
Fold 11.321.271.271.29
Fold 20.950.920.930.93
Fold 30.770.860.860.87
Fold 40.850.840.840.86
Fold 51.101.071.071.08
\n", + "
" + ], + "text/plain": [ + " total_bill only total_bill + size \\\n", + "Validation Fold \n", + "Fold 1 1.32 1.27 \n", + "Fold 2 0.95 0.92 \n", + "Fold 3 0.77 0.86 \n", + "Fold 4 0.85 0.84 \n", + "Fold 5 1.10 1.07 \n", + "\n", + " total_bill + size + OHE smoker total_bill + size + OHE all \n", + "Validation Fold \n", + "Fold 1 1.27 1.29 \n", + "Fold 2 0.93 0.93 \n", + "Fold 3 0.86 0.87 \n", + "Fold 4 0.84 0.86 \n", + "Fold 5 1.07 1.08 " + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipe_df" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "433f45de", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "total_bill only 1.00\n", + "total_bill + size 0.99\n", + "total_bill + size + OHE smoker 0.99\n", + "total_bill + size + OHE all 1.01\n", + "dtype: float64" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipe_df.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "be7a3541", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'total_bill + size + OHE smoker'" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipe_df.mean().idxmin()" + ] + }, + { + "cell_type": "markdown", + "id": "7df9ae70", + "metadata": {}, + "source": [ + "Even though the third model has the lowest average validation RMSE, its average validation RMSE is very close to that of the other, simpler models, and as a result we'd likely use the simplest model in practice." + ] + }, + { + "cell_type": "markdown", + "id": "80cf1012", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "

Question 🤔 (Answer at q.dsc80.com)

\n", + "
\n", + "\n", + "- Suppose you have a training dataset with 1000 rows.\n", + "- You want to decide between 20 hyperparameters for a particular model.\n", + "- To do so, you perform 10-fold cross-validation.\n", + "- **How many times is the first row in the training dataset (`X.iloc[0]`) used for training a model?**\n" + ] + }, + { + "cell_type": "markdown", + "id": "1c3b3ad4", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Summary: Generalization" + ] + }, + { + "cell_type": "markdown", + "id": "6a7e9ba8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "1. Split the data into two sets: training and test." + ] + }, + { + "cell_type": "markdown", + "id": "5c3b7200", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "2. Use only the training data when designing, training, and tuning the model.\n", + " - Use $k$-fold cross-validation to choose hyperparameters and estimate the model's ability to generalize.\n", + " - Do not ❌ look at the test data in this step!" + ] + }, + { + "cell_type": "markdown", + "id": "492e6340", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "3. Commit to your final model and train it using the entire training set." + ] + }, + { + "cell_type": "markdown", + "id": "ad9dd3db", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "4. Test the data using the test data. If the performance (e.g. RMSE) is not acceptable, return to step 2." + ] + }, + { + "cell_type": "markdown", + "id": "bc3dc5a7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "5. Finally, train on **all available data** and ship the model to production! 🛳" + ] + }, + { + "cell_type": "markdown", + "id": "662df112", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "🚨 This is the process you should **always** use! 🚨 " + ] + }, + { + "cell_type": "markdown", + "id": "dc44bead", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "

Question 🤔 (Answer at q.dsc80.com)

\n", + "
\n", + " \n", + "Remember, you can always ask questions at [**q.dsc80.com**](https://docs.google.com/forms/d/e/1FAIpQLScWbVZv9hBv-wX-ItKHUVRnkPMMtfJZVfErKE9GS7_8dFcRBQ/viewform)!" + ] + }, + { + "cell_type": "markdown", + "id": "7e72e409", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Decision trees 🌲" + ] + }, + { + "cell_type": "markdown", + "id": "e6646d38", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "\n", + "Decision trees can be used for both regression and classification. We'll start by using them for **classification**." + ] + }, + { + "cell_type": "markdown", + "id": "942f1289", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example: Should I get groceries?\n", + "\n", + "Decision trees make classifications by answering a series of yes/no questions.\n", + "\n", + "**Should I go to Trader Joe's to buy groceries today?**" + ] + }, + { + "cell_type": "markdown", + "id": "09e8a413", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "id": "1d8269fb", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Internal **nodes** of trees involve questions; leaf nodes make predictions $H(x)$." + ] + }, + { + "cell_type": "markdown", + "id": "bc8070e7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "id": "2569dd49", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example: Predicting diabetes" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "f83270fa", + "metadata": {}, + "outputs": [ + { + "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", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
061487235033.60.63501
11856629026.60.35310
28183640023.30.67321
..............................
7655121722311226.20.24300
7661126600030.10.35471
7671937031030.40.32230
\n", + "

768 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", + "0 6 148 72 35 0 33.6 \n", + "1 1 85 66 29 0 26.6 \n", + "2 8 183 64 0 0 23.3 \n", + ".. ... ... ... ... ... ... \n", + "765 5 121 72 23 112 26.2 \n", + "766 1 126 60 0 0 30.1 \n", + "767 1 93 70 31 0 30.4 \n", + "\n", + " DiabetesPedigreeFunction Age Outcome \n", + "0 0.63 50 1 \n", + "1 0.35 31 0 \n", + "2 0.67 32 1 \n", + ".. ... ... ... \n", + "765 0.24 30 0 \n", + "766 0.35 47 1 \n", + "767 0.32 23 0 \n", + "\n", + "[768 rows x 9 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diabetes = pd.read_csv(Path('data') / 'diabetes.csv')\n", + "display_df(diabetes, cols=9)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "559c4fd6", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 500\n", + "1 268\n", + "Name: Outcome, dtype: int64" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 0 means no diabetes, 1 means yes diabetes.\n", + "diabetes['Outcome'].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "fd3d4eb8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- `'Glucose'` is measured in mg/dL (milligrams per deciliter)." + ] + }, + { + "cell_type": "markdown", + "id": "6c2ea02c", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- `'BMI'` is calculated as $\\text{BMI} = \\frac{\\text{weight (kg)}}{\\left[ \\text{height (m)} \\right]^2}$." + ] + }, + { + "cell_type": "markdown", + "id": "82906445", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Let's use `'Glucose'` and `'BMI'` to predict whether or not a patient has diabetes (`'Outcome'`)." + ] + }, + { + "cell_type": "markdown", + "id": "5f4d2b73", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Exploring the dataset\n", + "\n", + "First, a train-test split:" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "4c699036", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = (\n", + " train_test_split(diabetes[['Glucose', 'BMI']], diabetes['Outcome'], random_state=1)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "fb537748", + "metadata": {}, + "source": [ + "Class 0 (orange) is \"no diabetes\" and class 1 (blue) is \"diabetes\"." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "4b4445bb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = (\n", + " X_train.assign(Outcome=y_train.astype(str))\n", + " .plot(kind='scatter', x='Glucose', y='BMI', color='Outcome', \n", + " color_discrete_map={'0': 'orange', '1': 'blue'},\n", + " title='Relationship between Glucose, BMI, and Diabetes')\n", + ")\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "id": "c2f94087", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Building a decision tree\n", + "\n", + "Let's build a decision tree and interpret the results.\n", + "\n", + "The relevant class is `DecisionTreeClassifier`, from `sklearn.tree`." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "12902788", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.tree import DecisionTreeClassifier" + ] + }, + { + "cell_type": "markdown", + "id": "c4b06503", + "metadata": {}, + "source": [ + "Note that we `fit` it the same way we `fit` earlier estimators.\n", + "\n", + "_You may wonder what `max_depth` and `criterion` do – more on this soon!_" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "ae5efa16", + "metadata": {}, + "outputs": [], + "source": [ + "dt = DecisionTreeClassifier(max_depth=2, criterion='entropy')" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "b37a3d08", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier(criterion='entropy', max_depth=2)" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt.fit(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "id": "70c4fc97", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Visualizing decision trees\n", + "\n", + "Our fit decision tree is like a \"flowchart\", made up of a series of questions.\n", + "\n", + "As before, orange is \"no diabetes\" and blue is \"diabetes\"." + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "b8ba715f", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.tree import plot_tree" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "cbe2313a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T21:27:31.954299\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15, 5))\n", + "plot_tree(dt, feature_names=X_train.columns, class_names=['no db', 'yes db'], \n", + " filled=True, fontsize=15, impurity=False);" + ] + }, + { + "cell_type": "markdown", + "id": "066f6931", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- To **classify a new data point**, we start at the top and answer the first question (i.e. \"Glucose <= 129.5\")." + ] + }, + { + "cell_type": "markdown", + "id": "57c96291", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- If the answer is \"**Yes**\", we move to the **left** branch, otherwise we move to the right branch." + ] + }, + { + "cell_type": "markdown", + "id": "f1432dfa", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We repeat this process until we end up at a leaf node, at which point we predict the most common class in that node.\n", + " - Note that each node has a `value` attribute, which describes the number of **training** individuals of each class that fell in that node." + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "9527edfe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 304\n", + "1 78\n", + "Name: Outcome, dtype: int64" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Note that the left node at depth 2 has a `value` of [304, 78].\n", + "y_train[X_train.query('Glucose <= 129.5').index].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "7a73e4cc", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Evaluating classifiers\n", + "\n", + "The most common evaluation metric in classification is **accuracy**:\n", + "\n", + "$$\\text{accuracy} = \\frac{\\text{# data points classified correctly}}{\\text{# data points}}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "6aef8802", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.765625" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(dt.predict(X_train) == y_train).mean()" + ] + }, + { + "cell_type": "markdown", + "id": "ea2d61d2", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "The `score` method of a classifier computes accuracy by default (just like the `score` method of a regressor computes $R^2$ by default). We want our classifiers to have **high accuracy**." + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "48bde429", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.765625" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Training accuracy – same number as above\n", + "dt.score(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "e4045e13", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7760416666666666" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Testing accuracy\n", + "dt.score(X_test, y_test)" + ] + }, + { + "cell_type": "markdown", + "id": "83213dcc", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Reflection" + ] + }, + { + "cell_type": "markdown", + "id": "47e36ccd", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Decision trees are easily interpretable: it is clear _how_ they make their predictions." + ] + }, + { + "cell_type": "markdown", + "id": "9f48d00b", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- They work with categorical data without needing to use one hot encoding." + ] + }, + { + "cell_type": "markdown", + "id": "0c046af0", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- They also can be used in multi-class classification problems, e.g. when there are more than 2 possible outcomes." + ] + }, + { + "cell_type": "markdown", + "id": "6ee7e7c8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The _decision boundary_ of a decision tree can be arbitrarily complicated." + ] + }, + { + "cell_type": "markdown", + "id": "adb19142", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **How are decision trees trained?**" + ] + }, + { + "cell_type": "markdown", + "id": "0cda55de", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### How are decision trees trained?\n", + "\n", + "Pseudocode:\n", + "\n", + "```python\n", + "def make_tree(X, y):\n", + " if all points in y have the same label C:\n", + " return Leaf(C)\n", + " f = best splitting feature # e.g. Glucose or BMI\n", + " v = best splitting value # e.g. 129.5\n", + " \n", + " X_left, y_left = X, y where (X[f] <= v)\n", + " X_right, y_right = X, y where (X[f] > v)\n", + " \n", + " left = make_tree(X_left, y_left)\n", + " right = make_tree(X_right, y_right)\n", + " \n", + " return Node(f, v, left, right)\n", + " \n", + "make_tree(X_train, y_train)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "670a105e", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### How do we measure the quality of a split?" + ] + }, + { + "cell_type": "markdown", + "id": "214872f7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Our pseudocode for training a decision tree relies on finding the best way to \"split\" a node – that is, **the best question to ask** to help us narrow down which class to predict." + ] + }, + { + "cell_type": "markdown", + "id": "9621a012", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Intuition**: Suppose the distribution within a node looks like this (colors represent classes):\n", + "\n", + "
🟠🟠🟠🟠🟠🟠🔵🔵🔵🔵🔵🔵🔵
\n", + "\n", + "Split A:\n", + "- \"Yes\": 🟠🟠🟠🔵🔵🔵\n", + "- \"No\": 🟠🟠🟠🔵🔵🔵🔵\n", + "\n", + "Split B:\n", + "- \"Yes\": 🔵🔵🔵🔵🔵🔵\n", + "- \"No\": 🔵🟠🟠🟠🟠🟠🟠\n", + "\n", + "**Which split is \"better\"?**" + ] + }, + { + "cell_type": "markdown", + "id": "1701e7e3", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Split B, because there is \"less uncertainty\" in the resulting nodes in Split B than there is in Split A. Let's try and quantify this!" + ] + }, + { + "cell_type": "markdown", + "id": "c6af8be0", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Entropy" + ] + }, + { + "cell_type": "markdown", + "id": "46462eb4", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- For each class $C$ within a node, define $p_C$ as the proportion of points with that class.\n", + " - For example, the two classes may be \"yes diabetes\" and \"no diabetes\"." + ] + }, + { + "cell_type": "markdown", + "id": "a1414f15", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The **surprise** of drawing a point from the node at random and having it be class $C$ is:\n", + "\n", + "$$\n", + "- \\log_2 p_C\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "73b7095a", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The **entropy** of a node is the average surprise over all classes:\n", + "\n", + "\\begin{align}\n", + "\\text{entropy} &= - \\sum_C p_C \\log_2 p_C\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "id": "dc0d04fd", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The entropy of 🟠🟠🟠🟠🟠🟠🟠🟠 is $ -1 \\log_2(1) = 0 $." + ] + }, + { + "cell_type": "markdown", + "id": "4d3dc897", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The entropy of 🟠🟠🟠🟠🔵🔵🔵🔵 is $ -0.5 \\log_2(0.5) - 0.5 \\log_2(0.5) = 1$." + ] + }, + { + "cell_type": "markdown", + "id": "98afe088", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The entropy of 🟠🔵🟢🟡🟣 is $ - \\log_2 \\frac{1}{5} = \\log_2(5) $\n", + " - In general, if a node has $n$ points, all with different labels, the entropy of the node is $ \\log_2(n) $." + ] + }, + { + "cell_type": "markdown", + "id": "e28fe85d", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example entropy calculation\n", + "\n", + "Suppose we have:\n", + "\n", + "
🟠🟠🟠🟠🟠🟠🟠🟠🟠🟠🟠🟠🔵🔵🔵🔵🔵🔵
\n", + "\n", + "Split A:\n", + "- \"Yes\": 🟠🟠🟠🟠🟠🟠🔵\n", + "- \"No\": 🟠🟠🟠🟠🟠🟠🔵🔵🔵🔵🔵\n", + "\n", + "Split B:\n", + "- \"Yes\": 🟠🟠🟠🟠🟠🟠🔵🔵🔵\n", + "- \"No\": 🟠🟠🟠🟠🟠🟠🔵🔵🔵" + ] + }, + { + "cell_type": "markdown", + "id": "34bdc7b9", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "We choose the split that has the lowest **weighted entropy**, that is:\n", + "\n", + "$$\\text{entropy of split} = \\frac{\\# \\text{Yes}}{\\# \\text{Yes} + \\# \\text{No}} \\cdot \\text{entropy(Yes)} + \\frac{\\# \\text{No}}{\\# \\text{Yes} + \\# \\text{No}} \\cdot \\text{entropy(No)}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "49e63931", + "metadata": {}, + "outputs": [], + "source": [ + "def entropy(node):\n", + " props = pd.Series(list(node)).value_counts(normalize=True)\n", + " return -sum(props * np.log2(props))" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "31a38b3f", + "metadata": {}, + "outputs": [], + "source": [ + "def weighted_entropy(yes_node, no_node):\n", + " yes_entropy = entropy(yes_node)\n", + " no_entropy = entropy(no_node)\n", + " yes_weight = len(yes_node) / (len(yes_node) + len(no_node))\n", + " return yes_weight * yes_entropy + (1 - yes_weight) * no_entropy" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "e3e62521", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8375578764623786" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split A:\n", + "weighted_entropy(\"🟠🟠🟠🟠🟠🟠🔵\", \"🟠🟠🟠🟠🟠🟠🔵🔵🔵🔵🔵\")" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "55cd0ce5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9182958340544896" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split B:\n", + "weighted_entropy(\"🟠🟠🟠🟠🟠🟠🔵🔵🔵\", \"🟠🟠🟠🟠🟠🟠🔵🔵🔵\")" + ] + }, + { + "cell_type": "markdown", + "id": "f8d910d5", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Split A has the lower weighted entropy, so we'll use it." + ] + }, + { + "cell_type": "markdown", + "id": "61477abd", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Understanding entropy" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "899b6d5e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T21:28:46.136616\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15, 5))\n", + "plot_tree(dt, feature_names=X_train.columns, class_names=['no db', 'yes db'], \n", + " filled=True, fontsize=15, impurity=True);" + ] + }, + { + "cell_type": "markdown", + "id": "3cf312fe", + "metadata": { + "slideshow": { + "slide_type": "" + } + }, + "source": [ + "We can recreate the entropy calculations above! Note that the default `DecisionTreeClassifier` uncertaintly metric _isn't_ entropy; it used entropy because we set `criterion='entropy'` when defining `dt`. (The default metric, [Gini impurity](https://en.wikipedia.org/wiki/Decision_tree_learning#:~:text=Gini%20impurity%20measures%20how%20often,into%20a%20single%20target%20category.), is perfectly fine too!)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "648b1555", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7302263747422792" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The first node at depth 2 has an entropy of 0.73,\n", + "# both told to us above and verified here!\n", + "entropy([0] * 304 + [1] * 78)" + ] + }, + { + "cell_type": "markdown", + "id": "26aa9328", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\n", + " \n", + "Remember, you can always ask questions at [**q.dsc80.com**](https://docs.google.com/forms/d/e/1FAIpQLScWbVZv9hBv-wX-ItKHUVRnkPMMtfJZVfErKE9GS7_8dFcRBQ/viewform)!" + ] + }, + { + "cell_type": "markdown", + "id": "63715f3a", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Tree depth\n", + "\n", + "Decision trees are trained by **recursively** picking the best split until:\n", + "\n", + "- all \"leaf nodes\" only contain training examples from a single class (good), or\n", + "- it is impossible to split leaf nodes any further (not good).\n", + "\n", + "By default, there is no \"maximum depth\" for a decision tree. As such, without restriction, decision trees tend to be very deep." + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "df1a32ea", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier()" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt_no_max = DecisionTreeClassifier()\n", + "dt_no_max.fit(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "id": "c8b7ab31", + "metadata": {}, + "source": [ + "A decision tree fit on our training data has a depth of around 20! (It is so deep that `tree.plot_tree` errors when trying to plot it.)" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "75c06bef", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "21" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt_no_max.tree_.max_depth" + ] + }, + { + "cell_type": "markdown", + "id": "30caeb75", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "At first, this tree seems \"better\" than our tree of depth 2, since its training accuracy is much much higher:" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "811e431b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9913194444444444" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt_no_max.score(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "id": "9413b6fa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.765625" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Depth 2 tree.\n", + "dt.score(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "id": "eaf99510", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "But recall, we truly care about **test set performance**, and this decision tree has **worse accuracy on the test set than our depth 2 tree**." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "67f35a94", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7291666666666666" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt_no_max.score(X_test, y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "7859ac6c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7760416666666666" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Depth 2 tree.\n", + "dt.score(X_test, y_test)" + ] + }, + { + "cell_type": "markdown", + "id": "20e1e183", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Decision trees and overfitting" + ] + }, + { + "cell_type": "markdown", + "id": "4769f0d5", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Decision trees have a tendency to overfit. **Why is that?**" + ] + }, + { + "cell_type": "markdown", + "id": "0466852f", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Unlike linear classification techniques (like logistic regression or SVMs), **decision trees are non-linear**.\n", + " - They are also \"non-parametric\" – there are no $w^*$s to learn." + ] + }, + { + "cell_type": "markdown", + "id": "3d76fd16", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- While being trained, decision trees ask enough questions to effectively **memorize** the correct response values in the training set. However, the relationships they learn are often overfit to the noise in the training set, and don't generalize well." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "b1e165b3", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig" + ] + }, + { + "cell_type": "markdown", + "id": "1f563e29", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- A decision tree whose depth is not restricted will achieve 100% accuracy on any training set, as long as there are no \"overlapping values\" in the training set.\n", + " - Two values overlap when they have the same features $x$ but different response values $y$ (e.g. if two patients have the same glucose levels and BMI, but one has diabetes and one doesn't)." + ] + }, + { + "cell_type": "markdown", + "id": "8564b552", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **One solution**: Make the decision tree \"less complex\" by limiting the maximum depth." + ] + }, + { + "cell_type": "markdown", + "id": "87429ef6", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Since `sklearn.tree`'s `plot_tree` can't visualize extremely large decision trees, let's create and visualize some smaller decision trees." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "66549935", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T12:02:56.199761\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T12:02:56.615784\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T12:02:58.369793\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "trees = {}\n", + "for d in [2, 4, 8]:\n", + " trees[d] = DecisionTreeClassifier(max_depth=d, random_state=1)\n", + " trees[d].fit(X_train, y_train)\n", + " \n", + " plt.figure(figsize=(15, 5), dpi=100)\n", + " plot_tree(trees[d], feature_names=X_train.columns, class_names=['no db', 'yes db'], \n", + " filled=True, rounded=True, impurity=False)\n", + " \n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "6b9c504a", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "As tree depth increases, complexity increases, and our trees are more prone to overfitting. This means model bias decreases, but model variance increases. \n", + "\n", + "**Question**: What is the \"right\" maximum depth to choose?" + ] + }, + { + "cell_type": "markdown", + "id": "c81ba76e", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Hyperparameters for decision trees" + ] + }, + { + "cell_type": "markdown", + "id": "ce6fcb22", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- `max_depth` is a hyperparameter for `DecisionTreeClassifier`." + ] + }, + { + "cell_type": "markdown", + "id": "bd81005e", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- There are many more hyperparameters we can tweak; look at [the documentation](https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html) for examples.\n", + " - `min_samples_split`: The minimum number of samples required to split an internal node.\n", + " - `criterion`: The function to measure the quality of a split (`'gini'` or `'entropy'`)." + ] + }, + { + "cell_type": "markdown", + "id": "2e2dc4ea", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- To ensure that our model generalizes well to unseen data, we need an efficient technique for trying different combinations of hyperparameters!" + ] + }, + { + "cell_type": "markdown", + "id": "da682d20", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We'll see that technique next time: `GridSearchCV`." + ] + }, + { + "cell_type": "markdown", + "id": "b30587d9", + "metadata": {}, + "source": [ + "\n", + "\n", + "(Fa23 Final 10.1)\n", + "\n", + "Suppose we fit decision trees of varying depths to predict 'y' using 'x1' and 'x2'. The entire training set is shown in the table below.\n", + "\n", + "
\n", + "\n", + "What is:\n", + "\n", + "1. The entropy of a node containing all the training points.\n", + "1. The lowest possible entropy of a node in a fitted tree with depth 1 (two leaf nodes).\n", + "1. The lowest possible entropy of a node in a fitted tree with depth 2 (four leaf nodes)." + ] + }, + { + "cell_type": "markdown", + "id": "f191f3ca", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Summary, next time" + ] + }, + { + "cell_type": "markdown", + "id": "e08521e0", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Summary\n", + "\n", + "- A hyperparameter is a configuration that we choose before training a model; an important task in machine learning is selecting \"good\" hyperparameters.\n", + "- To choose hyperparameters, we use $k$-fold cross-validation. **This technique is very common, and you are expected to use it in Project 4!**\n", + " - See [Summary: Generalization](#Summary:-Generalization) for more.\n", + "- Decision trees can be used for both regression and classification; we've used them for classification.\n", + " - Decision trees are trained recursively. Each node corresponds to a \"yes\" or \"no\" question.\n", + " - To decide which \"yes\" or \"no\" question to ask, we choose the question with the lowest weighted entropy." + ] + }, + { + "cell_type": "markdown", + "id": "e62eb104", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Next time\n", + "\n", + "- An efficient technique for trying different combinations of hyperparameters.\n", + " - In other words, performing $k$-fold cross-validation _without_ a `for`-loop.\n", + "- Techniques for evaluating classifiers beyond accuracy.\n", + " - You'll need this for Project 4!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.18" + }, + "livereveal": { + "scroll": true + }, + "rise": { + "transition": "none" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/resources/lectures/lec16/lec16.html b/resources/lectures/lec16/lec16.html new file mode 100644 index 0000000..a799ca7 --- /dev/null +++ b/resources/lectures/lec16/lec16.html @@ -0,0 +1,11197 @@ + + + + + +Notebook + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/resources/lectures/lec16/lec16.ipynb b/resources/lectures/lec16/lec16.ipynb new file mode 100644 index 0000000..c99f330 --- /dev/null +++ b/resources/lectures/lec16/lec16.ipynb @@ -0,0 +1,22968 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "8c8a44b8", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "from dsc80_utils import *\n", + "import lec16_util as util" + ] + }, + { + "cell_type": "markdown", + "id": "6ca51859", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Lecture 16 – Hyperparameters, Cross-Validation, and Decision Trees\n", + "\n", + "## DSC 80, Spring 2024" + ] + }, + { + "cell_type": "markdown", + "id": "22824200", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Announcements 📣\n", + "\n", + "- Lab 8 is due on **Wednesday**.\n", + "- Final Project Checkpoint 2 is due **Friday**.\n", + "- The Final Exam is on **Saturday, June 8 from 8-11AM** (room TBD).\n", + " - You can bring two double-sided notes sheets (you can bring your midterm notes sheet, if you want).\n", + " - More details to come." + ] + }, + { + "cell_type": "markdown", + "id": "bd851d5b", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Agenda 📆\n", + "\n", + "- Hyperparameters.\n", + "- Cross-validation.\n", + "- Decision trees." + ] + }, + { + "cell_type": "markdown", + "id": "ea74dd70", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "

Question 🤔 (Answer at q.dsc80.com)

\n", + "
\n", + " \n", + "Remember, you can always ask questions at [**q.dsc80.com**](https://docs.google.com/forms/d/e/1FAIpQLScWbVZv9hBv-wX-ItKHUVRnkPMMtfJZVfErKE9GS7_8dFcRBQ/viewform)!" + ] + }, + { + "cell_type": "markdown", + "id": "b176323a", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Review: Hyperparameters" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "874cfdb7", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "np.random.seed(23) # For reproducibility.\n", + "\n", + "def sample_from_pop(n=100):\n", + " x = np.linspace(-2, 3, n)\n", + " y = x ** 3 + (np.random.normal(0, 3, size=n))\n", + " return pd.DataFrame({'x': x, 'y': y})\n", + "\n", + "sample_1 = sample_from_pop()\n", + "sample_2 = sample_from_pop()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d2538011", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.scatter(sample_1, x='x', y='y', title='Sample 1')" + ] + }, + { + "cell_type": "markdown", + "id": "86b338d4", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example: Polynomial regression\n", + "\n", + "We recently looked at an example of **polynomial regression**." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "72af7566", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = util.train_and_plot(train_sample=sample_1, test_sample=sample_2, degs=[1, 3, 25], data_name='Sample 2')\n", + "fig.update_layout(title='Trained on Sample 1, Performance on Sample 2')" + ] + }, + { + "cell_type": "markdown", + "id": "42a671d7", + "metadata": {}, + "source": [ + "When building these models:\n", + "- We **got to choose** the degree of the polynomials (i.e. we chose 1, 3, and 25).\n", + "- We didn't get to choose the exact formulas for the three polynomials – their formulas were **learned from data**." + ] + }, + { + "cell_type": "markdown", + "id": "95f0e314", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Parameters vs. hyperparameters" + ] + }, + { + "cell_type": "markdown", + "id": "33d7d0c9", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- A **parameter** defines the relationship between variables in a model. \n", + " - **We learn parameters from data**.\n", + " - For instance, suppose we fit a degree 3 polynomial to data, and end up with\n", + " \n", + " $$H(x) = 1 - 2x + 13x^2 - 4x^3$$\n", + " \n", + " - 1, -2, 13, and -4 are parameters." + ] + }, + { + "cell_type": "markdown", + "id": "6778dd62", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- A **hyperparameter** is a parameter that we get to choose **before our model is fit to the data**.\n", + " - Think of hyperparameters as knobs 🎛 – **we get to pick and tune them!**\n", + " - **Polynomial degree** was a hyperparameter in the previous example, and we tried three different values: 1, 3, and 25." + ] + }, + { + "cell_type": "markdown", + "id": "1d1dfbc3", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **Question**: How do we choose the \"right\" hyperparameter(s)?" + ] + }, + { + "cell_type": "markdown", + "id": "e2f97b99", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Training error vs. test error" + ] + }, + { + "cell_type": "markdown", + "id": "2cd2e40f", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We know that a model's performance on a **test set** is a good estimate of its ability to generalize to unseen data." + ] + }, + { + "cell_type": "markdown", + "id": "926bc6c1", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We want to find the hyperparameter that leads to the best **test set performance**." + ] + }, + { + "cell_type": "markdown", + "id": "e6e28be9", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Idea:\n", + " 1. Come up with a **list** of hyperparameters to try.\n", + " 2. For each hyperparameter, train the model on the training set and compute its performance on the test set.\n", + " 3. Pick the hyperparameter with the best performance on the test set." + ] + }, + { + "cell_type": "markdown", + "id": "b31001a9", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Training error vs. test error\n", + "\n", + "- Let's try this strategy on Sample 1 from our earlier example. \n", + "\n", + "- We'll try to fit a polynomial model on the dataset; we'll choose the polynomial's degree from the list [1, 2, ..., 25]." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "587b788e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.scatter(sample_1, x='x', y='y', title='Sample 1')" + ] + }, + { + "cell_type": "markdown", + "id": "324c1eb4", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "First, we perform a train-test split." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "184d686f", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "10ab3ddd", + "metadata": {}, + "outputs": [], + "source": [ + "X = sample_1[['x']]\n", + "y = sample_1['y']\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=100)" + ] + }, + { + "cell_type": "markdown", + "id": "e98ff996", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Polynomial degree vs. train/test error\n", + "\n", + "Now, we'll create models with degree-1 through degree-25 polynomial features and compute their train and test errors." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "19abdbc7", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import mean_squared_error" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "825c48e8", + "metadata": {}, + "outputs": [], + "source": [ + "train_errs = []\n", + "test_errs = []\n", + "\n", + "for d in range(1, 26):\n", + " pl = make_pipeline(PolynomialFeatures(d), LinearRegression())\n", + " pl.fit(X_train, y_train)\n", + " train_errs.append(mean_squared_error(y_train, pl.predict(X_train), squared=False))\n", + " test_errs.append(mean_squared_error(y_test, pl.predict(X_test), squared=False))\n", + "\n", + "errs = pd.DataFrame({'Train Error': train_errs, 'Test Error': test_errs})" + ] + }, + { + "cell_type": "markdown", + "id": "ed06ac65", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Let's look at the plots of training error vs. degree and test error vs. degree." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7bdc8ddf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = px.line(errs)\n", + "fig.update_layout(showlegend=True, xaxis_title='Polynomial Degree', yaxis_title='RMSE')" + ] + }, + { + "cell_type": "markdown", + "id": "128dfbf6", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Training error appears to decrease as polynomial degree increases." + ] + }, + { + "cell_type": "markdown", + "id": "b724335d", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Test error appears to decrease until a \"valley\", and then increases again." + ] + }, + { + "cell_type": "markdown", + "id": "d76e0bee", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Here, we'd choose a degree of 3, since that degree has the **lowest test error**." + ] + }, + { + "cell_type": "markdown", + "id": "d0abe896", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Training error vs. test error\n", + "\n", + "The pattern we saw in the previous example is true more generally.\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "e728db66", + "metadata": {}, + "source": [ + "We pick the hyperparameter(s) at the \"valley\" of test error.\n", + "\n", + "Note that training error **tends** to underestimate test error, but it doesn't have to – i.e., it is possible for test error to be lower than training error (say, if the test set is \"easier\" to predict than the training set)." + ] + }, + { + "cell_type": "markdown", + "id": "0f6bc281", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Conducting train-test splits" + ] + }, + { + "cell_type": "markdown", + "id": "88811055", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Recall, training data is used to fit our model, and test data is used to evaluate our model.\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "ebc6b2ad", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **Question**: _How_ should we split?\n", + " - `sklearn`'s `train_test_split` splits **randomly**, which usually works well.\n", + " - However, if there is some element of **time** in the training data (say, when predicting the future price of a stock), a better split is \"past\" and \"future\"." + ] + }, + { + "cell_type": "markdown", + "id": "1ec1df4b", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **Question**: How _large_ should the split be, e.g. 90%-10% vs. 75%-25%?\n", + " - There's a tradeoff – a larger training set should lead to a \"better\" model, while a larger test set should lead to a better estimate of our model's ability to generalize.\n", + " - There's no \"right\" choice, but we usually choose between 10% to 25% for the test set." + ] + }, + { + "cell_type": "markdown", + "id": "5ddf0394", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### But wait..." + ] + }, + { + "cell_type": "markdown", + "id": "17c19ac8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- With our current strategy, we are choosing the hyperparameter that creates the model that **performs best on the test set**." + ] + }, + { + "cell_type": "markdown", + "id": "4427cc42", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- As such, we are **overfitting to the test set** – the best hyperparameter for the test set might not be the best hyperparameter for a totally unseen dataset!" + ] + }, + { + "cell_type": "markdown", + "id": "01584eef", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- It seems like we need **another** split." + ] + }, + { + "cell_type": "markdown", + "id": "3b36a7aa", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Cross-validation" + ] + }, + { + "cell_type": "markdown", + "id": "39c7b052", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Idea: A single validation set\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "d344ac51", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "1. Split the data into three sets: training, validation, and test." + ] + }, + { + "cell_type": "markdown", + "id": "ac8d7d91", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "2. For each hyperparameter choice, train the model only on the training set, and evaluate the model's performance on the validation set." + ] + }, + { + "cell_type": "markdown", + "id": "0b66367d", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "3. Find the hyperparameter with the best validation performance." + ] + }, + { + "cell_type": "markdown", + "id": "fad93210", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "4. Retrain the final model on the training and validation sets, and report its performance on the test set." + ] + }, + { + "cell_type": "markdown", + "id": "f30e49e7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Issue**: This strategy is too dependent on the validation set, which may be small and/or not a representative sample of the data. **We're not going to do this.** ❌" + ] + }, + { + "cell_type": "markdown", + "id": "a9131a04", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### A better idea: $k$-fold cross-validation\n", + "\n", + "Instead of relying on a single validation set, we can create $k$ validation sets, where $k$ is some positive integer (5 in the example below).\n", + "\n", + "
\n", + "\n", + "Since each data point is used for training $k-1$ times and validation once, the (averaged) validation performance should be a good metric of a model's ability to generalize to unseen data.\n", + "\n", + "$k$-fold cross-validation (or simply \"cross-validation\") is **the** technique we will use for finding hyperparameters, or more generally, for choosing between different possible models. **It's what you should use in your Final Project!** ✅" + ] + }, + { + "cell_type": "markdown", + "id": "b7a4b3f7", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Creating folds in `sklearn`\n", + "\n", + "`sklearn` has a `KFold` class that splits data into training and validation folds." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4555f6c0", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import KFold" + ] + }, + { + "cell_type": "markdown", + "id": "319b67ce", + "metadata": {}, + "source": [ + "Let's use a simple dataset for illustration." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "04fcf601", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([10, 20, 30, 40, 50, 60])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = np.arange(10, 70, 10)\n", + "data" + ] + }, + { + "cell_type": "markdown", + "id": "5a43ac2a", + "metadata": {}, + "source": [ + "Let's instantiate a `KFold` object with $k=3$." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "062e7597", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KFold(n_splits=3, random_state=1, shuffle=True)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kfold = KFold(3, shuffle=True, random_state=1)\n", + "kfold" + ] + }, + { + "cell_type": "markdown", + "id": "fbdf8557", + "metadata": {}, + "source": [ + "Finally, let's use `kfold` to `split` `data`:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "79701be4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train: [10 40 50 60], validation: [20 30]\n", + "train: [20 30 40 60], validation: [10 50]\n", + "train: [10 20 30 50], validation: [40 60]\n" + ] + } + ], + "source": [ + "for train, val in kfold.split(data):\n", + " print(f'train: {data[train]}, validation: {data[val]}')" + ] + }, + { + "cell_type": "markdown", + "id": "7367e39b", + "metadata": {}, + "source": [ + "Note that each value in `data` is used for validation exactly once and for training exactly twice. Also note that because we set `shuffle=True` the folds are not simply `[10, 20]`, `[30, 40]`, and `[50, 60]`." + ] + }, + { + "cell_type": "markdown", + "id": "08de2c3f", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### $k$-fold cross-validation\n", + "\n", + "First, **shuffle** the entire training set randomly and **split** it into $k$ disjoint folds, or \"slices\". Then:" + ] + }, + { + "cell_type": "markdown", + "id": "86b39156", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- For each hyperparameter:\n", + " - For each slice:\n", + " - Let the slice be the \"validation set\", $V$.\n", + " - Let the rest of the data be the \"training set\", $T$.\n", + " - Train a model using the selected hyperparameter on the training set $T$.\n", + " - Evaluate the model on the validation set $V$.\n", + " - Compute the **average** validation score (e.g. RMSE) for the particular hyperparameter." + ] + }, + { + "cell_type": "markdown", + "id": "7abb6540", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Choose the hyperparameter with the best average validation score." + ] + }, + { + "cell_type": "markdown", + "id": "4620c78d", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### $k$-fold cross-validation in `sklearn`\n", + "\n", + "While you could manually use `KFold` to perform cross-validation, the `cross_val_score` function in `sklearn` implements $k$-fold cross-validation for us! \n", + "\n", + "```py\n", + "cross_val_score(estimator, X_train, y_train, cv)\n", + "```\n", + "\n", + "Specifically, it takes in:\n", + "- A `Pipeline` or estimator **that has not already been `fit`**.\n", + "- Training data.\n", + "- A value of $k$ (through the `cv` argument).\n", + "- (Optionally) A `scoring` metric.\n", + "\n", + "and performs $k$-fold cross-validation, returning the values of the scoring metric on each fold." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ca1244ea", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import cross_val_score" + ] + }, + { + "cell_type": "markdown", + "id": "b95ca832", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### $k$-fold cross-validation in `sklearn`" + ] + }, + { + "cell_type": "markdown", + "id": "48eaa524", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Let's perform $k$-fold cross validation in order to help us pick a degree for polynomial regression from the list [1, 2, ..., 25]." + ] + }, + { + "cell_type": "markdown", + "id": "af6df303", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We'll use $k=5$ since it's a common choice (and the default in `sklearn`)." + ] + }, + { + "cell_type": "markdown", + "id": "4c570d08", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- For the sake of this example, we'll suppose `sample_1` is our \"training + validation data\", i.e. that our test data is in some other dataset.\n", + " - If this were not true, we'd first need to split `sample_1` into separate training and test sets." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "d2e26f47", + "metadata": {}, + "outputs": [], + "source": [ + "errs_df = pd.DataFrame()\n", + "\n", + "for d in range(1, 26):\n", + " pl = make_pipeline(PolynomialFeatures(d), LinearRegression())\n", + " \n", + " # The `scoring` argument is used to specify that we want to compute the RMSE; \n", + " # the default is R^2. It's called \"neg\" RMSE because, \n", + " # by default, sklearn likes to \"maximize\" scores, and maximizing -RMSE is the same\n", + " # as minimizing RMSE.\n", + " errs = cross_val_score(pl, sample_1[['x']], sample_1['y'], \n", + " cv=5, scoring='neg_root_mean_squared_error')\n", + " errs_df[f'Deg {d}'] = -errs # Negate to turn positive (sklearn computed negative RMSE).\n", + " \n", + "errs_df.index = [f'Fold {i}' for i in range(1, 6)]\n", + "errs_df.index.name = 'Validation Fold'" + ] + }, + { + "cell_type": "markdown", + "id": "e8c7311d", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Next class, we'll look at how to implement this procedure without needing to `for`-loop over values of `d`." + ] + }, + { + "cell_type": "markdown", + "id": "5b6ed7f0", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### $k$-fold cross-validation in `sklearn`\n", + "\n", + "Note that for each choice of degree (our hyperparameter), we have **five** RMSEs, one for each \"fold\" of the data. This means that in total, $5 \\cdot 25 = 125$ models were trained/fit to data!" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d01ba737", + "metadata": {}, + "outputs": [ + { + "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", + "
Deg 1Deg 2Deg 3Deg 4...Deg 22Deg 23Deg 24Deg 25
Validation Fold
Fold 14.7912.815.044.93...8.78e+066.57e+071.41e+085.90e+08
Fold 23.975.363.193.22...2.93e+017.85e+017.53e+013.13e+01
Fold 34.772.562.082.11...3.03e+013.09e+014.24e+013.72e+01
Fold 46.134.662.932.93...6.27e+003.33e+015.80e+019.69e+00
Fold 511.7011.923.244.37...8.36e+062.28e+088.17e+086.63e+09
\n", + "

5 rows × 25 columns

\n", + "
" + ], + "text/plain": [ + " Deg 1 Deg 2 Deg 3 Deg 4 ... Deg 22 Deg 23 \\\n", + "Validation Fold ... \n", + "Fold 1 4.79 12.81 5.04 4.93 ... 8.78e+06 6.57e+07 \n", + "Fold 2 3.97 5.36 3.19 3.22 ... 2.93e+01 7.85e+01 \n", + "Fold 3 4.77 2.56 2.08 2.11 ... 3.03e+01 3.09e+01 \n", + "Fold 4 6.13 4.66 2.93 2.93 ... 6.27e+00 3.33e+01 \n", + "Fold 5 11.70 11.92 3.24 4.37 ... 8.36e+06 2.28e+08 \n", + "\n", + " Deg 24 Deg 25 \n", + "Validation Fold \n", + "Fold 1 1.41e+08 5.90e+08 \n", + "Fold 2 7.53e+01 3.13e+01 \n", + "Fold 3 4.24e+01 3.72e+01 \n", + "Fold 4 5.80e+01 9.69e+00 \n", + "Fold 5 8.17e+08 6.63e+09 \n", + "\n", + "[5 rows x 25 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "errs_df" + ] + }, + { + "cell_type": "markdown", + "id": "c914d676", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "We should choose the degree with the lowest **average** validation RMSE." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "3dc1361c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Deg 3'" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "errs_df.mean().idxmin()" + ] + }, + { + "cell_type": "markdown", + "id": "43aeacff", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Note that if we didn't perform $k$-fold cross-validation, but instead just used a single validation set, we may have ended up with a different result:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "de811f8a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Validation Fold\n", + "Fold 1 Deg 1\n", + "Fold 2 Deg 6\n", + "Fold 3 Deg 8\n", + "Fold 4 Deg 3\n", + "Fold 5 Deg 3\n", + "dtype: object" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "errs_df.idxmin(axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "50e5db5f", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + " \n", + "The RMSEs in Folds 1 and 5 are much higher than in other folds. Why? How we might fix this?" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "c95f912b", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.scatter(sample_1, x='x', y='y', title='Sample 1')" + ] + }, + { + "cell_type": "markdown", + "id": "aa8239bf", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Another example: Tips\n", + "\n", + "We can also use $k$-fold cross-validation to determine which subset of features to use in a linear model that predicts tips by making one pipeline for each subset of features we want to evaluate." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "a721435f", + "metadata": {}, + "outputs": [], + "source": [ + "# make_column_transformer is a shortcut for the ColumnTransformer class\n", + "from sklearn.compose import make_column_transformer, make_column_selector\n", + "from sklearn.preprocessing import FunctionTransformer, OneHotEncoder" + ] + }, + { + "cell_type": "markdown", + "id": "77f774ac", + "metadata": {}, + "source": [ + "As we should always do, we'll perform a train-test split on `tips` and will only use the training data for cross-validation." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "e04a69f3", + "metadata": {}, + "outputs": [ + { + "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", + "
total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4
\n", + "
" + ], + "text/plain": [ + " total_bill tip sex smoker day time size\n", + "0 16.99 1.01 Female No Sun Dinner 2\n", + "1 10.34 1.66 Male No Sun Dinner 3\n", + "2 21.01 3.50 Male No Sun Dinner 3\n", + "3 23.68 3.31 Male No Sun Dinner 2\n", + "4 24.59 3.61 Female No Sun Dinner 4" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tips = sns.load_dataset('tips')\n", + "tips.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "078f4566", + "metadata": {}, + "outputs": [], + "source": [ + "X = tips.drop('tip', axis=1)\n", + "y = tips['tip']\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "4e2853dc", + "metadata": {}, + "outputs": [], + "source": [ + "# A dictionary that maps names to Pipeline objects.\n", + "select = FunctionTransformer(lambda x: x)\n", + "pipes = {\n", + " 'total_bill only': make_pipeline(\n", + " make_column_transformer( (select, ['total_bill']) ),\n", + " LinearRegression(),\n", + " ),\n", + " 'total_bill + size': make_pipeline(\n", + " make_column_transformer( (select, ['total_bill', 'size']) ),\n", + " LinearRegression(),\n", + " ),\n", + " 'total_bill + size + OHE smoker': make_pipeline(\n", + " make_column_transformer(\n", + " (select, ['total_bill', 'size']),\n", + " (OneHotEncoder(drop='first'), ['smoker']),\n", + " ),\n", + " LinearRegression(),\n", + " ),\n", + " 'total_bill + size + OHE all': make_pipeline(\n", + " make_column_transformer(\n", + " (select, ['total_bill', 'size']),\n", + " (OneHotEncoder(drop='first'), ['smoker', 'sex', 'time', 'day']),\n", + " ),\n", + " LinearRegression(),\n", + " ),\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "23b42ccf", + "metadata": {}, + "outputs": [], + "source": [ + "pipe_df = pd.DataFrame()\n", + "\n", + "for pipe in pipes:\n", + " errs = cross_val_score(pipes[pipe], X_train, y_train,\n", + " cv=5, scoring='neg_root_mean_squared_error')\n", + " pipe_df[pipe] = -errs\n", + " \n", + "pipe_df.index = [f'Fold {i}' for i in range(1, 6)]\n", + "pipe_df.index.name = 'Validation Fold'" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "09420210", + "metadata": {}, + "outputs": [ + { + "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", + "
total_bill onlytotal_bill + sizetotal_bill + size + OHE smokertotal_bill + size + OHE all
Validation Fold
Fold 11.321.271.271.29
Fold 20.950.920.930.93
Fold 30.770.860.860.87
Fold 40.850.840.840.86
Fold 51.101.071.071.08
\n", + "
" + ], + "text/plain": [ + " total_bill only total_bill + size \\\n", + "Validation Fold \n", + "Fold 1 1.32 1.27 \n", + "Fold 2 0.95 0.92 \n", + "Fold 3 0.77 0.86 \n", + "Fold 4 0.85 0.84 \n", + "Fold 5 1.10 1.07 \n", + "\n", + " total_bill + size + OHE smoker total_bill + size + OHE all \n", + "Validation Fold \n", + "Fold 1 1.27 1.29 \n", + "Fold 2 0.93 0.93 \n", + "Fold 3 0.86 0.87 \n", + "Fold 4 0.84 0.86 \n", + "Fold 5 1.07 1.08 " + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipe_df" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "433f45de", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "total_bill only 1.00\n", + "total_bill + size 0.99\n", + "total_bill + size + OHE smoker 0.99\n", + "total_bill + size + OHE all 1.01\n", + "dtype: float64" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipe_df.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "be7a3541", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'total_bill + size + OHE smoker'" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipe_df.mean().idxmin()" + ] + }, + { + "cell_type": "markdown", + "id": "7df9ae70", + "metadata": {}, + "source": [ + "Even though the third model has the lowest average validation RMSE, its average validation RMSE is very close to that of the other, simpler models, and as a result we'd likely use the simplest model in practice." + ] + }, + { + "cell_type": "markdown", + "id": "80cf1012", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "

Question 🤔 (Answer at q.dsc80.com)

\n", + "
\n", + "\n", + "- Suppose you have a training dataset with 1000 rows.\n", + "- You want to decide between 20 hyperparameters for a particular model.\n", + "- To do so, you perform 10-fold cross-validation.\n", + "- **How many times is the first row in the training dataset (`X.iloc[0]`) used for training a model?**\n" + ] + }, + { + "cell_type": "markdown", + "id": "1c3b3ad4", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Summary: Generalization" + ] + }, + { + "cell_type": "markdown", + "id": "6a7e9ba8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "1. Split the data into two sets: training and test." + ] + }, + { + "cell_type": "markdown", + "id": "5c3b7200", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "2. Use only the training data when designing, training, and tuning the model.\n", + " - Use $k$-fold cross-validation to choose hyperparameters and estimate the model's ability to generalize.\n", + " - Do not ❌ look at the test data in this step!" + ] + }, + { + "cell_type": "markdown", + "id": "492e6340", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "3. Commit to your final model and train it using the entire training set." + ] + }, + { + "cell_type": "markdown", + "id": "ad9dd3db", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "4. Test the data using the test data. If the performance (e.g. RMSE) is not acceptable, return to step 2." + ] + }, + { + "cell_type": "markdown", + "id": "bc3dc5a7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "5. Finally, train on **all available data** and ship the model to production! 🛳" + ] + }, + { + "cell_type": "markdown", + "id": "662df112", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "🚨 This is the process you should **always** use! 🚨 " + ] + }, + { + "cell_type": "markdown", + "id": "dc44bead", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "

Question 🤔 (Answer at q.dsc80.com)

\n", + "
\n", + " \n", + "Remember, you can always ask questions at [**q.dsc80.com**](https://docs.google.com/forms/d/e/1FAIpQLScWbVZv9hBv-wX-ItKHUVRnkPMMtfJZVfErKE9GS7_8dFcRBQ/viewform)!" + ] + }, + { + "cell_type": "markdown", + "id": "7e72e409", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Decision trees 🌲" + ] + }, + { + "cell_type": "markdown", + "id": "e6646d38", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "\n", + "Decision trees can be used for both regression and classification. We'll start by using them for **classification**." + ] + }, + { + "cell_type": "markdown", + "id": "942f1289", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example: Should I get groceries?\n", + "\n", + "Decision trees make classifications by answering a series of yes/no questions.\n", + "\n", + "**Should I go to Trader Joe's to buy groceries today?**" + ] + }, + { + "cell_type": "markdown", + "id": "09e8a413", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "id": "1d8269fb", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Internal **nodes** of trees involve questions; leaf nodes make predictions $H(x)$." + ] + }, + { + "cell_type": "markdown", + "id": "bc8070e7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "id": "2569dd49", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example: Predicting diabetes" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "f83270fa", + "metadata": {}, + "outputs": [ + { + "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", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
061487235033.60.63501
11856629026.60.35310
28183640023.30.67321
..............................
7655121722311226.20.24300
7661126600030.10.35471
7671937031030.40.32230
\n", + "

768 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", + "0 6 148 72 35 0 33.6 \n", + "1 1 85 66 29 0 26.6 \n", + "2 8 183 64 0 0 23.3 \n", + ".. ... ... ... ... ... ... \n", + "765 5 121 72 23 112 26.2 \n", + "766 1 126 60 0 0 30.1 \n", + "767 1 93 70 31 0 30.4 \n", + "\n", + " DiabetesPedigreeFunction Age Outcome \n", + "0 0.63 50 1 \n", + "1 0.35 31 0 \n", + "2 0.67 32 1 \n", + ".. ... ... ... \n", + "765 0.24 30 0 \n", + "766 0.35 47 1 \n", + "767 0.32 23 0 \n", + "\n", + "[768 rows x 9 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "diabetes = pd.read_csv(Path('data') / 'diabetes.csv')\n", + "display_df(diabetes, cols=9)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "559c4fd6", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 500\n", + "1 268\n", + "Name: Outcome, dtype: int64" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 0 means no diabetes, 1 means yes diabetes.\n", + "diabetes['Outcome'].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "fd3d4eb8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- `'Glucose'` is measured in mg/dL (milligrams per deciliter)." + ] + }, + { + "cell_type": "markdown", + "id": "6c2ea02c", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- `'BMI'` is calculated as $\\text{BMI} = \\frac{\\text{weight (kg)}}{\\left[ \\text{height (m)} \\right]^2}$." + ] + }, + { + "cell_type": "markdown", + "id": "82906445", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Let's use `'Glucose'` and `'BMI'` to predict whether or not a patient has diabetes (`'Outcome'`)." + ] + }, + { + "cell_type": "markdown", + "id": "5f4d2b73", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Exploring the dataset\n", + "\n", + "First, a train-test split:" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "4c699036", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = (\n", + " train_test_split(diabetes[['Glucose', 'BMI']], diabetes['Outcome'], random_state=1)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "fb537748", + "metadata": {}, + "source": [ + "Class 0 (orange) is \"no diabetes\" and class 1 (blue) is \"diabetes\"." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "4b4445bb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = (\n", + " X_train.assign(Outcome=y_train.astype(str))\n", + " .plot(kind='scatter', x='Glucose', y='BMI', color='Outcome', \n", + " color_discrete_map={'0': 'orange', '1': 'blue'},\n", + " title='Relationship between Glucose, BMI, and Diabetes')\n", + ")\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "id": "c2f94087", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Building a decision tree\n", + "\n", + "Let's build a decision tree and interpret the results.\n", + "\n", + "The relevant class is `DecisionTreeClassifier`, from `sklearn.tree`." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "12902788", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.tree import DecisionTreeClassifier" + ] + }, + { + "cell_type": "markdown", + "id": "c4b06503", + "metadata": {}, + "source": [ + "Note that we `fit` it the same way we `fit` earlier estimators.\n", + "\n", + "_You may wonder what `max_depth` and `criterion` do – more on this soon!_" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "ae5efa16", + "metadata": {}, + "outputs": [], + "source": [ + "dt = DecisionTreeClassifier(max_depth=2, criterion='entropy')" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "b37a3d08", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier(criterion='entropy', max_depth=2)" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt.fit(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "id": "70c4fc97", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Visualizing decision trees\n", + "\n", + "Our fit decision tree is like a \"flowchart\", made up of a series of questions.\n", + "\n", + "As before, orange is \"no diabetes\" and blue is \"diabetes\"." + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "b8ba715f", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.tree import plot_tree" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "cbe2313a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T21:27:31.954299\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15, 5))\n", + "plot_tree(dt, feature_names=X_train.columns, class_names=['no db', 'yes db'], \n", + " filled=True, fontsize=15, impurity=False);" + ] + }, + { + "cell_type": "markdown", + "id": "066f6931", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- To **classify a new data point**, we start at the top and answer the first question (i.e. \"Glucose <= 129.5\")." + ] + }, + { + "cell_type": "markdown", + "id": "57c96291", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- If the answer is \"**Yes**\", we move to the **left** branch, otherwise we move to the right branch." + ] + }, + { + "cell_type": "markdown", + "id": "f1432dfa", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We repeat this process until we end up at a leaf node, at which point we predict the most common class in that node.\n", + " - Note that each node has a `value` attribute, which describes the number of **training** individuals of each class that fell in that node." + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "9527edfe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 304\n", + "1 78\n", + "Name: Outcome, dtype: int64" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Note that the left node at depth 2 has a `value` of [304, 78].\n", + "y_train[X_train.query('Glucose <= 129.5').index].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "7a73e4cc", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Evaluating classifiers\n", + "\n", + "The most common evaluation metric in classification is **accuracy**:\n", + "\n", + "$$\\text{accuracy} = \\frac{\\text{# data points classified correctly}}{\\text{# data points}}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "6aef8802", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.765625" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(dt.predict(X_train) == y_train).mean()" + ] + }, + { + "cell_type": "markdown", + "id": "ea2d61d2", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "The `score` method of a classifier computes accuracy by default (just like the `score` method of a regressor computes $R^2$ by default). We want our classifiers to have **high accuracy**." + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "48bde429", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.765625" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Training accuracy – same number as above\n", + "dt.score(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "e4045e13", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7760416666666666" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Testing accuracy\n", + "dt.score(X_test, y_test)" + ] + }, + { + "cell_type": "markdown", + "id": "83213dcc", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Reflection" + ] + }, + { + "cell_type": "markdown", + "id": "47e36ccd", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Decision trees are easily interpretable: it is clear _how_ they make their predictions." + ] + }, + { + "cell_type": "markdown", + "id": "9f48d00b", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- They work with categorical data without needing to use one hot encoding." + ] + }, + { + "cell_type": "markdown", + "id": "0c046af0", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- They also can be used in multi-class classification problems, e.g. when there are more than 2 possible outcomes." + ] + }, + { + "cell_type": "markdown", + "id": "6ee7e7c8", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The _decision boundary_ of a decision tree can be arbitrarily complicated." + ] + }, + { + "cell_type": "markdown", + "id": "adb19142", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **How are decision trees trained?**" + ] + }, + { + "cell_type": "markdown", + "id": "0cda55de", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### How are decision trees trained?\n", + "\n", + "Pseudocode:\n", + "\n", + "```python\n", + "def make_tree(X, y):\n", + " if all points in y have the same label C:\n", + " return Leaf(C)\n", + " f = best splitting feature # e.g. Glucose or BMI\n", + " v = best splitting value # e.g. 129.5\n", + " \n", + " X_left, y_left = X, y where (X[f] <= v)\n", + " X_right, y_right = X, y where (X[f] > v)\n", + " \n", + " left = make_tree(X_left, y_left)\n", + " right = make_tree(X_right, y_right)\n", + " \n", + " return Node(f, v, left, right)\n", + " \n", + "make_tree(X_train, y_train)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "670a105e", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### How do we measure the quality of a split?" + ] + }, + { + "cell_type": "markdown", + "id": "214872f7", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Our pseudocode for training a decision tree relies on finding the best way to \"split\" a node – that is, **the best question to ask** to help us narrow down which class to predict." + ] + }, + { + "cell_type": "markdown", + "id": "9621a012", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "**Intuition**: Suppose the distribution within a node looks like this (colors represent classes):\n", + "\n", + "
🟠🟠🟠🟠🟠🟠🔵🔵🔵🔵🔵🔵🔵
\n", + "\n", + "Split A:\n", + "- \"Yes\": 🟠🟠🟠🔵🔵🔵\n", + "- \"No\": 🟠🟠🟠🔵🔵🔵🔵\n", + "\n", + "Split B:\n", + "- \"Yes\": 🔵🔵🔵🔵🔵🔵\n", + "- \"No\": 🔵🟠🟠🟠🟠🟠🟠\n", + "\n", + "**Which split is \"better\"?**" + ] + }, + { + "cell_type": "markdown", + "id": "1701e7e3", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Split B, because there is \"less uncertainty\" in the resulting nodes in Split B than there is in Split A. Let's try and quantify this!" + ] + }, + { + "cell_type": "markdown", + "id": "c6af8be0", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Entropy" + ] + }, + { + "cell_type": "markdown", + "id": "46462eb4", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- For each class $C$ within a node, define $p_C$ as the proportion of points with that class.\n", + " - For example, the two classes may be \"yes diabetes\" and \"no diabetes\"." + ] + }, + { + "cell_type": "markdown", + "id": "a1414f15", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The **surprise** of drawing a point from the node at random and having it be class $C$ is:\n", + "\n", + "$$\n", + "- \\log_2 p_C\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "73b7095a", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The **entropy** of a node is the average surprise over all classes:\n", + "\n", + "\\begin{align}\n", + "\\text{entropy} &= - \\sum_C p_C \\log_2 p_C\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "id": "dc0d04fd", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The entropy of 🟠🟠🟠🟠🟠🟠🟠🟠 is $ -1 \\log_2(1) = 0 $." + ] + }, + { + "cell_type": "markdown", + "id": "4d3dc897", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The entropy of 🟠🟠🟠🟠🔵🔵🔵🔵 is $ -0.5 \\log_2(0.5) - 0.5 \\log_2(0.5) = 1$." + ] + }, + { + "cell_type": "markdown", + "id": "98afe088", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- The entropy of 🟠🔵🟢🟡🟣 is $ - \\log_2 \\frac{1}{5} = \\log_2(5) $\n", + " - In general, if a node has $n$ points, all with different labels, the entropy of the node is $ \\log_2(n) $." + ] + }, + { + "cell_type": "markdown", + "id": "e28fe85d", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example entropy calculation\n", + "\n", + "Suppose we have:\n", + "\n", + "
🟠🟠🟠🟠🟠🟠🟠🟠🟠🟠🟠🟠🔵🔵🔵🔵🔵🔵
\n", + "\n", + "Split A:\n", + "- \"Yes\": 🟠🟠🟠🟠🟠🟠🔵\n", + "- \"No\": 🟠🟠🟠🟠🟠🟠🔵🔵🔵🔵🔵\n", + "\n", + "Split B:\n", + "- \"Yes\": 🟠🟠🟠🟠🟠🟠🔵🔵🔵\n", + "- \"No\": 🟠🟠🟠🟠🟠🟠🔵🔵🔵" + ] + }, + { + "cell_type": "markdown", + "id": "34bdc7b9", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "We choose the split that has the lowest **weighted entropy**, that is:\n", + "\n", + "$$\\text{entropy of split} = \\frac{\\# \\text{Yes}}{\\# \\text{Yes} + \\# \\text{No}} \\cdot \\text{entropy(Yes)} + \\frac{\\# \\text{No}}{\\# \\text{Yes} + \\# \\text{No}} \\cdot \\text{entropy(No)}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "49e63931", + "metadata": {}, + "outputs": [], + "source": [ + "def entropy(node):\n", + " props = pd.Series(list(node)).value_counts(normalize=True)\n", + " return -sum(props * np.log2(props))" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "31a38b3f", + "metadata": {}, + "outputs": [], + "source": [ + "def weighted_entropy(yes_node, no_node):\n", + " yes_entropy = entropy(yes_node)\n", + " no_entropy = entropy(no_node)\n", + " yes_weight = len(yes_node) / (len(yes_node) + len(no_node))\n", + " return yes_weight * yes_entropy + (1 - yes_weight) * no_entropy" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "e3e62521", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8375578764623786" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split A:\n", + "weighted_entropy(\"🟠🟠🟠🟠🟠🟠🔵\", \"🟠🟠🟠🟠🟠🟠🔵🔵🔵🔵🔵\")" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "55cd0ce5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9182958340544896" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split B:\n", + "weighted_entropy(\"🟠🟠🟠🟠🟠🟠🔵🔵🔵\", \"🟠🟠🟠🟠🟠🟠🔵🔵🔵\")" + ] + }, + { + "cell_type": "markdown", + "id": "f8d910d5", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Split A has the lower weighted entropy, so we'll use it." + ] + }, + { + "cell_type": "markdown", + "id": "61477abd", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Understanding entropy" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "899b6d5e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T21:28:46.136616\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15, 5))\n", + "plot_tree(dt, feature_names=X_train.columns, class_names=['no db', 'yes db'], \n", + " filled=True, fontsize=15, impurity=True);" + ] + }, + { + "cell_type": "markdown", + "id": "3cf312fe", + "metadata": { + "slideshow": { + "slide_type": "" + } + }, + "source": [ + "We can recreate the entropy calculations above! Note that the default `DecisionTreeClassifier` uncertaintly metric _isn't_ entropy; it used entropy because we set `criterion='entropy'` when defining `dt`. (The default metric, [Gini impurity](https://en.wikipedia.org/wiki/Decision_tree_learning#:~:text=Gini%20impurity%20measures%20how%20often,into%20a%20single%20target%20category.), is perfectly fine too!)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "648b1555", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7302263747422792" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The first node at depth 2 has an entropy of 0.73,\n", + "# both told to us above and verified here!\n", + "entropy([0] * 304 + [1] * 78)" + ] + }, + { + "cell_type": "markdown", + "id": "26aa9328", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\n", + " \n", + "Remember, you can always ask questions at [**q.dsc80.com**](https://docs.google.com/forms/d/e/1FAIpQLScWbVZv9hBv-wX-ItKHUVRnkPMMtfJZVfErKE9GS7_8dFcRBQ/viewform)!" + ] + }, + { + "cell_type": "markdown", + "id": "63715f3a", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Tree depth\n", + "\n", + "Decision trees are trained by **recursively** picking the best split until:\n", + "\n", + "- all \"leaf nodes\" only contain training examples from a single class (good), or\n", + "- it is impossible to split leaf nodes any further (not good).\n", + "\n", + "By default, there is no \"maximum depth\" for a decision tree. As such, without restriction, decision trees tend to be very deep." + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "df1a32ea", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier()" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt_no_max = DecisionTreeClassifier()\n", + "dt_no_max.fit(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "id": "c8b7ab31", + "metadata": {}, + "source": [ + "A decision tree fit on our training data has a depth of around 20! (It is so deep that `tree.plot_tree` errors when trying to plot it.)" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "75c06bef", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "21" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt_no_max.tree_.max_depth" + ] + }, + { + "cell_type": "markdown", + "id": "30caeb75", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "At first, this tree seems \"better\" than our tree of depth 2, since its training accuracy is much much higher:" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "811e431b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9913194444444444" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt_no_max.score(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "id": "9413b6fa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.765625" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Depth 2 tree.\n", + "dt.score(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "id": "eaf99510", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "But recall, we truly care about **test set performance**, and this decision tree has **worse accuracy on the test set than our depth 2 tree**." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "67f35a94", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7291666666666666" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt_no_max.score(X_test, y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "7859ac6c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7760416666666666" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Depth 2 tree.\n", + "dt.score(X_test, y_test)" + ] + }, + { + "cell_type": "markdown", + "id": "20e1e183", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Decision trees and overfitting" + ] + }, + { + "cell_type": "markdown", + "id": "4769f0d5", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Decision trees have a tendency to overfit. **Why is that?**" + ] + }, + { + "cell_type": "markdown", + "id": "0466852f", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- Unlike linear classification techniques (like logistic regression or SVMs), **decision trees are non-linear**.\n", + " - They are also \"non-parametric\" – there are no $w^*$s to learn." + ] + }, + { + "cell_type": "markdown", + "id": "3d76fd16", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- While being trained, decision trees ask enough questions to effectively **memorize** the correct response values in the training set. However, the relationships they learn are often overfit to the noise in the training set, and don't generalize well." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "b1e165b3", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig" + ] + }, + { + "cell_type": "markdown", + "id": "1f563e29", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- A decision tree whose depth is not restricted will achieve 100% accuracy on any training set, as long as there are no \"overlapping values\" in the training set.\n", + " - Two values overlap when they have the same features $x$ but different response values $y$ (e.g. if two patients have the same glucose levels and BMI, but one has diabetes and one doesn't)." + ] + }, + { + "cell_type": "markdown", + "id": "8564b552", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- **One solution**: Make the decision tree \"less complex\" by limiting the maximum depth." + ] + }, + { + "cell_type": "markdown", + "id": "87429ef6", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Since `sklearn.tree`'s `plot_tree` can't visualize extremely large decision trees, let's create and visualize some smaller decision trees." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "66549935", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T12:02:56.199761\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T12:02:56.615784\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-27T12:02:58.369793\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.5.1, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "trees = {}\n", + "for d in [2, 4, 8]:\n", + " trees[d] = DecisionTreeClassifier(max_depth=d, random_state=1)\n", + " trees[d].fit(X_train, y_train)\n", + " \n", + " plt.figure(figsize=(15, 5), dpi=100)\n", + " plot_tree(trees[d], feature_names=X_train.columns, class_names=['no db', 'yes db'], \n", + " filled=True, rounded=True, impurity=False)\n", + " \n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "6b9c504a", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "As tree depth increases, complexity increases, and our trees are more prone to overfitting. This means model bias decreases, but model variance increases. \n", + "\n", + "**Question**: What is the \"right\" maximum depth to choose?" + ] + }, + { + "cell_type": "markdown", + "id": "c81ba76e", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Hyperparameters for decision trees" + ] + }, + { + "cell_type": "markdown", + "id": "ce6fcb22", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- `max_depth` is a hyperparameter for `DecisionTreeClassifier`." + ] + }, + { + "cell_type": "markdown", + "id": "bd81005e", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- There are many more hyperparameters we can tweak; look at [the documentation](https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html) for examples.\n", + " - `min_samples_split`: The minimum number of samples required to split an internal node.\n", + " - `criterion`: The function to measure the quality of a split (`'gini'` or `'entropy'`)." + ] + }, + { + "cell_type": "markdown", + "id": "2e2dc4ea", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- To ensure that our model generalizes well to unseen data, we need an efficient technique for trying different combinations of hyperparameters!" + ] + }, + { + "cell_type": "markdown", + "id": "da682d20", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- We'll see that technique next time: `GridSearchCV`." + ] + }, + { + "cell_type": "markdown", + "id": "b30587d9", + "metadata": {}, + "source": [ + "\n", + "\n", + "(Fa23 Final 10.1)\n", + "\n", + "Suppose we fit decision trees of varying depths to predict 'y' using 'x1' and 'x2'. The entire training set is shown in the table below.\n", + "\n", + "
\n", + "\n", + "What is:\n", + "\n", + "1. The entropy of a node containing all the training points.\n", + "1. The lowest possible entropy of a node in a fitted tree with depth 1 (two leaf nodes).\n", + "1. The lowest possible entropy of a node in a fitted tree with depth 2 (four leaf nodes)." + ] + }, + { + "cell_type": "markdown", + "id": "f191f3ca", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Summary, next time" + ] + }, + { + "cell_type": "markdown", + "id": "e08521e0", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Summary\n", + "\n", + "- A hyperparameter is a configuration that we choose before training a model; an important task in machine learning is selecting \"good\" hyperparameters.\n", + "- To choose hyperparameters, we use $k$-fold cross-validation. **This technique is very common, and you are expected to use it in Project 4!**\n", + " - See [Summary: Generalization](#Summary:-Generalization) for more.\n", + "- Decision trees can be used for both regression and classification; we've used them for classification.\n", + " - Decision trees are trained recursively. Each node corresponds to a \"yes\" or \"no\" question.\n", + " - To decide which \"yes\" or \"no\" question to ask, we choose the question with the lowest weighted entropy." + ] + }, + { + "cell_type": "markdown", + "id": "e62eb104", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Next time\n", + "\n", + "- An efficient technique for trying different combinations of hyperparameters.\n", + " - In other words, performing $k$-fold cross-validation _without_ a `for`-loop.\n", + "- Techniques for evaluating classifiers beyond accuracy.\n", + " - You'll need this for Project 4!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.18" + }, + "livereveal": { + "scroll": true + }, + "rise": { + "transition": "none" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/resources/lectures/lec16/lec16_util.py b/resources/lectures/lec16/lec16_util.py new file mode 100644 index 0000000..2c06732 --- /dev/null +++ b/resources/lectures/lec16/lec16_util.py @@ -0,0 +1,127 @@ +import pandas as pd +import numpy as np + +import plotly.graph_objects as go +from plotly.subplots import make_subplots + +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import Pipeline +from sklearn.linear_model import LinearRegression + +from dsc80_utils import * + + +def fit_polys(train_sample, degs): + # Create all three Pipelines. + pls = [ + Pipeline( + [("poly", PolynomialFeatures(d)), ("lin-reg", LinearRegression())] + ) + for d in degs + ] + + # Fit all three Pipelines. + [pl.fit(train_sample[["x"]], train_sample["y"]) for pl in pls] + + # Return the relevant fit Pipelines. + return pls + + +def train_and_plot(train_sample, test_sample, degs, data_name): + pred_funcs = fit_polys(train_sample, degs) + + rmses = [ + np.sqrt( + np.mean( + (pred_funcs[i].predict(test_sample[["x"]]) - test_sample["y"]) + ** 2 + ) + ) + for i in range(len(pred_funcs)) + ] + titles = [ + f"Degree {degs[i]}, RMSE: {np.round(rmses[i], 3)}" + for i in range(len(pred_funcs)) + ] + + fig = make_subplots(rows=1, cols=len(pred_funcs)) + + for i in range(len(pred_funcs)): + fig.add_trace( + go.Scatter( + x=test_sample["x"], + y=test_sample["y"], + name="Actual Data", + mode="markers", + marker={"color": "#4c72b0"}, + ), + row=1, + col=i + 1, + ) + + fig.add_trace( + go.Scatter( + x=test_sample["x"], + y=pred_funcs[i].predict(test_sample[["x"]]), + name="Predictions", + line={"color": "orange", "width": 4}, + ), + row=1, + col=i + 1, + ) + + fig["data"][0]["name"] = data_name + fig["data"][1]["name"] = "Fit Model" + + for i in range(2, len(fig["data"])): + fig["data"][i]["showlegend"] = False + + for i, val in enumerate(titles): + fig['layout'][f'xaxis{"" if i == 0 else i + 1}']['title'] = val + # fig['data'][i]['xaxis_title'] = titles[i] + + fig.update_layout(width=950, height=500) + + return fig + + +def plot_multiple_models(sample_1, sample_2, degs): + sample_1_funcs = fit_polys(sample_1, degs) + sample_2_funcs = fit_polys(sample_2, degs) + + fig = make_subplots( + rows=1, + cols=len(degs), + subplot_titles=[f"Degree {deg}" for deg in degs], + ) + + for i in range(len(degs)): + fig.add_trace( + go.Scatter( + x=sample_1["x"], + y=sample_1_funcs[i].predict(sample_1[["x"]]), + line={"color": "orange", "width": 4}, + ), + row=1, + col=i + 1, + ) + + fig.add_trace( + go.Scatter( + x=sample_2["x"], + y=sample_2_funcs[i].predict(sample_2[["x"]]), + line={"color": "purple", "width": 4}, + ), + row=1, + col=i + 1, + ) + + for i in range(2): + fig["data"][i]["name"] = f"Trained on Sample {i+1}" + + for i in range(2, len(fig["data"])): + fig["data"][i]["showlegend"] = False + + fig.update_layout(width=950, height=500) + + return fig diff --git a/resources/lectures/lec16/rise.css b/resources/lectures/lec16/rise.css new file mode 100644 index 0000000..00d2aa4 --- /dev/null +++ b/resources/lectures/lec16/rise.css @@ -0,0 +1,77 @@ +/* +We want custom styles for RISE slideshows, so we copy this file as rise.css +into each lecture subfolder and RISE will automatically include it. + +Use `make cp-styles` in the project root to copy this file to all lectures +*/ + +.reveal, +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + /* reset slideshow fonts to system default */ + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, + Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; +} + +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + font-weight: bold; +} + +/* Make table styles more similar to pandas */ +.reveal table th, +.reveal table td { + border: none; + padding: 0.5em; +} + +/* Table font is too small by default */ +.rise-enabled .jp-RenderedHTMLCommon table { + font-size: 125%; +} + +/* Make code font bigger */ +.cm-editor { + font-size: 18px; +} + +.rise-enabled .reveal pre { + margin: 0; +} + +/* +RISE sets table font-size to 75%, but this makes pandas tutor tables super +small +*/ +table.wstRoot { + font-size: 18px !important; +} + +.wstRoot td.rowLabel, +.wstRoot td.rowLabelLevelName, +.wstRoot .columnLabel, +.wstRoot .columnLabelLevelName { + font-size: 20px !important; +} + +/* using .sbs in a cell lets us put things side by side */ +.sbs { + display: flex; + gap: 1rem; +} + +.sbs > div { + flex-grow: 1; +} + +.sbs > div:last-child { + max-width: 30%; +}