diff --git a/w1/data01.csv b/w1/data01.csv new file mode 100644 index 0000000..0f88ccb --- /dev/null +++ b/w1/data01.csv @@ -0,0 +1,97 @@ +6.1101,17.592 +5.5277,9.1302 +8.5186,13.662 +7.0032,11.854 +5.8598,6.8233 +8.3829,11.886 +7.4764,4.3483 +8.5781,12 +6.4862,6.5987 +5.0546,3.8166 +5.7107,3.2522 +14.164,15.505 +5.734,3.1551 +8.4084,7.2258 +5.6407,0.71618 +5.3794,3.5129 +6.3654,5.3048 +5.1301,0.56077 +6.4296,3.6518 +7.0708,5.3893 +6.1891,3.1386 +20.27,21.767 +5.4901,4.263 +6.3261,5.1875 +5.5649,3.0825 +18.945,22.638 +12.828,13.501 +10.957,7.0467 +13.176,14.692 +22.203,24.147 +5.2524,-1.22 +6.5894,5.9966 +9.2482,12.134 +5.8918,1.8495 +8.2111,6.5426 +7.9334,4.5623 +8.0959,4.1164 +5.6063,3.3928 +12.836,10.117 +6.3534,5.4974 +5.4069,0.55657 +6.8825,3.9115 +11.708,5.3854 +5.7737,2.4406 +7.8247,6.7318 +7.0931,1.0463 +5.0702,5.1337 +5.8014,1.844 +11.7,8.0043 +5.5416,1.0179 +7.5402,6.7504 +5.3077,1.8396 +7.4239,4.2885 +7.6031,4.9981 +6.3328,1.4233 +6.3589,-1.4211 +6.2742,2.4756 +5.6397,4.6042 +9.3102,3.9624 +9.4536,5.4141 +8.8254,5.1694 +5.1793,-0.74279 +21.279,17.929 +14.908,12.054 +18.959,17.054 +7.2182,4.8852 +8.2951,5.7442 +10.236,7.7754 +5.4994,1.0173 +20.341,20.992 +10.136,6.6799 +7.3345,4.0259 +6.0062,1.2784 +7.2259,3.3411 +5.0269,-2.6807 +6.5479,0.29678 +7.5386,3.8845 +5.0365,5.7014 +10.274,6.7526 +5.1077,2.0576 +5.7292,0.47953 +5.1884,0.20421 +6.3557,0.67861 +9.7687,7.5435 +6.5159,5.3436 +8.5172,4.2415 +9.1802,6.7981 +6.002,0.92695 +5.5204,0.152 +5.0594,2.8214 +5.7077,1.8451 +7.6366,4.2959 +5.8707,7.2029 +5.3054,1.9869 +8.2934,0.14454 +13.394,9.0551 +5.4369,0.61705 diff --git a/w1/data02.tsv b/w1/data02.tsv new file mode 100644 index 0000000..151a3c8 --- /dev/null +++ b/w1/data02.tsv @@ -0,0 +1,1675 @@ +price isNew rooms floor location sqrMetres +476118.0 False 3 1 Centrum 78 +459531.0 False 3 2 Sołacz 62 +411557.0 False 3 0 Sołacz 15 +496416.0 False 4 0 Sołacz 14 +406032.0 False 3 0 Sołacz 15 +450026.0 False 3 1 Naramowice 80 +571229.15 False 2 4 Wilda 39 +325000.0 False 3 1 Grunwald 54 +268229.0 False 2 1 Grunwald 90 +604836.0 False 4 5 Grunwald 40 +232050.0 False 3 0 Nowe 41 +399406.0 False 3 2 Wilda 89 +305739.0 False 2 2 Grunwald 53 +531976.68 False 4 1 Wilda 38 +288465.0 True 2 1 Starołęka 77 +305000.0 True 3 3 Winogrady 47 +410000.0 True 2 5 Rataje 30 +305000.0 True 3 3 Winogrady 48 +289000.0 True 2 2 Zawady 48 +419000.0 True 2 0 Rataje 56 +193000.0 True 2 5 Malta 37 +270000.0 True 3 4 Rataje 48 +360000.0 True 3 2 Rataje 20 +240000.0 True 2 10 Rataje 36 +299000.0 True 2 4 Nowe 47 +298000.0 True 2 4 Wilda 45 +289000.0 True 2 2 Komandoria 48 +300000.0 True 2 1 Podolany 45 +177000.0 True 2 2 Dębiec 25 +404000.0 True 3 2 Rataje 70 +335000.0 True 3 7 Rataje 63 +305000.0 True 3 3 Winogrady 60 +254900.0 True 2 14 Winogrady 80 +348000.0 True 3 9 Rataje 65 +320000.0 True 3 4 Winogrady 50 +284000.0 True 3 4 Rataje 48 +188000.0 True 2 2 Dębiec 61 +477000.0 True 4 3 Piątkowo 70 +390000.0 True 3 2 Podolany 68 +439000.0 True 3 3 Piątkowo 70 +263000.0 True 2 1 Rataje 44 +435000.0 True 2 0 Świerczewo 60 +610000.0 True 3 6 Centrum 77 +714000.0 True 3 2 Malta 84 +295000.0 True 2 2 Naramowice 58 +270000.0 True 3 10 Nowe 48 +259000.0 True 2 0 Rataje 38 +350000.0 True 3 0 Jeżyce 90 +295000.0 True 2 2 Grunwald 60 +338000.0 True 3 1 Jeżyce 37 +420000.0 True 4 3 Jeżyce 78 +565000.0 True 4 0 Sołacz 90 +355000.0 True 2 3 Nowe 90 +330000.0 True 2 4 Chwaliszewo 56 +299000.0 True 2 16 Rataje 49 +270000.0 True 2 2 Sołacz 49 +329000.0 True 3 3 Jeżyce 45 +405000.0 True 3 2 Rataje 70 +270000.0 True 2 2 Winogrady 49 +235000.0 True 2 6 Winogrady 38 +270000.0 True 2 2 Sołacz 49 +365000.0 True 3 2 Jeżyce 50 +325000.0 True 3 1 Nowe 90 +340000.0 True 3 16 Rataje 80 +329000.0 True 3 2 Rataje 59 +429000.0 True 3 4 Dębiec 60 +349000.0 True 3 3 Rataje 63 +329000.0 True 4 4 Nowe 20 +249000.0 True 2 2 Grunwald 46 +260000.0 True 2 0 Rataje 40 +275000.0 True 2 9 Rataje 38 +263000.0 True 2 1 Rataje 44 +269000.0 True 2 9 Rataje 49 +450000.0 True 3 11 Jeżyce 50 +299000.0 True 3 2 Łazarz 80 +330000.0 True 4 2 Rataje 62 +289000.0 True 3 3 Rataje 48 +750000.0 True 4 0 Naramowice 133 +635000.0 True 4 3 Grunwald 70 +279000.0 True 2 1 Naramowice 60 +399900.0 False 3 1 Grunwald 34 +255000.0 True 2 1 Winogrady 38 +239000.0 True 2 1 Grunwald 36 +229000.0 True 2 2 Wilda 50 +348000.0 True 3 9 Rataje 65 +384000.0 True 4 0 Grunwald 60 +232034.0 True 2 1 Starołęka 86 +270000.0 True 3 4 Rataje 48 +350000.0 False 5 1 Komorniki 97 +240000.0 True 2 16 Rataje 36 +619000.0 True 4 0 Jeżyce 99 +295000.0 True 3 4 Grunwald 45 +349000.0 True 3 1 Grunwald 57 +279000.0 True 3 0 Winogrady 48 +269000.0 True 3 3 Winogrady 48 +250000.0 True 2 6 Winogrady 42 +270000.0 True 2 4 Jeżyce 43 +285383.0 False 5 4 Winogrady 37 +348750.0 False 2 3 Stare 47 +240157.0 False 2 0 Winogrady 37 +285678.0 False 2 2 Winogrady 42 +272800.0 False 2 5 Winogrady 44 +267702.0 False 2 2 Grunwald 45 +327584.0 False 3 3 Grunwald 21 +235000.0 False 2 3 Winogrady 38 +286445.0 False 2 2 Winogrady 49 +156085.0 False 2 2 Starołęka 30 +282000.0 False 3 3 Winogrady 57 +365000.0 True 4 4 Grunwald 64 +519000.0 True 3 1 Rataje 50 +779000.0 True 3 2 Stare 113 +499000.0 True 4 2 Wilda 120 +255000.0 True 3 0 Grunwald 53 +270000.0 True 3 4 Rataje 48 +257000.0 True 2 5 Rataje 49 +499000.0 True 2 2 Stare 43 +399000.0 True 3 1 Nowe 62 +149000.0 True 3 5 Nowe 56 +435000.0 True 3 5 Wilda 70 +400000.0 False 4 0 Grunwald 81 +389000.0 True 3 3 Stare 49 +299000.0 True 3 6 Jeżyce 70 +325000.0 True 3 3 Łazarz 62 +399000.0 True 3 1 Grunwald 65 +279000.0 True 2 1 Naramowice 60 +334117.0 False 3 2 Grunwald 63 +364620.0 False 3 2 Grunwald 80 +529900.0 True 4 1 Podolany 103 +369000.0 True 4 3 Grunwald 74 +329000.0 True 2 2 Jeżyce 45 +320000.0 True 3 4 Winogrady 54 +275000.0 True 2 13 Rataje 80 +295120.0 False 2 1 Winogrady 60 +374000.0 True 3 4 Wilczak 30 +288000.0 True 3 4 Winogrady 30 +340000.0 True 3 1 Grunwald 70 +329000.0 True 3 3 Piątkowo 60 +290000.0 True 2 6 Sołacz 49 +229000.0 True 4 3 Wilda 54 +339000.0 True 3 1 Grunwald 65 +288000.0 True 3 4 Winogrady 30 +280000.0 True 3 1 Jeżyce 58 +295000.0 True 2 2 Naramowice 50 +264250.0 False 2 2 Jeżyce 29 +308039.0 False 2 0 Winogrady 21 +285200.0 False 2 1 Winogrady 46 +346624.0 False 3 1 Ogrody 54 +313566.0 False 3 1 Jeżyce 51 +290970.0 False 2 0 Winogrady 60 +304000.0 False 3 5 Winogrady 29 +225316.0 False 2 0 Starołęka 33 +186600.0 False 2 2 Starołęka 62 +336474.0 False 3 4 Winogrady 27 +299513.0 False 2 1 Starołęka 85 +257000.0 False 3 1 Winogrady 76 +244071.0 False 2 2 Starołęka 52 +291838.0 False 2 0 Starołęka 55 +322276.0 False 2 3 Winogrady 98 +280860.0 False 2 1 Winogrady 30 +297600.0 False 2 3 Winogrady 50 +349668.0 False 2 1 Garbary 44 +321656.0 False 2 1 Winogrady 88 +302176.0 False 2 2 Malta 45 +199000.0 True 2 1 Grunwald 33 +363000.0 True 3 2 Grunwald 77 +375000.0 True 3 4 Winogrady 65 +287000.0 True 2 10 Winogrady 47 +230000.0 True 2 1 Dębiec 37 +365000.0 True 3 2 Rataje 65 +389000.0 True 3 1 Naramowice 20 +325000.0 True 2 2 Grunwald 35 +391729.0 False 3 2 Winogrady 21 +479000.0 True 3 3 Grunwald 23 +249000.0 True 2 10 Grunwald 42 +286000.0 True 2 5 Centrum 49 +313000.0 True 2 4 Piątkowo 49 +409000.0 True 3 1 Rataje 62 +255000.0 True 2 1 Nowe 49 +270000.0 True 3 4 Jeżyce 50 +699000.0 True 2 1 Grunwald 68 +330000.0 True 2 3 Wilda 53 +335000.0 True 3 16 Rataje 80 +488000.0 True 3 3 Grunwald 70 +339000.0 True 3 1 Jeżyce 65 +410000.0 True 3 5 Grunwald 81 +269000.0 True 2 4 Naramowice 43 +710000.0 True 5 7 Grunwald 91 +359600.0 False 3 5 Grunwald 58 +249441.0 False 2 2 Jeżyce 50 +440000.0 True 4 1 Grunwald 95 +389000.0 True 3 2 Jeżyce 50 +590000.0 True 4 3 Rataje 90 +706655.0 False 3 2 Nowe 45 +269000.0 True 2 6 Rataje 70 +240000.0 True 2 16 Rataje 36 +310000.0 True 2 2 Centrum 53 +240000.0 False 3 0 Nowe 64 +230000.0 True 2 0 Grunwald 52 +770000.0 True 4 1 Centrum 142 +249000.0 True 2 4 Rataje 44 +350000.0 True 2 1 Rataje 54 +313000.0 True 2 4 Piątkowo 49 +310000.0 True 2 2 Śródka 72 +569000.0 True 4 0 Wilda 50 +460000.0 True 4 2 Bonin 87 +485000.0 True 2 2 Centrum 55 +286000.0 True 2 5 Centrum 80 +364000.0 True 3 1 Grunwald 62 +299000.0 True 3 3 Wilda 66 +365000.0 True 2 5 Wilda 30 +237000.0 True 2 10 Grunwald 38 +425000.0 True 4 6 Rataje 85 +332160.0 True 2 1 Grunwald 60 +230000.0 True 2 1 Dębiec 37 +249000.0 True 2 10 Grunwald 42 +270000.0 True 3 4 Rataje 48 +350000.0 True 2 4 Jeżyce 56 +309000.0 True 2 3 Grunwald 56 +283500.0 True 2 0 Stare 50 +177595.0 False 2 0 Nowe 29 +339000.0 True 2 2 Centrum 53 +399000.0 True 3 1 Grunwald 65 +329000.0 True 3 3 Piątkowo 60 +706655.0 False 3 2 Nowe 45 +289000.0 True 2 2 Jeżyce 42 +389000.0 True 3 0 Wilda 67 +375000.0 True 3 4 Wilda 40 +319000.0 True 3 2 Wilda 66 +310000.0 True 3 0 Grunwald 60 +252000.0 True 2 12 Winogrady 47 +249147.0 False 2 4 Zawady 71 +649000.0 True 4 0 Winogrady 80 +204000.0 True 2 0 Grunwald 37 +389000.0 True 3 4 Rataje 84 +369000.0 True 3 0 Grunwald 87 +300000.0 True 2 1 Naramowice 52 +470000.0 True 4 2 Sołacz 87 +326000.0 True 2 1 Winogrady 39 +655000.0 True 3 4 Stare 60 +348000.0 True 3 9 Rataje 65 +399000.0 True 3 1 Bonin 68 +390000.0 True 3 2 Podolany 68 +265000.0 True 2 0 Centrum 40 +279999.0 True 3 4 Winogrady 54 +280000.0 True 3 9 Jeżyce 49 +419000.0 True 2 0 Malta 56 +249000.0 True 2 4 Grunwald 38 +259000.0 True 2 3 Żegrze 49 +270000.0 True 2 0 Jeżyce 20 +349000.0 True 3 2 Grunwald 39 +349000.0 True 2 3 Piątkowo 60 +548000.0 True 3 1 Grunwald 84 +249000.0 True 2 10 Grunwald 43 +549000.0 True 3 2 Dąbrowskiego 106 +290000.0 True 2 6 Piątkowo 49 +442827.0 False 4 2 Starołęka 14 +530000.0 True 3 0 Grunwald 63 +279000.0 True 3 1 Plewiska 50 +410000.0 True 2 5 Rataje 50 +396000.0 True 3 1 Wilda 50 +279000.0 True 2 1 Stare 60 +399000.0 True 3 4 Piątkowo 16 +329000.0 True 2 2 Jeżyce 45 +270000.0 True 3 10 Grunwald 52 +360000.0 True 2 0 Centrum 57 +255000.0 True 3 2 Grunwald 20 +395000.0 True 3 1 Grunwald 100 +139000.0 True 2 0 Grunwald 49 +320000.0 True 3 4 Winogrady 50 +899000.0 True 4 0 Stare 100 +237000.0 True 2 2 Dębiec 44 +425000.0 True 3 1 Rataje 70 +315000.0 True 2 0 Winogrady 53 +485000.0 True 2 2 Centrum 55 +365000.0 True 3 1 Żegrze 88 +345000.0 True 3 1 Winogrady 17 +319000.0 True 3 3 Rataje 50 +265000.0 True 2 0 Dębiec 50 +978000.0 True 4 5 Centrum 106 +489000.0 True 2 5 Centrum 53 +382280.0 True 3 3 Centrum 80 +267900.0 True 2 6 Winogrady 30 +259000.0 True 2 3 Łazarz 47 +280000.0 True 2 4 Rataje 63 +250000.0 True 4 1 Wilda 31 +340000.0 True 2 2 Naramowice 16 +160000.0 True 2 0 Podolany 27 +390000.0 True 2 0 Centrum 60 +469000.0 True 2 1 Winogrady 30 +429000.0 True 3 4 Dębiec 50 +270000.0 True 2 2 Naramowice 52 +330000.0 True 3 0 Jeżyce 78 +279000.0 True 2 1 Stare 60 +289000.0 True 2 6 Jeżyce 49 +449000.0 True 4 1 Górczyn 90 +499000.0 True 4 4 Stare 85 +270000.0 True 2 16 Rataje 49 +295000.0 True 2 0 Stare 44 +210000.0 True 2 2 Dębiec 40 +519000.0 True 3 1 Rataje 50 +490000.0 True 4 0 Naramowice 40 +300000.0 True 2 1 Stare 23 +325000.0 True 3 4 Jeżyce 30 +238000.0 True 2 13 Rataje 49 +329000.0 True 3 1 Piątkowo 63 +270000.0 True 2 0 Piątkowo 43 +395000.0 True 3 0 Grunwald 70 +330000.0 True 2 1 Jeżyce 50 +439000.0 True 4 2 Grunwald 89 +259500.0 True 2 0 Grunwald 55 +355000.0 True 2 4 Jeżyce 56 +282000.0 True 2 1 Jeżyce 38 +335000.0 True 2 2 Górczyn 52 +375000.0 True 2 1 Grunwald 51 +399000.0 True 3 4 Stare 70 +474000.0 False 4 0 Plewiska 30 +309000.0 True 2 0 Grunwald 55 +379000.0 True 3 0 Rataje 57 +399000.0 True 3 1 Nowe 62 +570000.0 True 3 5 Grunwald 60 +105000.0 True 2 3 Nowe 50 +296000.0 True 3 6 Dębiec 63 +326000.0 True 2 1 Winiary 39 +1725000.0 True 3 0 Stare 136 +350550.0 True 3 4 Stare 50 +252000.0 True 2 12 Winogrady 47 +368000.0 True 2 2 Wilda 67 +549000.0 True 3 3 Grunwald 60 +409000.0 True 3 1 Rataje 90 +362000.0 True 2 1 Centrum 50 +250000.0 True 3 2 Nowe 80 +399900.0 True 4 2 Nowe 66 +429000.0 True 3 4 Wilda 60 +370000.0 True 2 0 Górczyn 65 +274000.0 True 2 1 Górczyn 13 +239000.0 True 2 3 Piątkowo 59 +259000.0 True 2 2 Rataje 90 +246330.0 True 2 0 Wilda 55 +289000.0 True 3 4 Winogrady 48 +100000.0 True 3 4 Stare 70 +270000.0 True 2 2 Sołacz 60 +430000.0 True 2 3 Grunwald 70 +355000.0 True 2 0 Podolany 93 +287000.0 True 2 11 Winogrady 47 +1200000.0 False 5 0 Starołęka 193 +305000.0 True 3 3 Winogrady 48 +329000.0 True 3 3 Piątkowo 60 +315000.0 True 3 0 Piątkowo 63 +267705.0 True 2 2 Grunwald 45 +247707.0 True 2 1 Jeżyce 50 +388750.0 True 4 5 Winogrady 65 +371931.0 True 4 4 Jeżyce 57 +232408.0 True 2 0 Stare 38 +247708.0 True 2 1 Jeżyce 50 +242731.0 True 2 0 Jeżyce 50 +247710.0 True 2 1 Jeżyce 50 +339200.0 True 3 1 Jeżyce 53 +349100.0 True 4 0 Rataje 85 +296277.0 True 3 1 Stare 49 +333694.0 True 3 1 Jeżyce 68 +250000.0 True 2 0 Naramowice 40 +200000.0 True 2 0 Rataje 30 +470000.0 True 4 2 Sołacz 87 +370000.0 True 4 4 Piątkowo 76 +315000.0 True 3 0 Piątkowo 60 +287000.0 True 2 10 Winogrady 80 +230000.0 True 2 3 Nowe 47 +900000.0 True 3 3 Centrum 120 +399000.0 True 3 4 Piątkowo 16 +250000.0 True 2 6 Sołacz 71 +318000.0 True 2 4 Piątkowo 20 +269000.0 True 2 9 Rataje 49 +239592.0 True 2 5 Grunwald 59 +307881.0 True 3 0 Grunwald 16 +319055.0 True 3 3 Grunwald 21 +267702.0 True 2 2 Grunwald 22 +299000.0 True 3 2 Dębiec 70 +435000.0 True 3 0 Stare 25 +690000.0 True 2 0 Grunwald 60 +204450.0 True 2 1 Nowe 33 +228144.0 True 3 2 Nowe 56 +285383.0 True 2 1 Winogrady 37 +391729.0 True 3 2 Winogrady 21 +330000.0 True 3 0 Jeżyce 78 +269984.0 True 3 4 Winogrady 76 +344141.0 True 2 8 Winogrady 47 +318384.0 True 3 6 Jeżyce 24 +249641.0 True 2 0 Jeżyce 54 +177000.0 True 2 2 Dębiec 33 +325000.0 True 2 2 Jeżyce 56 +429000.0 True 3 4 Rataje 70 +380000.0 True 3 3 Dolna 67 +448995.0 True 2 3 Jeżyce 66 +350000.0 True 2 3 Jeżyce 70 +269000.0 True 2 2 Dolna 38 +620000.0 True 3 1 Grunwald 96 +275000.0 True 2 0 Łazarz 52 +440000.0 True 2 0 Centrum 40 +505877.0 False 2 5 Centrum 22 +886860.0 False 3 5 Centrum 80 +502136.0 False 2 5 Centrum 77 +798966.0 False 2 5 Centrum 33 +561663.0 False 3 4 Centrum 69 +396248.0 False 2 4 Centrum 77 +368019.0 False 2 4 Centrum 18 +542141.0 False 3 4 Centrum 53 +698508.0 False 4 4 Centrum 59 +394787.0 False 2 4 Centrum 71 +597184.0 False 3 4 Centrum 61 +354177.0 False 2 3 Centrum 25 +353537.0 False 2 3 Centrum 17 +509468.0 False 3 3 Centrum 53 +652026.0 False 4 3 Centrum 89 +353457.0 False 2 3 Centrum 16 +356818.0 False 2 3 Centrum 58 +496573.0 False 3 2 Centrum 78 +349668.0 False 2 2 Centrum 15 +481903.0 False 3 2 Centrum 53 +309978.0 False 2 2 Centrum 16 +389528.0 False 2 2 Centrum 87 +341776.0 False 2 2 Centrum 14 +374216.0 False 2 2 Centrum 71 +534523.0 False 3 2 Centrum 62 +377418.0 False 2 1 Centrum 87 +330255.0 False 2 1 Centrum 14 +505032.0 False 3 1 Centrum 62 +375000.0 True 4 0 Grunwald 67 +375000.0 True 5 0 Grunwald 67 +363000.0 True 3 2 Grunwald 73 +495000.0 True 3 1 Grunwald 40 +270000.0 True 3 1 Starołęka 30 +365000.0 True 2 2 Grunwald 51 +450000.0 True 4 1 Grunwald 113 +190520.0 True 2 3 Nowe 30 +228492.0 True 2 1 Nowe 93 +169620.0 True 2 1 Nowe 55 +145000.0 True 2 1 Nowe 54 +270000.0 True 3 4 Rataje 48 +370000.0 True 4 4 Piątkowo 76 +289000.0 True 3 3 Grunwald 52 +585000.0 True 3 4 Jeżyce 59 +335000.0 True 3 7 Rataje 63 +329000.0 True 3 3 Piątkowo 60 +269000.0 True 2 0 Grunwald 46 +298000.0 True 2 4 Wilda 45 +398000.0 True 3 1 Grunwald 70 +395000.0 True 4 0 Grunwald 60 +389000.0 True 3 0 Wilda 96 +429000.0 True 3 4 Wilda 47 +715000.0 True 3 1 Wilda 95 +460000.0 True 2 2 Centrum 56 +555000.0 True 4 0 Stare 20 +655000.0 True 3 4 Stare 60 +188000.0 True 2 3 Stare 70 +390000.0 True 2 0 Nowe 61 +425000.0 True 2 9 Nowe 50 +359400.0 True 3 1 Stare 72 +497400.0 True 3 0 Wilda 48 +604395.0 True 5 1 Wilda 31 +330615.0 True 2 2 Stare 79 +290970.0 True 2 0 Stare 60 +283340.0 True 2 0 Stare 70 +282880.0 True 2 3 Stare 20 +339500.0 True 3 7 Nowe 80 +850000.0 True 2 7 Stare 69 +380000.0 True 4 6 Stare 90 +800000.0 True 4 3 Stare 103 +514000.0 True 4 1 Jeżyce 120 +290000.0 True 2 1 Stare 42 +640000.0 True 3 2 Stare 47 +1140000.0 True 6 0 Stare 40 +561000.0 True 2 4 Stare 50 +400000.0 True 2 1 Świerczewo 60 +220000.0 True 2 4 Grunwald 43 +490000.0 True 3 1 Jeżyce 115 +298000.0 True 2 4 Wilda 45 +449000.0 True 2 3 Jeżyce 60 +237000.0 True 2 2 Dębiec 44 +480000.0 True 2 2 Garbary 56 +298000.0 True 2 4 Wilda 37 +255000.0 True 2 3 Wilda 52 +480000.0 True 3 0 Stare 30 +451000.0 True 3 2 Wilda 30 +370000.0 True 3 4 Stare 84 +529000.0 True 3 3 Centrum 108 +360000.0 True 4 0 Grunwald 66 +419000.0 True 4 0 Kopernika 60 +350000.0 True 2 0 Stare 50 +348000.0 True 3 9 Rataje 65 +525000.0 True 4 3 Nowe 88 +450000.0 True 6 4 Wilda 90 +449000.0 True 4 2 Grunwald 90 +420000.0 True 3 0 Winogrady 58 +360000.0 True 3 3 Stare 63 +1000000.0 True 4 1 Centrum 103 +649400.0 False 3 4 Rataje 50 +311570.0 False 2 4 Rataje 51 +383928.0 False 3 3 Rataje 46 +309741.0 False 2 3 Rataje 89 +359000.0 True 2 0 Grunwald 46 +295734.0 False 2 3 Rataje 86 +384540.0 False 3 3 Rataje 55 +480000.0 True 3 1 Grunwald 40 +380091.0 False 3 2 Rataje 73 +293352.0 False 2 1 Rataje 14 +307156.0 False 2 1 Rataje 17 +293352.0 False 2 1 Rataje 14 +535000.0 True 2 3 Łazarz 59 +375606.0 False 3 1 Rataje 91 +293488.0 False 3 0 Rataje 94 +307428.0 False 2 0 Rataje 21 +293488.0 False 2 0 Rataje 16 +375408.0 False 3 0 Rataje 88 +299000.0 True 2 0 Piątkowo 47 +243828.0 False 2 4 Podolany 68 +348835.0 False 3 3 Podolany 63 +256171.0 False 2 3 Podolany 79 +298116.0 False 2 3 Podolany 96 +306247.0 False 2 3 Podolany 35 +337602.0 False 3 3 Podolany 71 +244647.0 False 2 3 Podolany 82 +641000.0 True 3 3 Łazarz 75 +277000.0 True 2 10 Nowe 80 +549000.0 True 4 0 Piątkowo 115 +499000.0 True 3 1 Suchy 95 +539000.0 True 4 2 Jeżyce 110 +450000.0 True 2 2 Grunwald 70 +242000.0 True 2 1 Grunwald 52 +310000.0 True 3 4 Jeżyce 50 +259000.0 True 2 3 Winogrady 40 +475000.0 True 3 4 Wilda 66 +120000.0 True 3 3 Grunwald 35 +270000.0 True 3 4 Rataje 48 +1850000.0 True 5 1 Grunwald 196 +350000.0 True 4 4 Grunwald 50 +280000.0 True 4 4 Grunwald 40 +490000.0 True 4 4 Grunwald 70 +495000.0 True 3 1 Naramowice 70 +545000.0 True 3 0 Rataje 71 +310000.0 True 3 10 Rataje 80 +215000.0 True 2 0 Wilda 36 +295000.0 True 2 4 Garbary 33 +200000.0 True 2 8 Dębiec 50 +359900.0 True 4 4 Rataje 74 +320000.0 True 3 3 Jeżyce 70 +300000.0 True 2 1 Naramowice 23 +535000.0 True 4 2 Wilda 120 +620000.0 True 3 2 Naramowice 60 +597000.0 True 3 0 Naramowice 60 +399000.0 True 3 0 Winogrady 62 +390000.0 True 3 0 Grunwald 75 +310000.0 True 2 1 Rataje 30 +365000.0 True 3 1 Rataje 88 +382000.0 True 3 3 Centrum 30 +299000.0 True 2 2 Sołacz 58 +299000.0 True 2 2 Sołacz 58 +499000.0 True 3 1 Grunwald 64 +549000.0 True 3 2 Jeżyce 106 +549000.0 True 3 2 Jeżyce 106 +413000.0 True 3 3 Łazarz 46 +259000.0 True 2 1 Jeżyce 47 +949000.0 True 3 4 Śródka 98 +949000.0 True 3 4 Śródka 98 +270000.0 True 3 4 Rataje 48 +348000.0 True 3 9 Nowe 65 +260000.0 True 2 0 Ławica 60 +370000.0 True 4 4 Stare 60 +399000.0 True 3 4 Stare 16 +369000.0 True 4 3 Grunwald 74 +224000.0 True 2 0 Łazarz 50 +260000.0 True 3 4 Grunwald 49 +315000.0 True 3 0 Piątkowo 60 +379999.0 True 3 3 Wilda 67 +350000.0 True 2 1 Rataje 63 +270000.0 True 2 4 Grunwald 38 +439000.0 True 4 2 Łazarz 92 +519000.0 True 3 1 Rataje 50 +290000.0 True 2 2 Dębiec 66 +326000.0 True 2 4 Łazarz 80 +240000.0 True 2 3 Grunwald 42 +389000.0 True 3 0 Wilda 67 +420000.0 True 3 2 Dębiec 91 +279000.0 True 2 1 Naramowice 51 +220000.0 True 2 4 Grunwald 43 +465360.0 True 2 2 Grunwald 17 +777280.0 True 3 3 Grunwald 16 +1000000.0 True 4 1 Stare 146 +350000.0 True 2 3 Rataje 50 +469000.0 True 4 2 Jeżyce 87 +253498.0 True 2 5 Jeżyce 38 +334752.0 True 3 3 Jeżyce 51 +374792.0 True 4 5 Jeżyce 57 +329000.0 True 3 4 Rataje 63 +349668.0 False 2 2 Stare 15 +297420.0 False 2 3 Grunwald 24 +297420.0 False 2 3 Grunwald 24 +220000.0 True 2 1 Jeżyce 60 +399000.0 True 3 1 Sołacz 66 +488000.0 True 3 3 Grunwald 70 +220000.0 True 2 4 Grunwald 43 +390000.0 True 3 2 Podolany 68 +299000.0 True 2 0 Wilda 52 +234000.0 True 2 0 Wilda 37 +375000.0 True 3 2 Wilda 90 +820000.0 True 4 0 Centrum 163 +320000.0 True 3 4 Winogrady 50 +420000.0 False 4 0 Grunwald 82 +495000.0 True 4 1 Stare 98 +279000.0 True 2 1 Stare 52 +620000.0 True 3 1 Stare 99 +329000.0 True 2 1 Stare 54 +699000.0 True 3 2 Stare 92 +487000.0 True 3 0 Stare 73 +375000.0 True 3 0 Naramowice 69 +269000.0 True 2 9 Rataje 49 +220000.0 True 2 4 Grunwald 43 +230000.0 True 2 1 Dębiec 38 +435000.0 True 2 0 Górczyn 60 +390000.0 True 3 2 Podolany 68 +446240.0 True 2 1 Grunwald 78 +390000.0 True 3 2 Podolany 68 +619000.0 True 3 2 Winogrady 100 +240000.0 True 2 3 Dębiec 50 +270000.0 True 3 4 Rataje 48 +244968.0 True 2 0 Stare 42 +285679.0 True 2 4 Winogrady 48 +260000.0 True 2 6 Winiary 70 +585000.0 True 4 1 Piątkowo 100 +329000.0 True 3 1 Piątkowo 63 +269000.0 True 2 0 Naramowice 46 +348000.0 True 3 9 Rataje 65 +270000.0 True 3 4 Rataje 48 +359605.0 True 3 5 Grunwald 58 +375529.0 False 2 3 Stare 71 +247705.0 False 2 1 Podolany 74 +247705.0 False 2 1 Piątkowo 74 +156085.0 False 2 4 Głuszyna 45 +411684.0 False 3 3 Winogrady 17 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +249733.0 False 2 0 Ogrody 54 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +460499.0 False 3 1 Stare 51 +270000.0 True 3 0 Grunwald 48 +350000.0 True 4 1 Wilda 80 +350000.0 True 4 4 Winogrady 90 +323000.0 True 4 0 Winogrady 56 +649000.0 True 4 4 Centrum 109 +341704.0 True 3 8 Grunwald 56 +297421.0 True 2 3 Grunwald 50 +245832.0 True 2 2 Grunwald 40 +285384.0 True 2 4 Winogrady 48 +240000.0 True 2 1 Wilda 40 +345865.0 True 3 2 Jeżyce 21 +261000.0 True 2 2 Jeżyce 57 +400000.0 True 3 2 Jeżyce 74 +400000.0 True 2 2 Jeżyce 74 +348000.0 True 3 9 Rataje 65 +369000.0 True 2 2 Grunwald 51 +339000.0 True 3 0 Rataje 63 +250000.0 True 2 4 Rataje 23 +245000.0 True 2 4 Rataje 44 +240000.0 True 2 2 Dębiec 48 +262000.0 True 2 4 Grunwald 60 +395000.0 True 4 1 Smochowice 69 +313000.0 True 2 4 Piątkowo 50 +409000.0 True 3 1 Malta 90 +599000.0 True 3 3 Grunwald 83 +289000.0 True 2 2 Jeżyce 42 +390000.0 True 3 3 Naramowice 48 +313000.0 True 2 4 Piątkowo 49 +375000.0 True 4 2 Centrum 72 +350000.0 True 3 1 Naramowice 51 +304140.0 False 3 5 Winogrady 18 +353275.0 False 2 14 Grunwald 74 +244071.0 False 2 1 Nowe 93 +348000.0 True 3 9 Rataje 65 +320000.0 True 3 4 Winogrady 53 +348000.0 True 3 9 Rataje 65 +348000.0 True 3 9 Rataje 65 +230000.0 True 2 1 Dębiec 37 +238000.0 True 2 2 Grunwald 37 +392000.0 True 4 0 Piątkowo 74 +380000.0 True 4 2 Piątkowo 74 +329000.0 True 2 4 Górczyn 20 +347000.0 True 3 1 Naramowice 47 +259900.0 True 2 6 Winogrady 38 +590000.0 True 5 3 Piątkowo 125 +320000.0 True 2 1 Naramowice 53 +432000.0 True 2 5 Centrum 40 +435000.0 True 3 1 Piątkowo 84 +389000.0 True 2 1 Podolany 46 +799999.0 True 3 1 Sołacz 90 +310000.0 True 3 3 Piątkowo 60 +260000.0 True 3 0 Jeżyce 74 +266000.0 True 2 2 Piątkowo 49 +316498.0 True 2 2 Stare 77 +519000.0 True 3 1 Rataje 50 +442150.0 True 2 2 Stare 75 +395000.0 True 3 2 Centrum 74 +599000.0 True 2 1 Centrum 70 +459000.0 True 2 1 Centrum 48 +339000.0 True 3 1 Winogrady 51 +375000.0 True 3 2 Jeżyce 50 +289000.0 True 2 4 Ogrody 41 +230000.0 True 2 5 Winogrady 60 +440000.0 True 2 4 Centrum 55 +599000.0 True 3 2 Centrum 80 +343200.0 True 3 4 Winogrady 52 +385000.0 True 2 1 Centrum 60 +300000.0 True 3 3 Centrum 88 +529000.0 True 4 4 Centrum 85 +349000.0 True 3 3 Wilda 82 +405000.0 True 4 2 Nowe 71 +355000.0 True 2 4 Jeżyce 89 +235000.0 True 2 0 Górczyn 50 +495000.0 True 4 1 Grunwald 64 +285000.0 True 2 3 Wilda 60 +385000.0 True 3 4 Łazarz 82 +379999.0 True 3 3 Wilda 67 +370000.0 True 2 13 Rataje 67 +450000.0 True 3 0 Naramowice 71 +479000.0 True 3 3 Górczyn 70 +439000.0 True 4 2 Łazarz 40 +385000.0 True 3 0 Łazarz 80 +550000.0 True 4 1 Łazarz 50 +260000.0 True 3 4 Grunwald 47 +755000.0 True 4 2 Łazarz 90 +319000.0 True 2 0 Górczyn 54 +380000.0 True 3 1 Łazarz 30 +530000.0 True 3 1 Piątkowo 76 +900000.0 True 3 2 Grunwald 112 +375000.0 True 3 8 Piątkowo 75 +576500.0 True 2 5 Centrum 50 +576500.0 True 2 5 Chwaliszewo 50 +438503.0 True 3 2 Centrum 57 +354454.0 False 2 3 Grunwald 17 +489780.0 False 4 2 Górczyn 63 +491520.0 False 4 1 Górczyn 92 +273875.5 False 2 1 Grunwald 13 +267000.0 True 2 2 Dębiec 35 +260000.0 True 2 2 Piątkowo 90 +587000.0 True 4 3 Łazarz 38 +460000.0 True 3 1 Naramowice 110 +695000.0 True 4 1 Rataje 70 +506657.0 True 4 11 Grunwald 73 +298250.0 True 2 5 Grunwald 38 +297421.0 True 2 2 Grunwald 24 +275000.0 True 2 9 Nowe 38 +267000.0 True 2 4 Nowe 70 +447000.0 True 3 4 Grunwald 20 +349900.0 True 3 4 Wilda 42 +360000.0 True 4 0 Centrum 66 +525000.0 True 4 3 Jeżyce 70 +450000.0 True 3 2 Strzeszyn 70 +690000.0 True 4 5 Górczyn 25 +334000.0 True 2 4 Sołacz 50 +240000.0 True 2 3 Jeżyce 43 +307000.0 True 3 2 Rataje 48 +307000.0 True 2 2 Rataje 48 +345000.0 True 3 8 Nowe 63 +333694.0 False 3 1 Podolany 32 +333694.0 False 3 1 Piątkowo 38 +299000.0 True 3 0 Grunwald 53 +389000.0 True 3 3 Stare 49 +310000.0 True 2 2 Centrum 74 +220000.0 True 2 0 Grunwald 50 +332800.0 True 2 1 Grunwald 52 +240000.0 True 2 2 Stare 38 +323206.0 False 2 2 Naramowice 50 +558745.0 False 3 3 Stare 62 +290000.0 True 2 6 Jeżyce 49 +285000.0 True 2 3 Piątkowo 49 +365000.0 True 3 1 Rataje 67 +263000.0 True 2 1 Rataje 47 +289000.0 True 2 2 Jeżyce 42 +265000.0 True 3 4 Grunwald 48 +310000.0 True 2 1 Nowe 40 +300000.0 True 3 2 Winogrady 48 +565964.0 True 2 5 Centrum 49 +747000.0 True 3 7 Rataje 84 +275000.0 True 2 0 Naramowice 50 +405000.0 True 4 2 Rataje 71 +491520.0 True 4 1 Górczyn 92 +363258.0 True 2 1 Górczyn 59 +305739.0 True 2 2 Górczyn 53 +399000.0 True 3 4 Piątkowo 69 +280000.0 True 2 1 Sołacz 38 +299900.0 True 2 0 Dębiec 48 +420000.0 True 2 3 Naramowice 59 +650000.0 True 4 8 Rataje 100 +329000.0 True 3 3 Wilda 82 +355000.0 True 3 2 Piątkowo 66 +375000.0 True 3 2 Rataje 79 +200000.0 True 3 4 Nowe 44 +315000.0 True 2 2 Zawady 52 +259000.0 True 2 3 Rataje 49 +379000.0 True 3 2 Podolany 56 +354454.0 True 2 3 Górczyn 17 +237000.0 True 2 10 Górczyn 38 +315000.0 True 2 2 Zawady 52 +379999.0 True 3 2 Wilda 67 +279000.0 True 2 1 Naramowice 52 +250000.0 True 2 4 Rataje 44 +620000.0 True 3 2 Naramowice 98 +450000.0 True 3 5 Grunwald 60 +290000.0 True 2 2 Dębiec 40 +393599.0 True 2 6 Winogrady 49 +289000.0 True 2 2 Nowe 48 +240000.0 True 2 8 Dębiec 37 +420000.0 True 2 5 Rataje 63 +800000.0 True 3 3 Chwaliszewo 70 +285000.0 True 2 2 Łazarz 52 +495000.0 True 3 0 Centrum 63 +289575.0 True 2 0 Jeżyce 43 +259000.0 True 2 5 Grunwald 46 +265000.0 True 2 4 Grunwald 43 +495000.0 True 5 1 Naramowice 98 +275000.0 True 2 0 Naramowice 50 +320000.0 True 2 3 Chwaliszewo 56 +360000.0 True 2 5 Grunwald 41 +360000.0 True 2 0 Winogrady 48 +750000.0 True 4 0 Kobylepole 105 +260000.0 True 2 0 Rataje 46 +260000.0 True 3 4 Centrum 44 +1050000.0 True 5 2 Centrum 161 +379000.0 True 2 0 Nowe 56 +560000.0 True 2 8 Grunwald 55 +335400.0 True 2 1 Łazarz 51 +290000.0 True 2 5 Winogrady 42 +235000.0 True 2 3 Winogrady 38 +300000.0 True 2 4 Winogrady 53 +399000.0 True 3 1 Winiary 66 +830000.0 True 3 1 Grunwald 91 +385500.0 True 2 6 Dębiec 38 +199000.0 True 5 0 Sołacz 129 +295000.0 True 2 4 Stare 33 +370000.0 True 4 11 Rataje 74 +335000.0 True 3 1 Piątkowo 63 +350000.0 True 3 7 Piątkowo 63 +380000.0 True 3 1 Łazarz 98 +184000.0 True 2 0 Grunwald 34 +855000.0 True 4 5 Jeżyce 96 +215000.0 True 2 0 Wilda 36 +495000.0 True 4 1 Naramowice 98 +250000.0 True 2 5 Nowe 50 +275000.0 True 3 7 Wilda 53 +409000.0 True 3 1 Malta 61 +200000.0 True 2 0 Głuszyna 52 +299000.0 True 3 3 Wilda 66 +490000.0 True 4 3 Sołacz 83 +245000.0 True 2 0 Stare 44 +950000.0 True 3 4 Nowe 99 +355000.0 True 2 3 Nowe 50 +380000.0 True 3 3 Łazarz 95 +525000.0 True 4 3 Jeżyce 104 +400000.0 True 2 3 Naramowice 50 +248000.0 True 2 10 Grunwald 42 +380000.0 True 3 0 Centrum 55 +453600.0 True 2 3 Naramowice 56 +290000.0 True 2 3 Winogrady 37 +690000.0 True 4 5 Grunwald 107 +350000.0 True 3 6 Jeżyce 64 +340000.0 True 4 3 Winogrady 65 +345000.0 True 3 1 Rataje 78 +395000.0 True 3 10 Piątkowo 67 +495000.0 True 5 1 Naramowice 98 +269000.0 True 2 3 Grunwald 47 +257000.0 True 2 12 Winogrady 46 +516000.0 True 3 3 Naramowice 75 +285000.0 True 2 4 Naramowice 42 +354000.0 True 3 1 Naramowice 60 +345000.0 True 2 0 Centrum 42 +550000.0 True 2 1 Naramowice 57 +670000.0 True 4 3 Grunwald 81 +659000.0 True 5 0 Podolany 135 +925000.0 True 5 1 Stare 105 +510000.0 True 5 1 Naramowice 98 +350000.0 True 3 3 Jeżyce 70 +345000.0 True 3 1 Winogrady 50 +279000.0 True 2 0 Piątkowo 48 +535000.0 True 2 2 Stare 55 +350000.0 True 2 1 Rataje 54 +349000.0 True 3 3 Rataje 63 +250000.0 True 2 3 Wilda 39 +270000.0 True 2 10 Nowe 48 +285000.0 True 2 0 Łazarz 49 +999000.0 True 3 4 Nowe 99 +425000.0 True 3 1 Piątkowo 74 +479000.0 True 3 1 Naramowice 66 +360000.0 True 3 0 Wilda 112 +495000.0 True 3 1 Łazarz 64 +599000.0 True 3 3 Grunwald 60 +390000.0 True 3 2 Podolany 68 +450000.0 True 4 1 Grunwald 101 +313000.0 True 2 4 Piątkowo 49 +338000.0 True 3 3 Wilda 63 +285000.0 True 2 11 Winogrady 47 +270000.0 True 2 0 Grunwald 42 +360000.0 True 4 4 Jeżyce 60 +399000.0 True 2 3 Centrum 60 +619000.0 True 3 5 Jeżyce 69 +330000.0 True 2 1 Jeżyce 53 +1612000.0 True 7 5 Jeżyce 166 +399000.0 True 3 3 Centrum 50 +365000.0 True 2 1 Stare 50 +450000.0 True 3 0 Grunwald 75 +288000.0 True 3 4 Winogrady 47 +240000.0 True 2 16 Rataje 36 +326000.0 True 2 0 Jeżyce 55 +250000.0 True 2 4 Zawady 66 +288000.0 True 2 4 Naramowice 44 +289000.0 True 2 7 Winiary 49 +515000.0 True 3 0 Rataje 69 +428000.0 True 3 3 Centrum 43 +510000.0 True 5 1 Naramowice 98 +320000.0 True 2 2 Piątkowo 48 +659200.0 True 4 3 Łazarz 103 +499000.0 True 5 0 Grunwald 130 +240000.0 True 2 2 Dębiec 48 +495000.0 True 4 1 Naramowice 98 +320000.0 True 3 0 Rataje 56 +430000.0 True 3 2 Rataje 64 +409000.0 True 5 4 Winogrady 64 +415000.0 True 3 4 Łazarz 53 +359000.0 True 3 2 Rataje 65 +410000.0 True 2 5 Rataje 53 +479000.0 True 3 3 Nowe 83 +365000.0 True 4 3 Grunwald 68 +369000.0 True 2 3 Grunwald 64 +259000.0 True 2 2 Nowe 42 +250000.0 True 3 4 Dębiec 45 +299000.0 True 2 4 Nowe 47 +430000.0 True 2 1 Centrum 72 +275000.0 True 2 0 Dębiec 50 +950000.0 True 3 4 Nowe 99 +329000.0 True 3 7 Rataje 78 +380000.0 True 4 6 Piątkowo 73 +299000.0 True 2 5 Centrum 49 +265000.0 True 2 1 Wilda 44 +370000.0 True 2 13 Rataje 48 +370000.0 True 4 4 Piątkowo 76 +379000.0 True 3 1 Piątkowo 78 +299000.0 True 2 3 Grunwald 44 +379999.0 True 2 5 Jeżyce 61 +1000000.0 True 5 1 Jeżyce 128 +549000.0 True 3 2 Jeżyce 106 +335000.0 True 3 9 Nowe 65 +489000.0 True 3 0 Jeżyce 65 +379000.0 True 3 4 Rataje 63 +245000.0 True 3 0 Grunwald 45 +235000.0 True 2 0 Łazarz 52 +295555.0 True 2 1 Jeżyce 45 +224000.0 True 2 0 Górczyn 38 +315000.0 True 2 2 Winogrady 38 +429000.0 True 3 4 Nowe 79 +595000.0 True 3 0 Naramowice 94 +330000.0 True 3 0 Bonin 56 +275000.0 True 2 13 Rataje 49 +499000.0 True 4 2 Wilda 120 +287000.0 True 2 10 Winogrady 46 +280000.0 True 2 10 Piątkowo 46 +273875.0 True 2 1 Górczyn 13 +450000.0 True 3 0 Winogrady 70 +325000.0 True 3 4 Jeżyce 64 +299817.0 True 2 3 Górczyn 59 +295000.0 True 2 2 Naramowice 58 +380000.0 True 4 6 Piątkowo 73 +399000.0 True 3 4 Winogrady 65 +305000.0 True 3 3 Winogrady 48 +220000.0 True 2 3 Jeżyce 37 +285000.0 True 3 2 Antoninek 61 +238000.0 True 2 2 Grunwald 37 +200000.0 True 2 0 Rataje 30 +298000.0 True 2 5 Centrum 50 +391729.0 False 3 2 Winogrady 42 +347090.0 False 3 2 Winogrady 41 +285678.0 False 2 1 Winogrady 82 +321656.0 False 2 4 Winogrady 38 +312259.0 False 2 6 Winogrady 60 +347090.0 False 3 1 Winogrady 90 +355042.0 False 3 6 Jeżyce 96 +496573.0 False 3 2 Stare 78 +300680.0 False 2 2 Starołęka 54 +395000.0 True 4 4 Piątkowo 90 +771672.0 False 4 4 Górczyn 66 +399000.0 True 4 1 Szczepankowo 60 +340100.0 True 3 0 Szczepankowo 45 +225228.0 False 2 5 Rataje 91 +324387.0 False 2 9 Grunwald 49 +362459.0 False 3 0 Starołęka 80 +247705.0 False 2 1 Podolany 74 +339000.0 True 3 8 Nowe 78 +207000.0 True 2 2 Wilda 33 +295000.0 True 2 4 Grunwald 50 +324500.0 True 2 5 Wilda 65 +429000.0 True 3 4 Wilda 47 +399000.0 True 4 0 Szczepankowo 71 +411804.0 True 3 1 Winogrady 42 +282613.0 True 2 3 Winogrady 33 +235399.0 True 2 1 Winogrady 59 +265741.0 True 2 7 Winogrady 21 +323340.0 True 3 3 Winogrady 89 +293848.0 True 3 7 Winogrady 57 +337303.0 True 4 2 Winogrady 17 +470092.0 True 2 3 Centrum 21 +310000.0 True 2 0 Wilda 53 +365000.0 True 4 1 Nowe 54 +259000.0 True 2 6 Winogrady 38 +414225.0 True 3 3 Centrum 23 +489000.0 True 3 3 Grunwald 104 +350000.0 True 4 3 Grunwald 30 +325000.0 True 2 3 Rataje 20 +321845.0 False 3 1 Grunwald 55 +248000.0 True 2 14 Rataje 49 +286000.0 True 2 5 Centrum 64 +399000.0 True 3 4 Piątkowo 16 +289000.0 True 2 7 Winiary 80 +329000.0 True 3 11 Winogrady 50 +252723.0 False 2 1 Winogrady 43 +300680.0 False 2 2 Starołęka 54 +496573.0 False 3 2 Stare 78 +392181.0 False 3 4 Winogrady 42 +496573.0 False 3 2 Stare 78 +412438.0 False 3 2 Naramowice 17 +286000.0 True 2 5 Centrum 49 +269000.0 True 2 9 Rataje 49 +315000.0 True 2 1 Grunwald 61 +318390.0 True 3 3 Jeżyce 48 +242406.0 True 2 0 Jeżyce 36 +296278.0 True 3 2 Stare 49 +223747.0 True 2 0 Stare 37 +388755.0 True 4 5 Winogrady 65 +347095.0 True 3 1 Winogrady 57 +269000.0 True 2 1 Ogrody 50 +285000.0 True 2 9 Grunwald 50 +114642.0 True 2 0 Łazarz 46 +286000.0 True 2 5 Stare 64 +333693.0 True 3 1 Jeżyce 68 +435000.0 True 2 0 Świerczewo 60 +320000.0 True 4 1 Jeżyce 40 +395000.0 True 4 0 Grunwald 60 +353457.0 True 2 3 Stare 44 +267704.0 True 2 3 Grunwald 45 +245831.0 True 2 2 Grunwald 40 +391729.0 True 3 2 Winogrady 69 +240875.0 True 2 7 Stare 39 +424380.0 True 4 2 Nowe 74 +282996.0 True 2 0 Nowe 55 +285000.0 True 3 1 Rataje 48 +284618.0 False 2 3 Nowe 55 +512034.0 False 4 2 Winogrady 94 +284618.0 False 2 3 Nowe 55 +255404.0 False 2 6 Jeżyce 12 +315810.0 False 3 8 Winogrady 20 +282994.0 False 2 0 Starołęka 59 +637135.0 False 3 7 Grunwald 65 +754000.0 False 5 0 Morasko 42 +336000.0 True 3 0 Szczepankowo 85 +355000.0 True 2 3 Nowe 90 +475000.0 True 3 0 Rataje 73 +275000.0 True 3 4 Winogrady 60 +275000.0 True 3 4 Winogrady 70 +289000.0 True 2 7 Winogrady 80 +315000.0 True 3 0 Rataje 63 +260000.0 True 2 1 Łazarz 54 +370000.0 True 4 4 Piątkowo 76 +319990.0 True 2 3 Jeżyce 70 +156085.0 False 2 3 Głuszyna 45 +225228.0 False 2 5 Rataje 91 +308237.0 False 2 1 Nowe 85 +353275.0 False 2 14 Grunwald 74 +228144.0 False 3 2 Głuszyna 56 +156085.0 False 2 2 Głuszyna 45 +353275.0 False 2 14 Grunwald 74 +353275.0 False 2 14 Grunwald 74 +156085.0 False 2 3 Głuszyna 45 +156085.0 False 2 4 Nowe 54 +267702.0 False 2 3 Grunwald 22 +353275.0 False 2 14 Grunwald 74 +247705.0 False 2 1 Podolany 74 +315810.0 False 3 8 Winogrady 20 +370000.0 True 4 4 Stare 60 +265000.0 True 2 2 Stare 70 +304140.0 False 3 3 Winogrady 27 +394000.0 False 4 0 Szczepankowo 77 +287882.0 False 2 1 Starołęka 85 +729000.0 True 3 0 Rataje 20 +445000.0 True 4 3 Piątkowo 65 +339000.0 True 3 1 Wilda 90 +382000.0 True 4 0 Piątkowo 74 +335000.0 True 2 4 Jeżyce 35 +258000.0 True 2 0 Plewiska 40 +195000.0 True 2 1 Grunwald 31 +229000.0 True 2 1 Grunwald 16 +327000.0 True 3 1 Piątkowo 40 +279000.0 True 3 1 Nowe 54 +329000.0 True 3 1 Piątkowo 63 +220000.0 True 2 3 Jeżyce 37 +285000.0 True 3 2 Antoninek 61 +286000.0 True 2 5 Stare 49 +550000.0 True 3 1 Jeżyce 73 +366770.0 True 3 1 Stare 58 +392000.0 True 4 0 Piątkowo 74 +504326.0 True 4 4 Stare 26 +232408.0 True 2 1 Winogrady 37 +247000.0 True 2 2 Jeżyce 38 +318384.0 True 3 2 Jeżyce 48 +371930.0 True 4 2 Jeżyce 57 +347092.0 True 3 1 Winogrady 57 +286445.0 True 2 2 Winogrady 49 +254309.0 True 2 2 Stare 42 +238950.0 True 2 4 Stare 39 +442080.0 True 3 1 Nowe 68 +319998.0 True 3 1 Nowe 14 +404965.0 True 3 2 Nowe 63 +336840.0 True 3 3 Nowe 14 +380931.0 True 3 3 Nowe 83 +341311.0 True 3 8 Grunwald 53 +325000.0 True 2 0 Nowe 80 +388000.0 True 2 1 Grunwald 33 +219000.0 True 2 1 Grunwald 35 +1007500.0 False 4 1 Starołęka 94 +1203616.0 False 5 0 Starołęka 71 +298980.0 False 2 5 Winogrady 30 +281988.0 False 2 7 Naramowice 76 +300680.0 False 2 2 Starołęka 54 +288405.0 False 2 1 Górczyn 37 +392861.0 False 3 2 Winogrady 42 +298250.0 False 2 6 Grunwald 38 +411684.0 False 3 3 Winogrady 17 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +310020.0 False 3 4 Winogrady 67 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +392861.0 False 3 3 Naramowice 42 +249733.0 False 2 0 Ogrody 54 +282944.0 False 2 0 Starołęka 59 +349668.0 False 2 2 Stare 15 +294840.0 False 2 4 Winogrady 50 +252723.0 False 2 1 Winogrady 43 +399000.0 False 3 2 Winogrady 98 +359600.0 False 3 5 Grunwald 58 +245876.0 True 2 1 Jeżyce 38 +329538.0 True 3 1 Jeżyce 50 +286268.0 True 2 5 Winogrady 49 +367000.0 True 3 1 Centrum 30 +350000.0 True 3 1 Nowe 63 +350000.0 True 2 1 Rataje 63 +399000.0 True 3 5 Grunwald 98 +429000.0 True 3 3 Centrum 102 +267703.0 True 2 3 Grunwald 45 +356251.0 True 3 14 Grunwald 57 +225290.0 True 2 7 Rataje 39 +333701.0 True 3 1 Jeżyce 68 +368568.0 True 3 4 Jeżyce 68 +285000.0 True 3 2 Antoninek 61 +300000.0 True 2 9 Strzeszyn 45 +299000.0 True 2 5 Centrum 50 +249000.0 True 2 2 Grunwald 46 +599000.0 True 4 5 Malta 84 +250000.0 True 2 4 Wilda 54 +341776.0 True 2 2 Stare 44 +238000.0 True 2 13 Rataje 49 +279000.0 True 3 1 Wilda 68 +430000.0 True 2 3 Jeżyce 58 +255000.0 True 2 1 Winogrady 38 +360000.0 True 3 1 Grunwald 49 +339000.0 True 2 1 Górczyn 45 +855000.0 True 3 3 Centrum 90 +1179000.0 True 3 2 Centrum 40 +2700000.0 True 3 2 Centrum 90 +1170000.0 True 3 3 Centrum 90 +368712.0 True 2 2 Centrum 90 +991380.0 True 4 1 Nowe 20 +250000.0 True 2 3 Dębiec 53 +249000.0 True 3 4 Rataje 53 +350000.0 True 2 4 Jeżyce 56 +285000.0 True 2 2 Centrum 52 +285000.0 True 2 2 Łazarz 52 +490000.0 True 4 2 Jeżyce 87 +429000.0 True 4 2 Grunwald 92 +211190.0 False 2 0 Podolany 78 +375529.0 False 2 3 Centrum 71 +225228.0 False 2 0 Rataje 71 +991380.0 False 5 1 Starołęka 94 +1156054.0 False 4 0 Stare 52 +288000.0 True 2 4 Naramowice 44 +820000.0 True 4 1 Grunwald 133 +370000.0 True 4 4 Piątkowo 76 +156085.0 False 2 0 Głuszyna 54 +156085.0 False 2 0 Głuszyna 54 +200460.0 False 2 0 Głuszyna 55 +200460.0 False 2 0 Głuszyna 55 +156085.0 False 2 0 Głuszyna 54 +156085.0 False 2 0 Głuszyna 54 +308237.0 False 2 1 Nowe 85 +225288.0 False 2 9 Rataje 91 +267702.0 False 2 3 Grunwald 22 +364000.0 True 3 4 Nowe 90 +280000.0 True 2 4 Winogrady 30 +349000.0 True 4 0 Rataje 84 +412000.0 True 4 0 Nowe 88 +490000.0 True 3 4 Piątkowo 82 +359602.0 True 3 5 Grunwald 58 +333025.0 True 2 1 Stare 45 +450000.0 True 2 3 Stare 62 +248000.0 True 2 2 Winogrady 80 +270000.0 True 3 10 Śródka 48 +239000.0 True 2 11 Stare 38 +225292.0 True 2 1 Rataje 39 +290970.0 True 2 4 Górczyn 70 +194500.0 True 2 3 Nowe 90 +712980.0 True 4 3 Centrum 102 +712980.0 True 5 2 Centrum 102 +855000.0 True 3 2 Centrum 72 +279000.0 True 2 6 Stare 49 +313830.0 True 2 4 Jeżyce 55 +325050.0 True 2 4 Jeżyce 25 +240158.0 True 2 0 Stare 39 +211190.0 True 2 0 Jeżyce 38 +333690.0 True 3 2 Jeżyce 68 +388751.0 True 4 5 Winogrady 65 +347091.0 True 3 1 Winogrady 57 +362450.0 True 3 1 Górczyn 90 +225288.91 True 2 6 Rataje 91 +225288.91 True 2 5 Rataje 91 +225288.91 True 2 1 Rataje 91 +392860.63 True 4 3 Winogrady 41 +364762.0 True 4 4 Winogrady 89 +316498.0 True 2 2 Centrum 77 +442002.0 True 2 3 Centrum 73 +276610.0 True 2 4 Centrum 80 +316355.0 True 2 4 Centrum 67 +280250.0 True 2 0 Górczyn 50 +327127.5 True 2 0 Centrum 50 +449000.0 False 5 0 Szczepankowo 68 +225288.0 False 2 1 Rataje 91 +286327.0 False 2 3 Naramowice 82 +365690.0 False 4 2 Naramowice 50 +389528.0 False 2 2 Stare 87 +481903.0 False 3 2 Stare 53 +349000.0 False 4 0 Szczepankowo 29 +347090.0 False 3 2 Naramowice 41 +534523.0 False 3 2 Stare 62 +412670.0 False 3 1 Naramowice 17 +285678.0 False 2 2 Naramowice 82 +263000.0 True 2 0 Wilda 75 +245000.0 True 2 2 Winogrady 20 +232410.0 True 2 0 Stare 38 +245488.0 True 2 0 Jeżyce 37 +225288.0 True 2 7 Rataje 39 +180000.0 True 3 2 Wilda 35 +189000.0 True 2 4 Wilda 35 +460499.0 True 3 1 Centrum 51 +903965.44 True 4 0 Centrum 80 +1366410.0 True 4 0 Centrum 71 +285383.0 True 2 4 Winogrady 37 +286091.0 True 2 3 Winogrady 49 +347090.0 True 3 1 Winogrady 90 +225288.91 True 2 7 Rataje 91 +442150.0 True 2 2 Centrum 75 +318000.0 True 4 8 Nowe 82 +278047.0 False 2 3 Podolany 74 +278047.0 False 2 4 Podolany 74 +278047.0 False 2 4 Podolany 74 +650958.0 False 4 5 Winogrady 51 +290360.0 False 2 4 Górczyn 60 +278047.0 False 2 4 Podolany 74 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +442080.0 False 3 1 Starołęka 65 +460499.0 False 3 1 Stare 51 +412670.0 False 3 1 Winogrady 17 +357692.0 False 3 2 Starołęka 31 +282994.0 False 2 0 Starołęka 59 +211190.0 False 2 0 Piątkowo 78 +252723.0 False 2 1 Winogrady 43 +232408.0 False 2 0 Winogrady 79 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +310020.0 False 3 4 Winogrady 67 +249733.0 False 2 0 Ogrody 54 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +282944.0 False 2 0 Starołęka 59 +347633.0 True 3 10 Grunwald 57 +293436.0 True 2 1 Grunwald 50 +247705.0 True 2 1 Jeżyce 50 +398000.0 True 3 1 Jeżyce 72 +570000.0 True 4 0 Jeżyce 90 +285200.0 True 2 1 Stare 46 +347100.0 True 3 1 Winogrady 57 +223749.0 True 2 0 Stare 37 +245880.0 True 2 1 Jeżyce 38 +460050.0 True 3 5 Grunwald 74 +329000.0 True 3 2 Piątkowo 40 +279000.0 True 2 1 Stare 60 +720000.0 True 4 7 Jeżyce 90 +225290.0 True 2 5 Rataje 39 +355000.0 False 3 0 Stare 61 +355000.0 False 3 0 Podolany 61 +430000.0 False 4 0 Podolany 75 +270000.0 True 3 3 Stare 47 +475000.0 False 4 0 Stare 72 +475000.0 False 4 0 Podolany 72 +325000.0 True 2 2 Centrum 51 +455000.0 False 4 0 Stare 72 +455000.0 False 4 0 Podolany 72 +372000.0 False 4 1 Grunwald 87 +270000.0 True 2 10 Śródka 48 +207845.0 True 2 0 Nowe 79 +285000.0 True 2 2 Grunwald 52 +262500.0 True 4 0 Wilda 75 +350000.0 True 2 1 Rataje 80 +200000.0 True 2 0 Rataje 30 +210000.0 True 2 3 Grunwald 35 +368712.0 True 2 0 Centrum 90 +360288.0 True 2 1 Centrum 60 +390312.0 True 2 3 Centrum 60 +481103.0 True 3 1 Centrum 51 +455348.0 True 3 0 Centrum 61 +417231.0 True 2 2 Centrum 50 +411684.0 False 3 3 Winogrady 17 +481903.0 False 3 2 Centrum 53 +746787.0 False 3 7 Górczyn 53 +319998.0 False 3 1 Starołęka 95 +460040.0 False 3 5 Grunwald 20 +349000.0 False 4 0 Szczepankowo 29 +399000.0 False 5 0 Szczepankowo 68 +234000.0 True 2 7 Wilda 50 +210000.0 True 2 1 Wilda 65 +279000.0 True 2 2 Łazarz 36 +325000.0 True 2 0 Rataje 47 +285000.0 True 2 3 Grunwald 58 +360000.0 True 3 2 Rataje 69 +355000.0 True 2 2 Rataje 90 +362804.0 False 3 5 Jeżyce 39 +252723.0 False 2 1 Winogrady 43 +285200.0 False 2 1 Winogrady 46 +249641.0 False 2 0 Ogrody 54 +302887.0 False 2 4 Górczyn 25 +242731.0 False 2 0 Podolany 74 +991380.0 False 5 1 Starołęka 94 +265000.0 True 2 2 Piątkowo 70 +344000.0 True 2 0 Stare 49 +313000.0 True 2 4 Stare 49 +315000.0 True 3 0 Stare 60 +315000.0 True 3 0 Rataje 63 +690000.0 True 2 1 Stare 20 +465000.0 True 2 2 Wilda 49 +368110.0 True 3 2 Nowe 64 +282994.0 True 2 0 Nowe 55 +350000.0 True 2 3 Rataje 52 +780000.0 True 3 0 Grunwald 87 +263000.0 True 2 0 Rataje 38 +219000.0 True 2 7 Winogrady 38 +250000.0 True 3 3 Rataje 53 +394000.0 True 4 0 Nowe 88 +535000.0 True 2 2 Centrum 55 +329000.0 True 3 13 Rataje 65 +192750.0 True 2 2 Nowe 55 +375408.0 True 3 0 Nowe 88 +649400.0 True 3 4 Nowe 50 +294906.0 True 2 3 Nowe 74 +291720.0 True 2 5 Stare 20 +290646.0 True 2 2 Stare 80 +285678.0 False 2 1 Winogrady 42 +156085.0 False 2 4 Nowe 54 +496573.0 False 3 2 Stare 78 +1156054.0 False 4 0 Stare 52 +380931.0 False 3 3 Starołęka 82 +285200.0 True 2 0 Stare 46 +434201.0 True 4 1 Nowe 54 +269984.0 True 3 0 Stare 76 +333024.0 True 2 1 Stare 45 +637037.0 True 4 3 Stare 79 +319060.0 True 3 3 Grunwald 56 +267700.0 True 2 2 Grunwald 45 +365690.0 True 4 1 Winogrady 63 +285678.0 True 2 4 Winogrady 48 +295363.0 True 3 1 Stare 48 +223750.0 True 2 0 Stare 37 +277823.0 True 2 1 Jeżyce 50 +333695.0 True 3 2 Jeżyce 68 +288000.0 True 2 4 Naramowice 22 +518000.0 True 4 0 Wilda 41 +235000.0 True 2 4 Dębiec 44 +364762.0 True 4 1 Winogrady 62 +320000.0 True 4 3 Stare 40 +449000.0 True 5 3 Wilda 97 +249000.0 True 2 10 Grunwald 42 +279000.0 True 2 3 Piątkowo 30 +289000.0 True 3 4 Winogrady 48 +318645.0 True 2 2 Stare 30 +289000.0 True 2 7 Jeżyce 80 +285000.0 True 2 2 Łazarz 20 +399000.0 True 3 4 Piątkowo 69 +350000.0 True 3 1 Rataje 63 +240000.0 True 2 2 Dębiec 48 +356160.0 False 4 4 Winogrady 36 +290970.0 False 2 0 Winogrady 52 +289000.0 True 3 4 Stare 47 +399000.0 True 3 4 Piątkowo 69 +315000.0 True 3 0 Piatkowo 50 +329000.0 True 2 1 Grunwald 66 +253000.0 True 2 4 Grunwald 70 +179000.0 True 2 0 Grunwald 34 +250000.0 True 2 0 Naramowice 50 +410000.0 True 2 4 Jeżyce 43 +360000.0 True 3 3 Jeżyce 62 +590000.0 True 3 3 Jeżyce 80 +325000.0 True 3 2 Jeżyce 64 +247705.0 False 2 1 Podolany 74 +247705.0 False 2 1 Piątkowo 74 +392861.0 False 3 3 Winogrady 42 +156085.0 False 2 4 Głuszyna 45 +249441.0 False 2 5 Jeżyce 51 +398000.0 True 3 3 Łazarz 96 +255000.0 True 2 2 Wilda 72 +329000.0 True 2 1 Naramowice 40 +232409.0 True 2 0 Stare 38 +296300.0 True 3 2 Stare 49 +364762.0 True 4 4 Winogrady 63 +239592.0 True 2 5 Grunwald 36 +395000.0 True 3 0 Naramowice 73 +333694.0 False 3 1 Piątkowo 38 +344500.0 False 3 6 Jeżyce 53 +377652.0 False 4 6 Jeżyce 22 +332145.0 False 3 0 Winogrady 45 +328241.0 False 3 3 Winogrady 81 +328241.0 False 3 5 Winogrady 81 +355041.6 False 3 6 Jeżyce 96 +318384.0 False 3 6 Jeżyce 24 +328241.0 False 3 1 Winogrady 81 +323340.0 False 3 0 Winogrady 89 +332145.0 False 3 1 Winogrady 45 +392607.0 False 4 5 Jeżyce 94 +345180.0 False 3 1 Jeżyce 30 +315810.0 False 4 8 Winogrady 20 +263581.0 False 2 2 Winogrady 21 +323340.0 False 3 2 Winogrady 89 +263581.0 False 2 6 Winogrady 21 +238948.0 False 2 5 Winogrady 54 +240875.0 False 2 7 Winogrady 54 +246379.0 False 2 0 Winogrady 39 +345240.0 False 4 1 Winogrady 54 +345240.0 False 4 0 Winogrady 54 +332145.0 False 3 3 Winogrady 45 +348117.0 False 4 5 Winogrady 54 +348117.0 False 4 6 Winogrady 54 +339282.0 False 3 7 Winogrady 62 +317200.0 False 3 8 Winogrady 52 +329422.5 False 3 6 Winogrady 45 +265741.5 False 2 7 Winogrady 21 +238948.0 False 2 6 Winogrady 54 +348117.0 False 4 7 Winogrady 54 +339282.0 False 3 5 Winogrady 62 +263581.0 False 2 4 Winogrady 21 +348117.0 False 4 4 Winogrady 54 +296277.0 False 3 0 Winogrady 57 +304133.5 False 3 1 Winogrady 27 +296277.0 False 3 2 Winogrady 57 +263581.0 False 2 3 Winogrady 21 +345240.0 False 4 2 Winogrady 54 +263581.0 False 2 1 Winogrady 21 +345240.0 False 4 3 Winogrady 54 +339282.0 False 3 6 Winogrady 62 +323340.0 False 3 3 Winogrady 89 +310020.0 False 3 0 Winogrady 67 +252723.0 False 2 1 Winogrady 43 +366850.0 False 4 1 Winogrady 25 +319875.0 False 2 8 Grunwald 18 +249641.0 False 2 0 Jeżyce 54 +356160.0 False 4 4 Winogrady 36 +156085.0 False 2 4 Nowe 54 +319875.0 False 2 7 Grunwald 18 +329763.26 False 2 9 Grunwald 94 +324400.97 False 2 7 Grunwald 94 +388352.0 False 3 7 Grunwald 60 +347633.0 False 3 10 Grunwald 20 +409713.0 False 3 11 Grunwald 62 +330368.0 False 2 12 Grunwald 62 +356251.9 False 3 14 Grunwald 20 +347839.75 False 2 12 Grunwald 58 +350506.16 False 3 11 Grunwald 20 +342405.13 False 2 11 Grunwald 58 +429699.0 False 3 15 Grunwald 62 +319875.0 False 2 9 Grunwald 18 +341703.96 False 3 8 Grunwald 21 +336969.98 False 2 10 Grunwald 58 +413044.0 False 3 12 Grunwald 62 +405104.0 False 3 1 Grunwald 34 +341703.96 False 3 9 Grunwald 21 +424977.14 False 4 5 Grunwald 20 +327787.0 False 2 11 Grunwald 62 +353378.74 False 3 12 Grunwald 20 +332949.0 False 2 13 Grunwald 62 +383760.0 False 3 6 Grunwald 60 +335530.0 False 2 14 Grunwald 62 +387040.0 False 3 5 Grunwald 60 +302985.6 False 2 4 Grunwald 18 +410780.0 False 3 3 Grunwald 44 +417773.83 False 4 3 Grunwald 20 +303286.5 False 2 3 Grunwald 13 +364080.0 False 3 1 Grunwald 60 +319055.27 False 3 3 Grunwald 21 +292100.0 False 2 1 Grunwald 80 +245830.0 False 2 2 Grunwald 67 +352390.0 False 2 12 Grunwald 80 +377200.0 False 3 3 Grunwald 60 +313080.0 False 3 5 Winogrady 18 +314089.0 False 2 5 Grunwald 49 +308237.0 False 2 1 Nowe 85 +339072.0 False 2 9 Grunwald 98 +321812.5 False 2 8 Grunwald 49 +322643.5 False 2 10 Grunwald 81 +500203.02 False 4 10 Grunwald 73 +343978.41 False 3 9 Grunwald 14 +325184.0 False 2 11 Grunwald 81 +351130.0 False 3 10 Grunwald 85 +297420.8 False 2 3 Grunwald 24 +267702.4 False 2 2 Grunwald 22 +506566.5 False 4 11 Grunwald 73 +297420.8 False 2 2 Grunwald 24 +495722.51 False 4 9 Grunwald 99 +426416.8 False 4 6 Grunwald 20 +327081.85 False 2 8 Grunwald 94 +307080.0 False 2 5 Grunwald 18 +305793.0 False 2 4 Grunwald 13 +312198.0 False 2 6 Grunwald 18 +333231.99 False 3 7 Grunwald 21 +514939.5 False 4 13 Grunwald 73 +317880.0 False 2 2 Grunwald 98 +267702.4 False 2 3 Grunwald 22 +519126.0 False 4 14 Grunwald 73 +510753.0 False 4 12 Grunwald 73 +347010.0 False 2 10 Grunwald 80 +324387.0 False 2 9 Grunwald 49 +311514.5 False 2 4 Grunwald 49 +298249.6 False 2 6 Grunwald 38 +333774.0 False 2 6 Grunwald 98 +495722.51 False 4 8 Grunwald 99 +331125.0 False 2 5 Grunwald 98 +336423.0 False 2 8 Grunwald 98 +325312.98 False 3 3 Grunwald 14 +298249.6 False 2 5 Grunwald 38 +495782.26 False 4 7 Grunwald 99 +341311.84 False 3 8 Grunwald 14 +328476.0 False 2 4 Grunwald 98 +316848.0 False 2 6 Grunwald 52 +328241.0 False 3 2 Winogrady 81 +332145.0 False 3 2 Winogrady 45 +348750.0 True 2 4 Centrum 50 +297600.0 True 2 3 Winogrady 50 +300160.0 True 2 3 Winogrady 90 +293760.0 True 2 3 Winogrady 90 +315819.0 False 2 5 Grunwald 13 +435784.0 False 3 5 Grunwald 44 +407208.0 False 3 2 Grunwald 44 +370640.0 False 3 2 Grunwald 60 +329422.5 False 3 4 Winogrady 45 +329422.5 False 3 7 Winogrady 45 +328241.0 False 3 4 Winogrady 81 +323340.0 False 3 1 Winogrady 89 +329422.5 False 3 5 Winogrady 45 +335000.0 True 3 1 Piątkowo 63 +391728.59 True 3 2 Winogrady 21 +285678.0 True 2 2 Winogrady 42 +287566.0 True 2 1 Winogrady 74 +421049.88 True 4 1 Grunwald 42 +332388.13 True 2 4 Grunwald 96 +330359.78 True 2 14 Grunwald 56 +301206.53 True 2 7 Grunwald 81 +307490.0 True 2 14 Grunwald 94 +307880.88 True 3 3 Grunwald 16 +319047.97 True 3 3 Grunwald 21 +495782.25 True 4 7 Grunwald 99 +413044.03 True 3 12 Grunwald 62 +380480.0 True 3 4 Grunwald 60 +426416.78 True 4 6 Grunwald 20 +324387.0 True 2 9 Grunwald 49 +333212.88 True 2 7 Grunwald 21 +579000.0 True 4 3 Naramowice 97 +215000.0 True 2 2 Grunwald 44 +267702.41 True 2 3 Grunwald 22 +245830.0 True 2 2 Grunwald 67 +410000.0 True 2 5 Rataje 53 +365000.0 True 4 2 Łazarz 62 +257000.0 True 2 12 Winogrady 47 +240000.0 True 2 16 Rataje 36 +319055.0 True 3 3 Grunwald 56 +267702.0 True 2 2 Grunwald 45 +245830.0 True 2 2 Grunwald 40 +253193.0 True 2 6 Jeżyce 38 +318384.0 True 3 6 Jeżyce 48 +245875.0 True 2 1 Jeżyce 38 +347090.0 True 3 1 Winogrady 57 +238948.0 True 2 4 Stare 39 +355000.0 True 3 3 Łazarz 62 +330255.0 False 2 1 Stare 14 +442080.0 False 3 1 Starołęka 68 +277823.0 False 2 2 Podolany 70 +308039.0 False 2 0 Naramowice 71 +321656.0 False 2 1 Naramowice 50 +304140.0 False 3 5 Winogrady 18 +771672.0 False 4 4 Górczyn 66 +322497.0 False 2 6 Naramowice 60 +333024.0 False 2 1 Stare 51 +290000.0 True 3 14 Nowe 20 +515000.0 True 3 0 Rataje 71 +372000.0 True 4 1 Nadolnik 125 +410000.0 True 2 5 Rataje 53 +259000.0 True 2 0 Grunwald 52 +298950.0 True 2 0 Piątkowo 70 +495000.0 True 4 3 Naramowice 104 +245000.0 True 2 7 Jeżyce 53 +319000.0 True 2 1 Centrum 52 +420000.0 True 2 1 Naramowice 50 +420000.0 True 2 3 Naramowice 50 +300000.0 True 3 2 Grunwald 49 +300000.0 True 3 2 Winogrady 48 +339000.0 True 2 2 Stare 53 +298000.0 True 3 1 Nowe 30 +250000.0 True 3 0 Stare 45 +475000.0 True 4 4 Naramowice 50 +329000.0 True 3 1 Jeżyce 112 +299000.0 True 2 0 Piątkowo 20 +259000.0 True 3 1 Grunwald 48 +370000.0 True 4 4 Piątkowo 60 +249641.0 False 2 0 Ogrody 54 +375000.0 True 3 1 Nowe 63 +390000.0 True 4 4 Piątkowo 74 +288000.0 True 3 4 Stare 30 +468000.0 True 2 3 Grunwald 60 +279000.0 True 3 1 Wilda 68 +250000.0 True 2 6 Winogrady 42 +350000.0 True 2 2 Jeżyce 46 +310000.0 True 2 1 Nowe 40 +289000.0 True 3 4 Winogrady 47 +405900.0 True 3 2 Stare 82 +359000.0 True 3 1 Wilda 20 +326000.0 True 2 1 Sołacz 39 +350000.0 True 2 2 Jeżyce 47 +239000.0 True 2 4 Grunwald 50 +224343.0 False 2 4 Starołęka 35 +362220.0 False 3 3 Starołęka 60 +287394.0 False 2 2 Starołęka 50 +320739.0 False 3 1 Starołęka 56 +460499.0 False 3 1 Stare 51 +242731.0 False 2 0 Podolany 74 +156085.0 False 2 4 Nowe 54 +285200.0 False 2 1 Winogrady 46 +211190.0 False 2 0 Podolany 78 +309000.0 True 3 3 Wilda 80 +313000.0 True 2 1 Górczyn 48 +313000.0 True 2 1 Dębiec 48 +643720.0 True 4 0 Stare 60 +415000.0 True 2 5 Nowe 53 +325000.0 True 2 3 Stare 60 +599000.0 True 4 3 Stare 97 +319000.0 True 2 0 Grunwald 20 +299000.0 True 3 6 Stare 63 +299000.0 True 2 0 Grunwald 51 +339000.0 True 2 2 Centrum 53 +320000.0 True 3 4 Stare 65 +364000.0 True 3 1 Nowe 67 +209000.0 True 3 3 Grunwald 50 diff --git a/w1/zumz181.zip b/w1/zumz181.zip new file mode 100644 index 0000000..ff9798c Binary files /dev/null and b/w1/zumz181.zip differ diff --git a/w1/zumz181a.ipynb b/w1/zumz181a.ipynb new file mode 100644 index 0000000..cabf458 --- /dev/null +++ b/w1/zumz181a.ipynb @@ -0,0 +1,774 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe 2017/2018\n", + "# 1. Wprowadzenie. Regresja liniowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 1.1. Uczenie maszynowe – przykłady zastosowań" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Rozpoznawanie i rozumienie mowy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "import IPython" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\n9VJ7GytRj1E/wsz4NpSba8jTWqR6ip+Fm7rhy7Ly8uEw05KlD8KHqVZ6alNCVqUPwoae1zi9CW5v\nV7dxZC0lYohOz1V1zGzLN2SC6yUllHptp2voZ4yd0WQn2grYm5ybb1QKTvuwUuzoJd37wHc5P7zB\nVGnrZiZkKBoco5dNzHiG5O+91yNEUnrcicI31LSPJlpIw4zglLFSdWjPq5PdWumezVoR6xtbDUqC\neiZNwslcs+jmJ+7Vpv4ivo9i72zUn739DsVh13lcqVpqN9zXdWe2OHrcOr0cTToSUXOe1mWy4JjI\nq+WLXhI9niNFR6Q4OLejjv8AE9OcUtORdSRxv7OxCdnFLzZuw2GjQp23b3Z7NahGfgY+ofWZE7+I\n1ZHn46C6lPxPLnue7xHDuGHcm9Dwp7llZ5FGW++wpKKhrvzFbZPuFCJTGu+4RDLvs9Shm33qxH52\nC3KysHv1QDJ//SLqe6Ttpy8PEoTt4Itp72/IDv8AoTXdLBVo83NfodLHGrrJ06l9O9HJdEZWwdTX\nXMjo6lR1JZmlc5X26z00Z6Sk3CEG2tE4lkKlKsssqcYvuaMKZMXzG1caalCjTknljff1bpoZV6a0\n6qHuRnc+z4IRO70LbqY2xxKS9Ve5FVXqMTZThFPlIqTtuDWZDaYinSoqTUlJ2bW5aqOHa2mv9xU+\nytxFWl1qTVo940xrVChyz28yz7Lh97P4mWVScJJNKz2kmXRxCa5DUwPA0E7wco+Qk8PTV/3s7kyq\nylsR+pctVW6WmlSXvJVJe1J+8dRciWsokTRTjaV8zfmzTFuxniy+LLyiasjLXYtumVQ1GEhcTK97\nJAt9SLg2iZion3szVXy5l03cpcLsmiq3gEd9UM1Z25BbQs9jXhYLK21zLKyXUVNF6r/QKFlSiTXa\n6ip+F/oavtymY+d0runDyRqqUssFrdiU6eSnDn2UNUdltuc3XWdt5rIuUNLtWKbNVLo1U5aOM+YV\nnjuPFdoZU2iaULpy9xBqpyvBXWgWs20FGMnFpLYZxa5BVbYpMlZkagNBtMaSfMVNWXeLWdptFESW\nqGp3zW2vzETUo3dx47oitLSvoyjEJwnBvnsW20uinEJzhfmgjx+kkJUZYXGxTbpT1NbqxqxjOOsZ\nK6ZdUpxxeFlh6uqkrHg0a1ThlZ4TFfw79iZfaeq9Zq5kfZxFy+M1OKlGSaezRXWpNrOnqiKz8Ts8\n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\nvzKEpQcayglmLsilVk5JSjb4FUXKyyzd795dScYKV6vaZFiipaEtG7FL9bMkzXUoVqkM+mTvK4KV\nXstpKPNlRbDH5qfVuOWy9a+rKpLP2k7lbgpVNFdee5bDJRppuT0d7WJ6VXKF6qzVI2/tNal1SvKp\nmdtE1sZ6k1Vlns77aFas3a9rlRqdSMouzfuJp4t0W6dWUkuTMsrtZIq0VvZFNS8tW81vyM41a3Tl\nQdmqkr35O54tb+LLzNHvM9T12bZpCSCSoAAAIGX5CjL3AHvAACIGjuKNEK9/ASxEMFB0a00nfsrY\n20qsp08yxNSNR65c8jLw+Uf2dBJyzK/qhShGspKlLtR11ZlXpRxVV01kxOJSta7qX1K6mJxLp3jW\nrt8u2zCv4jXjraLYzq4ij2ErQXNaNDyrXDGYhZHLE4ictnFJldTEY2StDEVILnnla5XOU6dOEpyc\n29bp2LYLDVaketg4LZyzk0xVSx+Jp+vVzeEtfzNFKOMxUs0Kihrp2VZ/E34tcHhh4ulNTmkl2WYc\nRxBKnKEY3he67OqJb+DBUqY+lKSjVoVEl7KNeFnXnhE6zi5t/djbQ8uGNr4i1GFGm0n60ldo9SVT\nqaLjftRjuU+V8VUh2ZXtyZ6nDK6qUVkks0dGnz8DmMRjKlSzjeOmuvMejj5YeqsTS/3wvob4XL5T\nlx2OxjBxbnQ7PtQY8aim7O6l7L3MnDuI0cdSU4StK2qe6NrgprtJM9Dz+krfR38wqvllysXI1s7r\nuYk1K/NBNNC8na6XmTG19WVqU4t6J8tQjd7xa8gLoxcoyy7Ipej3Hi2k/wB235lbjNvXKvNhYmLV\ny1LmVxjGL5yl4IitCVRXqyy0/ZXMsqVlxdaNVtRTlSg+3KKvfwQ9LHwq2UM/k6bQ+DnGVSagrRis\nsY/qZ8dgHbraNTq5R9WSdrea5mOpF6fLbYq4hXqwapzcY06sWrvRr37HBYjC9TiJ05JvK7N7nb4d\nPiEsuJrOp1b9RwSueX0l4VCnGOKpQcIerJJ6Iz2zG9u+XMOFJP1c3vEmoxi9En3GqTybS0M+RyzS\nsnpzZMXXucRpdS6arN9ZkSce7RWN/B6lD7JisNVcYKpRbjJ+0tUjk6vHMVVo0qco0v3ayqSjrJeL\n5hS45iqTeWNF3Vu1C5jcq54b5Nd9i6bSwsW4tye7at8O88T9pV3vlfuGrcXxdeKjVkpKOivfQjTZ\nKauQ5pvXY82WLqS5R+BKxtRRy2g15EHoKmqjb61RQSjK2lVSSXLkYKeNq0m3FRu/AvpcXr0oZVSo\nteMXr+YGuLpQ7Mo3fkKqc5ytBZVybMMOIVISlJQp3lvdB+0a7Vm01e9gr0qdGV5uLi5L8xVVtNKU\nLZud9Dzvt9W+0PgH2+tZK0LLlZjyPdweIo0akZThmWtl4lGIlOtfIsietoo8v9o1rJWho77D/tfF\nJ3XVrwykxdalQqOTspZvHQh0Xnyzvq93czLi+JTbaptvviK+K4nNfs+Vi+UbOpyx3cV4kqdNR9Tt\nLdvmefLiFebbbWruI8XUfKPwHkem3JR1jZPYzzjlm00vczJ9qna1o/APtUstskPOwwbk4Ts5JW21\nRgxSiq8svq8iVipqNssfgVTm5u7SXkIUoABUSQAABJAAMAtyblANES5Kk0QethYTnSioOSfKz0Nt\nHAVczdSlPbfNax5eG4xiMNR6qEKMktnKN2iKnGMZUbvNJPkloQeoqbp5s9XI77Z3dD1KlOVN5I55\n+02eGuIVrttRk3q8yuTLiNZ/dpp+CKPXlOTtnsmuTRt4TOnXrp18PQnBPW8ddu85+nxavTd8lKf4\nk3/kapxmvUmp9VQg7W7MWl+pKrqMbiOH4iaVGg6M6bs7WszBiOpjVinCybvdO7PD/auI10h8BJ8R\nr1LZnHTbQmGve+3UsLicsFGqtk+aNGKrpzs45VLa5y0cZUi01GF077F1Xi2JqpZlDTuRuZiedew5\nuFaMcvW308vMpmp0JSlRm3J+snszy48TrxbayXe+hL4nXfKHwI1r2MLia1CcK1OUlPwOp4f0hpzt\nTxPYntmWzPni4liIqyyoaPFK8fuwfi0/qanKxmyV9epVoVYpwkmn3Mdy5M+TYfpDj8NK9GcY+Fnb\n9TfHpvxaKtbDvzg/qdJzjleD6VZMnIrbHzb064tb+Hhfkf1J9O+LL+Xhfkf1HfDsr6R1ce5BkhzS\nPnD6ecWf8vC/JL6ivpzxZ/cwvyP6k74dlfRqlSFOL7SSR4mM4nCUnCg3N858kcNiukvEcX/FnC3c\nk0v1KYccxcFb9214p/Ud69jtqeNdLKoOx62Grdc4O95pux849I8ZmUlToK3dB/UvpdLuI0ZqUKeH\nune2R2/U3erLxxmdPOfdH0yTVW6qQS7pJXPMxFGeJWIo9h07Wi0u0ce+nXFZRs6WFt+CX/uEfTfi\nbT/dYRN81Td/1MTlI1eNLiaNalWlTqwkp7NcimpRlTTUkk1HdcijEdIMZiKjqVI0sz3ai/qV/tnE\nuMk4UnmVtU/qb7uDHbzecAAed3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAB//9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('qGU-SqUTees', width=800, height=600)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\nAAAAAAAP/9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('UlZtr9fjQcU', width=800, height=600)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\nQhAAhCEAP//Z\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('P18EdAKuC1U', width=800, height=600)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Rozpoznawanie obrazów" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "Źródło: Christoph Körner, https://chaosmail.github.io/deeplearning/2016/10/22/intro-to-deep-learning-for-computer-vision/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "Źródło: Christoph Körner, https://chaosmail.github.io/deeplearning/2016/10/22/intro-to-deep-learning-for-computer-vision/" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz\nODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj\nY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQED\nEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAAAgQDBQYBB//EAEwQAAEDAgMDBggLBgUEAgMAAAEAAgME\nERIhMQVBUQYTImFxgRQykZKhscHRFRYjQkRSVILC0uEHFzNDU2IkcoOT8DRzsvFFoiY1Y//EABgB\nAQEBAQEAAAAAAAAAAAAAAAABAgME/8QAKhEBAQACAgIBAwMDBQAAAAAAAAECESExAxJBIjJRYXGh\nE0LwBBSBkcH/2gAMAwEAAhEDEQA/APn6IiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAi\nIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIC\nIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIg\nIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiK/snZFRtZ8jKd0bTGATjJHqCCgi6I8jNogX52l\n893uWpfs2ZhcC+MhptcE29SdG1NFm8GfxavfBH28ZvlQYEV6DZU85sx0feT7laPJqtAvjh84+5Tc\nXVadFt28nK1xsHQ+U+5Z2cktov0dAO1x9ybhqtCi6E8jtoggGalz/vd7ljPJOv3SU57HO9ybNVok\nW/j5IbRkdhbJT3/zO9yzjkNtQ/zqQffd+VXZquZRdN8R9p3tz1J57vyoeQ20x/OpPPd+VDVcyi6X\n4j7T/rUnnu/KoO5GbSbrLTHse73IarnUXQ/E7aNr85Tec73LGeSe0B8+Dzj7lNmq0SLd/Fevv48H\nnH3LFJyerIxcuiPYT7lTTUorztlVDXWuy/afcsE9LJA/A+10RgRe4TdWaaglqXNaxzAXG2ZQVUXQ\nfE/aP9Wm853uXvxO2j/VpvOd7ldVNueRdB8T9o/1abzne5PiftH+rTec73J603HPoug+J+0f6tN5\n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\nOpXtJwdIdagQW5EG6p/DdT9SLyH3p8NVFrc3D5p96aqbi81zidclPO+a1fwrLuihHY0+9efCtQPm\nx+Q+9XVNxti5w6IXoY8jqWpG1qi98MZ7j70O16k7o/Ifemqu43AYG59anYvcAxl+zRaVu152i3Nw\nu7Qfeso2/VgWEcIH+U+9NVNxu46Nzv4jjbgFehp2sFgMlzA5RVg+ZB5p96n8Zq0fy4PNPvTVXcda\n1oG5ZAFx45UVw/l0/mn3r340139On80+9XRuOyAspYBIxwJLeBGoXF/Guv8A6dP5p96k3lZXt0ip\n/Nd71LKTKNptmn5tnwjAAJI3YKlg0PByrMdEXxVLYml7HB4OhuFrX8o6yTn8UcBE7MDxhNu3XVU4\n9ozRswNDLdYK3P1ZvF3H1Oh5W0M7WNqWvp3uy6Qu2/at6yWORgcxzXNO8FfEm7VnAIwxkHcQfes9\nNyhr6W3MPay3C/vXT6L+iPrs+Bl3xHBJbLK4PcvGNnkha6WniLiM28F81HLvbAFrU56y13vXrOXu\n2GvDsFMbbi11j/8AZZuvhHV7c2Aa844A6CT6pbdq1FLya2xBNE1z4jTiQPcG3vkexUv3jbY+z0X+\n278yfvG2x9nov9t35ljn8rOGf9o0UTPg90ceBzucxdfiriVt9vco6zb/ADHhkcDOYxYeaaRe9r3u\nTwWoVBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREB\nERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQ\nEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBER\nAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQER\nEBERAREQEREH/9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('acKTCF0sAfc', width=800, height=600)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "Źródło: https://www.techspot.com/news/58872-google-new-image-recognition-software-can-describe-entire.html" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\n5VqFLS1iKG4Dg+Cjk1mOV7UlM7fDNJy0swGu+FAqaRu+4ouQBk+laRDnzrqnBHGaKCRmgskkMjZI\nA+VQIrgrp6VFHAqJNdFFFc5NcIqVFEcA9K6BzzXaKgCBUTUjUeKo5RRRQGB54NTWV168ioUVdMMx\nXrRtlHeNvNTim01q7UY95Lj/AO53v71lGjFX2qerY/jl1x3of/xL+1VS61eSDBupAPJDtH5Vl8V2\nr71PVc87sSckk9STVe4nxrmBiu44rNtrWOg10dah0oBPh4VBfIqumc4xS4wKOpqXhyOaqaGctXOt\nA9aM+VEcrtdGKDxjwoA9aAcUda5jPWgkNuOpzXRjxzUcqK4XPhQTHd6nAqt2y5x0oVS5wOtS7Fsd\nOR1rOiuipxxlpQh6npWhYWUQv2t7+OQeAA4I9aWqzR1xTMaZAVBuOMn0FehufZq0e2Z7WZkkA4Dn\ng1h2bnTLwSXMAdcFSrc5HmKm7Oh6zStPhWwaLg78jJrzcK28Es9vfRPkZ2sPA1q22s2qSNFE3cYZ\nUHwNYd5OLm7aZZNvHlWePGtS52rbA8cjwPnUVmJXHiPHNUZzxjnPWpgDdt8PDFdMZNncvVePSolx\nSvvU38/5ComeQ9W/IVfYOcfOpKCxAAyT0FICVx0arIrueJ9yPhvPaDU1WlLaPFHvmwo6ClCPGqZb\n65m/xJS2PMCq+2k/m/KpL/JTQ6+lErvK4Z3ZiBjk0r20mMbuPlXO1fz/ACrWxF5JIqyDT7m7GYo8\njxYnAFKdq/nV8Wo3cMeyOXavoo/apb/BGpHo8VtC73cgDque70HlWNJKXPPA8qskv7qWPs3lJU+G\nBS1Yn+1SzzxQxyc1Gitai0YIFSDOBhSQPGqQxHQ13e3nV0WYzzRjrkVVuPnXd7edNFnlXap3Hzru\n9vOmqs6Gu1VvY+NHaN51NNW1zGDVe9vOje3nTTVua5mqtx867vbzppqfjzXelV72865uPnTTVlcx\nUNx86Nx86aaniiobj50ZNNNTwSMgcVzFcDsOhoLsep/KmmpYoxiobj50ZNNNTJoHSobj50bj501F\ngA8a5iobjRuOOtXUT56UVDcaMmmqsrvifGqtxxjNG4+dNRZiu4AwSwqsux8a5kmmqsL+A5qDMW6m\no0VNBRRQDioLE7oJINMRvlc4xmlNzeddDsvQ4p0liyRtsgOMEGvb6bfWl/ZpFcyoC4AAJ6HyrwZJ\nJyTXVdkIKkgjmpymrHrpNHlf3i3up5QgJ7DnIx4fOvKTwvbzNFIMMtNPrWouFDXTEL04FKTTyTyG\nSVtzt1OKs/2tCHA+EH50YPlUNx867vbzrWxFqgHw5qQHgRVG9s5zXe1fz/Kr7REKKKKwoooooCii\nigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKKKK\nAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooC\niiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiigKK\nKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiig/9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('8BFzu9m52sc', width=800, height=600)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Tłumaczenie maszynowe" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\naYphL2cZZQrK0eTuqnUMn6IpaNQAAowFAVQNgABgADwwK8nv8KzjZGDa8I/UXn32uX8J3jHzbhf6\ni7++V3YaeSOWRw4qHcleJ62uGIBIGSAcDOMnuGe6kJbjCqcjLdkrnPnEDnyPPHsrya3wmuMH/VuF\n/qbv75SUvwkuLMQTb8M2IO0N1+Kcj/W/EV09+JyenkUrRRRXEd4UUUUAUUUUAUUUUAUUUUAUUUUA\nUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAU\nUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUU\nUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUU\nUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUU\nAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUA\nUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUAUUUUB/9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('06olHmcJjS0', width=800, height=600)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\niceJFecnHGQJolgjknEolGOhZHREVwLIoonHXBbErjxRalkoyTigkkTAlFE0YjhomuAEkjTv9sWW\nzVi4reH4kdZHO7oNtys92ysvCu6mmVruf7PKVbfcqt1purcN5lrlJ+vnJM4r0lTurnNOVvbKMfGq\nPL9iNOXdPeuM0nDXhiPA0aFrOrB4zlm9b7Fbpy3vtHKfI3FJlz3tOtN5q1HJ+42rPa9zSkp06s1F\necnV2MqXHLz0FE9l13qoNroJyheEvWWfdJN0VKVDlccd14Z1Nnd0Gz9o1OSp1uTrfdVVuy/2fPrW\nc7OvuyTjrwOhWtbK6anUk4Z/uR4x/I3W7M1fRjJ5LY217vZt1T2dtee/Sq/V7rOVLzNnreY7awwZ\nD4mCoyOPADGhAb1ImXxMPQqoSKZLQulwKZvQgpk0VTZbLgUz4EFUmVTLJFcyCqSRXLgTkVyyZlVU\nkQeiJTepF8CD58jJhAqAMmAMgwAMm9sZr5Ys8vCdaKz+ZokqcpQmpxeJReU1zMSsfr7DbT5OnKUo\n7ueYorchKW8qe/LmRy+5zbVbamz6tS7UN+FTd0WE9Ebl1VqU6LlTVJPjrnDPPMe3qi0SVrqjcbtN\n05xw9V0ewso29Ci5OLTbi0mznULipUuN3+XqRfFwbXvNmvcW1rB1bmpu0ItKT9bGfCZ+vnm16XI7\nUuKe85bs+LWDSNraFfvy/r3EVpUqOS9Rrbr6Dvjyz+sAYM7r6CowYMgAb2x/rcvwfujRN7Y/1uX4\nH70UdxLJNIgk8E1kyMp6k1x4EEtSxcCiTWScVoRXSWJlE0tCxIiloTRRKJZHiRSLEgJonhEUZ5wJ\nxI3NxG1taleo/BpxbZYjhd19w6ezYW8fpVp4/Jf7wBxKFfFKrtCq83NzJqDf2I87/Yu2bY8s+Xra\np/Rj+5znLlKkaUfowSpr9z1tlRUYRWMYR5/JbHfx11ZQt1piKRuQo4J0ocOY24QWOY88e3oxpyoJ\n6tIhKn5tDfnT05iqUMIGOLeWcKsXlLPqOC3K2uJ0Zt4esT19SCaZ5/bdtmnysfpQ1N0t7c7x6X7N\nq0dp2k9k3T0l4VCfPCR6fuW2jLaGx4OrLNei3SqdOVznze3uZUa0akXhxeUep7jL1Pbd7RT8C5jy\nqXQ85f8A9uw9dJeWz23OBgydGQDeMZ0Ac5GXAkQk9QqDKpcGWspkwK2UzLJMpkyCqTK5PJZPUpZm\n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\n5T0I9o5T0I9o7amAHKehHtHKehHtHbUwA5T0I9o5T0I9o7amAHKehHtHKehHtHbUwA5T0I9o5T0I\n9o7amAHKehHtHKehHtHbUwA5T0I9o5T0I9o7amAHKehHtHKehHtHbUwA5T0I9o5T0I9o7amAHKeh\nHtHKehHtHbUwA5T0I9o5T0I9o7amAHKehHtHKLxI9vxHbUwA5ReJHt+I5ReJHt+I7amAHKLxI9vx\nHKLxI9vxHbUwA5ReJHt+I5ReJHt+I7amAHKLxI9vxHKLxI9vxHbUwA5ReJHt+I5ReJHt+I7amAHK\nLxI9vxHKLxI9vxHbUwA5ReJHt+I5ReJHt+I7amAHKLxI9vxHKLxI9vxHbUwA5ReJHt+I5ReJHt+I\n7amAHKLxI9vxHKLxI9vxHbUwA5ReJHt+I5ReJHt+I7amAHKLxI9vxHKLxI9vxHbUwA5ReJHt+I5R\neJHt+I7amIAA86gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAD/9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('rek3jjbYRLo', width=800, height=600)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\nEIAQhCAEIQgBCEIAQhCA/9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('_GdSC1Z1Kzs', width=800, height=600)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Inne zastosowania" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* systemy rekomendacyjne\n", + "* detekcja spamu\n", + "* klasyfikacja dokumentów/obrazów\n", + "* analiza nastrojów\n", + "* rozpoznawanie pisma odręcznego\n", + "* samochody autonomiczne\n", + "* przewidywanie kursów giełdowych\n", + "* automatyczna diagnostyka medyczna\n", + "* analiza genów\n", + "* sztuczna inteligencja w grach\n", + "* ..." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz\nODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj\nY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQED\nEQH/xAAbAAACAwEBAQAAAAAAAAAAAAAAAgEDBAUGB//EAEIQAAICAQIFAQUGBQIDBgcAAAECAAMR\nBCEFEjFBURMUImFxkQYyQlKB0RUjobHBM2IksuFDU2Nyc/AHFjREgpLx/8QAGgEAAwEBAQEAAAAA\nAAAAAAAAAAECAwQFBv/EACYRAQEAAgMBAAIBBQEBAQAAAAABAhEDEiExQVETBBQiMnFhsUL/2gAM\nAwEAAhEDEQA/APn8IQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIA\nQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCE\nIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgB\nCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEIQgBCEIAQhCAEJoGksPdfrFs0z1gkldvEAphDEMQA\nhJAzGWtmYAYzAEhNf8Pt/Mn1P7Su7SvSvMzIfkZPaVd485N2KIRuQ8uYKpY4EpBYR2rKnBIPykpS\nXIAZcmBybVwmh9HYq5JX9JX6R8iKXYuNn1XCWei3wl1eg1Fg91frtC2Q5jb8jLCXPprEJBAyDg4l\nfIRGVmiwj+k3IWyMCRymBFhG5D5E1Lw25kDc1YBGdyf2itk+qxwyy+RjhNx4XcPx1fU/tFPDrR+K\nv6n9ou+P7X/Dn+mOE1ewW/mT6mR7DZ+ZPqYdon+PP9M0Jc+mevqViilj4x0lJss8VwmgaOwnqv1h\n7HZn7y/WLZ9azwmn2G38yfUxPZnwTldob2LjZ9Uwlw07nuIz6OxMZZNxnYxpZ4S72Z/KyfZX8rAK\nITQujsY4DL9Zr/gep9lOo9WnlHUZOf7QPW3MhNi8NuY4D1/U/tD+G3H8df1P7QGqxwm4cKvP4q/q\n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\nQhACEIQAhCEAIQhACEIQAhCEAIQhACEIQD//2Q==\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IPython.display.YouTubeVideo('SUbqykXVx0A', width=800, height=600)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 1.2. Czym jest uczenie maszynowe?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "> Uczenie maszynowe to dziedzina nauki,\n", + "> która daje komputerom umiejętność uczenia się\n", + "> bez programowania ich _explicite_.\n", + "\n", + "> — Arthur Samuel, 1959" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "> Mówimy, że program komputerowy **uczy się**\n", + "> z doświadczenia E w odniesieniu do zadania T i miary skuteczności P,\n", + "> jeżeli jego skuteczność wykonywania zadania T mierzona według P\n", + "> wzrasta z doświadczeniem E.\n", + "\n", + "> — Tom Mitchell, 1998" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "Źródło: Drew Conway, http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Uczenie maszynowe to:\n", + "\n", + "* doskonalenie działania dla pewnych zadań na podstawie doświadczenia" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* tworzenie systemów, które doskonalą swoje działania na podstawie przeszłych doświadczeń" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* zestaw metod, które potrafią w sposób automatyczny wykrywać wzorce w danych, a następnie używać wcześniej niezaobserwowanych wzorców do przewidywania przyszłych zjawisk" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Charakterystyczne cechy uczenia maszynowego:\n", + "\n", + "* „automatyzacja automatyzacji”\n", + "* komputer „sam się programuje”\n", + "* modelowanie danych zastępuje pisanie programu" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "Źródło: https://recast.ai/blog/machine-learning-algorithms/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 1.3. Metody uczenia maszynowego" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Z jakimi rodzajami zadań mamy do czynienia?\n", + "\n", + "* Uczenie nadzorowane\n", + " * Regresja\n", + " * Klasyfikacja\n", + "* Uczenie nienadzorowane\n", + " * Klastrowanie\n", + "* Uczenie przez wzmacnianie\n", + "* Systemy rekomendacyjne" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Klasyfikator\n", + "\n", + "* Klasyfikator to funkcja $h$, która przykładowi $x$ przyporządkowuje prognozowaną wartość $h(x)$.\n", + "* Jeżeli funkcja $h$ jest ciągła, to mówimy o zagadnieniu **regresji**.\n", + "* Jeżeli funkcja $h$ jest dyskretna, to mówimy o zagadnieniu **klasyfikacji**." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm uczący\n", + "\n", + "* Dane są przykładowe obserwacje $(X, y)$.\n", + "* Staramy się dobrać funkcję (klasyfikator) $h$ tak, żeby $h(x) \\sim y$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "W jaki sposób można określić, czy klasyfikator jest „dobry”?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Podział metod uczenia maszynowego\n", + "\n", + "> \\[Każdy algorytm uczenia maszynowego\\] stanowi kombinację dokładnie trzech składników.\n", + "> Te składniki to:\n", + "> * reprezentacja\n", + "> * ewaluacja\n", + "> * optymalizacja\n", + "\n", + "> — Pedro Domingos, “A Few Useful Things to Know about Machine Learning”" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Reprezentacja\n", + "\n", + "* drzewa decyzyjne\n", + "* regresja liniowa\n", + "* regresja logistyczna\n", + "* naiwny klasyfikator bayesowski\n", + "* algorytm $k$ najbliższych sąsiadów\n", + "* sieci neuronowe\n", + "* maszyny wektorów nośnych\n", + "* algorytmy genetyczne\n", + "* ..." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Ewaluacja\n", + "\n", + "* skuteczność (dokładność)\n", + "* precyzja i pokrycie\n", + "* błąd średniokwadratowy\n", + "* _information gain_\n", + "* _logistic loss_\n", + "* BLEU\n", + "* ..." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Optymalizacja\n", + "\n", + "* optymalizacja kombinatoryczna:\n", + " * wyszukiwanie zachłanne,\n", + " * _beam search_...\n", + "* optymalizacja ciągła:\n", + " * nieograniczona:\n", + " * metoda gradientu prostego,\n", + " * metoda Newtona...\n", + " * ograniczona:\n", + " * programowanie liniowe..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w1/zumz181a.pdf b/w1/zumz181a.pdf new file mode 100644 index 0000000..24b741f Binary files /dev/null and b/w1/zumz181a.pdf differ diff --git a/w1/zumz181b.ipynb b/w1/zumz181b.ipynb new file mode 100644 index 0000000..5618b35 --- /dev/null +++ b/w1/zumz181b.ipynb @@ -0,0 +1,41701 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe UMZ 2017/2018\n", + "# 1. Wprowadzenie. Regresja liniowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 1.4 Funkcja kosztu" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Zadanie\n", + "Znając $x$ – ludność miasta (w dziesiątkach tysięcy mieszkańców),\n", + "należy przewidzieć $y$ – dochód firmy transportowej (w dziesiątkach tysięcy dolarów).\n", + "\n", + "(Dane pochodzą z kursu „Machine Learning”, Andrew Ng, Coursera)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Nagłowki, można zignorować\n", + "\n", + "import numpy as np\n", + "import matplotlib\n", + "import matplotlib.pyplot as pl\n", + "import ipywidgets as widgets\n", + "\n", + "%matplotlib inline\n", + "%config InlineBackend.figure_format = 'svg'\n", + "\n", + "from IPython.display import display, Math, Latex" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Dane" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6.1101,17.592\n", + "\n", + "5.5277,9.1302\n", + "\n", + "8.5186,13.662\n", + "\n", + "7.0032,11.854\n", + "\n", + "5.8598,6.8233\n", + "\n", + "8.3829,11.886\n", + "\n", + "7.4764,4.3483\n", + "\n", + "8.5781,12\n", + "\n", + "6.4862,6.5987\n", + "\n", + "5.0546,3.8166\n", + "\n" + ] + } + ], + "source": [ + "with open('data01.csv') as data:\n", + " for line in data.readlines()[:10]:\n", + " print(line)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Wczytanie danych" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x = [6.1101, 5.5277, 8.5186, 7.0032, 5.8598, 8.3829, 7.4764, 8.5781, 6.4862, 5.0546]\n", + "y = [17.592, 9.1302, 13.662, 11.854, 6.8233, 11.886, 4.3483, 12.0, 6.5987, 3.8166]\n" + ] + } + ], + "source": [ + "import csv\n", + "\n", + "reader = csv.reader(open('data01.csv'), delimiter=',')\n", + "\n", + "x = list()\n", + "y = list()\n", + "for xi, yi in reader:\n", + " x.append(float(xi))\n", + " y.append(float(yi)) \n", + " \n", + "print('x = {}'.format(x[:10])) \n", + "print('y = {}'.format(y[:10]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Hipoteza i parametry modelu" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ h_{\\theta}(x) = \\theta_0 + \\theta_1 x $$\n", + "$$ \\theta = \\left[\\begin{array}{c}\\theta_0\\\\ \\theta_1\\end{array}\\right] $$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "# Funkcje rysujące wykres kropkowy oraz prostą regresyjną\n", + "\n", + "def regdots(x, y): \n", + " fig = pl.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.scatter(x, y, c='r', s=50, label='Dane')\n", + " \n", + " ax.set_xlabel(u'Wielkość miejscowości [dzies. tys. mieszk.]')\n", + " ax.set_ylabel(u'Dochód firmy [dzies. tys. dolarów]')\n", + " ax.margins(.05, .05)\n", + " pl.ylim(min(y) - 1, max(y) + 1)\n", + " pl.xlim(min(x) - 1, max(x) + 1)\n", + " return fig\n", + "\n", + "def regline(fig, fun, theta, x):\n", + " ax = fig.axes[0]\n", + " x0, x1 = min(x), max(x)\n", + " X = [x0, x1]\n", + " Y = [fun(theta, x) for x in X]\n", + " ax.plot(X, Y, linewidth='2',\n", + " label=(r'$y={theta0}{op}{theta1}x$'.format(\n", + " theta0=theta[0],\n", + " theta1=(theta[1] if theta[1] >= 0 else -theta[1]),\n", + " op='+' if theta[1] >= 0 else '-')))\n", + "\n", + "def legend(fig):\n", + " ax = fig.axes[0]\n", + " handles, labels = ax.get_legend_handles_labels()\n", + " # try-except block is a fix for a bug in Poly3DCollection\n", + " try:\n", + " fig.legend(handles, labels, fontsize='15', loc='lower right')\n", + " except AttributeError:\n", + " pass\n", + "\n", + "fig = regdots(x,y)\n", + "legend(fig)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Hipoteza: funkcja liniowa jednej zmiennej\n", + "\n", + "def h(theta, x):\n", + " return theta[0] + theta[1] * x" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie interaktywnego wykresu\n", + "\n", + "sliderTheta01 = widgets.FloatSlider(min=-10, max=10, step=0.1, value=0, description=r'$\\theta_0$', width=300)\n", + "sliderTheta11 = widgets.FloatSlider(min=-5, max=5, step=0.1, value=0, description=r'$\\theta_1$', width=300)\n", + "\n", + "def slide1(theta0, theta1):\n", + " fig = regdots(x, y)\n", + " regline(fig, h, [theta0, theta1], x)\n", + " legend(fig)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "58798d3c3e2c4f14b9fc02d62f47f1da", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(FloatSlider(value=0.0, description='$\\\\theta_0$', max=10.0, min=-10.0), FloatSlider(value=0.0, description='$\\\\theta_1$', max=5.0, min=-5.0), Button(description='Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(slide1, theta0=sliderTheta01, theta1=sliderTheta11)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Funkcja kosztu" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Będziemy szukać takich parametrów $\\theta = \\left[\\begin{array}{c}\\theta_0\\\\ \\theta_1\\end{array}\\right]$, które minimalizują fukcję kosztu $J(\\theta)$:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ \\hat\\theta = \\mathop{\\arg\\min}_{\\theta} J(\\theta) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ \\theta \\in \\mathbb{R}^2, \\quad J \\colon \\mathbb{R}^2 \\to \\mathbb{R} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Błąd średniokwadratowy\n", + "#### (metoda najmniejszych kwadratów)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ J(\\theta) \\, = \\, \\frac{1}{2m} \\sum_{i = 1}^{m} \\left( h_{\\theta} \\left( x^{(i)} \\right) - y^{(i)} \\right) ^2 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "$$ J(\\theta_0, \\theta_1) \\, = \\, \\frac{1}{2m} \\sum_{i = 1}^{m} \\left( \\theta_0 + \\theta_1 x^{(i)} - y^{(i)} \\right) ^2 $$" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "def J(h, theta, x, y):\n", + " m = len(y)\n", + " return 1.0 / (2 * m) * sum((h(theta, x[i]) - y[i])**2 for i in range(m))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Oblicz wartość funkcji kosztu i pokaż na wykresie\n", + "\n", + "def regline(fig, fun, theta, x, y):\n", + " ax = fig.axes[0]\n", + " x0, x1 = min(x), max(x)\n", + " X = [x0, x1]\n", + " Y = [fun(theta, x) for x in X]\n", + " cost = J(fun, theta, x, y)\n", + " ax.plot(X, Y, linewidth='2',\n", + " label=(r'$y={theta0}{op}{theta1}x, \\; J(\\theta)={cost:.3}$'.format(\n", + " theta0=theta[0],\n", + " theta1=(theta[1] if theta[1] >= 0 else -theta[1]),\n", + " op='+' if theta[1] >= 0 else '-',\n", + " cost=cost)))\n", + "\n", + "sliderTheta02 = widgets.FloatSlider(min=-10, max=10, step=0.1, value=0, description=r'$\\theta_0$', width=300)\n", + "sliderTheta12 = widgets.FloatSlider(min=-5, max=5, step=0.1, value=0, description=r'$\\theta_1$', width=300)\n", + "\n", + "def slide2(theta0, theta1):\n", + " fig = regdots(x, y)\n", + " regline(fig, h, [theta0, theta1], x, y)\n", + " legend(fig)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c380a0076fb4480a9f9a0eb4f5fba756", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(FloatSlider(value=0.0, description='$\\\\theta_0$', max=10.0, min=-10.0), FloatSlider(value=0.0, description='$\\\\theta_1$', max=5.0, min=-5.0), Button(description='Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(slide2, theta0=sliderTheta02, theta1=sliderTheta12)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Funkcja kosztu jako funkcja zmiennej $\\theta$" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres funkcji kosztu dla ustalonego theta_1=1.0\n", + "\n", + "def costfun(fun, x, y):\n", + " return lambda theta: J(fun, theta, x, y)\n", + "\n", + "def costplot(hypothesis, x, y, theta1=1.0):\n", + " fig = pl.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.set_xlabel(r'$\\theta_0$')\n", + " ax.set_ylabel(r'$J(\\theta)$')\n", + " j = costfun(hypothesis, x, y)\n", + " fun = lambda theta0: j([theta0, theta1])\n", + " X = np.arange(-10, 10, 0.1)\n", + " Y = [fun(x) for x in X]\n", + " ax.plot(X, Y, linewidth='2', label=(r'$J(\\theta_0, {theta1})$'.format(theta1=theta1)))\n", + " return fig\n", + "\n", + "def slide3(theta1):\n", + " fig = costplot(h, x, y, theta1)\n", + " legend(fig)\n", + "\n", + "sliderTheta13 = widgets.FloatSlider(min=-5, max=5, step=0.1, value=1.0, description=r'$\\theta_1$', width=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1b675985144a43d0997c79ada18bb446", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(FloatSlider(value=1.0, description='$\\\\theta_1$', max=5.0, min=-5.0), Button(description='Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(slide3, theta1=sliderTheta13)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres funkcji kosztu względem theta_0 i theta_1\n", + "\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "import pylab\n", + "\n", + "%matplotlib inline\n", + "\n", + "def costplot3d(hypothesis, x, y, show_gradient=False):\n", + " fig = pl.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111, projection='3d')\n", + " fig.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)\n", + " ax.set_xlabel(r'$\\theta_0$')\n", + " ax.set_ylabel(r'$\\theta_1$')\n", + " ax.set_zlabel(r'$J(\\theta)$')\n", + " \n", + " j = lambda theta0, theta1: costfun(hypothesis, x, y)([theta0, theta1])\n", + " X = np.arange(-10, 10.1, 0.1)\n", + " Y = np.arange(-1, 4.1, 0.1)\n", + " X, Y = np.meshgrid(X, Y)\n", + " Z = np.matrix([[J(hypothesis, [theta0, theta1], x, y) \n", + " for theta0, theta1 in zip(xRow, yRow)] \n", + " for xRow, yRow in zip(X, Y)])\n", + " \n", + " ax.plot_surface(X, Y, Z, rstride=2, cstride=8, linewidth=0.5,\n", + " alpha=0.5, cmap='jet', zorder=0,\n", + " label=r\"$J(\\theta)$\")\n", + " ax.view_init(elev=20., azim=-150)\n", + "\n", + " ax.set_xlim3d(-10, 10);\n", + " ax.set_ylim3d(-1, 4);\n", + " ax.set_zlim3d(-100, 800);\n", + "\n", + " N = range(0, 800, 20)\n", + " pl.contour(X, Y, Z, N, zdir='z', offset=-100, cmap='coolwarm', alpha=1)\n", + " \n", + " ax.plot([-3.89578088] * 2,\n", + " [ 1.19303364] * 2,\n", + " [-100, 4.47697137598], \n", + " color='red', alpha=1, linewidth=1.3, zorder=100, linestyle='dashed',\n", + " label=r'minimum: $J(-3.90, 1.19) = 4.48$')\n", + " ax.scatter([-3.89578088] * 2,\n", + " [ 1.19303364] * 2,\n", + " [-100, 4.47697137598], \n", + " c='r', s=80, marker='x', alpha=1, linewidth=1.3, zorder=100, \n", + " label=r'minimum: $J(-3.90, 1.19) = 4.48$')\n", + " \n", + " if show_gradient:\n", + " ax.plot([3.0, 1.1],\n", + " [3.0, 2.4],\n", + " [263.0, 125.0], \n", + " color='green', alpha=1, linewidth=1.3, zorder=100)\n", + " ax.scatter([3.0],\n", + " [3.0],\n", + " [263.0], \n", + " c='g', s=30, marker='D', alpha=1, linewidth=1.3, zorder=100)\n", + "\n", + " ax.margins(0,0,0)\n", + " fig.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "costplot3d(h, x, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def costplot2d(hypothesis, x, y, gradient_values=[], nohead=False):\n", + " fig = pl.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.set_xlabel(r'$\\theta_0$')\n", + " ax.set_ylabel(r'$\\theta_1$')\n", + " \n", + " j = lambda theta0, theta1: costfun(hypothesis, x, y)([theta0, theta1])\n", + " X = np.arange(-10, 10.1, 0.1)\n", + " Y = np.arange(-1, 4.1, 0.1)\n", + " X, Y = np.meshgrid(X, Y)\n", + " Z = np.matrix([[J(hypothesis, [theta0, theta1], x, y) \n", + " for theta0, theta1 in zip(xRow, yRow)] \n", + " for xRow, yRow in zip(X, Y)])\n", + " \n", + " N = range(0, 800, 20)\n", + " pl.contour(X, Y, Z, N, cmap='coolwarm', alpha=1)\n", + "\n", + " ax.scatter([-3.89578088], [1.19303364], c='r', s=80, marker='x',\n", + " label=r'minimum: $J(-3.90, 1.19) = 4.48$')\n", + " \n", + " if len(gradient_values) > 0:\n", + " prev_theta = gradient_values[0][1]\n", + " ax.scatter([prev_theta[0]], [prev_theta[1]],\n", + " c='g', s=30, marker='D', zorder=100)\n", + " for cost, theta in gradient_values[1:]:\n", + " dtheta = [theta[0] - prev_theta[0], theta[1] - prev_theta[1]]\n", + " ax.arrow(prev_theta[0], prev_theta[1], dtheta[0], dtheta[1], \n", + " color='green', \n", + " head_width=(0.0 if nohead else 0.1), \n", + " head_length=(0.0 if nohead else 0.2),\n", + " zorder=100)\n", + " prev_theta = theta\n", + " \n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "fig = costplot2d(h, x, y)\n", + "legend(fig)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Cechy funkcji kosztu\n", + "* $J(\\theta)$ jest funkcją wypukłą\n", + "* $J(\\theta)$ posiada tylko jedno minimum lokalne" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 1.5. Metoda gradientu prostego" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Metoda gradientu prostego\n", + "Metoda znajdowania minimów lokalnych." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Idea:\n", + " * Zacznijmy od dowolnego $\\theta$.\n", + " * Zmieniajmy powoli $\\theta$ tak, aby zmniejszać $J(\\theta)$, aż w końcu znajdziemy minimum." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "costplot3d(h, x, y, show_gradient=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przykładowe wartości kolejnych przybliżeń (sztuczne)\n", + "\n", + "gv = [[_, [3.0, 3.0]], [_, [2.6, 2.4]], [_, [2.2, 2.0]], [_, [1.6, 1.6]], [_, [0.4, 1.2]]]\n", + "\n", + "# Przygotowanie interaktywnego wykresu\n", + "\n", + "sliderSteps1 = widgets.IntSlider(min=0, max=3, step=1, value=0, description='kroki', width=300)\n", + "\n", + "def slide4(steps):\n", + " costplot2d(h, x, y, gradient_values=gv[:steps+1])" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e9b6665115b748edb457981078f0042c", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(IntSlider(value=0, description='kroki', max=3), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact(slide4, steps=sliderSteps1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Metoda gradientu prostego\n", + "W każdym kroku będziemy aktualizować parametry $\\theta_j$:\n", + "\n", + "$$ \\theta_j := \\theta_j - \\alpha \\frac{\\partial}{\\partial \\theta_j} J(\\theta) \\quad \\mbox{ dla każdego } j $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Współczynnik $\\alpha$ nazywamy *długością kroku* lub *współczynnikiem szybkości uczenia* (_learning rate_)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "$$ \\begin{array}{rcl}\n", + "\\dfrac{\\partial}{\\partial \\theta_j} J(\\theta)\n", + " & = & \\dfrac{\\partial}{\\partial \\theta_j} \\dfrac{1}{2m} \\displaystyle\\sum_{i = 1}^{m} \\left( h_{\\theta} \\left( x^{(i)} \\right) - y^{(i)} \\right) ^2 \\\\\n", + " & = & 2 \\cdot \\dfrac{1}{2m} \\displaystyle\\sum_{i=1}^m \\left( h_\\theta \\left( x^{(i)} \\right) - y^{(i)} \\right) \\cdot \\dfrac{\\partial}{\\partial\\theta_j} \\left( h_\\theta \\left( x^{(i)} \\right) - y^{(i)} \\right) \\\\\n", + " & = & \\dfrac{1}{m}\\displaystyle\\sum_{i=1}^m \\left( h_\\theta \\left( x^{(i)} \\right) - y^{(i)} \\right) \\cdot \\dfrac{\\partial}{\\partial\\theta_j} \\left( \\displaystyle\\sum_{i=0}^n \\theta_i x_i^{(i)} - y^{(i)} \\right)\\\\\n", + " & = & \\dfrac{1}{m}\\displaystyle\\sum_{i=1}^m \\left( h_\\theta \\left( x^{(i)} \\right) -y^{(i)} \\right) x_j^{(i)} \\\\\n", + "\\end{array} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Czyli dla regresji liniowej jednej zmiennej:\n", + "\n", + "$$ h_\\theta(x) = \\theta_0 + \\theta_1x $$\n", + "\n", + "w każdym kroku będziemy aktualizować:\n", + "\n", + "$$\n", + "\\begin{array}{rcl}\n", + "\\theta_0 & := & \\theta_0 - \\alpha \\, \\dfrac{1}{m}\\displaystyle\\sum_{i=1}^m \\left( h_\\theta(x^{(i)})-y^{(i)} \\right) \\\\ \n", + "\\theta_1 & := & \\theta_1 - \\alpha \\, \\dfrac{1}{m}\\displaystyle\\sum_{i=1}^m \\left( h_\\theta(x^{(i)})-y^{(i)} \\right) x^{(i)}\\\\ \n", + "\\end{array}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "###### Uwaga!\n", + " * W każdym kroku aktualizujemy *jednocześnie* $\\theta_0$ i $\\theta_1$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + " * Kolejne kroki wykonujemy aż uzyskamy zbieżność" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Metoda gradientu prostego – implementacja" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wyświetlanie macierzy w LaTeX-u\n", + "\n", + "def LatexMatrix(matrix):\n", + " ltx = r'\\left[\\begin{array}'\n", + " m, n = matrix.shape\n", + " ltx += '{' + (\"r\" * n) + '}'\n", + " for i in range(m):\n", + " ltx += r\" & \".join([('%.4f' % j.item()) for j in matrix[i]]) + r\" \\\\ \"\n", + " ltx += r'\\end{array}\\right]'\n", + " return ltx" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "def gradient_descent(h, cost_fun, theta, x, y, alpha, eps):\n", + " current_cost = cost_fun(h, theta, x, y)\n", + " log = [[current_cost, theta]] # log przechowuje wartości kosztu i parametrów\n", + " m = len(y)\n", + " while True:\n", + " new_theta = [\n", + " theta[0] - alpha/float(m) * sum(h(theta, x[i]) - y[i]\n", + " for i in range(m)), \n", + " theta[1] - alpha/float(m) * sum((h(theta, x[i]) - y[i]) * x[i]\n", + " for i in range(m))]\n", + " theta = new_theta # jednoczesna aktualizacja - używamy zmiennej tymaczasowej\n", + " try:\n", + " current_cost, prev_cost = cost_fun(h, theta, x, y), current_cost\n", + " except OverflowError:\n", + " break \n", + " if abs(prev_cost - current_cost) <= eps:\n", + " break \n", + " log.append([current_cost, theta])\n", + " return theta, log" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\\large\\textrm{Wynik:}\\quad \\theta = \\left[\\begin{array}{r}-3.5074 \\\\ 1.1540 \\\\ \\end{array}\\right] \\quad J(\\theta) = 4.4908 \\quad \\textrm{po 644 iteracjach}$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "best_theta, log = gradient_descent(h, J, [0.0, 0.0], x, y, alpha=0.02, eps=0.0001)\n", + "\n", + "display(Math(r'\\large\\textrm{Wynik:}\\quad \\theta = ' + \n", + " LatexMatrix(np.matrix(best_theta).reshape(2,1)) + \n", + " (r' \\quad J(\\theta) = %.4f' % log[-1][0]) \n", + " + r' \\quad \\textrm{po %d iteracjach}' % len(log))) " + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie interaktywnego wykresu\n", + "\n", + "sliderSteps2 = widgets.IntSlider(min=0, max=500, step=1, value=1, description='kroki', width=300)\n", + "\n", + "def slide5(steps):\n", + " costplot2d(h, x, y, gradient_values=log[:steps+1], nohead=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fc6dd6fa531b4d8eac47c456831f61a4", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(IntSlider(value=1, description='kroki', max=500), Button(description='Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(slide5, steps=sliderSteps2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Współczynnik $\\alpha$ (długość kroku)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + " * Jeżeli długość kroku jest zbyt mała, algorytm może działać zbyt wolno." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + " * Jeżeli długość kroku jest zbyt duża, algorytm może nie być zbieżny." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 1.6. Regresja liniowa wielu zmiennych" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Przykład – ceny mieszkań" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y : price x1: isNew x2: rooms x3: floor x4: location x5: sqrMetres\n", + "476118.0 False 3 1 Centrum 78 \n", + "459531.0 False 3 2 Sołacz 62 \n", + "411557.0 False 3 0 Sołacz 15 \n", + "496416.0 False 4 0 Sołacz 14 \n", + "406032.0 False 3 0 Sołacz 15 \n", + "450026.0 False 3 1 Naramowice 80 \n", + "571229.15 False 2 4 Wilda 39 \n", + "325000.0 False 3 1 Grunwald 54 \n", + "268229.0 False 2 1 Grunwald 90 \n" + ] + } + ], + "source": [ + "reader = csv.reader(open('data02.tsv'), delimiter='\\t')\n", + "for i, row in enumerate(list(reader)[:10]):\n", + " if i == 0:\n", + " print(' '.join(['{}: {:8}'.format('x' + str(j) if j > 0 else 'y ', entry)\n", + " for j, entry in enumerate(row)]))\n", + " else:\n", + " print(' '.join(['{:12}'.format(entry) for entry in row]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ x^{(2)} = ({\\rm \"False\"}, 3, 2, {\\rm \"Sołacz\"}, 62), \\quad x_3^{(2)} = 2 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Hipoteza" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "W naszym przypadku:\n", + "\n", + "$$ h_\\theta(x) = \\theta_0 + \\theta_1 x_1 + \\theta_2 x_2 + \\theta_3 x_3 + \\theta_4 x_4 + \\theta_5 x_5 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "W ogólności:\n", + "\n", + "$$ h_\\theta(x) = \\theta_0 + \\theta_1 x_1 + \\theta_2 x_2 + \\ldots + \\theta_n x_n $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Jeżeli zdefiniujemy $x_0 = 1$:\n", + "\n", + "$$\n", + "\\begin{array}{rcl}\n", + "h_\\theta(x)\n", + " & = & \\theta_0 x_0 + \\theta_1 x_1 + \\theta_2 x_2 + \\ldots + \\theta_n x_n \\\\\n", + " & = & \\displaystyle\\sum_{i=0}^{n} \\theta_i x_i \\\\\n", + " & = & \\theta^T \\, x \\\\\n", + " & = & x^T \\, \\theta \\\\\n", + "\\end{array}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Metoda gradientu prostego – notacja macierzowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$\n", + "X=\\left[\\begin{array}{cc}\n", + "1 & \\left( \\vec x^{(1)} \\right)^T \\\\\n", + "1 & \\left( \\vec x^{(2)} \\right)^T \\\\\n", + "\\vdots & \\vdots\\\\\n", + "1 & \\left( \\vec x^{(m)} \\right)^T \\\\\n", + "\\end{array}\\right] \n", + "= \\left[\\begin{array}{cccc}\n", + "1 & x_1^{(1)} & \\cdots & x_n^{(1)} \\\\\n", + "1 & x_1^{(2)} & \\cdots & x_n^{(2)} \\\\\n", + "\\vdots & \\vdots & \\ddots & \\vdots\\\\\n", + "1 & x_1^{(m)} & \\cdots & x_n^{(m)} \\\\\n", + "\\end{array}\\right]\n", + "\\quad\n", + "\\vec{y} = \n", + "\\left[\\begin{array}{c}\n", + "y^{(1)}\\\\\n", + "y^{(2)}\\\\\n", + "\\vdots\\\\\n", + "y^{(m)}\\\\\n", + "\\end{array}\\right]\n", + "\\quad\n", + "\\theta = \\left[\\begin{array}{c}\n", + "\\theta_0\\\\\n", + "\\theta_1\\\\\n", + "\\vdots\\\\\n", + "\\theta_n\\\\\n", + "\\end{array}\\right]\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wczytwanie danych z pliku za pomocą numpy\n", + "# Wersje macierzowe funkcji rysowania wykresów punktowych oraz krzywej regresyjnej\n", + "\n", + "data = np.loadtxt('data01.csv', delimiter=',')\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 0:n].reshape(m, n)\n", + "\n", + "# Dodaj kolumnę jedynek do macierzy\n", + "XMx = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "yMx = np.matrix(data[:, 1]).reshape(m, 1)\n", + "\n", + "def hMx(theta, X):\n", + " return X * theta\n", + "\n", + "def regdotsMx(X, y): \n", + " fig = pl.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.scatter([X[:, 1]], [y], c='r', s=50, label='Dane')\n", + " \n", + " ax.set_xlabel('Populacja')\n", + " ax.set_ylabel('Zysk')\n", + " ax.margins(.05, .05)\n", + " pl.ylim(y.min() - 1, y.max() + 1)\n", + " pl.xlim(np.min(X[:, 1]) - 1, np.max(X[:, 1]) + 1)\n", + " return fig\n", + "\n", + "def reglineMx(fig, fun, theta, X):\n", + " ax = fig.axes[0]\n", + " x0, x1 = np.min(X[:, 1]), np.max(X[:, 1])\n", + " L = [x0, x1]\n", + " LX = np.matrix([1, x0, 1, x1]).reshape(2, 2)\n", + " ax.plot(L, fun(theta, LX), linewidth='2',\n", + " label=(r'$y={theta0:.2}{op}{theta1:.2}x$'.format(\n", + " theta0=float(theta[0][0]),\n", + " theta1=(float(theta[1][0]) if theta[1][0] >= 0 else float(-theta[1][0])),\n", + " op='+' if theta[1][0] >= 0 else '-')))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Funkcja kosztu – notacja macierzowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$J(\\theta)=\\dfrac{1}{2|\\vec y|}\\left(X\\theta-\\vec{y}\\right)^T\\left(X\\theta-\\vec{y}\\right)$$ \n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\\Large J(\\theta) = 4.5885$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Wersja macierzowa funkcji kosztu\n", + "\n", + "def JMx(theta,X,y):\n", + " m = len(y)\n", + " J = 1.0 / (2.0 * m) * ((X * theta - y) . T * ( X * theta - y))\n", + " return J.item()\n", + "\n", + "thetaMx = np.matrix([-5, 1.3]).reshape(2, 1) \n", + "\n", + "cost = JMx(thetaMx,XMx,yMx) \n", + "display(Math(r'\\Large J(\\theta) = %.4f' % cost))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Gradient – notacja macierzowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$\\nabla J(\\theta) = \\frac{1}{|\\vec y|} X^T\\left(X\\theta-\\vec y\\right)$$" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\\large \\theta = \\left[\\begin{array}{r}-5.0000 \\\\ 1.3000 \\\\ \\end{array}\\right]\\quad\\large \\nabla J(\\theta) = \\left[\\begin{array}{r}-0.2314 \\\\ -0.3027 \\\\ \\end{array}\\right]$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Wersja macierzowa gradientu funkcji kosztu\n", + "\n", + "def dJMx(theta,X,y):\n", + " return 1.0 / len(y) * (X.T * (X * theta - y)) \n", + "\n", + "thetaMx2 = np.matrix([-5, 1.3]).reshape(2, 1)\n", + "\n", + "display(Math(r'\\large \\theta = ' + LatexMatrix(thetaMx2) + \n", + " r'\\quad' + r'\\large \\nabla J(\\theta) = ' \n", + " + LatexMatrix(dJMx(thetaMx2,XMx,yMx))))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm gradientu prostego – notacja macierzowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ \\theta := \\theta - \\alpha \\, \\nabla J(\\theta) $$" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\\large\\textrm{Wynik:}\\quad \\theta = \\left[\\begin{array}{r}-3.7217 \\\\ 1.1755 \\\\ \\end{array}\\right] \\quad J(\\theta) = 4.4797 \\quad \\textrm{po 1734 iteracjach}$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Implementacja algorytmu gradientu prostego za pomocą numpy i macierzy\n", + "\n", + "def GDMx(fJ, fdJ, theta, X, y, alpha=0.1, eps=10**-3):\n", + " current_cost = fJ(theta, X, y)\n", + " log = [[current_cost, theta]]\n", + " while True:\n", + " theta = theta - alpha * fdJ(theta, X, y) # implementacja wzoru\n", + " current_cost, prev_cost = fJ(theta, X, y), current_cost\n", + " if abs(prev_cost - current_cost) <= eps:\n", + " break\n", + " log.append([current_cost, theta]) \n", + " return theta, log\n", + "\n", + "thetaStartMx = np.matrix([0, 0]).reshape(2, 1)\n", + "\n", + "# Zmieniamy wartości alpha (rozmiar kroku) oraz eps (kryterium stopu)\n", + "thetaBestMx, log = GDMx(JMx, dJMx, thetaStartMx, \n", + " XMx, yMx, alpha=0.01, eps=0.00001)\n", + "\n", + "######################################################################\n", + "display(Math(r'\\large\\textrm{Wynik:}\\quad \\theta = ' + \n", + " LatexMatrix(thetaBestMx) + \n", + " (r' \\quad J(\\theta) = %.4f' % log[-1][0]) \n", + " + r' \\quad \\textrm{po %d iteracjach}' % len(log))) " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 1.7. Metoda gradientu prostego w praktyce" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Kryterium stopu" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Na wykresie zobaczymy porównanie regresji dla różnych wartości `eps`" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "fig = regdotsMx(XMx, yMx)\n", + "theta_e1, log1 = GDMx(JMx, dJMx, thetaStartMx, XMx, yMx, alpha=0.01, eps=0.01)\n", + "reglineMx(fig, hMx, theta_e1, XMx)\n", + "theta_e2, log2 = GDMx(JMx, dJMx, thetaStartMx, XMx, yMx, alpha=0.01, eps=0.000001)\n", + "reglineMx(fig, hMx, theta_e2, XMx)\n", + "legend(fig)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\\theta_{10^{-2}} = \\left[\\begin{array}{r}0.0511 \\\\ 0.7957 \\\\ \\end{array}\\right]\\quad\\theta_{10^{-6}} = \\left[\\begin{array}{r}-3.8407 \\\\ 1.1875 \\\\ \\end{array}\\right]$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Math(r'\\theta_{10^{-2}} = ' + LatexMatrix(theta_e1) +\n", + " r'\\quad\\theta_{10^{-6}} = ' + LatexMatrix(theta_e2)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Długość kroku ($\\alpha$)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Jak zmienia się koszt w kolejnych krokach w zależności od alfa\n", + "\n", + "def costchangeplot(logs):\n", + " fig = pl.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.set_xlabel('krok')\n", + " ax.set_ylabel(r'$J(\\theta)$')\n", + "\n", + " X = np.arange(0, 500, 1)\n", + " Y = [logs[step][0] for step in X]\n", + " ax.plot(X, Y, linewidth='2', label=(r'$J(\\theta)$'))\n", + " return fig\n", + "\n", + "def slide7(alpha):\n", + " best_theta, log = gradient_descent(h, J, [0.0, 0.0], x, y, alpha=alpha, eps=0.0001)\n", + " fig = costchangeplot(log)\n", + " legend(fig)\n", + "\n", + "sliderAlpha1 = widgets.FloatSlider(min=0.01, max=0.03, step=0.001, value=0.02, description=r'$\\alpha$', width=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8f617b06eebc49168e4b8daac54528cd", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(FloatSlider(value=0.02, description='$\\\\alpha$', max=0.03, min=0.01, step=0.001), Button(description='Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(slide7, alpha=sliderAlpha1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 1.8 Regresja liniowa – dodatek\n", + "### Regresja liniowa za pomocą macierzy normalnej" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Zamiast korzystać z algorytmu gradientu prostego\n", + "możemy bezpośrednio obliczyć minimum $J(\\theta)$ dla regresji liniowej ze wzoru: \n", + "\n", + "$$ \\theta = \\left( X^T X \\right)^{-1} \\, X^T \\, \\vec y $$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w1/zumz181b.pdf b/w1/zumz181b.pdf new file mode 100644 index 0000000..f4741bb Binary files /dev/null and b/w1/zumz181b.pdf differ diff --git a/w2/bias2.png b/w2/bias2.png new file mode 100644 index 0000000..abe9a11 Binary files /dev/null and b/w2/bias2.png differ diff --git a/w2/curves.jpg b/w2/curves.jpg new file mode 100644 index 0000000..6d8d874 Binary files /dev/null and b/w2/curves.jpg differ diff --git a/w2/data_company.csv b/w2/data_company.csv new file mode 100644 index 0000000..0f88ccb --- /dev/null +++ b/w2/data_company.csv @@ -0,0 +1,97 @@ +6.1101,17.592 +5.5277,9.1302 +8.5186,13.662 +7.0032,11.854 +5.8598,6.8233 +8.3829,11.886 +7.4764,4.3483 +8.5781,12 +6.4862,6.5987 +5.0546,3.8166 +5.7107,3.2522 +14.164,15.505 +5.734,3.1551 +8.4084,7.2258 +5.6407,0.71618 +5.3794,3.5129 +6.3654,5.3048 +5.1301,0.56077 +6.4296,3.6518 +7.0708,5.3893 +6.1891,3.1386 +20.27,21.767 +5.4901,4.263 +6.3261,5.1875 +5.5649,3.0825 +18.945,22.638 +12.828,13.501 +10.957,7.0467 +13.176,14.692 +22.203,24.147 +5.2524,-1.22 +6.5894,5.9966 +9.2482,12.134 +5.8918,1.8495 +8.2111,6.5426 +7.9334,4.5623 +8.0959,4.1164 +5.6063,3.3928 +12.836,10.117 +6.3534,5.4974 +5.4069,0.55657 +6.8825,3.9115 +11.708,5.3854 +5.7737,2.4406 +7.8247,6.7318 +7.0931,1.0463 +5.0702,5.1337 +5.8014,1.844 +11.7,8.0043 +5.5416,1.0179 +7.5402,6.7504 +5.3077,1.8396 +7.4239,4.2885 +7.6031,4.9981 +6.3328,1.4233 +6.3589,-1.4211 +6.2742,2.4756 +5.6397,4.6042 +9.3102,3.9624 +9.4536,5.4141 +8.8254,5.1694 +5.1793,-0.74279 +21.279,17.929 +14.908,12.054 +18.959,17.054 +7.2182,4.8852 +8.2951,5.7442 +10.236,7.7754 +5.4994,1.0173 +20.341,20.992 +10.136,6.6799 +7.3345,4.0259 +6.0062,1.2784 +7.2259,3.3411 +5.0269,-2.6807 +6.5479,0.29678 +7.5386,3.8845 +5.0365,5.7014 +10.274,6.7526 +5.1077,2.0576 +5.7292,0.47953 +5.1884,0.20421 +6.3557,0.67861 +9.7687,7.5435 +6.5159,5.3436 +8.5172,4.2415 +9.1802,6.7981 +6.002,0.92695 +5.5204,0.152 +5.0594,2.8214 +5.7077,1.8451 +7.6366,4.2959 +5.8707,7.2029 +5.3054,1.9869 +8.2934,0.14454 +13.394,9.0551 +5.4369,0.61705 diff --git a/w2/data_flats.tsv b/w2/data_flats.tsv new file mode 100644 index 0000000..151a3c8 --- /dev/null +++ b/w2/data_flats.tsv @@ -0,0 +1,1675 @@ +price isNew rooms floor location sqrMetres +476118.0 False 3 1 Centrum 78 +459531.0 False 3 2 Sołacz 62 +411557.0 False 3 0 Sołacz 15 +496416.0 False 4 0 Sołacz 14 +406032.0 False 3 0 Sołacz 15 +450026.0 False 3 1 Naramowice 80 +571229.15 False 2 4 Wilda 39 +325000.0 False 3 1 Grunwald 54 +268229.0 False 2 1 Grunwald 90 +604836.0 False 4 5 Grunwald 40 +232050.0 False 3 0 Nowe 41 +399406.0 False 3 2 Wilda 89 +305739.0 False 2 2 Grunwald 53 +531976.68 False 4 1 Wilda 38 +288465.0 True 2 1 Starołęka 77 +305000.0 True 3 3 Winogrady 47 +410000.0 True 2 5 Rataje 30 +305000.0 True 3 3 Winogrady 48 +289000.0 True 2 2 Zawady 48 +419000.0 True 2 0 Rataje 56 +193000.0 True 2 5 Malta 37 +270000.0 True 3 4 Rataje 48 +360000.0 True 3 2 Rataje 20 +240000.0 True 2 10 Rataje 36 +299000.0 True 2 4 Nowe 47 +298000.0 True 2 4 Wilda 45 +289000.0 True 2 2 Komandoria 48 +300000.0 True 2 1 Podolany 45 +177000.0 True 2 2 Dębiec 25 +404000.0 True 3 2 Rataje 70 +335000.0 True 3 7 Rataje 63 +305000.0 True 3 3 Winogrady 60 +254900.0 True 2 14 Winogrady 80 +348000.0 True 3 9 Rataje 65 +320000.0 True 3 4 Winogrady 50 +284000.0 True 3 4 Rataje 48 +188000.0 True 2 2 Dębiec 61 +477000.0 True 4 3 Piątkowo 70 +390000.0 True 3 2 Podolany 68 +439000.0 True 3 3 Piątkowo 70 +263000.0 True 2 1 Rataje 44 +435000.0 True 2 0 Świerczewo 60 +610000.0 True 3 6 Centrum 77 +714000.0 True 3 2 Malta 84 +295000.0 True 2 2 Naramowice 58 +270000.0 True 3 10 Nowe 48 +259000.0 True 2 0 Rataje 38 +350000.0 True 3 0 Jeżyce 90 +295000.0 True 2 2 Grunwald 60 +338000.0 True 3 1 Jeżyce 37 +420000.0 True 4 3 Jeżyce 78 +565000.0 True 4 0 Sołacz 90 +355000.0 True 2 3 Nowe 90 +330000.0 True 2 4 Chwaliszewo 56 +299000.0 True 2 16 Rataje 49 +270000.0 True 2 2 Sołacz 49 +329000.0 True 3 3 Jeżyce 45 +405000.0 True 3 2 Rataje 70 +270000.0 True 2 2 Winogrady 49 +235000.0 True 2 6 Winogrady 38 +270000.0 True 2 2 Sołacz 49 +365000.0 True 3 2 Jeżyce 50 +325000.0 True 3 1 Nowe 90 +340000.0 True 3 16 Rataje 80 +329000.0 True 3 2 Rataje 59 +429000.0 True 3 4 Dębiec 60 +349000.0 True 3 3 Rataje 63 +329000.0 True 4 4 Nowe 20 +249000.0 True 2 2 Grunwald 46 +260000.0 True 2 0 Rataje 40 +275000.0 True 2 9 Rataje 38 +263000.0 True 2 1 Rataje 44 +269000.0 True 2 9 Rataje 49 +450000.0 True 3 11 Jeżyce 50 +299000.0 True 3 2 Łazarz 80 +330000.0 True 4 2 Rataje 62 +289000.0 True 3 3 Rataje 48 +750000.0 True 4 0 Naramowice 133 +635000.0 True 4 3 Grunwald 70 +279000.0 True 2 1 Naramowice 60 +399900.0 False 3 1 Grunwald 34 +255000.0 True 2 1 Winogrady 38 +239000.0 True 2 1 Grunwald 36 +229000.0 True 2 2 Wilda 50 +348000.0 True 3 9 Rataje 65 +384000.0 True 4 0 Grunwald 60 +232034.0 True 2 1 Starołęka 86 +270000.0 True 3 4 Rataje 48 +350000.0 False 5 1 Komorniki 97 +240000.0 True 2 16 Rataje 36 +619000.0 True 4 0 Jeżyce 99 +295000.0 True 3 4 Grunwald 45 +349000.0 True 3 1 Grunwald 57 +279000.0 True 3 0 Winogrady 48 +269000.0 True 3 3 Winogrady 48 +250000.0 True 2 6 Winogrady 42 +270000.0 True 2 4 Jeżyce 43 +285383.0 False 5 4 Winogrady 37 +348750.0 False 2 3 Stare 47 +240157.0 False 2 0 Winogrady 37 +285678.0 False 2 2 Winogrady 42 +272800.0 False 2 5 Winogrady 44 +267702.0 False 2 2 Grunwald 45 +327584.0 False 3 3 Grunwald 21 +235000.0 False 2 3 Winogrady 38 +286445.0 False 2 2 Winogrady 49 +156085.0 False 2 2 Starołęka 30 +282000.0 False 3 3 Winogrady 57 +365000.0 True 4 4 Grunwald 64 +519000.0 True 3 1 Rataje 50 +779000.0 True 3 2 Stare 113 +499000.0 True 4 2 Wilda 120 +255000.0 True 3 0 Grunwald 53 +270000.0 True 3 4 Rataje 48 +257000.0 True 2 5 Rataje 49 +499000.0 True 2 2 Stare 43 +399000.0 True 3 1 Nowe 62 +149000.0 True 3 5 Nowe 56 +435000.0 True 3 5 Wilda 70 +400000.0 False 4 0 Grunwald 81 +389000.0 True 3 3 Stare 49 +299000.0 True 3 6 Jeżyce 70 +325000.0 True 3 3 Łazarz 62 +399000.0 True 3 1 Grunwald 65 +279000.0 True 2 1 Naramowice 60 +334117.0 False 3 2 Grunwald 63 +364620.0 False 3 2 Grunwald 80 +529900.0 True 4 1 Podolany 103 +369000.0 True 4 3 Grunwald 74 +329000.0 True 2 2 Jeżyce 45 +320000.0 True 3 4 Winogrady 54 +275000.0 True 2 13 Rataje 80 +295120.0 False 2 1 Winogrady 60 +374000.0 True 3 4 Wilczak 30 +288000.0 True 3 4 Winogrady 30 +340000.0 True 3 1 Grunwald 70 +329000.0 True 3 3 Piątkowo 60 +290000.0 True 2 6 Sołacz 49 +229000.0 True 4 3 Wilda 54 +339000.0 True 3 1 Grunwald 65 +288000.0 True 3 4 Winogrady 30 +280000.0 True 3 1 Jeżyce 58 +295000.0 True 2 2 Naramowice 50 +264250.0 False 2 2 Jeżyce 29 +308039.0 False 2 0 Winogrady 21 +285200.0 False 2 1 Winogrady 46 +346624.0 False 3 1 Ogrody 54 +313566.0 False 3 1 Jeżyce 51 +290970.0 False 2 0 Winogrady 60 +304000.0 False 3 5 Winogrady 29 +225316.0 False 2 0 Starołęka 33 +186600.0 False 2 2 Starołęka 62 +336474.0 False 3 4 Winogrady 27 +299513.0 False 2 1 Starołęka 85 +257000.0 False 3 1 Winogrady 76 +244071.0 False 2 2 Starołęka 52 +291838.0 False 2 0 Starołęka 55 +322276.0 False 2 3 Winogrady 98 +280860.0 False 2 1 Winogrady 30 +297600.0 False 2 3 Winogrady 50 +349668.0 False 2 1 Garbary 44 +321656.0 False 2 1 Winogrady 88 +302176.0 False 2 2 Malta 45 +199000.0 True 2 1 Grunwald 33 +363000.0 True 3 2 Grunwald 77 +375000.0 True 3 4 Winogrady 65 +287000.0 True 2 10 Winogrady 47 +230000.0 True 2 1 Dębiec 37 +365000.0 True 3 2 Rataje 65 +389000.0 True 3 1 Naramowice 20 +325000.0 True 2 2 Grunwald 35 +391729.0 False 3 2 Winogrady 21 +479000.0 True 3 3 Grunwald 23 +249000.0 True 2 10 Grunwald 42 +286000.0 True 2 5 Centrum 49 +313000.0 True 2 4 Piątkowo 49 +409000.0 True 3 1 Rataje 62 +255000.0 True 2 1 Nowe 49 +270000.0 True 3 4 Jeżyce 50 +699000.0 True 2 1 Grunwald 68 +330000.0 True 2 3 Wilda 53 +335000.0 True 3 16 Rataje 80 +488000.0 True 3 3 Grunwald 70 +339000.0 True 3 1 Jeżyce 65 +410000.0 True 3 5 Grunwald 81 +269000.0 True 2 4 Naramowice 43 +710000.0 True 5 7 Grunwald 91 +359600.0 False 3 5 Grunwald 58 +249441.0 False 2 2 Jeżyce 50 +440000.0 True 4 1 Grunwald 95 +389000.0 True 3 2 Jeżyce 50 +590000.0 True 4 3 Rataje 90 +706655.0 False 3 2 Nowe 45 +269000.0 True 2 6 Rataje 70 +240000.0 True 2 16 Rataje 36 +310000.0 True 2 2 Centrum 53 +240000.0 False 3 0 Nowe 64 +230000.0 True 2 0 Grunwald 52 +770000.0 True 4 1 Centrum 142 +249000.0 True 2 4 Rataje 44 +350000.0 True 2 1 Rataje 54 +313000.0 True 2 4 Piątkowo 49 +310000.0 True 2 2 Śródka 72 +569000.0 True 4 0 Wilda 50 +460000.0 True 4 2 Bonin 87 +485000.0 True 2 2 Centrum 55 +286000.0 True 2 5 Centrum 80 +364000.0 True 3 1 Grunwald 62 +299000.0 True 3 3 Wilda 66 +365000.0 True 2 5 Wilda 30 +237000.0 True 2 10 Grunwald 38 +425000.0 True 4 6 Rataje 85 +332160.0 True 2 1 Grunwald 60 +230000.0 True 2 1 Dębiec 37 +249000.0 True 2 10 Grunwald 42 +270000.0 True 3 4 Rataje 48 +350000.0 True 2 4 Jeżyce 56 +309000.0 True 2 3 Grunwald 56 +283500.0 True 2 0 Stare 50 +177595.0 False 2 0 Nowe 29 +339000.0 True 2 2 Centrum 53 +399000.0 True 3 1 Grunwald 65 +329000.0 True 3 3 Piątkowo 60 +706655.0 False 3 2 Nowe 45 +289000.0 True 2 2 Jeżyce 42 +389000.0 True 3 0 Wilda 67 +375000.0 True 3 4 Wilda 40 +319000.0 True 3 2 Wilda 66 +310000.0 True 3 0 Grunwald 60 +252000.0 True 2 12 Winogrady 47 +249147.0 False 2 4 Zawady 71 +649000.0 True 4 0 Winogrady 80 +204000.0 True 2 0 Grunwald 37 +389000.0 True 3 4 Rataje 84 +369000.0 True 3 0 Grunwald 87 +300000.0 True 2 1 Naramowice 52 +470000.0 True 4 2 Sołacz 87 +326000.0 True 2 1 Winogrady 39 +655000.0 True 3 4 Stare 60 +348000.0 True 3 9 Rataje 65 +399000.0 True 3 1 Bonin 68 +390000.0 True 3 2 Podolany 68 +265000.0 True 2 0 Centrum 40 +279999.0 True 3 4 Winogrady 54 +280000.0 True 3 9 Jeżyce 49 +419000.0 True 2 0 Malta 56 +249000.0 True 2 4 Grunwald 38 +259000.0 True 2 3 Żegrze 49 +270000.0 True 2 0 Jeżyce 20 +349000.0 True 3 2 Grunwald 39 +349000.0 True 2 3 Piątkowo 60 +548000.0 True 3 1 Grunwald 84 +249000.0 True 2 10 Grunwald 43 +549000.0 True 3 2 Dąbrowskiego 106 +290000.0 True 2 6 Piątkowo 49 +442827.0 False 4 2 Starołęka 14 +530000.0 True 3 0 Grunwald 63 +279000.0 True 3 1 Plewiska 50 +410000.0 True 2 5 Rataje 50 +396000.0 True 3 1 Wilda 50 +279000.0 True 2 1 Stare 60 +399000.0 True 3 4 Piątkowo 16 +329000.0 True 2 2 Jeżyce 45 +270000.0 True 3 10 Grunwald 52 +360000.0 True 2 0 Centrum 57 +255000.0 True 3 2 Grunwald 20 +395000.0 True 3 1 Grunwald 100 +139000.0 True 2 0 Grunwald 49 +320000.0 True 3 4 Winogrady 50 +899000.0 True 4 0 Stare 100 +237000.0 True 2 2 Dębiec 44 +425000.0 True 3 1 Rataje 70 +315000.0 True 2 0 Winogrady 53 +485000.0 True 2 2 Centrum 55 +365000.0 True 3 1 Żegrze 88 +345000.0 True 3 1 Winogrady 17 +319000.0 True 3 3 Rataje 50 +265000.0 True 2 0 Dębiec 50 +978000.0 True 4 5 Centrum 106 +489000.0 True 2 5 Centrum 53 +382280.0 True 3 3 Centrum 80 +267900.0 True 2 6 Winogrady 30 +259000.0 True 2 3 Łazarz 47 +280000.0 True 2 4 Rataje 63 +250000.0 True 4 1 Wilda 31 +340000.0 True 2 2 Naramowice 16 +160000.0 True 2 0 Podolany 27 +390000.0 True 2 0 Centrum 60 +469000.0 True 2 1 Winogrady 30 +429000.0 True 3 4 Dębiec 50 +270000.0 True 2 2 Naramowice 52 +330000.0 True 3 0 Jeżyce 78 +279000.0 True 2 1 Stare 60 +289000.0 True 2 6 Jeżyce 49 +449000.0 True 4 1 Górczyn 90 +499000.0 True 4 4 Stare 85 +270000.0 True 2 16 Rataje 49 +295000.0 True 2 0 Stare 44 +210000.0 True 2 2 Dębiec 40 +519000.0 True 3 1 Rataje 50 +490000.0 True 4 0 Naramowice 40 +300000.0 True 2 1 Stare 23 +325000.0 True 3 4 Jeżyce 30 +238000.0 True 2 13 Rataje 49 +329000.0 True 3 1 Piątkowo 63 +270000.0 True 2 0 Piątkowo 43 +395000.0 True 3 0 Grunwald 70 +330000.0 True 2 1 Jeżyce 50 +439000.0 True 4 2 Grunwald 89 +259500.0 True 2 0 Grunwald 55 +355000.0 True 2 4 Jeżyce 56 +282000.0 True 2 1 Jeżyce 38 +335000.0 True 2 2 Górczyn 52 +375000.0 True 2 1 Grunwald 51 +399000.0 True 3 4 Stare 70 +474000.0 False 4 0 Plewiska 30 +309000.0 True 2 0 Grunwald 55 +379000.0 True 3 0 Rataje 57 +399000.0 True 3 1 Nowe 62 +570000.0 True 3 5 Grunwald 60 +105000.0 True 2 3 Nowe 50 +296000.0 True 3 6 Dębiec 63 +326000.0 True 2 1 Winiary 39 +1725000.0 True 3 0 Stare 136 +350550.0 True 3 4 Stare 50 +252000.0 True 2 12 Winogrady 47 +368000.0 True 2 2 Wilda 67 +549000.0 True 3 3 Grunwald 60 +409000.0 True 3 1 Rataje 90 +362000.0 True 2 1 Centrum 50 +250000.0 True 3 2 Nowe 80 +399900.0 True 4 2 Nowe 66 +429000.0 True 3 4 Wilda 60 +370000.0 True 2 0 Górczyn 65 +274000.0 True 2 1 Górczyn 13 +239000.0 True 2 3 Piątkowo 59 +259000.0 True 2 2 Rataje 90 +246330.0 True 2 0 Wilda 55 +289000.0 True 3 4 Winogrady 48 +100000.0 True 3 4 Stare 70 +270000.0 True 2 2 Sołacz 60 +430000.0 True 2 3 Grunwald 70 +355000.0 True 2 0 Podolany 93 +287000.0 True 2 11 Winogrady 47 +1200000.0 False 5 0 Starołęka 193 +305000.0 True 3 3 Winogrady 48 +329000.0 True 3 3 Piątkowo 60 +315000.0 True 3 0 Piątkowo 63 +267705.0 True 2 2 Grunwald 45 +247707.0 True 2 1 Jeżyce 50 +388750.0 True 4 5 Winogrady 65 +371931.0 True 4 4 Jeżyce 57 +232408.0 True 2 0 Stare 38 +247708.0 True 2 1 Jeżyce 50 +242731.0 True 2 0 Jeżyce 50 +247710.0 True 2 1 Jeżyce 50 +339200.0 True 3 1 Jeżyce 53 +349100.0 True 4 0 Rataje 85 +296277.0 True 3 1 Stare 49 +333694.0 True 3 1 Jeżyce 68 +250000.0 True 2 0 Naramowice 40 +200000.0 True 2 0 Rataje 30 +470000.0 True 4 2 Sołacz 87 +370000.0 True 4 4 Piątkowo 76 +315000.0 True 3 0 Piątkowo 60 +287000.0 True 2 10 Winogrady 80 +230000.0 True 2 3 Nowe 47 +900000.0 True 3 3 Centrum 120 +399000.0 True 3 4 Piątkowo 16 +250000.0 True 2 6 Sołacz 71 +318000.0 True 2 4 Piątkowo 20 +269000.0 True 2 9 Rataje 49 +239592.0 True 2 5 Grunwald 59 +307881.0 True 3 0 Grunwald 16 +319055.0 True 3 3 Grunwald 21 +267702.0 True 2 2 Grunwald 22 +299000.0 True 3 2 Dębiec 70 +435000.0 True 3 0 Stare 25 +690000.0 True 2 0 Grunwald 60 +204450.0 True 2 1 Nowe 33 +228144.0 True 3 2 Nowe 56 +285383.0 True 2 1 Winogrady 37 +391729.0 True 3 2 Winogrady 21 +330000.0 True 3 0 Jeżyce 78 +269984.0 True 3 4 Winogrady 76 +344141.0 True 2 8 Winogrady 47 +318384.0 True 3 6 Jeżyce 24 +249641.0 True 2 0 Jeżyce 54 +177000.0 True 2 2 Dębiec 33 +325000.0 True 2 2 Jeżyce 56 +429000.0 True 3 4 Rataje 70 +380000.0 True 3 3 Dolna 67 +448995.0 True 2 3 Jeżyce 66 +350000.0 True 2 3 Jeżyce 70 +269000.0 True 2 2 Dolna 38 +620000.0 True 3 1 Grunwald 96 +275000.0 True 2 0 Łazarz 52 +440000.0 True 2 0 Centrum 40 +505877.0 False 2 5 Centrum 22 +886860.0 False 3 5 Centrum 80 +502136.0 False 2 5 Centrum 77 +798966.0 False 2 5 Centrum 33 +561663.0 False 3 4 Centrum 69 +396248.0 False 2 4 Centrum 77 +368019.0 False 2 4 Centrum 18 +542141.0 False 3 4 Centrum 53 +698508.0 False 4 4 Centrum 59 +394787.0 False 2 4 Centrum 71 +597184.0 False 3 4 Centrum 61 +354177.0 False 2 3 Centrum 25 +353537.0 False 2 3 Centrum 17 +509468.0 False 3 3 Centrum 53 +652026.0 False 4 3 Centrum 89 +353457.0 False 2 3 Centrum 16 +356818.0 False 2 3 Centrum 58 +496573.0 False 3 2 Centrum 78 +349668.0 False 2 2 Centrum 15 +481903.0 False 3 2 Centrum 53 +309978.0 False 2 2 Centrum 16 +389528.0 False 2 2 Centrum 87 +341776.0 False 2 2 Centrum 14 +374216.0 False 2 2 Centrum 71 +534523.0 False 3 2 Centrum 62 +377418.0 False 2 1 Centrum 87 +330255.0 False 2 1 Centrum 14 +505032.0 False 3 1 Centrum 62 +375000.0 True 4 0 Grunwald 67 +375000.0 True 5 0 Grunwald 67 +363000.0 True 3 2 Grunwald 73 +495000.0 True 3 1 Grunwald 40 +270000.0 True 3 1 Starołęka 30 +365000.0 True 2 2 Grunwald 51 +450000.0 True 4 1 Grunwald 113 +190520.0 True 2 3 Nowe 30 +228492.0 True 2 1 Nowe 93 +169620.0 True 2 1 Nowe 55 +145000.0 True 2 1 Nowe 54 +270000.0 True 3 4 Rataje 48 +370000.0 True 4 4 Piątkowo 76 +289000.0 True 3 3 Grunwald 52 +585000.0 True 3 4 Jeżyce 59 +335000.0 True 3 7 Rataje 63 +329000.0 True 3 3 Piątkowo 60 +269000.0 True 2 0 Grunwald 46 +298000.0 True 2 4 Wilda 45 +398000.0 True 3 1 Grunwald 70 +395000.0 True 4 0 Grunwald 60 +389000.0 True 3 0 Wilda 96 +429000.0 True 3 4 Wilda 47 +715000.0 True 3 1 Wilda 95 +460000.0 True 2 2 Centrum 56 +555000.0 True 4 0 Stare 20 +655000.0 True 3 4 Stare 60 +188000.0 True 2 3 Stare 70 +390000.0 True 2 0 Nowe 61 +425000.0 True 2 9 Nowe 50 +359400.0 True 3 1 Stare 72 +497400.0 True 3 0 Wilda 48 +604395.0 True 5 1 Wilda 31 +330615.0 True 2 2 Stare 79 +290970.0 True 2 0 Stare 60 +283340.0 True 2 0 Stare 70 +282880.0 True 2 3 Stare 20 +339500.0 True 3 7 Nowe 80 +850000.0 True 2 7 Stare 69 +380000.0 True 4 6 Stare 90 +800000.0 True 4 3 Stare 103 +514000.0 True 4 1 Jeżyce 120 +290000.0 True 2 1 Stare 42 +640000.0 True 3 2 Stare 47 +1140000.0 True 6 0 Stare 40 +561000.0 True 2 4 Stare 50 +400000.0 True 2 1 Świerczewo 60 +220000.0 True 2 4 Grunwald 43 +490000.0 True 3 1 Jeżyce 115 +298000.0 True 2 4 Wilda 45 +449000.0 True 2 3 Jeżyce 60 +237000.0 True 2 2 Dębiec 44 +480000.0 True 2 2 Garbary 56 +298000.0 True 2 4 Wilda 37 +255000.0 True 2 3 Wilda 52 +480000.0 True 3 0 Stare 30 +451000.0 True 3 2 Wilda 30 +370000.0 True 3 4 Stare 84 +529000.0 True 3 3 Centrum 108 +360000.0 True 4 0 Grunwald 66 +419000.0 True 4 0 Kopernika 60 +350000.0 True 2 0 Stare 50 +348000.0 True 3 9 Rataje 65 +525000.0 True 4 3 Nowe 88 +450000.0 True 6 4 Wilda 90 +449000.0 True 4 2 Grunwald 90 +420000.0 True 3 0 Winogrady 58 +360000.0 True 3 3 Stare 63 +1000000.0 True 4 1 Centrum 103 +649400.0 False 3 4 Rataje 50 +311570.0 False 2 4 Rataje 51 +383928.0 False 3 3 Rataje 46 +309741.0 False 2 3 Rataje 89 +359000.0 True 2 0 Grunwald 46 +295734.0 False 2 3 Rataje 86 +384540.0 False 3 3 Rataje 55 +480000.0 True 3 1 Grunwald 40 +380091.0 False 3 2 Rataje 73 +293352.0 False 2 1 Rataje 14 +307156.0 False 2 1 Rataje 17 +293352.0 False 2 1 Rataje 14 +535000.0 True 2 3 Łazarz 59 +375606.0 False 3 1 Rataje 91 +293488.0 False 3 0 Rataje 94 +307428.0 False 2 0 Rataje 21 +293488.0 False 2 0 Rataje 16 +375408.0 False 3 0 Rataje 88 +299000.0 True 2 0 Piątkowo 47 +243828.0 False 2 4 Podolany 68 +348835.0 False 3 3 Podolany 63 +256171.0 False 2 3 Podolany 79 +298116.0 False 2 3 Podolany 96 +306247.0 False 2 3 Podolany 35 +337602.0 False 3 3 Podolany 71 +244647.0 False 2 3 Podolany 82 +641000.0 True 3 3 Łazarz 75 +277000.0 True 2 10 Nowe 80 +549000.0 True 4 0 Piątkowo 115 +499000.0 True 3 1 Suchy 95 +539000.0 True 4 2 Jeżyce 110 +450000.0 True 2 2 Grunwald 70 +242000.0 True 2 1 Grunwald 52 +310000.0 True 3 4 Jeżyce 50 +259000.0 True 2 3 Winogrady 40 +475000.0 True 3 4 Wilda 66 +120000.0 True 3 3 Grunwald 35 +270000.0 True 3 4 Rataje 48 +1850000.0 True 5 1 Grunwald 196 +350000.0 True 4 4 Grunwald 50 +280000.0 True 4 4 Grunwald 40 +490000.0 True 4 4 Grunwald 70 +495000.0 True 3 1 Naramowice 70 +545000.0 True 3 0 Rataje 71 +310000.0 True 3 10 Rataje 80 +215000.0 True 2 0 Wilda 36 +295000.0 True 2 4 Garbary 33 +200000.0 True 2 8 Dębiec 50 +359900.0 True 4 4 Rataje 74 +320000.0 True 3 3 Jeżyce 70 +300000.0 True 2 1 Naramowice 23 +535000.0 True 4 2 Wilda 120 +620000.0 True 3 2 Naramowice 60 +597000.0 True 3 0 Naramowice 60 +399000.0 True 3 0 Winogrady 62 +390000.0 True 3 0 Grunwald 75 +310000.0 True 2 1 Rataje 30 +365000.0 True 3 1 Rataje 88 +382000.0 True 3 3 Centrum 30 +299000.0 True 2 2 Sołacz 58 +299000.0 True 2 2 Sołacz 58 +499000.0 True 3 1 Grunwald 64 +549000.0 True 3 2 Jeżyce 106 +549000.0 True 3 2 Jeżyce 106 +413000.0 True 3 3 Łazarz 46 +259000.0 True 2 1 Jeżyce 47 +949000.0 True 3 4 Śródka 98 +949000.0 True 3 4 Śródka 98 +270000.0 True 3 4 Rataje 48 +348000.0 True 3 9 Nowe 65 +260000.0 True 2 0 Ławica 60 +370000.0 True 4 4 Stare 60 +399000.0 True 3 4 Stare 16 +369000.0 True 4 3 Grunwald 74 +224000.0 True 2 0 Łazarz 50 +260000.0 True 3 4 Grunwald 49 +315000.0 True 3 0 Piątkowo 60 +379999.0 True 3 3 Wilda 67 +350000.0 True 2 1 Rataje 63 +270000.0 True 2 4 Grunwald 38 +439000.0 True 4 2 Łazarz 92 +519000.0 True 3 1 Rataje 50 +290000.0 True 2 2 Dębiec 66 +326000.0 True 2 4 Łazarz 80 +240000.0 True 2 3 Grunwald 42 +389000.0 True 3 0 Wilda 67 +420000.0 True 3 2 Dębiec 91 +279000.0 True 2 1 Naramowice 51 +220000.0 True 2 4 Grunwald 43 +465360.0 True 2 2 Grunwald 17 +777280.0 True 3 3 Grunwald 16 +1000000.0 True 4 1 Stare 146 +350000.0 True 2 3 Rataje 50 +469000.0 True 4 2 Jeżyce 87 +253498.0 True 2 5 Jeżyce 38 +334752.0 True 3 3 Jeżyce 51 +374792.0 True 4 5 Jeżyce 57 +329000.0 True 3 4 Rataje 63 +349668.0 False 2 2 Stare 15 +297420.0 False 2 3 Grunwald 24 +297420.0 False 2 3 Grunwald 24 +220000.0 True 2 1 Jeżyce 60 +399000.0 True 3 1 Sołacz 66 +488000.0 True 3 3 Grunwald 70 +220000.0 True 2 4 Grunwald 43 +390000.0 True 3 2 Podolany 68 +299000.0 True 2 0 Wilda 52 +234000.0 True 2 0 Wilda 37 +375000.0 True 3 2 Wilda 90 +820000.0 True 4 0 Centrum 163 +320000.0 True 3 4 Winogrady 50 +420000.0 False 4 0 Grunwald 82 +495000.0 True 4 1 Stare 98 +279000.0 True 2 1 Stare 52 +620000.0 True 3 1 Stare 99 +329000.0 True 2 1 Stare 54 +699000.0 True 3 2 Stare 92 +487000.0 True 3 0 Stare 73 +375000.0 True 3 0 Naramowice 69 +269000.0 True 2 9 Rataje 49 +220000.0 True 2 4 Grunwald 43 +230000.0 True 2 1 Dębiec 38 +435000.0 True 2 0 Górczyn 60 +390000.0 True 3 2 Podolany 68 +446240.0 True 2 1 Grunwald 78 +390000.0 True 3 2 Podolany 68 +619000.0 True 3 2 Winogrady 100 +240000.0 True 2 3 Dębiec 50 +270000.0 True 3 4 Rataje 48 +244968.0 True 2 0 Stare 42 +285679.0 True 2 4 Winogrady 48 +260000.0 True 2 6 Winiary 70 +585000.0 True 4 1 Piątkowo 100 +329000.0 True 3 1 Piątkowo 63 +269000.0 True 2 0 Naramowice 46 +348000.0 True 3 9 Rataje 65 +270000.0 True 3 4 Rataje 48 +359605.0 True 3 5 Grunwald 58 +375529.0 False 2 3 Stare 71 +247705.0 False 2 1 Podolany 74 +247705.0 False 2 1 Piątkowo 74 +156085.0 False 2 4 Głuszyna 45 +411684.0 False 3 3 Winogrady 17 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +249733.0 False 2 0 Ogrody 54 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +460499.0 False 3 1 Stare 51 +270000.0 True 3 0 Grunwald 48 +350000.0 True 4 1 Wilda 80 +350000.0 True 4 4 Winogrady 90 +323000.0 True 4 0 Winogrady 56 +649000.0 True 4 4 Centrum 109 +341704.0 True 3 8 Grunwald 56 +297421.0 True 2 3 Grunwald 50 +245832.0 True 2 2 Grunwald 40 +285384.0 True 2 4 Winogrady 48 +240000.0 True 2 1 Wilda 40 +345865.0 True 3 2 Jeżyce 21 +261000.0 True 2 2 Jeżyce 57 +400000.0 True 3 2 Jeżyce 74 +400000.0 True 2 2 Jeżyce 74 +348000.0 True 3 9 Rataje 65 +369000.0 True 2 2 Grunwald 51 +339000.0 True 3 0 Rataje 63 +250000.0 True 2 4 Rataje 23 +245000.0 True 2 4 Rataje 44 +240000.0 True 2 2 Dębiec 48 +262000.0 True 2 4 Grunwald 60 +395000.0 True 4 1 Smochowice 69 +313000.0 True 2 4 Piątkowo 50 +409000.0 True 3 1 Malta 90 +599000.0 True 3 3 Grunwald 83 +289000.0 True 2 2 Jeżyce 42 +390000.0 True 3 3 Naramowice 48 +313000.0 True 2 4 Piątkowo 49 +375000.0 True 4 2 Centrum 72 +350000.0 True 3 1 Naramowice 51 +304140.0 False 3 5 Winogrady 18 +353275.0 False 2 14 Grunwald 74 +244071.0 False 2 1 Nowe 93 +348000.0 True 3 9 Rataje 65 +320000.0 True 3 4 Winogrady 53 +348000.0 True 3 9 Rataje 65 +348000.0 True 3 9 Rataje 65 +230000.0 True 2 1 Dębiec 37 +238000.0 True 2 2 Grunwald 37 +392000.0 True 4 0 Piątkowo 74 +380000.0 True 4 2 Piątkowo 74 +329000.0 True 2 4 Górczyn 20 +347000.0 True 3 1 Naramowice 47 +259900.0 True 2 6 Winogrady 38 +590000.0 True 5 3 Piątkowo 125 +320000.0 True 2 1 Naramowice 53 +432000.0 True 2 5 Centrum 40 +435000.0 True 3 1 Piątkowo 84 +389000.0 True 2 1 Podolany 46 +799999.0 True 3 1 Sołacz 90 +310000.0 True 3 3 Piątkowo 60 +260000.0 True 3 0 Jeżyce 74 +266000.0 True 2 2 Piątkowo 49 +316498.0 True 2 2 Stare 77 +519000.0 True 3 1 Rataje 50 +442150.0 True 2 2 Stare 75 +395000.0 True 3 2 Centrum 74 +599000.0 True 2 1 Centrum 70 +459000.0 True 2 1 Centrum 48 +339000.0 True 3 1 Winogrady 51 +375000.0 True 3 2 Jeżyce 50 +289000.0 True 2 4 Ogrody 41 +230000.0 True 2 5 Winogrady 60 +440000.0 True 2 4 Centrum 55 +599000.0 True 3 2 Centrum 80 +343200.0 True 3 4 Winogrady 52 +385000.0 True 2 1 Centrum 60 +300000.0 True 3 3 Centrum 88 +529000.0 True 4 4 Centrum 85 +349000.0 True 3 3 Wilda 82 +405000.0 True 4 2 Nowe 71 +355000.0 True 2 4 Jeżyce 89 +235000.0 True 2 0 Górczyn 50 +495000.0 True 4 1 Grunwald 64 +285000.0 True 2 3 Wilda 60 +385000.0 True 3 4 Łazarz 82 +379999.0 True 3 3 Wilda 67 +370000.0 True 2 13 Rataje 67 +450000.0 True 3 0 Naramowice 71 +479000.0 True 3 3 Górczyn 70 +439000.0 True 4 2 Łazarz 40 +385000.0 True 3 0 Łazarz 80 +550000.0 True 4 1 Łazarz 50 +260000.0 True 3 4 Grunwald 47 +755000.0 True 4 2 Łazarz 90 +319000.0 True 2 0 Górczyn 54 +380000.0 True 3 1 Łazarz 30 +530000.0 True 3 1 Piątkowo 76 +900000.0 True 3 2 Grunwald 112 +375000.0 True 3 8 Piątkowo 75 +576500.0 True 2 5 Centrum 50 +576500.0 True 2 5 Chwaliszewo 50 +438503.0 True 3 2 Centrum 57 +354454.0 False 2 3 Grunwald 17 +489780.0 False 4 2 Górczyn 63 +491520.0 False 4 1 Górczyn 92 +273875.5 False 2 1 Grunwald 13 +267000.0 True 2 2 Dębiec 35 +260000.0 True 2 2 Piątkowo 90 +587000.0 True 4 3 Łazarz 38 +460000.0 True 3 1 Naramowice 110 +695000.0 True 4 1 Rataje 70 +506657.0 True 4 11 Grunwald 73 +298250.0 True 2 5 Grunwald 38 +297421.0 True 2 2 Grunwald 24 +275000.0 True 2 9 Nowe 38 +267000.0 True 2 4 Nowe 70 +447000.0 True 3 4 Grunwald 20 +349900.0 True 3 4 Wilda 42 +360000.0 True 4 0 Centrum 66 +525000.0 True 4 3 Jeżyce 70 +450000.0 True 3 2 Strzeszyn 70 +690000.0 True 4 5 Górczyn 25 +334000.0 True 2 4 Sołacz 50 +240000.0 True 2 3 Jeżyce 43 +307000.0 True 3 2 Rataje 48 +307000.0 True 2 2 Rataje 48 +345000.0 True 3 8 Nowe 63 +333694.0 False 3 1 Podolany 32 +333694.0 False 3 1 Piątkowo 38 +299000.0 True 3 0 Grunwald 53 +389000.0 True 3 3 Stare 49 +310000.0 True 2 2 Centrum 74 +220000.0 True 2 0 Grunwald 50 +332800.0 True 2 1 Grunwald 52 +240000.0 True 2 2 Stare 38 +323206.0 False 2 2 Naramowice 50 +558745.0 False 3 3 Stare 62 +290000.0 True 2 6 Jeżyce 49 +285000.0 True 2 3 Piątkowo 49 +365000.0 True 3 1 Rataje 67 +263000.0 True 2 1 Rataje 47 +289000.0 True 2 2 Jeżyce 42 +265000.0 True 3 4 Grunwald 48 +310000.0 True 2 1 Nowe 40 +300000.0 True 3 2 Winogrady 48 +565964.0 True 2 5 Centrum 49 +747000.0 True 3 7 Rataje 84 +275000.0 True 2 0 Naramowice 50 +405000.0 True 4 2 Rataje 71 +491520.0 True 4 1 Górczyn 92 +363258.0 True 2 1 Górczyn 59 +305739.0 True 2 2 Górczyn 53 +399000.0 True 3 4 Piątkowo 69 +280000.0 True 2 1 Sołacz 38 +299900.0 True 2 0 Dębiec 48 +420000.0 True 2 3 Naramowice 59 +650000.0 True 4 8 Rataje 100 +329000.0 True 3 3 Wilda 82 +355000.0 True 3 2 Piątkowo 66 +375000.0 True 3 2 Rataje 79 +200000.0 True 3 4 Nowe 44 +315000.0 True 2 2 Zawady 52 +259000.0 True 2 3 Rataje 49 +379000.0 True 3 2 Podolany 56 +354454.0 True 2 3 Górczyn 17 +237000.0 True 2 10 Górczyn 38 +315000.0 True 2 2 Zawady 52 +379999.0 True 3 2 Wilda 67 +279000.0 True 2 1 Naramowice 52 +250000.0 True 2 4 Rataje 44 +620000.0 True 3 2 Naramowice 98 +450000.0 True 3 5 Grunwald 60 +290000.0 True 2 2 Dębiec 40 +393599.0 True 2 6 Winogrady 49 +289000.0 True 2 2 Nowe 48 +240000.0 True 2 8 Dębiec 37 +420000.0 True 2 5 Rataje 63 +800000.0 True 3 3 Chwaliszewo 70 +285000.0 True 2 2 Łazarz 52 +495000.0 True 3 0 Centrum 63 +289575.0 True 2 0 Jeżyce 43 +259000.0 True 2 5 Grunwald 46 +265000.0 True 2 4 Grunwald 43 +495000.0 True 5 1 Naramowice 98 +275000.0 True 2 0 Naramowice 50 +320000.0 True 2 3 Chwaliszewo 56 +360000.0 True 2 5 Grunwald 41 +360000.0 True 2 0 Winogrady 48 +750000.0 True 4 0 Kobylepole 105 +260000.0 True 2 0 Rataje 46 +260000.0 True 3 4 Centrum 44 +1050000.0 True 5 2 Centrum 161 +379000.0 True 2 0 Nowe 56 +560000.0 True 2 8 Grunwald 55 +335400.0 True 2 1 Łazarz 51 +290000.0 True 2 5 Winogrady 42 +235000.0 True 2 3 Winogrady 38 +300000.0 True 2 4 Winogrady 53 +399000.0 True 3 1 Winiary 66 +830000.0 True 3 1 Grunwald 91 +385500.0 True 2 6 Dębiec 38 +199000.0 True 5 0 Sołacz 129 +295000.0 True 2 4 Stare 33 +370000.0 True 4 11 Rataje 74 +335000.0 True 3 1 Piątkowo 63 +350000.0 True 3 7 Piątkowo 63 +380000.0 True 3 1 Łazarz 98 +184000.0 True 2 0 Grunwald 34 +855000.0 True 4 5 Jeżyce 96 +215000.0 True 2 0 Wilda 36 +495000.0 True 4 1 Naramowice 98 +250000.0 True 2 5 Nowe 50 +275000.0 True 3 7 Wilda 53 +409000.0 True 3 1 Malta 61 +200000.0 True 2 0 Głuszyna 52 +299000.0 True 3 3 Wilda 66 +490000.0 True 4 3 Sołacz 83 +245000.0 True 2 0 Stare 44 +950000.0 True 3 4 Nowe 99 +355000.0 True 2 3 Nowe 50 +380000.0 True 3 3 Łazarz 95 +525000.0 True 4 3 Jeżyce 104 +400000.0 True 2 3 Naramowice 50 +248000.0 True 2 10 Grunwald 42 +380000.0 True 3 0 Centrum 55 +453600.0 True 2 3 Naramowice 56 +290000.0 True 2 3 Winogrady 37 +690000.0 True 4 5 Grunwald 107 +350000.0 True 3 6 Jeżyce 64 +340000.0 True 4 3 Winogrady 65 +345000.0 True 3 1 Rataje 78 +395000.0 True 3 10 Piątkowo 67 +495000.0 True 5 1 Naramowice 98 +269000.0 True 2 3 Grunwald 47 +257000.0 True 2 12 Winogrady 46 +516000.0 True 3 3 Naramowice 75 +285000.0 True 2 4 Naramowice 42 +354000.0 True 3 1 Naramowice 60 +345000.0 True 2 0 Centrum 42 +550000.0 True 2 1 Naramowice 57 +670000.0 True 4 3 Grunwald 81 +659000.0 True 5 0 Podolany 135 +925000.0 True 5 1 Stare 105 +510000.0 True 5 1 Naramowice 98 +350000.0 True 3 3 Jeżyce 70 +345000.0 True 3 1 Winogrady 50 +279000.0 True 2 0 Piątkowo 48 +535000.0 True 2 2 Stare 55 +350000.0 True 2 1 Rataje 54 +349000.0 True 3 3 Rataje 63 +250000.0 True 2 3 Wilda 39 +270000.0 True 2 10 Nowe 48 +285000.0 True 2 0 Łazarz 49 +999000.0 True 3 4 Nowe 99 +425000.0 True 3 1 Piątkowo 74 +479000.0 True 3 1 Naramowice 66 +360000.0 True 3 0 Wilda 112 +495000.0 True 3 1 Łazarz 64 +599000.0 True 3 3 Grunwald 60 +390000.0 True 3 2 Podolany 68 +450000.0 True 4 1 Grunwald 101 +313000.0 True 2 4 Piątkowo 49 +338000.0 True 3 3 Wilda 63 +285000.0 True 2 11 Winogrady 47 +270000.0 True 2 0 Grunwald 42 +360000.0 True 4 4 Jeżyce 60 +399000.0 True 2 3 Centrum 60 +619000.0 True 3 5 Jeżyce 69 +330000.0 True 2 1 Jeżyce 53 +1612000.0 True 7 5 Jeżyce 166 +399000.0 True 3 3 Centrum 50 +365000.0 True 2 1 Stare 50 +450000.0 True 3 0 Grunwald 75 +288000.0 True 3 4 Winogrady 47 +240000.0 True 2 16 Rataje 36 +326000.0 True 2 0 Jeżyce 55 +250000.0 True 2 4 Zawady 66 +288000.0 True 2 4 Naramowice 44 +289000.0 True 2 7 Winiary 49 +515000.0 True 3 0 Rataje 69 +428000.0 True 3 3 Centrum 43 +510000.0 True 5 1 Naramowice 98 +320000.0 True 2 2 Piątkowo 48 +659200.0 True 4 3 Łazarz 103 +499000.0 True 5 0 Grunwald 130 +240000.0 True 2 2 Dębiec 48 +495000.0 True 4 1 Naramowice 98 +320000.0 True 3 0 Rataje 56 +430000.0 True 3 2 Rataje 64 +409000.0 True 5 4 Winogrady 64 +415000.0 True 3 4 Łazarz 53 +359000.0 True 3 2 Rataje 65 +410000.0 True 2 5 Rataje 53 +479000.0 True 3 3 Nowe 83 +365000.0 True 4 3 Grunwald 68 +369000.0 True 2 3 Grunwald 64 +259000.0 True 2 2 Nowe 42 +250000.0 True 3 4 Dębiec 45 +299000.0 True 2 4 Nowe 47 +430000.0 True 2 1 Centrum 72 +275000.0 True 2 0 Dębiec 50 +950000.0 True 3 4 Nowe 99 +329000.0 True 3 7 Rataje 78 +380000.0 True 4 6 Piątkowo 73 +299000.0 True 2 5 Centrum 49 +265000.0 True 2 1 Wilda 44 +370000.0 True 2 13 Rataje 48 +370000.0 True 4 4 Piątkowo 76 +379000.0 True 3 1 Piątkowo 78 +299000.0 True 2 3 Grunwald 44 +379999.0 True 2 5 Jeżyce 61 +1000000.0 True 5 1 Jeżyce 128 +549000.0 True 3 2 Jeżyce 106 +335000.0 True 3 9 Nowe 65 +489000.0 True 3 0 Jeżyce 65 +379000.0 True 3 4 Rataje 63 +245000.0 True 3 0 Grunwald 45 +235000.0 True 2 0 Łazarz 52 +295555.0 True 2 1 Jeżyce 45 +224000.0 True 2 0 Górczyn 38 +315000.0 True 2 2 Winogrady 38 +429000.0 True 3 4 Nowe 79 +595000.0 True 3 0 Naramowice 94 +330000.0 True 3 0 Bonin 56 +275000.0 True 2 13 Rataje 49 +499000.0 True 4 2 Wilda 120 +287000.0 True 2 10 Winogrady 46 +280000.0 True 2 10 Piątkowo 46 +273875.0 True 2 1 Górczyn 13 +450000.0 True 3 0 Winogrady 70 +325000.0 True 3 4 Jeżyce 64 +299817.0 True 2 3 Górczyn 59 +295000.0 True 2 2 Naramowice 58 +380000.0 True 4 6 Piątkowo 73 +399000.0 True 3 4 Winogrady 65 +305000.0 True 3 3 Winogrady 48 +220000.0 True 2 3 Jeżyce 37 +285000.0 True 3 2 Antoninek 61 +238000.0 True 2 2 Grunwald 37 +200000.0 True 2 0 Rataje 30 +298000.0 True 2 5 Centrum 50 +391729.0 False 3 2 Winogrady 42 +347090.0 False 3 2 Winogrady 41 +285678.0 False 2 1 Winogrady 82 +321656.0 False 2 4 Winogrady 38 +312259.0 False 2 6 Winogrady 60 +347090.0 False 3 1 Winogrady 90 +355042.0 False 3 6 Jeżyce 96 +496573.0 False 3 2 Stare 78 +300680.0 False 2 2 Starołęka 54 +395000.0 True 4 4 Piątkowo 90 +771672.0 False 4 4 Górczyn 66 +399000.0 True 4 1 Szczepankowo 60 +340100.0 True 3 0 Szczepankowo 45 +225228.0 False 2 5 Rataje 91 +324387.0 False 2 9 Grunwald 49 +362459.0 False 3 0 Starołęka 80 +247705.0 False 2 1 Podolany 74 +339000.0 True 3 8 Nowe 78 +207000.0 True 2 2 Wilda 33 +295000.0 True 2 4 Grunwald 50 +324500.0 True 2 5 Wilda 65 +429000.0 True 3 4 Wilda 47 +399000.0 True 4 0 Szczepankowo 71 +411804.0 True 3 1 Winogrady 42 +282613.0 True 2 3 Winogrady 33 +235399.0 True 2 1 Winogrady 59 +265741.0 True 2 7 Winogrady 21 +323340.0 True 3 3 Winogrady 89 +293848.0 True 3 7 Winogrady 57 +337303.0 True 4 2 Winogrady 17 +470092.0 True 2 3 Centrum 21 +310000.0 True 2 0 Wilda 53 +365000.0 True 4 1 Nowe 54 +259000.0 True 2 6 Winogrady 38 +414225.0 True 3 3 Centrum 23 +489000.0 True 3 3 Grunwald 104 +350000.0 True 4 3 Grunwald 30 +325000.0 True 2 3 Rataje 20 +321845.0 False 3 1 Grunwald 55 +248000.0 True 2 14 Rataje 49 +286000.0 True 2 5 Centrum 64 +399000.0 True 3 4 Piątkowo 16 +289000.0 True 2 7 Winiary 80 +329000.0 True 3 11 Winogrady 50 +252723.0 False 2 1 Winogrady 43 +300680.0 False 2 2 Starołęka 54 +496573.0 False 3 2 Stare 78 +392181.0 False 3 4 Winogrady 42 +496573.0 False 3 2 Stare 78 +412438.0 False 3 2 Naramowice 17 +286000.0 True 2 5 Centrum 49 +269000.0 True 2 9 Rataje 49 +315000.0 True 2 1 Grunwald 61 +318390.0 True 3 3 Jeżyce 48 +242406.0 True 2 0 Jeżyce 36 +296278.0 True 3 2 Stare 49 +223747.0 True 2 0 Stare 37 +388755.0 True 4 5 Winogrady 65 +347095.0 True 3 1 Winogrady 57 +269000.0 True 2 1 Ogrody 50 +285000.0 True 2 9 Grunwald 50 +114642.0 True 2 0 Łazarz 46 +286000.0 True 2 5 Stare 64 +333693.0 True 3 1 Jeżyce 68 +435000.0 True 2 0 Świerczewo 60 +320000.0 True 4 1 Jeżyce 40 +395000.0 True 4 0 Grunwald 60 +353457.0 True 2 3 Stare 44 +267704.0 True 2 3 Grunwald 45 +245831.0 True 2 2 Grunwald 40 +391729.0 True 3 2 Winogrady 69 +240875.0 True 2 7 Stare 39 +424380.0 True 4 2 Nowe 74 +282996.0 True 2 0 Nowe 55 +285000.0 True 3 1 Rataje 48 +284618.0 False 2 3 Nowe 55 +512034.0 False 4 2 Winogrady 94 +284618.0 False 2 3 Nowe 55 +255404.0 False 2 6 Jeżyce 12 +315810.0 False 3 8 Winogrady 20 +282994.0 False 2 0 Starołęka 59 +637135.0 False 3 7 Grunwald 65 +754000.0 False 5 0 Morasko 42 +336000.0 True 3 0 Szczepankowo 85 +355000.0 True 2 3 Nowe 90 +475000.0 True 3 0 Rataje 73 +275000.0 True 3 4 Winogrady 60 +275000.0 True 3 4 Winogrady 70 +289000.0 True 2 7 Winogrady 80 +315000.0 True 3 0 Rataje 63 +260000.0 True 2 1 Łazarz 54 +370000.0 True 4 4 Piątkowo 76 +319990.0 True 2 3 Jeżyce 70 +156085.0 False 2 3 Głuszyna 45 +225228.0 False 2 5 Rataje 91 +308237.0 False 2 1 Nowe 85 +353275.0 False 2 14 Grunwald 74 +228144.0 False 3 2 Głuszyna 56 +156085.0 False 2 2 Głuszyna 45 +353275.0 False 2 14 Grunwald 74 +353275.0 False 2 14 Grunwald 74 +156085.0 False 2 3 Głuszyna 45 +156085.0 False 2 4 Nowe 54 +267702.0 False 2 3 Grunwald 22 +353275.0 False 2 14 Grunwald 74 +247705.0 False 2 1 Podolany 74 +315810.0 False 3 8 Winogrady 20 +370000.0 True 4 4 Stare 60 +265000.0 True 2 2 Stare 70 +304140.0 False 3 3 Winogrady 27 +394000.0 False 4 0 Szczepankowo 77 +287882.0 False 2 1 Starołęka 85 +729000.0 True 3 0 Rataje 20 +445000.0 True 4 3 Piątkowo 65 +339000.0 True 3 1 Wilda 90 +382000.0 True 4 0 Piątkowo 74 +335000.0 True 2 4 Jeżyce 35 +258000.0 True 2 0 Plewiska 40 +195000.0 True 2 1 Grunwald 31 +229000.0 True 2 1 Grunwald 16 +327000.0 True 3 1 Piątkowo 40 +279000.0 True 3 1 Nowe 54 +329000.0 True 3 1 Piątkowo 63 +220000.0 True 2 3 Jeżyce 37 +285000.0 True 3 2 Antoninek 61 +286000.0 True 2 5 Stare 49 +550000.0 True 3 1 Jeżyce 73 +366770.0 True 3 1 Stare 58 +392000.0 True 4 0 Piątkowo 74 +504326.0 True 4 4 Stare 26 +232408.0 True 2 1 Winogrady 37 +247000.0 True 2 2 Jeżyce 38 +318384.0 True 3 2 Jeżyce 48 +371930.0 True 4 2 Jeżyce 57 +347092.0 True 3 1 Winogrady 57 +286445.0 True 2 2 Winogrady 49 +254309.0 True 2 2 Stare 42 +238950.0 True 2 4 Stare 39 +442080.0 True 3 1 Nowe 68 +319998.0 True 3 1 Nowe 14 +404965.0 True 3 2 Nowe 63 +336840.0 True 3 3 Nowe 14 +380931.0 True 3 3 Nowe 83 +341311.0 True 3 8 Grunwald 53 +325000.0 True 2 0 Nowe 80 +388000.0 True 2 1 Grunwald 33 +219000.0 True 2 1 Grunwald 35 +1007500.0 False 4 1 Starołęka 94 +1203616.0 False 5 0 Starołęka 71 +298980.0 False 2 5 Winogrady 30 +281988.0 False 2 7 Naramowice 76 +300680.0 False 2 2 Starołęka 54 +288405.0 False 2 1 Górczyn 37 +392861.0 False 3 2 Winogrady 42 +298250.0 False 2 6 Grunwald 38 +411684.0 False 3 3 Winogrady 17 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +310020.0 False 3 4 Winogrady 67 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +392861.0 False 3 3 Naramowice 42 +249733.0 False 2 0 Ogrody 54 +282944.0 False 2 0 Starołęka 59 +349668.0 False 2 2 Stare 15 +294840.0 False 2 4 Winogrady 50 +252723.0 False 2 1 Winogrady 43 +399000.0 False 3 2 Winogrady 98 +359600.0 False 3 5 Grunwald 58 +245876.0 True 2 1 Jeżyce 38 +329538.0 True 3 1 Jeżyce 50 +286268.0 True 2 5 Winogrady 49 +367000.0 True 3 1 Centrum 30 +350000.0 True 3 1 Nowe 63 +350000.0 True 2 1 Rataje 63 +399000.0 True 3 5 Grunwald 98 +429000.0 True 3 3 Centrum 102 +267703.0 True 2 3 Grunwald 45 +356251.0 True 3 14 Grunwald 57 +225290.0 True 2 7 Rataje 39 +333701.0 True 3 1 Jeżyce 68 +368568.0 True 3 4 Jeżyce 68 +285000.0 True 3 2 Antoninek 61 +300000.0 True 2 9 Strzeszyn 45 +299000.0 True 2 5 Centrum 50 +249000.0 True 2 2 Grunwald 46 +599000.0 True 4 5 Malta 84 +250000.0 True 2 4 Wilda 54 +341776.0 True 2 2 Stare 44 +238000.0 True 2 13 Rataje 49 +279000.0 True 3 1 Wilda 68 +430000.0 True 2 3 Jeżyce 58 +255000.0 True 2 1 Winogrady 38 +360000.0 True 3 1 Grunwald 49 +339000.0 True 2 1 Górczyn 45 +855000.0 True 3 3 Centrum 90 +1179000.0 True 3 2 Centrum 40 +2700000.0 True 3 2 Centrum 90 +1170000.0 True 3 3 Centrum 90 +368712.0 True 2 2 Centrum 90 +991380.0 True 4 1 Nowe 20 +250000.0 True 2 3 Dębiec 53 +249000.0 True 3 4 Rataje 53 +350000.0 True 2 4 Jeżyce 56 +285000.0 True 2 2 Centrum 52 +285000.0 True 2 2 Łazarz 52 +490000.0 True 4 2 Jeżyce 87 +429000.0 True 4 2 Grunwald 92 +211190.0 False 2 0 Podolany 78 +375529.0 False 2 3 Centrum 71 +225228.0 False 2 0 Rataje 71 +991380.0 False 5 1 Starołęka 94 +1156054.0 False 4 0 Stare 52 +288000.0 True 2 4 Naramowice 44 +820000.0 True 4 1 Grunwald 133 +370000.0 True 4 4 Piątkowo 76 +156085.0 False 2 0 Głuszyna 54 +156085.0 False 2 0 Głuszyna 54 +200460.0 False 2 0 Głuszyna 55 +200460.0 False 2 0 Głuszyna 55 +156085.0 False 2 0 Głuszyna 54 +156085.0 False 2 0 Głuszyna 54 +308237.0 False 2 1 Nowe 85 +225288.0 False 2 9 Rataje 91 +267702.0 False 2 3 Grunwald 22 +364000.0 True 3 4 Nowe 90 +280000.0 True 2 4 Winogrady 30 +349000.0 True 4 0 Rataje 84 +412000.0 True 4 0 Nowe 88 +490000.0 True 3 4 Piątkowo 82 +359602.0 True 3 5 Grunwald 58 +333025.0 True 2 1 Stare 45 +450000.0 True 2 3 Stare 62 +248000.0 True 2 2 Winogrady 80 +270000.0 True 3 10 Śródka 48 +239000.0 True 2 11 Stare 38 +225292.0 True 2 1 Rataje 39 +290970.0 True 2 4 Górczyn 70 +194500.0 True 2 3 Nowe 90 +712980.0 True 4 3 Centrum 102 +712980.0 True 5 2 Centrum 102 +855000.0 True 3 2 Centrum 72 +279000.0 True 2 6 Stare 49 +313830.0 True 2 4 Jeżyce 55 +325050.0 True 2 4 Jeżyce 25 +240158.0 True 2 0 Stare 39 +211190.0 True 2 0 Jeżyce 38 +333690.0 True 3 2 Jeżyce 68 +388751.0 True 4 5 Winogrady 65 +347091.0 True 3 1 Winogrady 57 +362450.0 True 3 1 Górczyn 90 +225288.91 True 2 6 Rataje 91 +225288.91 True 2 5 Rataje 91 +225288.91 True 2 1 Rataje 91 +392860.63 True 4 3 Winogrady 41 +364762.0 True 4 4 Winogrady 89 +316498.0 True 2 2 Centrum 77 +442002.0 True 2 3 Centrum 73 +276610.0 True 2 4 Centrum 80 +316355.0 True 2 4 Centrum 67 +280250.0 True 2 0 Górczyn 50 +327127.5 True 2 0 Centrum 50 +449000.0 False 5 0 Szczepankowo 68 +225288.0 False 2 1 Rataje 91 +286327.0 False 2 3 Naramowice 82 +365690.0 False 4 2 Naramowice 50 +389528.0 False 2 2 Stare 87 +481903.0 False 3 2 Stare 53 +349000.0 False 4 0 Szczepankowo 29 +347090.0 False 3 2 Naramowice 41 +534523.0 False 3 2 Stare 62 +412670.0 False 3 1 Naramowice 17 +285678.0 False 2 2 Naramowice 82 +263000.0 True 2 0 Wilda 75 +245000.0 True 2 2 Winogrady 20 +232410.0 True 2 0 Stare 38 +245488.0 True 2 0 Jeżyce 37 +225288.0 True 2 7 Rataje 39 +180000.0 True 3 2 Wilda 35 +189000.0 True 2 4 Wilda 35 +460499.0 True 3 1 Centrum 51 +903965.44 True 4 0 Centrum 80 +1366410.0 True 4 0 Centrum 71 +285383.0 True 2 4 Winogrady 37 +286091.0 True 2 3 Winogrady 49 +347090.0 True 3 1 Winogrady 90 +225288.91 True 2 7 Rataje 91 +442150.0 True 2 2 Centrum 75 +318000.0 True 4 8 Nowe 82 +278047.0 False 2 3 Podolany 74 +278047.0 False 2 4 Podolany 74 +278047.0 False 2 4 Podolany 74 +650958.0 False 4 5 Winogrady 51 +290360.0 False 2 4 Górczyn 60 +278047.0 False 2 4 Podolany 74 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +350875.0 False 3 1 Starołęka 97 +442080.0 False 3 1 Starołęka 65 +460499.0 False 3 1 Stare 51 +412670.0 False 3 1 Winogrady 17 +357692.0 False 3 2 Starołęka 31 +282994.0 False 2 0 Starołęka 59 +211190.0 False 2 0 Piątkowo 78 +252723.0 False 2 1 Winogrady 43 +232408.0 False 2 0 Winogrady 79 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +310020.0 False 3 4 Winogrady 67 +249733.0 False 2 0 Ogrody 54 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +282944.0 False 2 0 Starołęka 59 +347633.0 True 3 10 Grunwald 57 +293436.0 True 2 1 Grunwald 50 +247705.0 True 2 1 Jeżyce 50 +398000.0 True 3 1 Jeżyce 72 +570000.0 True 4 0 Jeżyce 90 +285200.0 True 2 1 Stare 46 +347100.0 True 3 1 Winogrady 57 +223749.0 True 2 0 Stare 37 +245880.0 True 2 1 Jeżyce 38 +460050.0 True 3 5 Grunwald 74 +329000.0 True 3 2 Piątkowo 40 +279000.0 True 2 1 Stare 60 +720000.0 True 4 7 Jeżyce 90 +225290.0 True 2 5 Rataje 39 +355000.0 False 3 0 Stare 61 +355000.0 False 3 0 Podolany 61 +430000.0 False 4 0 Podolany 75 +270000.0 True 3 3 Stare 47 +475000.0 False 4 0 Stare 72 +475000.0 False 4 0 Podolany 72 +325000.0 True 2 2 Centrum 51 +455000.0 False 4 0 Stare 72 +455000.0 False 4 0 Podolany 72 +372000.0 False 4 1 Grunwald 87 +270000.0 True 2 10 Śródka 48 +207845.0 True 2 0 Nowe 79 +285000.0 True 2 2 Grunwald 52 +262500.0 True 4 0 Wilda 75 +350000.0 True 2 1 Rataje 80 +200000.0 True 2 0 Rataje 30 +210000.0 True 2 3 Grunwald 35 +368712.0 True 2 0 Centrum 90 +360288.0 True 2 1 Centrum 60 +390312.0 True 2 3 Centrum 60 +481103.0 True 3 1 Centrum 51 +455348.0 True 3 0 Centrum 61 +417231.0 True 2 2 Centrum 50 +411684.0 False 3 3 Winogrady 17 +481903.0 False 3 2 Centrum 53 +746787.0 False 3 7 Górczyn 53 +319998.0 False 3 1 Starołęka 95 +460040.0 False 3 5 Grunwald 20 +349000.0 False 4 0 Szczepankowo 29 +399000.0 False 5 0 Szczepankowo 68 +234000.0 True 2 7 Wilda 50 +210000.0 True 2 1 Wilda 65 +279000.0 True 2 2 Łazarz 36 +325000.0 True 2 0 Rataje 47 +285000.0 True 2 3 Grunwald 58 +360000.0 True 3 2 Rataje 69 +355000.0 True 2 2 Rataje 90 +362804.0 False 3 5 Jeżyce 39 +252723.0 False 2 1 Winogrady 43 +285200.0 False 2 1 Winogrady 46 +249641.0 False 2 0 Ogrody 54 +302887.0 False 2 4 Górczyn 25 +242731.0 False 2 0 Podolany 74 +991380.0 False 5 1 Starołęka 94 +265000.0 True 2 2 Piątkowo 70 +344000.0 True 2 0 Stare 49 +313000.0 True 2 4 Stare 49 +315000.0 True 3 0 Stare 60 +315000.0 True 3 0 Rataje 63 +690000.0 True 2 1 Stare 20 +465000.0 True 2 2 Wilda 49 +368110.0 True 3 2 Nowe 64 +282994.0 True 2 0 Nowe 55 +350000.0 True 2 3 Rataje 52 +780000.0 True 3 0 Grunwald 87 +263000.0 True 2 0 Rataje 38 +219000.0 True 2 7 Winogrady 38 +250000.0 True 3 3 Rataje 53 +394000.0 True 4 0 Nowe 88 +535000.0 True 2 2 Centrum 55 +329000.0 True 3 13 Rataje 65 +192750.0 True 2 2 Nowe 55 +375408.0 True 3 0 Nowe 88 +649400.0 True 3 4 Nowe 50 +294906.0 True 2 3 Nowe 74 +291720.0 True 2 5 Stare 20 +290646.0 True 2 2 Stare 80 +285678.0 False 2 1 Winogrady 42 +156085.0 False 2 4 Nowe 54 +496573.0 False 3 2 Stare 78 +1156054.0 False 4 0 Stare 52 +380931.0 False 3 3 Starołęka 82 +285200.0 True 2 0 Stare 46 +434201.0 True 4 1 Nowe 54 +269984.0 True 3 0 Stare 76 +333024.0 True 2 1 Stare 45 +637037.0 True 4 3 Stare 79 +319060.0 True 3 3 Grunwald 56 +267700.0 True 2 2 Grunwald 45 +365690.0 True 4 1 Winogrady 63 +285678.0 True 2 4 Winogrady 48 +295363.0 True 3 1 Stare 48 +223750.0 True 2 0 Stare 37 +277823.0 True 2 1 Jeżyce 50 +333695.0 True 3 2 Jeżyce 68 +288000.0 True 2 4 Naramowice 22 +518000.0 True 4 0 Wilda 41 +235000.0 True 2 4 Dębiec 44 +364762.0 True 4 1 Winogrady 62 +320000.0 True 4 3 Stare 40 +449000.0 True 5 3 Wilda 97 +249000.0 True 2 10 Grunwald 42 +279000.0 True 2 3 Piątkowo 30 +289000.0 True 3 4 Winogrady 48 +318645.0 True 2 2 Stare 30 +289000.0 True 2 7 Jeżyce 80 +285000.0 True 2 2 Łazarz 20 +399000.0 True 3 4 Piątkowo 69 +350000.0 True 3 1 Rataje 63 +240000.0 True 2 2 Dębiec 48 +356160.0 False 4 4 Winogrady 36 +290970.0 False 2 0 Winogrady 52 +289000.0 True 3 4 Stare 47 +399000.0 True 3 4 Piątkowo 69 +315000.0 True 3 0 Piatkowo 50 +329000.0 True 2 1 Grunwald 66 +253000.0 True 2 4 Grunwald 70 +179000.0 True 2 0 Grunwald 34 +250000.0 True 2 0 Naramowice 50 +410000.0 True 2 4 Jeżyce 43 +360000.0 True 3 3 Jeżyce 62 +590000.0 True 3 3 Jeżyce 80 +325000.0 True 3 2 Jeżyce 64 +247705.0 False 2 1 Podolany 74 +247705.0 False 2 1 Piątkowo 74 +392861.0 False 3 3 Winogrady 42 +156085.0 False 2 4 Głuszyna 45 +249441.0 False 2 5 Jeżyce 51 +398000.0 True 3 3 Łazarz 96 +255000.0 True 2 2 Wilda 72 +329000.0 True 2 1 Naramowice 40 +232409.0 True 2 0 Stare 38 +296300.0 True 3 2 Stare 49 +364762.0 True 4 4 Winogrady 63 +239592.0 True 2 5 Grunwald 36 +395000.0 True 3 0 Naramowice 73 +333694.0 False 3 1 Piątkowo 38 +344500.0 False 3 6 Jeżyce 53 +377652.0 False 4 6 Jeżyce 22 +332145.0 False 3 0 Winogrady 45 +328241.0 False 3 3 Winogrady 81 +328241.0 False 3 5 Winogrady 81 +355041.6 False 3 6 Jeżyce 96 +318384.0 False 3 6 Jeżyce 24 +328241.0 False 3 1 Winogrady 81 +323340.0 False 3 0 Winogrady 89 +332145.0 False 3 1 Winogrady 45 +392607.0 False 4 5 Jeżyce 94 +345180.0 False 3 1 Jeżyce 30 +315810.0 False 4 8 Winogrady 20 +263581.0 False 2 2 Winogrady 21 +323340.0 False 3 2 Winogrady 89 +263581.0 False 2 6 Winogrady 21 +238948.0 False 2 5 Winogrady 54 +240875.0 False 2 7 Winogrady 54 +246379.0 False 2 0 Winogrady 39 +345240.0 False 4 1 Winogrady 54 +345240.0 False 4 0 Winogrady 54 +332145.0 False 3 3 Winogrady 45 +348117.0 False 4 5 Winogrady 54 +348117.0 False 4 6 Winogrady 54 +339282.0 False 3 7 Winogrady 62 +317200.0 False 3 8 Winogrady 52 +329422.5 False 3 6 Winogrady 45 +265741.5 False 2 7 Winogrady 21 +238948.0 False 2 6 Winogrady 54 +348117.0 False 4 7 Winogrady 54 +339282.0 False 3 5 Winogrady 62 +263581.0 False 2 4 Winogrady 21 +348117.0 False 4 4 Winogrady 54 +296277.0 False 3 0 Winogrady 57 +304133.5 False 3 1 Winogrady 27 +296277.0 False 3 2 Winogrady 57 +263581.0 False 2 3 Winogrady 21 +345240.0 False 4 2 Winogrady 54 +263581.0 False 2 1 Winogrady 21 +345240.0 False 4 3 Winogrady 54 +339282.0 False 3 6 Winogrady 62 +323340.0 False 3 3 Winogrady 89 +310020.0 False 3 0 Winogrady 67 +252723.0 False 2 1 Winogrady 43 +366850.0 False 4 1 Winogrady 25 +319875.0 False 2 8 Grunwald 18 +249641.0 False 2 0 Jeżyce 54 +356160.0 False 4 4 Winogrady 36 +156085.0 False 2 4 Nowe 54 +319875.0 False 2 7 Grunwald 18 +329763.26 False 2 9 Grunwald 94 +324400.97 False 2 7 Grunwald 94 +388352.0 False 3 7 Grunwald 60 +347633.0 False 3 10 Grunwald 20 +409713.0 False 3 11 Grunwald 62 +330368.0 False 2 12 Grunwald 62 +356251.9 False 3 14 Grunwald 20 +347839.75 False 2 12 Grunwald 58 +350506.16 False 3 11 Grunwald 20 +342405.13 False 2 11 Grunwald 58 +429699.0 False 3 15 Grunwald 62 +319875.0 False 2 9 Grunwald 18 +341703.96 False 3 8 Grunwald 21 +336969.98 False 2 10 Grunwald 58 +413044.0 False 3 12 Grunwald 62 +405104.0 False 3 1 Grunwald 34 +341703.96 False 3 9 Grunwald 21 +424977.14 False 4 5 Grunwald 20 +327787.0 False 2 11 Grunwald 62 +353378.74 False 3 12 Grunwald 20 +332949.0 False 2 13 Grunwald 62 +383760.0 False 3 6 Grunwald 60 +335530.0 False 2 14 Grunwald 62 +387040.0 False 3 5 Grunwald 60 +302985.6 False 2 4 Grunwald 18 +410780.0 False 3 3 Grunwald 44 +417773.83 False 4 3 Grunwald 20 +303286.5 False 2 3 Grunwald 13 +364080.0 False 3 1 Grunwald 60 +319055.27 False 3 3 Grunwald 21 +292100.0 False 2 1 Grunwald 80 +245830.0 False 2 2 Grunwald 67 +352390.0 False 2 12 Grunwald 80 +377200.0 False 3 3 Grunwald 60 +313080.0 False 3 5 Winogrady 18 +314089.0 False 2 5 Grunwald 49 +308237.0 False 2 1 Nowe 85 +339072.0 False 2 9 Grunwald 98 +321812.5 False 2 8 Grunwald 49 +322643.5 False 2 10 Grunwald 81 +500203.02 False 4 10 Grunwald 73 +343978.41 False 3 9 Grunwald 14 +325184.0 False 2 11 Grunwald 81 +351130.0 False 3 10 Grunwald 85 +297420.8 False 2 3 Grunwald 24 +267702.4 False 2 2 Grunwald 22 +506566.5 False 4 11 Grunwald 73 +297420.8 False 2 2 Grunwald 24 +495722.51 False 4 9 Grunwald 99 +426416.8 False 4 6 Grunwald 20 +327081.85 False 2 8 Grunwald 94 +307080.0 False 2 5 Grunwald 18 +305793.0 False 2 4 Grunwald 13 +312198.0 False 2 6 Grunwald 18 +333231.99 False 3 7 Grunwald 21 +514939.5 False 4 13 Grunwald 73 +317880.0 False 2 2 Grunwald 98 +267702.4 False 2 3 Grunwald 22 +519126.0 False 4 14 Grunwald 73 +510753.0 False 4 12 Grunwald 73 +347010.0 False 2 10 Grunwald 80 +324387.0 False 2 9 Grunwald 49 +311514.5 False 2 4 Grunwald 49 +298249.6 False 2 6 Grunwald 38 +333774.0 False 2 6 Grunwald 98 +495722.51 False 4 8 Grunwald 99 +331125.0 False 2 5 Grunwald 98 +336423.0 False 2 8 Grunwald 98 +325312.98 False 3 3 Grunwald 14 +298249.6 False 2 5 Grunwald 38 +495782.26 False 4 7 Grunwald 99 +341311.84 False 3 8 Grunwald 14 +328476.0 False 2 4 Grunwald 98 +316848.0 False 2 6 Grunwald 52 +328241.0 False 3 2 Winogrady 81 +332145.0 False 3 2 Winogrady 45 +348750.0 True 2 4 Centrum 50 +297600.0 True 2 3 Winogrady 50 +300160.0 True 2 3 Winogrady 90 +293760.0 True 2 3 Winogrady 90 +315819.0 False 2 5 Grunwald 13 +435784.0 False 3 5 Grunwald 44 +407208.0 False 3 2 Grunwald 44 +370640.0 False 3 2 Grunwald 60 +329422.5 False 3 4 Winogrady 45 +329422.5 False 3 7 Winogrady 45 +328241.0 False 3 4 Winogrady 81 +323340.0 False 3 1 Winogrady 89 +329422.5 False 3 5 Winogrady 45 +335000.0 True 3 1 Piątkowo 63 +391728.59 True 3 2 Winogrady 21 +285678.0 True 2 2 Winogrady 42 +287566.0 True 2 1 Winogrady 74 +421049.88 True 4 1 Grunwald 42 +332388.13 True 2 4 Grunwald 96 +330359.78 True 2 14 Grunwald 56 +301206.53 True 2 7 Grunwald 81 +307490.0 True 2 14 Grunwald 94 +307880.88 True 3 3 Grunwald 16 +319047.97 True 3 3 Grunwald 21 +495782.25 True 4 7 Grunwald 99 +413044.03 True 3 12 Grunwald 62 +380480.0 True 3 4 Grunwald 60 +426416.78 True 4 6 Grunwald 20 +324387.0 True 2 9 Grunwald 49 +333212.88 True 2 7 Grunwald 21 +579000.0 True 4 3 Naramowice 97 +215000.0 True 2 2 Grunwald 44 +267702.41 True 2 3 Grunwald 22 +245830.0 True 2 2 Grunwald 67 +410000.0 True 2 5 Rataje 53 +365000.0 True 4 2 Łazarz 62 +257000.0 True 2 12 Winogrady 47 +240000.0 True 2 16 Rataje 36 +319055.0 True 3 3 Grunwald 56 +267702.0 True 2 2 Grunwald 45 +245830.0 True 2 2 Grunwald 40 +253193.0 True 2 6 Jeżyce 38 +318384.0 True 3 6 Jeżyce 48 +245875.0 True 2 1 Jeżyce 38 +347090.0 True 3 1 Winogrady 57 +238948.0 True 2 4 Stare 39 +355000.0 True 3 3 Łazarz 62 +330255.0 False 2 1 Stare 14 +442080.0 False 3 1 Starołęka 68 +277823.0 False 2 2 Podolany 70 +308039.0 False 2 0 Naramowice 71 +321656.0 False 2 1 Naramowice 50 +304140.0 False 3 5 Winogrady 18 +771672.0 False 4 4 Górczyn 66 +322497.0 False 2 6 Naramowice 60 +333024.0 False 2 1 Stare 51 +290000.0 True 3 14 Nowe 20 +515000.0 True 3 0 Rataje 71 +372000.0 True 4 1 Nadolnik 125 +410000.0 True 2 5 Rataje 53 +259000.0 True 2 0 Grunwald 52 +298950.0 True 2 0 Piątkowo 70 +495000.0 True 4 3 Naramowice 104 +245000.0 True 2 7 Jeżyce 53 +319000.0 True 2 1 Centrum 52 +420000.0 True 2 1 Naramowice 50 +420000.0 True 2 3 Naramowice 50 +300000.0 True 3 2 Grunwald 49 +300000.0 True 3 2 Winogrady 48 +339000.0 True 2 2 Stare 53 +298000.0 True 3 1 Nowe 30 +250000.0 True 3 0 Stare 45 +475000.0 True 4 4 Naramowice 50 +329000.0 True 3 1 Jeżyce 112 +299000.0 True 2 0 Piątkowo 20 +259000.0 True 3 1 Grunwald 48 +370000.0 True 4 4 Piątkowo 60 +249641.0 False 2 0 Ogrody 54 +375000.0 True 3 1 Nowe 63 +390000.0 True 4 4 Piątkowo 74 +288000.0 True 3 4 Stare 30 +468000.0 True 2 3 Grunwald 60 +279000.0 True 3 1 Wilda 68 +250000.0 True 2 6 Winogrady 42 +350000.0 True 2 2 Jeżyce 46 +310000.0 True 2 1 Nowe 40 +289000.0 True 3 4 Winogrady 47 +405900.0 True 3 2 Stare 82 +359000.0 True 3 1 Wilda 20 +326000.0 True 2 1 Sołacz 39 +350000.0 True 2 2 Jeżyce 47 +239000.0 True 2 4 Grunwald 50 +224343.0 False 2 4 Starołęka 35 +362220.0 False 3 3 Starołęka 60 +287394.0 False 2 2 Starołęka 50 +320739.0 False 3 1 Starołęka 56 +460499.0 False 3 1 Stare 51 +242731.0 False 2 0 Podolany 74 +156085.0 False 2 4 Nowe 54 +285200.0 False 2 1 Winogrady 46 +211190.0 False 2 0 Podolany 78 +309000.0 True 3 3 Wilda 80 +313000.0 True 2 1 Górczyn 48 +313000.0 True 2 1 Dębiec 48 +643720.0 True 4 0 Stare 60 +415000.0 True 2 5 Nowe 53 +325000.0 True 2 3 Stare 60 +599000.0 True 4 3 Stare 97 +319000.0 True 2 0 Grunwald 20 +299000.0 True 3 6 Stare 63 +299000.0 True 2 0 Grunwald 51 +339000.0 True 2 2 Centrum 53 +320000.0 True 3 4 Stare 65 +364000.0 True 3 1 Nowe 67 +209000.0 True 3 3 Grunwald 50 diff --git a/w2/data_flats_with_outliers.tsv b/w2/data_flats_with_outliers.tsv new file mode 100644 index 0000000..607342a --- /dev/null +++ b/w2/data_flats_with_outliers.tsv @@ -0,0 +1,4186 @@ +476118.0 False 3 1 Centrum 78 +349000.0 False 5 0 4 103 +390000.0 False 4 1 Naramowice 100 +530000.0 True 4 3 Jeżyce 70 +364000.0 False 5 0 4 126 +294000.0 False 2 0 Grunwald 46 +277806.0 False 2 1 Dolna 47 +571229.15 False 2 4 Wilda 39 +346777.0 False 3 1 Grunwald 10 +279924.0 False 2 2 Dolna 2 +304000.0 False 2 1 Wilda 95 +604836.0 False 4 5 Grunwald 40 +268229.0 False 2 1 Grunwald 90 +325000.0 False 3 1 Grunwald 54 +274200.0 False 2 0 Grunwald 57 +333694.0 False 3 0 Podolany 38 +249964.0 False 3 0 Nowe 41 +833018.0 False 5 5 Dolna 31 +399406.0 False 3 2 Wilda 89 +277823.0 False 2 4 Podolany 70 +427202.0 False 3 3 Dolna 79 +242751.0 False 2 1 Wilda 40 +324387.0 False 2 9 Grunwald 49 +408707.0 False 3 1 Grunwald 13 +656936.0 False 2 4 Wilda 29 +275000.0 True 2 1 Sołacz 50 +245000.0 True 2 0 Piątkowo 40 +305000.0 True 2 0 Łazarz 60 +861000.0 True 4 1 Łazarz 23 +260000.0 True 2 0 MDM 80 +319000.0 True 2 1 Grunwald 52 +279000.0 True 2 2 Rataje 44 +369000.0 True 2 2 Centrum 51 +329000.0 True 2 3 Nowe 50 +499000.0 True 3 1 Malta 50 +439000.0 True 3 3 Piątkowo 70 +220000.0 True 2 1 Jeżyce 60 +411000.0 True 3 2 Winogrady 50 +305000.0 True 2 1 Winiary 48 +850000.0 True 10 0 Wola 400 +235000.0 True 2 1 Nowe 47 +419000.0 True 2 0 Malta 55 +265000.0 True 3 10 Nowe 48 +385000.0 True 2 2 Piątkowo 50 +714000.0 True 3 2 Malta 84 +289000.0 True 2 3 Winogrady 10 +459000.0 True 2 3 Jeżyce 32 +420000.0 True 3 1 Jeżyce 60 +375000.0 True 3 3 Wilda 30 +310000.0 True 4 1 Winogrady 90 +306000.0 True 3 4 Grunwald 20 +399000.0 True 3 0 Pokrzywno 90 +355000.0 True 2 0 Podolany 93 +415000.0 True 4 3 Jeżyce 78 +350000.0 True 2 3 Grunwald 50 +350000.0 True 3 0 Naramowickie 10 +490000.0 True 4 1 Naramowice 99 +289000.0 True 2 2 Jeżyce 54 +360000.0 True 3 1 Sołacz 65 +329000.0 True 2 3 Nowe 90 +294990.0 True 2 4 Jeżyce 6 +314990.0 True 2 4 Jeżyce 82 +330000.0 True 2 3 Chwaliszewo 56 +395000.0 True 3 3 Wilda 75 +245000.0 True 2 2 Dębiec 45 +229000.0 True 2 0 Bonin 80 +247000.0 True 3 3 Grunwald 49 +1650000.0 True 4 0 Jeżyce 158 +400000.0 False 4 0 Grunwald 81 +400000.0 False 4 0 Grunwald 60 +239000.0 True 2 0 Rataje 36 +350000.0 True 2 11 Rataje 45 +270000.0 True 3 4 Rataje 20 +265999.0 True 2 3 Grunwald 50 +303867.0 False 2 2 Wilda 7 +375000.0 True 3 3 Stare 50 +299000.0 True 3 0 Podolany 94 +385000.0 True 2 1 Rataje 48 +249000.0 True 2 2 Grunwald 46 +288000.0 True 3 4 Winogrady 30 +332000.0 True 3 8 Rataje 63 +347193.0 False 3 11 Grunwald 7 +225000.0 True 2 2 Wilda 50 +255000.0 True 3 0 Grunwald 53 +419000.0 True 3 4 Dębiec 60 +330000.0 True 3 3 Winiary 53 +249441.0 False 2 2 Winogrady 51 +304133.0 False 3 3 Winogrady 27 +250100.0 False 2 1 Winogrady 41 +238948.0 False 2 4 Winogrady 54 +345800.0 False 3 1 Jeżyce 53 +264256.0 False 2 2 Jeżyce 29 +310000.0 True 2 2 Stare 74 +295000.0 True 3 4 Grunwald 45 +399000.0 True 4 3 Stare 40 +489000.0 True 4 2 Centrum 120 +384000.0 True 4 0 Grunwald 42 +290000.0 True 3 2 Winogrady 60 +270000.0 True 2 6 Piątkowo 46 +345000.0 False 5 1 Komorniki 97 +368000.0 True 2 1 Grunwald 33 +339000.0 True 2 1 Grunwald 66 +260000.0 True 2 5 Nowe 42 +780000.0 True 5 0 Winogrady 54 +398000.0 True 3 1 Jeżyce 72 +720000.0 True 3 1 Grunwald 60 +280000.0 True 2 4 Łazarz 20 +495000.0 False 4 0 Nowe 7 +384000.0 True 3 2 Piątkowo 69 +219900.0 True 2 3 Wilda 45 +249000.0 True 2 1 Wilda 65 +325000.0 True 2 3 Stare 50 +265000.0 True 2 11 Rataje 80 +384000.0 True 3 2 Piątkowo 90 +290000.0 True 3 2 Winogrady 47 +209000.0 True 2 0 Dębiec 37 +289000.0 True 3 0 Rataje 50 +310000.0 True 3 4 Rataje 62 +699000.0 True 2 1 Grunwald 68 +195000.0 True 2 1 Grunwald 31 +339000.0 True 3 1 Nowe 88 +359000.0 True 3 4 Nowe 10 +299000.0 True 2 0 Jeżyce 60 +460000.0 True 4 2 Sołacz 68 +355647.0 False 3 3 Dolna 89 +363000.0 False 3 0 Junikowo 45 +343400.0 True 2 1 Wilda 68 +259000.0 True 2 2 Nowe 40 +525000.0 True 4 3 Nowe 88 +289000.0 True 2 7 Winiary 49 +445000.0 False 5 0 Plewiska 104 +305000.0 True 3 4 Rataje 63 +309000.0 True 3 9 Rataje 64 +355000.0 False 3 0 Junikowo 64 +429000.0 True 3 0 Jeżyce 30 +487000.0 True 3 0 Stare 83 +350000.0 True 4 1 Stare 50 +270000.0 True 2 2 Sołacz 49 +439000.0 True 2 3 Jeżyce 60 +350000.0 False 4 0 Plewiska 80 +479000.0 True 3 3 Grunwald 23 +695000.0 True 3 2 Jeżyce 71 +249000.0 True 2 1 Grunwald 56 +295000.0 True 2 0 Winogrady 36 +240000.0 True 2 5 Rataje 43 +847000.0 True 4 2 Piątkowo 113 +298000.0 True 3 1 Rataje 30 +406550.0 True 3 1 Jeżyce 23 +349000.0 True 2 4 Jeżyce 89 +299000.0 True 2 2 Grunwald 35 +529900.0 True 4 1 Podolany 103 +779000.0 True 3 2 Stary 113 +297600.0 False 2 3 Winogrady 47 +336474.0 False 3 4 Winogrady 27 +285678.0 False 2 2 Winogrady 42 +290970.0 False 2 0 Winogrady 60 +295120.0 False 2 1 Winogrady 60 +285200.0 False 2 1 Winogrady 46 +291838.0 False 2 1 Starołęka 55 +348750.0 False 2 3 Centrum 47 +349668.0 False 2 1 Garbary 44 +244071.0 False 2 2 Starołęka 52 +311515.0 False 2 4 Grunwald 49 +296810.0 False 2 2 Grunwald 30 +321656.0 False 2 1 Winogrady 88 +286445.0 False 2 2 Winogrady 49 +299513.0 False 2 1 Starołęka 85 +349785.0 False 3 1 Malta 52 +442827.0 False 4 2 Starołęka 14 +302176.0 False 2 2 Malta 45 +285383.0 False 2 4 Winogrady 37 +377200.0 False 3 3 Grunwald 66 +327584.0 False 3 3 Grunwald 21 +308039.0 False 2 0 Winogrady 21 +377917.0 False 3 2 Grunwald 44 +277039.0 False 2 1 Malta 66 +285678.0 False 2 2 Winogrady 42 +186600.0 False 2 2 Starołęka 62 +156085.0 False 2 2 Głuszyna 54 +225316.0 False 2 0 Starołęka 33 +303287.0 False 2 3 Grunwald 13 +280860.0 False 2 1 Winogrady 30 +272800.0 False 2 5 Winogrady 44 +357000.0 True 3 3 Rataje 90 +210000.0 True 2 2 Grunwald 40 +399000.0 True 3 5 Grunwald 81 +363000.0 True 3 2 Grunwald 77 +400000.0 True 3 3 Stare 70 +420000.0 True 3 1 Podolany 85 +375000.0 False 5 0 Plewiska 96 +465000.0 False 5 0 Plewiska 117 +259000.0 True 3 4 Piątkowo 60 +229000.0 True 4 3 Wilda 54 +330000.0 True 2 3 Wilda 53 +389000.0 True 3 3 Stare 49 +275000.0 True 2 9 Winogrady 10 +289000.0 True 2 2 Naramowice 50 +279000.0 True 3 4 Stare 50 +139000.0 True 3 1 Nowe 56 +275000.0 True 2 4 Jeżyce 90 +229000.0 True 2 4 Grunwald 30 +378000.0 True 2 4 Wilda 52 +299000.0 True 2 2 Grunwald 35 +299000.0 True 2 4 Centrum 50 +695000.0 True 5 0 Jeżyce 150 +323000.0 True 2 0 Jeżyce 54 +235000.0 True 2 12 Stare 38 +335000.0 True 3 1 Grunwald 70 +416000.0 True 3 3 Nowe 64 +275000.0 True 2 9 Stare 10 +315000.0 True 3 4 Winogrady 54 +275000.0 True 2 1 Sołacz 39 +249000.0 True 2 4 Grunwald 43 +268000.0 True 3 4 Jeżyce 43 +179000.0 True 3 2 Wilda 35 +429000.0 True 3 4 Świerczewo 60 +399000.0 True 3 1 Bonin 67 +290000.0 True 3 2 Stare 48 +799000.0 True 4 2 Stare 114 +375000.0 False 4 0 Plewiska 96 +354000.0 True 3 1 Piątkowo 60 +185000.0 True 2 8 Dębiec 50 +385000.0 True 4 3 Stare 80 +549000.0 True 4 5 Jeżyce 98 +326000.0 True 2 1 Winogrady 39 +263000.0 True 2 10 Śródka 48 +643000.0 True 4 0 Naramowice 60 +379000.0 True 3 1 Naramowice 20 +219000.0 True 2 1 Łazarz 35 +299000.0 True 2 0 Dębiec 52 +365000.0 True 2 5 Wilda 30 +410000.0 True 2 9 Rataje 50 +385000.0 True 2 1 Nowe 48 +310000.0 True 3 0 Grunwald 60 +375000.0 True 3 4 Wilda 40 +389000.0 True 3 0 Wilda 69 +269965.0 False 3 0 Nowe 81 +233000.0 True 2 3 Grunwald 70 +240000.0 True 2 3 Grunwald 80 +319000.0 True 3 4 Rataje 63 +315000.0 True 2 4 Jeżyce 25 +351648.0 True 3 4 Jeżyce 28 +305000.0 True 2 4 Jeżyce 55 +379000.0 True 3 0 Naramowice 64 +379000.0 True 3 0 Piątkowo 64 +250000.0 True 3 3 Rataje 53 +214000.0 True 2 3 Wilda 43 +390000.0 True 2 0 Nowe 61 +185000.0 True 2 11 Wilda 38 +435000.0 True 3 1 Junikowo 70 +395000.0 True 2 0 Grunwald 52 +390000.0 True 3 2 Podolany 68 +275000.0 True 2 5 Naramowice 45 +369000.0 True 3 0 Piątkowo 64 +295000.0 True 2 0 Stare 44 +275000.0 True 2 13 Rataje 80 +245000.0 True 2 12 Rataje 50 +429000.0 True 4 1 Rataje 70 +339000.0 True 3 1 Rataje 67 +290000.0 True 3 3 Rataje 50 +235000.0 True 2 0 Wilda 55 +449000.0 True 4 2 Grunwald 90 +695000.0 True 3 2 Jeżyce 25 +555000.0 True 4 0 Stare 20 +182000.0 True 2 2 Stare 70 +380000.0 True 4 6 Stare 90 +450000.0 True 6 4 Wilda 90 +283500.0 True 2 0 Stare 50 +350550.0 True 3 4 Stare 50 +395000.0 True 3 0 Grunwald 70 +425000.0 True 4 6 Rataje 85 +590000.0 True 4 3 Rataje 90 +349000.0 True 4 0 Rataje 84 +695000.0 True 3 2 Jeżyce 25 +329000.0 True 3 3 Piątkowo 60 +265000.0 True 3 10 Śródka 49 +229000.0 True 2 1 Stare 37 +399000.0 True 3 5 Łazarz 68 +249000.0 True 2 1 Nowe 49 +305000.0 True 2 1 Winiary 48 +326000.0 True 2 1 Sołacz 39 +415000.0 True 4 7 Piątkowo 63 +295000.0 True 2 2 Grunwald 50 +519000.0 True 4 3 Wilda 104 +105000.0 True 2 3 Nowe 50 +375000.0 True 3 0 Naramowice 68 +330000.0 True 3 4 Rataje 59 +487000.0 True 3 0 Naramowice 83 +899000.0 True 4 0 Stare 100 +218000.0 True 2 7 Winogrady 38 +395000.0 True 3 1 Grunwald 100 +345000.0 True 3 1 Winogrady 17 +489000.0 True 2 5 Centrum 53 +978000.0 True 4 5 Centrum 106 +339000.0 True 3 1 Żegrze 88 +350000.0 True 3 0 Winogrady 10 +259000.0 True 2 3 Żegrze 49 +265000.0 True 2 0 Dębiec 50 +569000.0 True 4 0 Wilda 50 +275000.0 True 2 1 Sołacz 50 +382280.0 True 3 3 Centrum 80 +259000.0 True 2 3 Łazarz 47 +425000.0 True 4 6 Rataje 85 +429000.0 True 3 4 Rataje 79 +382280.0 True 3 3 Stare 30 +325000.0 True 2 3 Stare 56 +289000.0 True 2 2 Jeżyce 42 +779000.0 True 3 2 Centrum 114 +445000.0 True 2 3 Jeżyce 60 +390000.0 True 3 3 Wilda 50 +339000.0 True 3 10 Rataje 10 +235000.0 True 2 0 Śródka 47 +655000.0 True 3 4 Stare 60 +655000.0 True 2 2 Jeżyce 10 +283340.0 True 2 0 Stare 70 +640000.0 True 3 2 Stare 47 +370000.0 True 3 4 Stare 84 +425000.0 True 2 9 Nowe 50 +282880.0 True 2 3 Stare 20 +561000.0 True 2 4 Stare 50 +360000.0 True 4 0 Grunwald 66 +429000.0 True 3 4 Wilda 47 +359400.0 True 3 1 Stare 72 +1115000.0 True 2 2 Grunwald 7 +497400.0 True 3 0 Wilda 48 +604395.0 True 5 1 Wilda 31 +1199000.0 True 8 3 Stare 282 +405000.0 True 3 1 Stare 80 +330615.0 True 2 2 Stare 79 +255000.0 True 2 3 Wilda 52 +300000.0 True 2 1 Stare 23 +850000.0 True 2 7 Stare 69 +480000.0 True 3 0 Stare 30 +350000.0 True 2 0 Stare 50 +1140000.0 True 6 0 Stare 40 +290970.0 True 2 0 Stare 60 +800000.0 True 4 3 Stare 103 +345000.0 True 2 3 Jeżyce 50 +514000.0 True 4 1 Jeżyce 120 +451000.0 True 3 2 Wilda 30 +659500.0 True 4 0 Grunwald 44 +558000.0 True 5 1 Wilda 2 +649000.0 True 4 0 Winogrady 80 +319000.0 True 2 4 Grunwald 54 +290000.0 True 2 4 Wilda 35 +325000.0 True 3 14 Rataje 80 +249000.0 True 2 5 Centrum 36 +224000.0 True 2 0 Łazarz 39 +295000.0 True 3 0 Grunwald 53 +379000.0 True 3 0 Rataje 30 +305000.0 True 2 1 Winogrady 48 +269000.0 True 2 1 Centrum 30 +240000.0 True 2 16 Rataje 36 +269000.0 True 2 2 Dolna 38 +448995.0 True 2 3 Jeżyce 66 +350000.0 True 2 3 Jeżyce 70 +469000.0 False 4 0 Plewiska 30 +369000.0 True 2 2 Jeżyce 90 +350000.0 True 2 0 Naramowice 60 +330000.0 True 3 4 Rataje 59 +315000.0 True 2 1 Grunwald 60 +349000.0 True 2 3 Piątkowo 60 +309000.0 True 2 0 Grunwald 55 +375000.0 True 3 1 Nowe 62 +280000.0 True 3 9 Jeżyce 49 +570000.0 True 3 5 Grunwald 60 +439000.0 True 4 2 Łazarz 40 +449000.0 True 4 1 Górczyn 90 +550000.0 True 4 2 Grunwald 107 +249000.0 True 2 5 Garbary 20 +519000.0 True 3 0 Nowe 99 +548000.0 True 3 1 Grunwald 84 +299000.0 True 3 2 Grunwald 48 +720000.0 True 4 7 Grunwald 91 +368000.0 True 2 2 Wilda 67 +325000.0 True 3 0 Grunwald 64 +499000.0 True 4 1 Naramowice 96 +269000.0 True 3 4 Rataje 48 +229000.0 True 2 1 Stare 40 +319000.0 True 2 2 Jeżyce 56 +200000.0 True 2 2 Dębiec 40 +240000.0 True 3 4 Dębiec 44 +235000.0 True 2 0 Nowe 47 +240000.0 True 3 4 Dębiec 44 +240000.0 True 3 4 Dębiec 44 +235000.0 True 2 0 Nowe 47 +745000.0 True 6 2 Grunwald 149 +399900.0 True 4 2 Nowe 66 +480000.0 True 3 1 Grunwald 40 +268000.0 True 3 4 Jeżyce 50 +308000.0 True 3 0 Piątkowo 63 +270000.0 True 3 4 Rataje 48 +250000.0 True 2 6 Sołacz 71 +349000.0 True 3 3 Rataje 63 +229000.0 True 2 12 Winogrady 10 +299000.0 True 3 2 Dębiec 70 +329000.0 True 3 3 Piątkowo 60 +289000.0 True 4 4 Winogrady 48 +590000.0 True 7 1 Smochowice 150 +479000.0 True 5 2 Centrum 142 +318400.0 True 3 1 Jeżyce 48 +500203.0 True 4 10 Grunwald 84 +339957.0 True 4 1 Stare 58 +329538.0 True 3 4 Jeżyce 50 +244969.0 True 2 0 Stare 42 +296277.0 True 3 0 Stare 49 +389610.0 True 4 4 Jeżyce 60 +337303.0 True 4 2 Stare 57 +245876.0 True 2 1 Jeżyce 38 +342900.0 True 3 3 Stare 57 +324608.0 True 3 2 Jeżyce 51 +277823.0 True 2 4 Jeżyce 50 +368569.0 True 3 4 Jeżyce 68 +295362.0 True 3 5 Stare 48 +286858.0 True 2 7 Winogrady 49 +292101.0 True 2 1 Grunwald 51 +279554.0 True 2 4 Jeżyce 43 +266320.0 True 2 4 Jeżyce 41 +327584.0 True 3 6 Grunwald 56 +339201.0 True 3 3 Jeżyce 53 +530000.0 True 2 5 Piątkowo 10 +269000.0 True 2 0 Grunwald 46 +237000.0 True 2 2 Dębiec 44 +275000.0 True 2 13 Rataje 49 +384000.0 True 3 2 Piątkowo 70 +339000.0 True 3 0 Rataje 47 +348000.0 True 3 9 Rataje 65 +460000.0 True 3 0 Rataje 73 +330000.0 True 3 4 Rataje 59 +350000.0 True 3 1 Rataje 63 +85000.0 True 3 4 Stare 70 +690000.0 True 4 1 Grunwald 60 +380000.0 True 3 4 Naramowice 52 +309978.0 False 2 2 Centrum 16 +1.0 False 5 0 4 126 +355000.0 True 2 0 Podolany 93 +225000.0 True 2 0 Grunwald 17 +259500.0 True 2 0 Grunwald 55 +289000.0 True 2 6 Winogrady 48 +230000.0 True 2 3 Nowe 47 +1000000.0 False 5 0 4 126 +339000.0 True 3 3 Nowe 90 +949000.0 True 3 4 Śródka 98 +520000.0 True 4 1 Wilda 129 +305000.0 True 2 1 Winiary 48 +318000.0 True 2 4 Piątkowo 20 +385000.0 True 2 0 Nowe 48 +860000.0 True 4 0 Centrum 103 +269000.0 True 2 3 Centrum 37 +445000.0 False 5 0 Luboń 104 +299000.0 True 3 10 Grunwald 10 +325000.0 True 3 7 Rataje 90 +305000.0 True 2 1 Winiary 49 +333000.0 True 3 4 Wilda 8 +275000.0 True 2 4 Rataje 63 +375570.0 False 2 4 Centrum 5 +542141.0 False 3 4 Centrum 53 +365546.0 False 2 4 Centrum 82 +698508.0 False 4 4 Centrum 59 +394787.0 False 2 4 Centrum 71 +597184.0 False 3 4 Centrum 61 +354177.0 False 2 3 Centrum 25 +353537.0 False 2 3 Centrum 17 +509468.0 False 3 3 Centrum 53 +652026.0 False 4 3 Centrum 89 +353457.0 False 2 3 Centrum 16 +356818.0 False 2 3 Centrum 58 +558745.0 False 3 3 Centrum 62 +349668.0 False 2 2 Centrum 15 +481903.0 False 3 2 Centrum 53 +389528.0 False 2 2 Centrum 87 +374216.0 False 2 2 Centrum 71 +534523.0 False 3 2 Centrum 62 +377418.0 False 2 1 Centrum 87 +372651.0 False 2 1 Centrum 5 +505032.0 False 3 1 Centrum 62 +469000.0 True 2 1 Winogrady 30 +339000.0 True 3 1 Rataje 88 +349000.0 True 3 1 Śródka 63 +466395.0 False 4 1 Dolna 65 +468406.0 False 4 2 Dolna 64 +275000.0 True 2 0 Łazarz 52 +395000.0 True 2 1 Naramowice 30 +339000.0 True 3 9 Nowe 65 +177000.0 True 2 2 Dębiec 33 +525000.0 True 4 3 Jeżyce 70 +309000.0 True 2 0 Jeżyce 28 +339000.0 True 2 2 Naramowice 49 +325000.0 True 2 3 Stare 60 +380000.0 True 4 4 Winogrady 80 +368110.44 True 3 2 Nowe 31 +324800.0 True 2 1 Nowe 56 +270000.0 True 2 2 Łazarz 100 +169000.0 True 2 1 Łazarz 44 +460000.0 True 3 4 Wilda 69 +199650.0 True 2 5 Nowe 93 +557338.0 True 3 3 Centrum 7 +290970.0 True 2 4 Górczyn 70 +412438.0 True 3 2 Winogrady 11 +360343.59 True 2 0 Centrum 60 +327127.5 True 2 0 Centrum 50 +194500.0 True 2 3 Nowe 90 +495000.0 True 4 0 Jeżyce 10 +293436.0 False 2 11 Grunwald 16 +333232.0 False 3 7 Grunwald 21 +333232.0 False 3 7 Grunwald 21 +296810.0 False 2 2 Grunwald 30 +296810.0 False 2 2 Grunwald 30 +771672.0 False 4 7 Grunwald 68 +339000.0 True 3 7 Jeżyce 50 +319000.0 True 2 4 Grunwald 20 +290000.0 True 2 4 Grunwald 36 +295000.0 True 2 3 Stare 30 +380931.0 False 3 3 Starołęka 82 +300680.0 False 2 2 Starołęka 54 +300680.0 False 2 2 Starołęka 54 +349668.0 False 2 2 Stare 15 +384000.0 True 3 2 Piątkowo 90 +339000.0 True 3 1 Rataje 88 +285678.0 False 2 1 Winogrady 42 +211190.0 False 2 0 Podolany 78 +247705.0 False 2 1 Piątkowo 74 +211190.0 False 2 0 Piątkowo 78 +247705.0 False 2 1 Podolany 74 +449000.0 False 5 0 Szczepankowo 68 +771672.0 False 4 4 Górczyn 66 +442080.0 False 3 1 Starołęka 68 +302887.0 False 2 4 Górczyn 25 +294840.0 False 2 4 Winogrady 50 +282994.0 False 2 0 Starołęka 59 +442080.0 False 3 1 Starołęka 68 +370597.0 False 2 4 Stare 4 +302887.0 False 2 4 Górczyn 25 +294840.0 False 2 4 Winogrady 50 +225228.0 False 2 5 Rataje 91 +282994.0 False 2 0 Starołęka 59 +242731.0 False 2 0 Podolany 74 +522235.0 False 3 2 Stare 62 +370597.0 False 2 4 Stare 4 +674695.0 False 3 4 Stare 59 +349000.0 False 4 0 Szczepankowo 29 +259015.0 False 2 0 Ogrody 53 +411684.0 False 3 3 Winogrady 17 +282944.0 False 2 0 Starołęka 59 +424377.0 False 4 2 Starołęka 14 +277823.0 False 2 2 Podolany 70 +277823.0 False 2 2 Podolany 70 +460499.0 False 3 1 Stare 51 +460499.0 False 3 1 Stare 51 +557338.0 False 3 3 Stare 4 +481903.0 False 3 2 Centrum 53 +361998.0 False 3 15 Grunwald 20 +310584.0 False 2 1 Nowe 26 +557338.0 False 3 3 Stare 4 +557338.0 False 3 3 Stare 4 +350506.0 False 3 11 Grunwald 20 +368110.0 False 3 2 Nowe 31 +557338.0 False 3 3 Stare 4 +342021.0 False 2 4 Nowe 93 +353379.0 False 3 12 Grunwald 20 +429699.0 False 3 15 Grunwald 62 +350506.0 False 3 11 Grunwald 20 +341682.0 False 2 10 Grunwald 7 +361998.0 False 3 15 Grunwald 20 +341682.0 False 2 10 Grunwald 7 +481903.0 False 3 2 Centrum 53 +310584.0 False 2 1 Nowe 26 +368110.0 False 3 2 Nowe 31 +162525.0 False 2 0 Głuszyna 55 +311488.0 False 3 2 Jeżyce 24 +336804.0 False 2 3 Jeżyce 4 +382074.0 False 3 2 Jeżyce 89 +195000.0 True 2 1 Łazarz 31 +385000.0 True 3 0 Grunwald 66 +495000.0 True 4 0 Jeżyce 86 +399000.0 True 2 1 Jeżyce 28 +369000.0 True 2 5 Winogrady 62 +172000.0 True 2 0 Starołęka 32 +599000.0 True 3 3 Grunwald 60 +620000.0 True 3 2 Naramowice 98 +495000.0 True 5 1 Naramowice 98 +460000.0 True 3 4 Wilda 69 +270000.0 True 2 0 Nowe 41 +263581.0 True 2 5 Stare 43 +279554.0 True 2 4 Jeżyce 43 +295000.0 True 2 1 Jeżyce 30 +779000.0 True 3 2 Stare 113 +305000.0 True 2 1 Sołacz 48 +385000.0 True 3 5 Centrum 50 +1040000.0 True 2 10 Centrum 79 +570000.0 True 4 0 Centrum 137 +468000.0 True 2 3 Grunwald 60 +1200000.0 True 4 2 Jeżyce 188 +233000.0 True 2 3 Grunwald 38 +315000.0 True 2 7 Rataje 47 +359000.0 True 3 2 Podolany 56 +269000.0 True 2 1 Centrum 34 +240000.0 True 2 3 Grunwald 38 +442150.0 True 2 3 Stare 75 +328000.0 True 3 0 Winogrady 48 +399700.0 True 3 1 Puszczykowo 74 +499000.0 True 3 3 Centrum 109 +529000.0 True 4 0 Piątkowo 115 +565000.0 True 3 1 Stary 95 +499000.0 True 3 1 Suchy 95 +517000.0 True 4 1 Centrum 138 +539000.0 True 4 2 Jeżyce 110 +330000.0 True 2 4 Wilda 50 +349000.0 True 3 3 Piątkowo 60 +359000.0 True 3 2 Podolany 10 +339000.0 True 4 5 Grunwald 74 +219000.0 True 2 2 Grunwald 38 +279000.0 True 2 2 Wilda 30 +489000.0 True 2 8 Centrum 4 +409000.0 True 3 1 Nowe 90 +245000.0 True 2 0 Piątkowo 40 +315000.0 True 2 7 Rataje 47 +395000.0 True 4 0 Grunwald 60 +239000.0 True 2 0 Rataje 48 +280250.0 True 2 0 Górczyn 50 +316355.0 True 2 4 Centrum 67 +276610.0 True 2 4 Centrum 80 +442002.0 True 2 3 Centrum 73 +316498.0 True 2 2 Centrum 77 +300160.0 True 2 3 Winogrady 90 +347090.0 True 3 1 Winogrady 90 +286091.0 True 2 3 Winogrady 49 +442150.0 True 2 2 Centrum 75 +270000.0 True 3 1 Starołęka 30 +319900.0 True 2 1 Grunwald 52 +695000.0 True 3 2 Jeżyce 71 +250000.0 True 2 6 Grunwald 31 +350000.0 True 3 7 Piątkowo 63 +475000.0 True 3 1 Naramowice 68 +535000.0 True 2 2 Stare 55 +425000.0 True 3 1 Piątkowo 74 +349000.0 True 3 3 Rataje 63 +495000.0 True 3 1 Łazarz 64 +495000.0 True 4 1 Naramowice 98 +499000.0 True 5 0 Grunwald 130 +659200.0 True 4 3 Łazarz 103 +510000.0 True 5 1 Naramowice 98 +360000.0 True 2 5 Grunwald 41 +249000.0 True 2 5 Centrum 36 +1950000.0 True 3 5 Centrum 143 +313000.0 True 2 4 Piątkowo 49 +250000.0 True 2 3 Wilda 39 +430000.0 True 2 2 Wilda 46 +239000.0 True 2 8 Winogrady 10 +312259.0 True 2 6 Winogrady 51 +329539.0 True 3 4 Jeżyce 50 +242134.0 True 2 0 Jeżyce 38 +246553.0 True 2 1 Stare 40 +345241.0 True 4 3 Stare 58 +242730.0 True 2 0 Jeżyce 50 +295000.0 True 2 1 Nowe 40 +555000.0 True 4 0 Stare 123 +350000.0 True 3 0 Stare 72 +310584.0 False 2 1 Nowe 26 +162525.0 False 2 0 Głuszyna 55 +289170.0 False 2 0 Winogrady 90 +332940.0 False 2 2 Winogrady 70 +334610.0 False 2 1 Winogrady 9 +298980.0 False 2 5 Winogrady 30 +318645.0 False 2 2 Winogrady 23 +228144.0 False 3 2 Głuszyna 56 +557338.0 False 3 3 Stare 4 +557338.0 False 3 3 Stare 4 +533745.0 False 5 2 Starołęka 4 +321285.0 False 2 4 Winogrady 30 +269000.0 True 2 3 Jeżyce 81 +279000.0 True 2 5 Jeżyce 53 +449000.0 False 5 0 Szczepankowo 68 +460499.0 False 3 1 Stare 51 +557338.0 False 3 3 Stare 4 +455348.0 False 3 0 Stare 61 +460499.0 False 3 1 Stare 51 +368712.0 False 2 5 Stare 90 +302887.0 False 2 4 Górczyn 25 +282994.0 False 2 0 Starołęka 59 +522235.0 False 3 2 Stare 62 +370597.0 False 2 4 Stare 4 +674695.0 False 3 4 Stare 59 +442080.0 False 3 1 Starołęka 68 +771672.0 False 4 4 Górczyn 66 +302887.0 False 2 4 Górczyn 25 +225228.0 False 2 5 Rataje 91 +284618.0 False 2 3 Nowe 55 +297420.0 False 2 3 Grunwald 24 +370597.0 False 2 4 Stare 4 +242731.0 False 2 0 Podolany 74 +368568.0 False 3 4 Podolany 38 +522235.0 False 3 2 Stare 62 +442080.0 False 3 1 Starołęka 68 +305676.0 False 2 5 Winogrady 52 +460499.0 False 3 1 Stare 51 +429699.0 False 3 15 Grunwald 62 +341682.0 False 2 10 Grunwald 7 +481903.0 False 3 2 Centrum 53 +368110.0 False 3 2 Nowe 31 +332940.0 False 2 2 Winogrady 70 +162525.0 False 2 0 Głuszyna 55 +318645.0 False 2 2 Winogrady 23 +228144.0 False 3 2 Głuszyna 56 +318645.0 False 2 2 Winogrady 23 +325000.0 True 3 1 Nowe 90 +319000.0 True 2 1 Jeżyce 67 +339000.0 True 3 9 Rataje 65 +310000.0 True 2 3 Nowe 38 +756000.0 True 4 2 Grunwald 100 +265000.0 True 2 10 Śródka 49 +350000.0 True 2 0 Naramowice 49 +244970.0 True 2 0 Stare 42 +238948.0 True 2 4 Stare 39 +377652.0 True 4 6 Jeżyce 57 +324609.0 True 3 2 Jeżyce 51 +339000.0 True 3 9 Nowe 65 +435000.0 True 3 1 Grunwald 10 +395000.0 True 4 0 Grunwald 60 +310000.0 True 2 2 Jeżyce 55 +235000.0 True 2 1 Starołęka 47 +210000.0 True 2 2 Grunwald 40 +299000.0 True 2 0 Dębiec 52 +305000.0 True 3 10 Piątkowo 40 +180000.0 True 2 6 Dębiec 50 +245488.0 True 2 0 Jeżyce 37 +242407.0 True 2 0 Jeżyce 36 +347095.0 True 3 1 Winogrady 57 +285383.0 True 2 4 Winogrady 48 +289172.0 True 2 0 Stare 46 +301620.0 True 2 5 Stare 46 +247706.0 True 2 1 Jeżyce 50 +278048.0 True 2 3 Jeżyce 50 +333693.0 True 3 1 Jeżyce 68 +235000.0 True 2 1 Głuszyna 47 +369000.0 True 2 3 Wilda 46 +350000.0 True 2 4 Jeżyce 56 +319000.0 True 2 4 Grunwald 47 +279000.0 True 2 1 Podolany 63 +290000.0 True 3 2 Winogrady 48 +235000.0 True 2 1 Nowe 47 +446000.0 True 2 1 Rataje 52 +225288.0 False 2 1 Rataje 91 +287882.0 False 2 1 Starołęka 85 +349000.0 False 4 0 Szczepankowo 29 +285678.0 False 2 1 Winogrady 42 +353275.0 False 2 4 Grunwald 49 +297421.0 False 2 3 Grunwald 24 +156085.0 False 2 4 Nowe 54 +286445.0 True 2 2 Winogrady 55 +285678.0 True 2 1 Winogrady 42 +302985.59 True 2 4 Grunwald 18 +302038.41 True 3 1 Grunwald 2 +495782.25 True 4 7 Grunwald 99 +405103.97 True 4 1 Grunwald 34 +426416.78 True 4 6 Grunwald 20 +319047.97 True 3 3 Grunwald 21 +380480.0 True 3 4 Grunwald 60 +244071.0 False 2 1 Nowe 93 +156085.0 False 2 4 Nowe 54 +404000.0 True 3 2 Rataje 70 +315000.0 True 3 11 Stare 50 +345000.0 True 2 3 Jeżyce 50 +321904.0 False 2 4 Winogrady 92 +270000.0 True 2 0 Zawady 41 +230000.0 True 2 6 Dębiec 45 +349000.0 True 4 3 Centrum 20 +277000.0 True 3 0 Centrum 40 +338700.0 True 3 2 Jeżyce 45 +619000.0 True 3 2 Winogrady 100 +486243.0 True 2 1 Łazarz 60 +413044.03 True 3 12 Grunwald 62 +324387.0 True 2 9 Grunwald 49 +338111.0 True 2 15 Grunwald 62 +293436.0 True 2 1 Grunwald 16 +333212.88 True 2 7 Grunwald 21 +267702.41 True 2 3 Grunwald 22 +903965.44 True 4 0 Centrum 80 +1366410.0 True 4 0 Centrum 71 +1155974.38 True 4 1 Centrum 28 +285383.0 True 2 4 Winogrady 37 +260000.0 True 2 0 Stare 79 +270000.0 True 2 2 Jeżyce 49 +1140000.0 True 6 0 Stare 40 +333232.0 False 3 7 Grunwald 21 +297421.0 False 2 3 Grunwald 24 +200460.0 False 2 0 Głuszyna 55 +377418.0 False 2 1 Stare 87 +289800.0 False 2 0 Winogrady 46 +505032.0 False 3 1 Stare 62 +374216.0 False 2 2 Stare 71 +1156054.0 False 4 0 Stare 41 +904041.0 False 3 0 Stare 2 +460849.0 False 3 2 Grunwald 13 +771672.0 False 4 7 Grunwald 68 +296810.0 False 2 2 Grunwald 30 +460499.0 False 3 1 Stare 51 +349668.0 False 2 2 Stare 15 +325206.0 False 2 10 Grunwald 62 +557338.0 False 3 3 Centrum 4 +380931.0 False 3 3 Starołęka 82 +295549.0 False 2 0 Starołęka 59 +302887.0 False 2 4 Górczyn 25 +225228.0 False 2 5 Rataje 91 +302887.0 False 2 4 Górczyn 25 +284618.0 False 2 3 Nowe 55 +297420.0 False 2 3 Grunwald 24 +370597.0 False 2 4 Stare 4 +242731.0 False 2 0 Podolany 74 +522235.0 False 3 2 Stare 62 +368568.0 False 3 4 Podolany 38 +442080.0 False 3 1 Starołęka 68 +305676.0 False 2 5 Winogrady 52 +294840.0 False 2 4 Winogrady 50 +460499.0 False 3 1 Stare 51 +299999.0 True 2 0 Wilda 51 +325000.0 True 3 7 Rataje 64 +395000.0 True 2 0 Grunwald 52 +315000.0 True 2 2 Zawady 52 +299000.0 True 3 2 Winogrady 48 +339000.0 True 3 1 Rataje 67 +290000.0 True 2 4 Grunwald 53 +369000.0 True 3 1 Piątkowo 65 +339000.0 True 3 0 Rataje 47 +265000.0 True 3 1 Winogrady 53 +315000.0 True 3 2 Winogrady 53 +345000.0 True 2 3 Jeżyce 50 +270000.0 True 3 4 Rataje 48 +375000.0 True 3 1 Nowe 62 +1050000.0 True 5 2 Centrum 161 +515000.0 True 3 0 Rataje 69 +428000.0 True 3 3 Centrum 43 +288000.0 True 3 4 Winogrady 47 +240000.0 True 2 2 Dębiec 48 +530000.0 True 2 5 Piątkowo 66 +510000.0 True 5 1 Naramowice 98 +360000.0 True 3 0 Wilda 112 +360000.0 True 4 4 Jeżyce 60 +330000.0 True 2 1 Jeżyce 53 +365000.0 True 2 2 Rataje 45 +460000.0 True 3 0 Rataje 73 +375000.0 True 3 3 Wilda 49 +380000.0 True 4 0 Piątkowo 74 +335000.0 True 3 9 Nowe 65 +379000.0 True 3 4 Rataje 63 +369000.0 True 2 3 Grunwald 64 +275000.0 True 2 2 Naramowice 45 +259000.0 True 2 2 Nowe 42 +299000.0 True 2 4 Nowe 47 +275000.0 True 2 0 Dębiec 50 +950000.0 True 3 4 Nowe 99 +315000.0 True 3 0 Piątkowo 63 +270000.0 True 2 10 Nowe 48 +430000.0 True 3 2 Rataje 64 +413500.0 True 5 4 Winogrady 64 +359000.0 True 3 2 Rataje 65 +410000.0 True 2 5 Rataje 53 +365000.0 True 4 3 Grunwald 68 +295555.0 True 2 1 Jeżyce 45 +224000.0 True 2 0 Górczyn 38 +315000.0 True 2 2 Winogrady 38 +265000.0 True 2 1 Wilda 44 +299000.0 True 2 3 Grunwald 44 +379000.0 True 3 1 Piątkowo 78 +249000.0 True 2 4 Grunwald 43 +295000.0 True 3 0 Grunwald 53 +510000.0 True 3 6 Grunwald 50 +350000.0 True 2 1 Rataje 54 +450000.0 True 4 1 Grunwald 101 +365000.0 True 2 1 Stare 50 +430000.0 True 2 1 Centrum 72 +385560.0 True 2 3 Piątkowo 57 +299000.0 True 2 1 Junikowo 33 +370000.0 True 4 4 Piątkowo 76 +336000.0 True 2 1 Naramowice 46 +369000.0 True 2 3 Jeżyce 55 +595000.0 True 3 0 Naramowice 94 +429000.0 True 3 4 Nowe 79 +489000.0 True 3 0 Jeżyce 65 +295000.0 True 3 2 Grunwald 49 +499000.0 True 4 2 Wilda 120 +305000.0 True 3 3 Winogrady 48 +325000.0 True 3 4 Jeżyce 64 +299817.0 True 2 3 Górczyn 59 +495000.0 True 4 1 Naramowice 98 +370000.0 True 2 13 Rataje 48 +487000.0 True 3 0 Naramowice 72 +299000.0 True 2 5 Grunwald 59 +269000.0 True 3 10 Grunwald 50 +380000.0 True 4 6 Piątkowo 73 +273875.0 True 2 1 Górczyn 13 +275000.0 True 2 13 Rataje 49 +1000000.0 True 5 1 Jeżyce 128 +379999.0 True 2 5 Jeżyce 61 +315000.0 True 3 4 Winogrady 53 +275000.0 True 2 9 Rataje 38 +259000.0 True 2 2 Jeżyce 48 +295000.0 True 2 0 Naramowice 36 +3200.0 True 4 0 Centrum 75 +260000.0 True 2 0 Rataje 46 +1612000.0 True 7 5 Jeżyce 166 +220000.0 True 2 3 Jeżyce 37 +549000.0 True 3 2 Jeżyce 106 +549000.0 True 3 2 Jeżyce 106 +330000.0 True 3 0 Bonin 56 +399000.0 True 2 0 Podolany 63 +220000.0 True 2 4 Grunwald 43 +290000.0 True 2 4 Winogrady 38 +270000.0 True 3 4 Rataje 48 +245000.0 True 2 3 Grunwald 30 +305000.0 True 2 1 Winiary 48 +235000.0 True 2 0 Łazarz 52 +289000.0 True 2 6 Winogrady 48 +495000.0 True 4 1 Naramowice 98 +270000.0 True 3 4 Rataje 48 +510000.0 True 5 1 Naramowice 98 +390000.0 True 3 3 Stare 48 +269000.0 True 2 0 Grunwald 46 +480000.0 True 2 2 Garbary 56 +320000.0 True 2 2 Piątkowo 48 +240000.0 True 2 16 Rataje 36 +355000.0 True 3 3 Łazarz 62 +240000.0 True 2 8 Dębiec 37 +565964.0 True 2 5 Centrum 49 +289000.0 True 2 2 Jeżyce 42 +350000.0 True 2 3 Rataje 50 +550000.0 True 3 1 Grunwald 73 +345000.0 True 3 1 Rataje 78 +259000.0 True 2 5 Grunwald 46 +491520.0 True 4 1 Górczyn 92 +305739.0 True 2 2 Górczyn 53 +269000.0 True 2 2 Dębiec 48 +295000.0 True 2 0 Centrum 44 +384000.0 True 3 2 Piątkowo 69 +375000.0 True 3 2 Rataje 79 +355000.0 True 3 2 Piątkowo 66 +420000.0 True 2 3 Naramowice 59 +237000.0 True 2 2 Dębiec 44 +330000.0 True 3 4 Rataje 59 +405000.0 True 3 1 Antoninek 68 +249900.0 True 2 9 Winogrady 38 +315000.0 True 2 7 Rataje 47 +510000.0 True 3 6 Grunwald 50 +349000.0 True 3 1 Winogrady 51 +339000.0 True 3 1 Rataje 67 +287000.0 True 2 4 Wilda 37 +585000.0 True 3 4 Jeżyce 59 +335000.0 True 3 7 Rataje 63 +289000.0 True 3 4 Winogrady 47 +263000.0 True 3 4 Grunwald 48 +279000.0 True 2 0 Naramowice 43 +292000.0 True 3 2 Winogrady 48 +399000.0 True 2 3 Centrum 60 +320000.0 True 3 0 Rataje 56 +287000.0 True 2 10 Winogrady 46 +350000.0 True 3 6 Jeżyce 64 +999000.0 True 3 4 Nowe 99 +510660.0 True 4 1 Górczyn 11 +363258.0 True 2 1 Górczyn 59 +650000.0 True 4 8 Rataje 100 +245000.0 True 3 0 Grunwald 45 +200000.0 True 3 4 Nowe 44 +237000.0 True 2 10 Górczyn 38 +259000.0 True 2 3 Rataje 49 +310000.0 True 2 2 Zawady 52 +289000.0 True 2 2 Nowe 48 +405000.0 True 4 2 Rataje 71 +747000.0 True 3 7 Rataje 84 +379000.0 True 3 2 Podolany 56 +495000.0 True 5 1 Naramowice 98 +265000.0 True 2 4 Grunwald 43 +289575.0 True 2 0 Jeżyce 43 +495000.0 True 3 0 Centrum 63 +380000.0 True 4 1 Piątkowo 76 +250000.0 True 2 4 Rataje 44 +335000.0 True 3 4 Winogrady 56 +580000.0 True 4 3 Sołacz 96 +549000.0 True 3 2 Jeżyce 106 +200000.0 True 2 0 Rataje 30 +736933.0 True 3 0 Jeżyce 67 +275000.0 True 2 0 Naramowice 50 +290000.0 True 2 2 Dębiec 40 +620000.0 True 3 2 Naramowice 98 +299000.0 True 2 0 Dębiec 48 +275000.0 True 2 1 Sołacz 38 +279000.0 True 2 1 Naramowice 52 +379999.0 True 3 2 Wilda 67 +354454.0 True 2 3 Górczyn 17 +379000.0 True 3 2 Podolany 56 +800000.0 True 3 3 Chwaliszewo 70 +350000.0 True 3 0 Naramowice 59 +420000.0 True 2 5 Rataje 63 +260000.0 True 3 4 Centrum 44 +470000.0 True 3 1 Rataje 70 +360000.0 True 2 0 Winogrady 48 +320000.0 True 2 3 Chwaliszewo 56 +260000.0 True 2 0 Rataje 46 +397000.0 True 3 2 Jeżyce 74 +439000.0 True 3 1 Junikowo 70 +430000.0 True 3 5 Grunwald 60 +349000.0 True 3 2 Górczyn 55 +450000.0 True 3 0 Winogrady 70 +290000.0 True 2 6 Jeżyce 49 +499000.0 True 3 1 Rataje 64 +319000.0 True 3 1 Piątkowo 63 +489780.0 True 4 2 Górczyn 63 +453600.0 True 2 3 Naramowice 56 +525000.0 True 4 3 Jeżyce 104 +950000.0 True 3 4 Nowe 99 +459000.0 True 3 4 Dębiec 60 +370000.0 True 4 11 Rataje 74 +830000.0 True 3 1 Grunwald 91 +385500.0 True 2 6 Dębiec 38 +409000.0 True 3 1 Malta 61 +275000.0 True 3 7 Wilda 53 +300000.0 True 2 4 Winogrady 53 +335400.0 True 2 1 Łazarz 51 +560000.0 True 2 8 Grunwald 55 +855000.0 True 4 5 Jeżyce 96 +399000.0 True 3 1 Winiary 66 +750000.0 True 4 0 Kobylepole 105 +459000.0 True 3 4 Dębiec 60 +275000.0 True 2 0 Naramowice 50 +925000.0 True 5 1 Stare 105 +350000.0 True 3 3 Jeżyce 70 +550000.0 True 2 1 Naramowice 57 +345000.0 True 2 0 Centrum 42 +576520.0 True 2 5 Centrum 50 +285000.0 True 2 4 Naramowice 42 +395000.0 True 3 10 Piątkowo 67 +516000.0 True 3 3 Naramowice 75 +620000.0 True 3 2 Naramowice 98 +240000.0 True 2 3 Grunwald 38 +350000.0 True 2 0 Naramowice 48 +390000.0 True 3 2 Podolany 68 +339000.0 True 3 9 Rataje 65 +659000.0 True 5 0 Podolany 135 +670000.0 True 4 3 Grunwald 81 +390000.0 True 3 2 Podolany 68 +420000.0 True 2 1 Naramowice 62 +288000.0 True 3 4 Winogrady 47 +326000.0 True 2 0 Jeżyce 55 +450000.0 True 3 0 Grunwald 75 +354000.0 True 3 1 Naramowice 60 +279000.0 True 2 0 Piątkowo 48 +449900.0 True 3 0 Naramowice 71 +285000.0 True 2 11 Winogrady 47 +690000.0 True 4 5 Grunwald 107 +380000.0 True 3 0 Centrum 55 +329000.0 True 2 3 Nowe 50 +510000.0 True 5 1 Naramowice 98 +325000.0 True 3 1 Głuszyna 63 +269000.0 True 2 3 Grunwald 47 +215000.0 True 2 0 Wilda 36 +285000.0 True 2 4 Wilda 35 +390000.0 True 4 4 Piątkowo 74 +295000.0 True 2 4 Stare 33 +245000.0 True 2 0 Stare 44 +490000.0 True 4 3 Sołacz 83 +200000.0 True 2 0 Głuszyna 52 +379000.0 True 2 0 Nowe 56 +290000.0 True 2 5 Winogrady 42 +235000.0 True 2 3 Winogrady 38 +750000.0 True 2 9 Centrum 54 +385000.0 True 2 0 Naramowice 50 +489000.0 True 3 3 Grunwald 104 +290000.0 True 3 2 Winogrady 60 +280000.0 True 3 2 Winogrady 47 +280000.0 True 3 2 Winogrady 47 +385000.0 True 2 1 Nowe 48 +378000.0 True 2 1 Grunwald 50 +460499.0 True 3 1 Centrum 51 +481103.0 True 3 1 Centrum 51 +455348.0 True 3 0 Centrum 61 +348750.0 True 2 3 Centrum 50 +194000.0 True 2 2 Nowe 80 +360288.0 True 2 1 Centrum 60 +368712.0 True 2 0 Centrum 90 +244071.0 True 2 2 Nowe 93 +390312.0 True 2 3 Centrum 60 +430000.0 True 2 2 Wilda 38 +225000.0 True 2 3 Grunwald 41 +720000.0 True 4 0 Centrum 163 +475000.0 True 4 1 Grunwald 90 +585000.0 True 3 1 Centrum 16 +319000.0 True 3 4 Winogrady 53 +949000.0 True 3 4 Śródka 98 +233000.0 True 2 3 Grunwald 39 +299000.0 True 2 1 Centrum 11 +211743.0 False 2 4 Starołęka 33 +208382.0 False 2 3 Starołęka 33 +311283.0 False 3 4 Starołęka 3 +413592.0 False 3 2 Starołęka 72 +345000.0 True 4 3 Grunwald 70 +317880.0 False 2 2 Grunwald 98 +317880.0 False 2 2 Grunwald 98 +317880.0 False 2 2 Grunwald 98 +495723.0 False 4 9 Grunwald 99 +317880.0 False 2 2 Grunwald 98 +495723.0 False 3 9 Grunwald 99 +429699.0 False 3 15 Grunwald 62 +470000.0 True 3 2 Sołacz 68 +302887.0 False 2 4 Górczyn 25 +284618.0 False 2 3 Nowe 55 +225228.0 False 2 5 Rataje 91 +282994.0 False 2 0 Starołęka 59 +522235.0 False 3 2 Stare 62 +294840.0 False 2 4 Winogrady 50 +460499.0 False 3 1 Stare 51 +305676.0 False 2 5 Winogrady 52 +442080.0 False 3 1 Starołęka 68 +242731.0 False 2 0 Podolany 74 +370597.0 False 2 4 Stare 4 +297420.0 False 2 3 Grunwald 24 +342021.0 False 2 4 Nowe 93 +429699.0 False 3 15 Grunwald 62 +341682.0 False 2 10 Grunwald 7 +368110.0 False 3 2 Nowe 31 +162525.0 False 2 0 Głuszyna 55 +228144.0 False 3 2 Głuszyna 56 +557338.0 False 3 3 Stare 4 +557338.0 False 3 3 Stare 4 +310584.0 False 2 1 Nowe 26 +210000.0 True 2 2 Zawady 42 +85000.0 True 2 0 Zawady 40 +145000.0 True 2 1 Zawady 61 +339000.0 True 3 9 Nowe 65 +384000.0 True 3 2 Piątkowo 70 +215000.0 True 2 2 Łazarz 34 +295000.0 True 3 0 Grunwald 20 +295000.0 True 3 0 Grunwald 20 +339000.0 True 3 1 Rataje 67 +247000.0 True 3 3 Raszyn 70 +245000.0 True 2 3 Grunwald 30 +245000.0 True 2 2 Dębiec 30 +305000.0 True 3 4 Rataje 53 +308000.0 True 3 0 Piątkowo 63 +247000.0 True 3 3 Grunwald 70 +155481.0 True 2 0 Stare 88 +350000.0 True 2 0 Stare 60 +240000.0 True 2 3 Grunwald 37 +339000.0 True 3 1 Rataje 88 +265000.0 True 2 1 Jeżyce 66 +259999.0 True 2 4 Rataje 44 +225288.0 False 2 1 Rataje 91 +247000.0 True 3 3 Grunwald 70 +315000.0 True 3 4 Winogrady 50 +239000.0 True 2 8 Winogrady 10 +255000.0 True 2 1 Centrum 48 +382000.0 True 3 3 Centrum 50 +240000.0 True 2 3 Dębiec 50 +930000.0 True 2 2 Malta 75 +239000.0 True 2 10 Grunwald 42 +235000.0 True 2 5 Winogrady 38 +399000.0 True 2 2 Stare 62 +920000.0 True 5 2 Grunwald 177 +499000.0 True 3 0 Centrum 12 +492000.0 True 3 4 Centrum 96 +349000.0 True 2 4 Centrum 11 +317880.0 True 2 2 Grunwald 98 +407208.0 True 3 2 Grunwald 44 +410665.0 True 4 2 Grunwald 7 +410780.0 True 3 3 Grunwald 44 +328476.0 True 2 4 Grunwald 98 +273951.0 True 2 0 Nowe 97 +321285.0 True 2 4 Winogrady 30 +318645.0 True 2 2 Winogrady 30 +886860.06 True 3 5 Centrum 80 +473770.0 True 2 5 Centrum 7 +798966.0 True 2 5 Centrum 33 +163563.75 True 2 0 Centrum 25 +314089.0 True 2 5 Grunwald 49 +297420.81 True 2 3 Grunwald 24 +455712.0 True 3 0 Grunwald 64 +746787.0 True 4 7 Grunwald 53 +322276.0 True 2 3 Winogrady 98 +286327.0 True 2 3 Winogrady 53 +312259.0 True 2 6 Winogrady 19 +256417.0 True 2 3 Nowe 33 +193950.0 True 2 1 Nowe 79 +226239.0 True 2 0 Nowe 93 +487000.0 True 3 0 Naramowice 83 +313028.0 True 2 4 Centrum 4 +292664.5 True 2 4 Centrum 11 +440496.0 True 3 4 Centrum 96 +358092.0 True 2 4 Centrum 84 +288216.5 True 2 4 Centrum 47 +410215.0 True 2 4 Centrum 11 +383760.0 True 3 6 Grunwald 60 +299000.0 True 2 0 Wilda 53 +299000.0 True 3 3 Jeżyce 56 +674000.0 True 5 2 Centrum 40 +270000.0 True 3 4 Nowe 48 +303287.0 True 2 3 Grunwald 13 +156986.0 True 2 1 Nowe 62 +162525.0 True 2 0 Nowe 55 +247831.0 True 3 5 Nowe 73 +222050.0 True 2 3 Nowe 41 +204450.0 True 3 1 Nowe 50 +188190.0 True 2 0 Nowe 90 +192750.0 True 2 4 Nowe 55 +247549.0 True 3 4 Nowe 67 +285678.0 False 2 1 Winogrady 42 +308237.0 False 2 1 Nowe 85 +349000.0 False 4 0 Szczepankowo 29 +297421.0 False 2 3 Grunwald 24 +297421.0 False 2 3 Grunwald 24 +244071.0 False 2 1 Nowe 93 +156085.0 False 2 4 Nowe 54 +265000.0 True 2 1 Jeżyce 66 +235000.0 True 2 0 Dębiec 43 +305000.0 True 2 8 Ogrody 44 +435000.0 True 3 1 Grunwald 70 +395000.0 True 2 0 Grunwald 11 +449000.0 False 5 0 Szczepankowo 68 +211190.0 False 2 0 Piątkowo 78 +771672.0 False 4 4 Górczyn 66 +771672.0 False 4 4 Górczyn 66 +302887.0 False 2 4 Górczyn 25 +282994.0 False 2 0 Starołęka 59 +771672.0 False 4 4 Górczyn 66 +302887.0 False 2 4 Górczyn 25 +225228.0 False 2 5 Rataje 91 +442080.0 False 3 1 Starołęka 68 +370597.0 False 2 4 Stare 4 +771672.0 False 4 4 Górczyn 66 +242731.0 False 2 0 Podolany 74 +225228.0 False 2 5 Rataje 91 +460499.0 False 3 1 Stare 51 +284618.0 False 2 3 Nowe 55 +356251.0 False 3 14 Grunwald 20 +297420.0 False 2 3 Grunwald 24 +428090.0 False 3 2 Nowe 85 +347090.0 False 3 1 Winogrady 41 +375529.0 False 2 3 Centrum 71 +429699.0 False 3 15 Grunwald 62 +332940.0 False 2 2 Winogrady 70 +162525.0 False 2 0 Głuszyna 55 +557338.0 False 3 3 Stare 4 +317880.0 False 2 11 Grunwald 98 +293436.0 False 2 11 Grunwald 16 +317880.0 False 2 2 Grunwald 98 +297421.0 False 2 3 Grunwald 16 +297421.0 False 2 3 Grunwald 16 +317880.0 False 2 2 Grunwald 98 +297421.0 False 2 3 Grunwald 16 +297421.0 False 2 3 Grunwald 16 +270000.0 True 2 2 Jeżyce 49 +470000.0 True 2 4 Centrum 42 +293436.0 False 2 11 Grunwald 16 +347193.0 False 3 11 Grunwald 7 +347193.0 False 3 11 Grunwald 7 +321904.0 False 2 4 Winogrady 92 +455348.0 False 3 0 Centrum 61 +331226.0 False 3 2 Starołęka 95 +557338.0 False 3 3 Centrum 4 +460499.0 False 3 1 Centrum 51 +245000.0 True 2 3 Grunwald 30 +597184.0 False 3 4 Stare 61 +597184.0 False 3 4 Stare 61 +557338.0 False 3 3 Centrum 4 +157039.0 False 2 4 Nowe 63 +522235.0 False 3 2 Stare 62 +294840.0 False 2 4 Winogrady 50 +442080.0 False 3 1 Starołęka 68 +370597.0 False 2 4 Stare 4 +460499.0 False 3 1 Stare 51 +242731.0 False 2 0 Podolany 74 +771672.0 False 4 4 Górczyn 66 +460499.0 False 3 1 Stare 51 +302887.0 False 2 4 Górczyn 25 +225228.0 False 2 5 Rataje 91 +284618.0 False 2 3 Nowe 55 +356251.0 False 3 14 Grunwald 20 +297420.0 False 2 3 Grunwald 24 +297421.0 False 2 3 Grunwald 16 +317880.0 False 2 2 Grunwald 98 +297421.0 False 2 3 Grunwald 16 +156085.0 False 2 3 Głuszyna 45 +362459.0 False 3 0 Starołęka 80 +285678.0 False 2 1 Winogrady 42 +308237.0 False 2 1 Nowe 85 +244071.0 False 2 1 Nowe 93 +156085.0 False 2 4 Nowe 54 +308237.0 False 2 1 Nowe 85 +244071.0 False 2 1 Nowe 93 +245000.0 True 2 5 Nowe 42 +308237.0 False 2 1 Nowe 85 +156085.0 False 2 3 Głuszyna 45 +297421.0 False 2 3 Grunwald 24 +244071.0 False 2 1 Nowe 93 +290000.0 True 3 2 Jeżyce 81 +279000.0 True 2 2 Wilda 30 +489000.0 True 2 8 Centrum 4 +395000.0 True 4 0 Grunwald 60 +239000.0 True 2 0 Rataje 48 +330000.0 True 3 4 Nowe 59 +370000.0 True 4 4 Stare 76 +380000.0 True 4 0 Stare 74 +319000.0 True 3 4 Rataje 63 +480000.0 True 4 1 Grunwald 64 +478000.0 True 3 3 Centrum 78 +304865.0 False 3 3 Zawady 43 +185000.0 True 2 8 Dębiec 50 +410000.0 True 2 9 Nowe 51 +439000.0 True 2 3 Centrum 86 +319000.0 True 3 3 Wilda 53 +399000.0 True 3 3 Stare 68 +870000.0 True 5 0 Grunwald 156 +335000.0 True 3 0 Centrum 65 +278000.0 True 3 2 Rataje 47 +249000.0 True 2 4 Grunwald 43 +379000.0 True 3 0 Wilda 96 +275000.0 True 2 9 Rataje 38 +319000.0 True 2 0 Grunwald 45 +295000.0 True 2 4 Grunwald 53 +195000.0 True 2 2 Nowe 42 +530000.0 True 2 5 Piątkowo 66 +380000.0 True 3 3 Centrum 67 +395000.0 True 2 0 Grunwald 52 +249000.0 True 2 5 Rataje 36 +379000.0 True 3 0 Rataje 30 +399000.0 True 3 1 Grunwald 65 +648263.0 True 3 2 Łazarz 84 +308220.0 True 2 5 Winogrady 70 +288000.0 True 3 4 Winogrady 30 +292020.0 True 2 1 Winogrady 10 +510000.0 True 2 5 Centrum 91 +310000.0 True 3 4 Rataje 10 +333694.0 True 3 0 Jeżyce 68 +232408.0 True 2 0 Stare 38 +392181.0 True 3 4 Winogrady 69 +285382.0 True 2 4 Winogrady 48 +245830.0 True 2 2 Grunwald 40 +410000.0 True 4 2 Nowe 71 +330000.0 True 2 0 Grunwald 68 +350000.0 True 3 4 Jeżyce 20 +245000.0 True 2 5 Rataje 42 +290000.0 True 2 4 Łazarz 36 +360000.0 True 3 0 Centrum 30 +399000.0 False 3 2 Winogrady 98 +348750.0 False 2 3 Centrum 50 +356448.0 False 2 4 Stare 5 +342021.0 False 2 4 Nowe 93 +342021.0 False 2 4 Nowe 93 +342021.0 False 2 4 Nowe 93 +342021.0 False 2 4 Nowe 93 +342021.0 False 2 4 Nowe 93 +638175.0 False 4 3 Nowe 9 +458208.0 False 3 3 Nowe 92 +428090.0 False 3 2 Nowe 85 +428090.0 False 3 1 Nowe 85 +280463.0 False 2 4 Nowe 55 +280000.0 True 3 2 Rataje 20 +347090.0 False 3 1 Winogrady 41 +347090.0 False 3 1 Winogrady 41 +285678.0 False 2 1 Winogrady 82 +347090.0 False 3 1 Winogrady 41 +321656.0 False 2 4 Winogrady 38 +312259.0 False 2 6 Winogrady 60 +317880.0 False 2 2 Grunwald 98 +225228.0 False 2 5 Rataje 91 +356251.0 False 3 14 Grunwald 20 +297420.0 False 2 3 Grunwald 24 +370597.0 False 2 4 Stare 4 +284618.0 False 2 3 Nowe 55 +544008.0 False 4 2 Starołęka 4 +302887.0 False 2 4 Górczyn 25 +156085.0 False 2 4 Nowe 54 +522235.0 False 3 2 Stare 62 +771672.0 False 4 4 Górczyn 66 +442080.0 False 3 1 Starołęka 68 +460499.0 False 3 1 Stare 51 +368712.0 False 2 0 Stare 80 +242731.0 False 2 0 Podolany 74 +560000.0 True 4 0 Naramowice 20 +359000.0 True 3 0 Grunwald 69 +287000.0 True 3 1 Wilda 73 +270000.0 True 2 2 Jeżyce 95 +285000.0 True 2 0 Grunwald 80 +350000.0 True 4 4 Stare 60 +389000.0 True 3 0 Wilda 96 +695000.0 True 3 2 Jeżyce 25 +270000.0 True 2 6 Piątkowo 47 +305000.0 True 2 1 Winogrady 49 +439000.0 True 3 1 Grunwald 10 +415000.0 True 4 7 Piątkowo 63 +268000.0 True 3 4 Jeżyce 42 +270000.0 True 3 4 Rataje 48 +269000.0 True 2 0 Grunwald 46 +360000.0 True 3 1 Rataje 69 +205000.0 True 2 1 Jeżyce 34 +405000.0 True 3 1 Antoninek 70 +295000.0 True 2 0 Winogrady 36 +295000.0 True 2 0 Naramowice 36 +339000.0 True 3 9 Rataje 65 +475000.0 True 4 4 Wilda 120 +359000.0 True 4 0 Winogrady 90 +368567.0 True 3 1 Jeżyce 68 +211189.0 True 2 0 Jeżyce 38 +391729.0 True 3 2 Winogrady 69 +285678.0 True 2 4 Winogrady 48 +469000.0 True 4 2 Jeżyce 87 +259000.0 True 3 4 Stare 60 +470092.78 True 2 3 Centrum 21 +244000.0 True 2 5 Śródka 43 +215000.0 True 2 4 Nowe 14 +488631.0 True 2 5 Centrum 22 +233000.0 True 2 4 Śródka 99 +485017.66 True 2 5 Centrum 77 +450000.0 True 2 3 Centrum 88 +410666.0 True 4 2 Grunwald 71 +327585.0 True 3 6 Grunwald 56 +263000.0 True 2 1 Rataje 45 +270000.0 True 3 4 Rataje 48 +405000.0 True 4 2 Rataje 71 +297421.0 False 2 1 Grunwald 16 +415000.0 True 3 0 Jeżyce 5 +297421.0 False 2 3 Grunwald 16 +991380.0 False 5 1 Starołęka 94 +319998.0 False 3 1 Starołęka 95 +288405.0 False 2 1 Górczyn 37 +375529.0 False 2 3 Centrum 71 +225228.0 False 2 0 Rataje 71 +357692.0 False 3 1 Nowe 31 +310584.0 False 2 1 Nowe 26 +368568.0 False 3 4 Podolany 38 +460499.0 False 3 1 Stare 51 +156085.0 False 2 4 Nowe 54 +771672.0 False 4 4 Górczyn 66 +522235.0 False 3 2 Stare 62 +302887.0 False 2 4 Górczyn 25 +242731.0 False 2 0 Podolany 74 +225228.0 False 2 5 Rataje 91 +356251.0 False 3 14 Grunwald 20 +297420.0 False 2 3 Grunwald 24 +544008.0 False 4 2 Starołęka 4 +284618.0 False 2 3 Nowe 55 +285678.0 False 2 2 Winogrady 42 +174375.0 True 2 3 Centrum 25 +350000.0 True 4 4 Piątkowo 76 +380000.0 True 4 0 Piątkowo 74 +315000.0 True 2 0 Górczyn 48 +362000.0 True 2 1 Centrum 50 +344206.0 True 4 4 Stare 58 +300987.0 True 3 1 Stare 50 +235094.0 True 2 0 Stare 39 +549000.0 True 3 2 Jeżyce 18 +239000.0 True 2 1 Grunwald 44 +379000.0 True 3 1 Naramowice 20 +320000.0 True 2 1 Naramowice 50 +269000.0 True 3 1 Wilda 80 +295000.0 True 3 0 Grunwald 20 +249999.0 True 2 9 Winogrady 38 +330000.0 True 2 3 Piątkowo 50 +360000.0 True 3 2 Rataje 20 +412438.0 True 3 2 Winogrady 71 +291721.0 True 2 5 Stare 44 +354421.0 True 2 5 Stare 54 +399952.0 True 4 1 Grunwald 71 +280000.0 True 2 2 Centrum 40 +200000.0 True 2 2 Dębiec 40 +289000.0 True 2 7 Winiary 49 +279000.0 True 3 10 Rataje 56 +333232.0 True 3 7 Grunwald 56 +489000.0 True 3 0 Jeżyce 10 +375000.0 True 2 1 Piątkowo 48 +259000.0 True 2 2 Centrum 48 +335000.0 True 2 0 Centrum 54 +288000.0 True 3 4 Winogrady 30 +289000.0 True 2 7 Winiary 49 +380000.0 True 3 3 Wilda 67 +419000.0 True 3 4 Wilda 50 +247705.0 True 2 0 Jeżyce 50 +333696.0 True 3 0 Jeżyce 68 +409000.0 True 3 1 Rataje 90 +239000.0 True 2 3 Grunwald 60 +289000.0 True 2 6 Winogrady 48 +326000.0 True 2 1 Winogrady 39 +269000.0 True 2 2 Winogrady 48 +489000.0 True 4 2 Wilda 120 +350000.0 True 4 4 Piątkowo 76 +322663.41 True 2 1 Centrum 14 +368019.41 True 2 4 Centrum 18 +674695.13 True 4 4 Centrum 59 +375000.0 True 4 2 Centrum 72 +378128.09 True 2 3 Centrum 77 +349668.0 True 2 2 Centrum 15 +344296.75 True 2 1 Centrum 5 +353456.63 True 2 3 Centrum 16 +347193.0 False 3 11 Grunwald 7 +557338.0 False 3 3 Centrum 4 +228144.0 False 3 2 Głuszyna 56 +247705.0 False 2 1 Podolany 74 +228144.0 False 3 2 Głuszyna 56 +222050.0 False 2 3 Głuszyna 41 +158682.0 False 2 2 Głuszyna 94 +194000.0 False 2 2 Głuszyna 80 +289170.0 False 2 0 Winogrady 90 +399000.0 False 3 2 Winogrady 98 +305670.0 False 2 3 Grunwald 30 +305670.0 False 2 3 Grunwald 30 +294840.0 False 2 4 Winogrady 50 +597184.0 False 3 4 Stare 61 +460499.0 False 3 1 Stare 51 +347010.0 False 2 10 Grunwald 80 +356251.0 False 3 14 Grunwald 20 +225228.0 False 2 5 Rataje 91 +297420.0 False 2 3 Grunwald 24 +284618.0 False 2 3 Nowe 55 +544008.0 False 4 2 Starołęka 4 +522235.0 False 3 2 Stare 62 +370597.0 False 2 4 Stare 4 +674695.0 False 3 4 Stare 59 +442080.0 False 3 1 Starołęka 68 +771672.0 False 4 4 Górczyn 66 +302887.0 False 2 4 Górczyn 25 +294840.0 False 2 4 Winogrady 50 +305676.0 False 2 5 Winogrady 52 +305676.0 False 2 5 Winogrady 52 +242731.0 False 2 0 Podolany 74 +460499.0 False 3 1 Stare 51 +156085.0 False 2 4 Nowe 54 +242731.0 False 2 0 Podolany 74 +368568.0 False 3 4 Podolany 38 +499000.0 True 3 1 Rataje 50 +275000.0 True 3 1 Wilda 48 +307000.0 True 3 2 Rataje 48 +485000.0 True 2 3 Nowe 50 +288000.0 True 2 4 Naramowice 44 +405000.0 True 4 7 Piątkowo 63 +299000.0 True 2 4 Grunwald 60 +235000.0 True 2 0 Nowe 47 +288000.0 True 3 4 Stare 30 +225288.0 False 2 1 Rataje 91 +287882.0 False 2 1 Starołęka 85 +225288.0 False 2 1 Rataje 91 +652026.0 True 4 3 Stare 89 +476118.0 True 3 1 Stare 78 +349668.0 True 2 2 Stare 15 +318645.0 True 2 2 Stare 30 +290970.0 True 2 0 Stare 60 +354000.0 True 3 1 Stare 60 +260000.0 True 2 0 Stare 47 +670000.0 True 5 1 Stare 152 +360380.0 True 4 4 Wilda 97 +329000.0 True 2 3 Nowe 90 +249000.0 True 2 5 Centrum 20 +319000.0 True 2 3 Jeżyce 40 +493422.0 True 3 1 Centrum 62 +236000.0 True 2 3 Nowe 43 +257697.0 True 2 3 Śródka 21 +234000.0 True 2 2 Śródka 20 +233643.0 True 2 2 Nowe 99 +296810.0 True 2 2 Grunwald 30 +335988.0 True 2 1 Grunwald 41 +453526.5 True 3 6 Grunwald 33 +637135.0 True 3 7 Grunwald 65 +771672.0 True 4 7 Grunwald 68 +329000.0 True 3 8 Piątkowo 63 +399000.0 False 5 0 Szczepankowo 68 +369000.0 True 2 4 Rataje 49 +404000.0 True 2 0 Rataje 49 +389000.0 True 3 4 Rataje 62 +507060.0 True 2 3 Grunwald 77 +390910.0 True 3 1 Grunwald 14 +690000.0 True 6 2 Centrum 170 +355000.0 True 2 0 Podolany 93 +369000.0 True 16 2 Piątkowo 90 +339000.0 True 3 9 Rataje 65 +398000.0 True 2 3 Umultowo 59 +289000.0 True 2 6 Stare 80 +389000.0 True 3 3 Stare 49 +270000.0 True 2 6 Piątkowo 46 +353000.0 True 3 2 Grunwald 73 +413484.5 True 3 4 Grunwald 83 +311046.0 True 2 6 Grunwald 12 +1020000.0 True 3 1 Grunwald 50 +292383.0 True 2 0 Grunwald 41 +307190.0 True 2 4 Grunwald 20 +311975.5 True 2 1 Grunwald 13 +335000.0 True 3 1 Naramowice 60 +289000.0 True 2 1 Winogrady 48 +449000.0 False 5 0 Szczepankowo 68 +285678.0 False 2 1 Winogrady 42 +247705.0 False 2 0 Podolany 74 +211190.0 False 2 0 Podolany 78 +278047.0 False 2 4 Podolany 74 +333694.0 False 3 0 Podolany 38 +333024.0 False 2 1 Stare 51 +319998.0 False 3 1 Starołęka 97 +354420.0 False 2 5 Winogrady 70 +348750.0 False 2 3 Centrum 50 +269000.0 True 2 8 Rataje 90 +370597.0 False 2 4 Stare 4 +242731.0 False 2 0 Podolany 74 +370597.0 False 2 4 Stare 4 +460499.0 False 3 1 Stare 51 +302887.0 False 2 4 Górczyn 25 +225228.0 False 2 5 Rataje 91 +356251.0 False 3 14 Grunwald 20 +156085.0 False 2 4 Nowe 54 +156085.0 False 2 4 Nowe 54 +156085.0 False 2 4 Nowe 54 +544008.0 False 4 2 Starołęka 4 +302887.0 False 2 4 Górczyn 25 +284618.0 False 2 3 Nowe 55 +242731.0 False 2 0 Podolany 74 +546462.0 False 4 0 Jeżyce 74 +493966.0 False 4 0 Jeżyce 79 +332691.0 False 3 0 Jeżyce 58 +335920.0 False 3 0 Jeżyce 68 +334360.0 False 3 1 Jeżyce 44 +329000.0 True 3 3 Jeżyce 54 +299000.0 True 2 3 Naramowice 49 +349000.0 True 3 3 Piątkowo 64 +297421.0 False 2 3 Grunwald 24 +244071.0 False 2 1 Nowe 93 +287882.0 False 2 1 Starołęka 85 +297421.0 False 2 3 Grunwald 24 +297421.0 False 2 3 Grunwald 24 +156085.0 False 2 3 Głuszyna 45 +244071.0 False 2 1 Nowe 93 +330000.0 True 3 1 Dębiec 88 +364000.0 True 3 2 Jeżyce 69 +365000.0 True 3 1 Wilda 46 +380000.0 True 4 0 Piątkowo 74 +270000.0 True 2 6 Piątkowo 46 +330000.0 True 3 4 Rataje 59 +260000.0 True 2 0 Naramowice 47 +425000.0 True 3 1 Rataje 70 +239000.0 True 2 3 Rataje 44 +250000.0 True 2 9 Winogrady 10 +307000.0 True 2 4 Piątkowo 49 +300000.0 True 3 2 Grunwald 49 +295361.0 True 3 2 Stare 48 +242133.0 True 2 0 Jeżyce 38 +391730.0 True 3 2 Winogrady 69 +286860.0 True 2 7 Winogrady 49 +476119.0 True 3 1 Stare 59 +652026.0 True 4 3 Stare 79 +289171.0 True 2 0 Stare 46 +293700.0 True 2 5 Stare 45 +342405.0 True 3 11 Grunwald 54 +297420.0 True 2 1 Grunwald 50 +292100.0 True 2 1 Grunwald 51 +333690.0 True 3 1 Jeżyce 68 +242731.0 True 2 0 Jeżyce 50 +211200.0 True 2 0 Jeżyce 38 +288000.0 True 3 4 Winogrady 30 +245000.0 True 2 0 Naramowice 50 +359600.0 True 2 5 Górczyn 58 +332940.0 True 2 2 Winogrady 70 +248337.0 True 2 3 Winogrady 38 +209000.0 True 2 0 Śródka 14 +341803.78 True 2 8 Winogrady 10 +285000.0 True 2 3 Łazarz 58 +217000.0 True 2 4 Wilda 30 +379000.0 True 4 3 Winogrady 65 +235000.0 True 2 0 Śródka 10 +597184.0 False 3 4 Stare 61 +460499.0 False 3 1 Stare 51 +347010.0 False 2 10 Grunwald 80 +282994.0 False 2 0 Starołęka 59 +297420.0 False 2 3 Grunwald 24 +522235.0 False 3 2 Stare 62 +368568.0 False 3 4 Podolany 38 +242731.0 False 2 0 Podolany 74 +460499.0 False 3 1 Stare 51 +771672.0 False 4 4 Górczyn 66 +302887.0 False 2 4 Górczyn 25 +350000.0 True 4 4 Piątkowo 76 +375000.0 True 3 1 Nowe 62 +260000.0 True 2 0 Naramowice 79 +315000.0 True 2 1 Grunwald 49 +375000.0 True 3 1 Rataje 62 +229000.0 True 2 11 Stare 38 +365000.0 True 3 1 Wilda 46 +299000.0 True 2 3 Górczyn 37 +259000.0 True 2 2 Jeżyce 48 +289000.0 True 2 1 Piątkowo 46 +310000.0 True 3 0 Piątkowo 63 +209000.0 True 2 4 Dębiec 6 +249000.0 True 2 0 Nowe 21 +287882.09 True 2 1 Nowe 85 +434201.0 True 4 1 Nowe 54 +482423.0 True 5 2 Nowe 4 +297789.5 True 2 2 Nowe 54 +149000.0 True 2 0 Grunwald 35 +299000.0 True 2 9 Stare 80 +365000.0 True 3 1 Wilda 46 +329000.0 True 2 3 Rataje 90 +337000.0 True 4 4 Rataje 62 +597184.0 False 3 4 Stare 61 +347010.0 False 2 10 Grunwald 80 +460499.0 False 3 1 Stare 51 +597184.0 False 3 4 Stare 61 +300680.0 False 2 2 Starołęka 54 +347010.0 False 2 10 Grunwald 80 +294840.0 False 2 4 Winogrady 50 +368568.0 False 3 4 Podolany 38 +242731.0 False 2 0 Podolany 74 +674695.0 False 3 4 Stare 59 +442080.0 False 3 1 Starołęka 68 +302887.0 False 2 4 Górczyn 25 +294840.0 False 2 4 Winogrady 50 +460499.0 False 3 1 Stare 51 +365000.0 True 3 0 Wilda 10 +195000.0 True 2 0 Winiary 35 +325000.0 True 4 1 Rataje 58 +303287.0 False 2 3 Grunwald 13 +375000.0 True 3 1 Rataje 62 +384000.0 True 3 2 Piątkowo 69 +297421.0 False 2 3 Grunwald 24 +244071.0 False 2 1 Nowe 93 +255000.0 True 2 2 Centrum 90 +285000.0 True 2 0 Grunwald 80 +300000.0 True 3 1 Grunwald 48 +330000.0 True 3 5 Grunwald 58 +330000.0 True 3 5 Grunwald 58 +330000.0 True 3 5 Grunwald 58 +315000.0 True 2 0 Centrum 60 +290000.0 True 2 4 Centrum 36 +245000.0 True 2 7 Ogrody 90 +289000.0 True 2 1 Piątkowo 46 +359000.0 True 2 4 Nowe 90 +339000.0 True 3 1 Nowe 88 +285385.0 True 2 4 Winogrady 48 +308039.0 True 2 0 Winogrady 52 +298982.0 True 2 3 Stare 45 +289170.0 True 2 0 Stare 46 +368568.0 True 3 4 Jeżyce 68 +211195.0 True 2 0 Jeżyce 38 +315000.0 True 2 2 Podolany 52 +267704.0 True 2 3 Grunwald 45 +325313.0 True 3 3 Grunwald 53 +260000.0 True 2 0 Naramowice 47 +349000.0 True 2 3 Jeżyce 56 +499000.0 True 3 1 Rataje 50 +239000.0 True 2 0 Wilda 57 +487000.0 True 3 0 Naramowice 73 +319000.0 True 2 2 Centrum 53 +344152.0 True 3 0 Nowe 80 +357692.0 True 3 2 Nowe 31 +277098.0 True 2 0 Nowe 59 +301794.13 True 2 1 Nowe 26 +533745.0 False 5 2 Starołęka 4 +333694.0 False 3 1 Podolany 32 +333694.0 False 3 1 Piątkowo 38 +380931.0 False 3 3 Starołęka 82 +597184.0 False 3 4 Stare 61 +460499.0 False 3 1 Stare 51 +300680.0 False 2 2 Starołęka 54 +305670.0 False 2 3 Grunwald 30 +390301.0 False 2 4 Stare 61 +370597.0 False 2 4 Stare 4 +192750.0 False 2 1 Głuszyna 55 +460499.0 False 3 1 Stare 51 +242731.0 False 2 0 Podolany 74 +303287.0 False 2 3 Grunwald 13 +318645.0 False 2 2 Winogrady 23 +370597.0 False 2 4 Stare 4 +674695.0 False 3 4 Stare 59 +442080.0 False 3 1 Starołęka 68 +771672.0 False 4 4 Górczyn 66 +771672.0 False 4 4 Górczyn 66 +294840.0 False 2 4 Winogrady 50 +368712.0 False 2 5 Stare 90 +480000.0 True 3 3 Stare 46 +237000.0 True 2 2 Wilda 44 +359000.0 True 4 3 Grunwald 74 +369000.0 True 3 0 Grunwald 87 +369000.0 True 3 0 Grunwald 87 +695000.0 True 3 2 Jeżyce 25 +321239.09 True 2 3 Winogrady 30 +331899.09 True 2 2 Winogrady 30 +334564.09 True 2 1 Winogrady 30 +289800.0 True 2 0 Winogrady 46 +289170.0 True 2 0 Winogrady 90 +345000.0 True 3 3 Stare 50 +499000.0 True 2 8 Centrum 39 +399000.0 True 2 1 Jeżyce 58 +1049000.0 True 3 9 Nowe 113 +729000.0 True 4 3 Stare 130 +254457.0 True 2 5 Nowe 52 +249000.0 True 2 6 Winogrady 48 +320000.0 True 3 3 Nowe 40 +333692.0 True 3 2 Jeżyce 68 +410665.0 True 4 2 Grunwald 71 +293436.0 True 2 1 Grunwald 50 +481904.0 True 3 2 Stare 62 +332940.0 True 2 2 Stare 54 +325249.0 True 3 3 Jeżyce 49 +347096.0 True 3 1 Winogrady 57 +297421.0 False 2 2 Grunwald 24 +570000.0 True 4 3 Centrum 137 +351475.0 False 3 0 Starołęka 80 +294840.0 False 2 4 Winogrady 50 +460499.0 False 3 1 Stare 51 +300680.0 False 2 2 Starołęka 54 +460499.0 False 3 1 Stare 51 +353275.0 False 2 14 Grunwald 74 +294840.0 False 2 4 Winogrady 50 +297420.0 False 2 3 Grunwald 24 +294840.0 False 2 4 Winogrady 50 +302887.0 False 2 4 Górczyn 25 +442080.0 False 3 1 Starołęka 68 +289000.0 True 2 6 Winogrady 48 +289000.0 True 2 6 Winogrady 48 +674695.0 False 3 4 Stare 59 +269000.0 True 2 6 Stare 49 +347010.0 False 2 10 Grunwald 80 +296279.0 True 3 2 Stare 49 +238947.0 True 2 6 Stare 39 +289000.0 True 2 1 Piątkowo 46 +774618.0 False 4 5 Wilda 31 +741099.0 False 4 5 Wilda 22 +460688.0 False 3 4 Wilda 25 +300723.0 False 2 4 Wilda 97 +349610.0 False 2 4 Wilda 59 +564000.0 False 5 0 Biedrusko 90 +618933.0 False 4 4 Wilda 37 +399000.0 False 4 0 Biedrusko 34 +564000.0 False 5 0 Biedrusko 90 +359000.0 False 3 0 Biedrusko 80 +524808.0 False 3 4 Wilda 92 +359000.0 False 4 1 Biedrusko 86 +360000.0 True 3 3 Jeżyce 62 +499000.0 False 2 2 Stare 45 +664443.0 False 3 3 Stare 24 +526049.0 False 2 3 Stare 45 +709116.0 False 3 4 Stare 88 +347182.0 False 4 1 Biedrusko 70 +335925.0 False 4 1 Biedrusko 70 +335925.0 False 4 1 Biedrusko 70 +335925.0 False 4 1 Biedrusko 70 +335925.0 False 4 1 Biedrusko 70 +453929.0 False 3 3 Wilda 26 +387000.0 False 4 1 Biedrusko 86 +309276.0 False 2 3 Wilda 12 +486720.0 False 3 3 Wilda 60 +325440.0 False 3 0 Biedrusko 80 +484068.0 False 3 3 Wilda 6 +306675.0 False 3 0 Biedrusko 20 +663205.0 False 4 3 Wilda 85 +447038.0 False 3 2 Wilda 25 +306675.0 False 3 0 Biedrusko 20 +306675.0 False 3 0 Biedrusko 20 +481522.0 False 3 2 Wilda 82 +306675.0 False 3 0 Biedrusko 20 +356400.0 False 2 2 Wilda 52 +325440.0 False 3 0 Biedrusko 80 +510984.0 False 3 2 Wilda 97 +272000.0 False 3 2 Biedrusko 31 +289000.0 False 3 1 Biedrusko 39 +289000.0 False 3 1 Biedrusko 39 +319000.0 False 3 0 Biedrusko 49 +329000.0 False 3 0 Biedrusko 49 +289000.0 True 2 1 Piątkowo 46 +289000.0 True 2 1 Piatkowo 46 +125000.0 True 5 3 Grunwald 22 +625000.0 True 5 3 Grunwald 105 +643000.0 True 4 0 Naramowice 60 +215000.0 True 2 2 Centrum 39 +399000.0 True 4 0 Centrum 70 +435000.0 True 3 1 Grunwald 10 +289000.0 True 3 4 Naramowice 40 +515000.0 True 3 0 Rataje 71 +310000.0 True 2 4 Jeżyce 55 +348000.0 True 3 9 Rataje 65 +340000.0 True 3 8 Rataje 65 +325248.0 True 3 1 Jeżyce 49 +262875.0 True 2 4 Jeżyce 40 +325248.0 True 3 1 Jeżyce 49 +262874.0 True 2 4 Jeżyce 40 +253498.0 True 2 4 Jeżyce 38 +253193.0 True 2 6 Jeżyce 38 +253193.0 True 2 4 Jeżyce 38 +220000.0 True 2 1 Łazarz 45 +230000.0 True 2 2 Rataje 49 +293848.0 True 3 4 Winogrady 49 +305000.0 True 3 4 Jeżyce 84 +245000.0 True 2 2 Jeżyce 62 +205000.0 True 2 0 Jeżyce 43 +269000.0 True 2 13 Piątkowo 50 +249000.0 True 2 2 Strzeszyn 34 +330000.0 True 3 6 Rataje 80 +200000.0 True 2 0 Wilda 32 +270000.0 True 3 4 Rataje 48 +617360.0 True 3 3 Grunwald 77 +279554.0 True 2 4 Jeżyce 68 +279554.0 True 2 4 Jeżyce 68 +550000.0 True 3 1 Grunwald 73 +355000.0 True 2 8 Ogrody 52 +210000.0 True 2 10 Ogrody 38 +234000.0 True 2 0 Wilda 37 +375000.0 True 3 2 Wilda 90 +345000.0 True 3 6 Winogrady 10 +320000.0 True 3 4 Piątkowo 63 +239000.0 True 2 8 Winogrady 38 +350000.0 True 4 4 Piątkowo 74 +295363.0 True 3 1 Stare 48 +285384.0 True 2 4 Winogrady 48 +392861.0 True 3 3 Winogrady 69 +399000.0 True 2 0 Podolany 63 +518000.0 True 2 4 Centrum 2 +495000.0 True 3 0 Rataje 69 +405000.0 True 3 3 Jeżyce 63 +269000.0 True 2 1 Rataje 50 +481903.0 True 3 2 Stare 62 +269000.0 True 2 4 Grunwald 38 +404000.0 True 3 2 Piątkowo 60 +549000.0 True 3 2 Dąbrowskiego 106 +489000.0 True 3 0 Stare 70 +358000.0 True 4 3 Grunwald 74 +379000.0 True 3 1 Naramowice 20 +269000.0 True 3 11 Grunwald 50 +197000.0 True 2 3 Grunwald 40 +362459.0 False 3 0 Starołęka 80 +353275.0 False 2 14 Grunwald 74 +351475.0 False 3 0 Starołęka 80 +225228.0 False 2 5 Rataje 91 +394000.0 False 4 0 Szczepankowo 77 +287882.0 False 2 1 Starołęka 85 +349000.0 True 3 4 Wilda 75 +255000.0 True 2 3 Rataje 46 +460040.0 True 3 5 Górczyn 20 +321656.0 True 2 1 Winogrady 88 +326000.0 True 2 1 Winiary 39 +285000.0 True 2 3 Naramowice 5 +399000.0 True 4 0 Stary 70 +349000.0 True 3 3 Nowe 87 +585000.0 True 4 1 Stare 100 +510000.0 True 3 2 Stare 68 +409000.0 True 4 3 Centrum 111 +310000.0 True 2 0 Grunwald 60 +308039.0 True 2 0 Winogrady 21 +286858.0 True 2 7 Winogrady 62 +279000.0 True 3 0 Piątkowo 50 +347090.0 False 3 1 Winogrady 90 +241187.0 True 2 7 Stare 39 +350875.0 True 3 1 Rataje 56 +296279.0 True 3 3 Stare 49 +293900.0 True 3 4 Stare 49 +315812.0 True 4 8 Stare 52 +374791.0 True 4 5 Jeżyce 57 +278048.0 True 2 4 Jeżyce 50 +371931.0 True 4 4 Jeżyce 57 +242000.0 True 2 1 Jeżyce 38 +308220.0 False 2 5 Stare 70 +339000.0 True 3 1 Rataje 66 +460499.0 False 3 1 Stare 51 +349668.0 False 2 2 Stare 15 +300680.0 False 2 2 Starołęka 54 +557338.0 False 3 3 Stare 4 +349332.0 True 3 0 Jeżyce 16 +271236.0 True 2 2 Jeżyce 41 +329000.0 True 3 1 Jeżyce 112 +199000.0 True 2 2 Grunwald 38 +475000.0 True 3 1 Naramowice 68 +379000.0 True 5 3 Winogrady 65 +270000.0 True 2 2 Stare 95 +210000.0 True 2 2 Dębiec 40 +379000.0 True 2 3 Winogrady 48 +440000.0 True 2 2 Stare 90 +750000.0 True 5 2 Jeżyce 136 +425000.0 True 4 6 Nowe 85 +539000.0 True 4 1 Centrum 110 +1300000.0 True 2 1 Grunwald 100 +340000.0 True 3 0 Grunwald 98 +360000.0 True 3 4 Jeżyce 50 +259000.0 True 2 0 Grunwald 52 +295000.0 True 2 1 Wilda 51 +487000.0 True 3 0 Naramowice 73 +487000.0 True 3 0 Naramowice 73 +285000.0 True 3 2 Rataje 10 +605000.0 True 3 0 Grunwald 98 +209000.0 True 3 3 Grunwald 49 +242406.0 True 2 0 Jeżyce 36 +380000.0 True 2 2 Wilda 10 +268000.0 True 3 4 Jeżyce 50 +286446.0 True 2 2 Winogrady 49 +392181.0 True 3 4 Winogrady 69 +300987.0 True 3 3 Stare 50 +240876.0 True 2 7 Stare 39 +298980.0 True 2 5 Stare 45 +293700.0 True 2 5 Stare 45 +375960.0 True 4 2 Grunwald 71 +377918.0 True 3 2 Grunwald 71 +292100.0 True 2 1 Grunwald 51 +476118.0 True 3 1 Stare 59 +396248.0 True 2 4 Stare 52 +278046.0 True 2 1 Jeżyce 50 +211191.0 True 2 0 Jeżyce 38 +362458.0 True 3 0 Nowe 68 +288523.0 True 2 0 Nowe 54 +282998.0 True 2 0 Nowe 55 +247705.0 False 2 1 Podolany 74 +637135.0 False 3 7 Grunwald 65 +349000.0 False 4 0 Szczepankowo 29 +285678.0 False 2 1 Winogrady 42 +277823.0 False 2 2 Podolany 70 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +460499.0 False 3 1 Stare 51 +289170.0 False 2 0 Winogrady 90 +339000.0 True 3 9 Nowe 65 +351475.0 False 3 0 Starołęka 80 +349000.0 True 3 3 Nowe 63 +349000.0 False 4 0 Szczepankowo 29 +247831.0 False 2 5 Głuszyna 73 +353275.0 False 2 14 Grunwald 74 +353275.0 False 2 14 Grunwald 74 +349000.0 False 4 0 Szczepankowo 29 +225288.0 False 2 1 Rataje 91 +285678.0 False 2 1 Winogrady 42 +225228.0 False 2 5 Rataje 91 +297421.0 False 2 3 Grunwald 24 +294840.0 False 2 4 Winogrady 50 +300680.0 False 2 2 Starołęka 54 +349668.0 False 2 2 Stare 15 +476780.0 True 2 2 Centrum 90 +239000.0 True 2 10 Rataje 44 +359000.0 True 3 2 Jeżyce 58 +207000.0 True 2 2 Zawady 42 +282995.0 True 2 0 Starołęka 59 +626800.0 True 3 7 Stare 68 +439000.0 True 4 2 Grunwald 92 +569000.0 True 4 0 Wilda 30 +313000.0 True 2 4 Stare 20 +396565.0 True 3 2 Jeżyce 61 +405860.0 True 2 1 Jeżyce 44 +519000.0 True 3 3 Grunwald 104 +265000.0 True 3 1 Winogrady 53 +530000.0 True 4 3 Naramowice 102 +390000.0 True 3 2 Podolany 68 +305000.0 True 2 1 Winiary 48 +215000.0 True 2 2 Łazarz 39 +250000.0 True 2 3 Centrum 33 +489000.0 True 2 4 Nowe 51 +495000.0 True 3 1 Centrum 86 +499000.0 True 3 2 Rataje 64 +339000.0 True 3 9 Rataje 65 +319000.0 True 3 1 Piątkowo 64 +310000.0 True 3 0 Piątkowo 50 +270000.0 True 3 4 Rataje 48 +330000.0 True 4 0 Naramowice 68 +255000.0 True 2 0 Grunwald 48 +333000.0 True 3 7 Rataje 78 +255000.0 True 2 2 Dębiec 48 +225000.0 True 2 3 Nowe 36 +326000.0 True 2 1 Winiary 39 +480000.0 True 3 2 Grunwald 87 +399000.0 True 3 3 Centrum 50 +980000.0 True 6 0 Naramowice 193 +350000.0 True 3 5 Stare 48 +410000.0 True 5 0 Łazarz 114 +279000.0 True 2 1 Podolany 45 +357693.0 True 3 2 Nowe 64 +424379.0 True 4 2 Nowe 74 +533746.0 True 5 2 Nowe 95 +282997.0 True 2 0 Nowe 55 +232049.0 True 2 0 Stare 36 +289800.0 True 2 0 Stare 46 +289170.0 True 2 0 Stare 46 +300988.0 True 3 1 Stare 50 +223752.0 True 2 0 Stare 37 +285680.0 True 2 4 Winogrady 48 +391730.0 True 3 2 Winogrady 69 +318383.0 True 3 3 Jeżyce 48 +266320.0 True 2 5 Jeżyce 41 +242407.0 True 2 0 Jeżyce 36 +245000.0 True 2 2 Winogrady 38 +239000.0 True 2 4 Rataje 38 +258000.0 True 2 1 Wilda 49 +269000.0 True 2 9 Nowe 49 +410000.0 True 2 5 Malta 53 +349000.0 True 3 2 Górczyn 55 +210000.0 True 2 2 Zawady 42 +329000.0 True 3 3 Piątkowo 60 +539000.0 True 3 1 Nowe 70 +335000.0 True 4 4 Rataje 50 +305000.0 True 2 1 Sołacz 48 +239000.0 True 2 3 Winogrady 10 +269000.0 True 2 0 Grunwald 20 +269000.0 True 3 1 Wilda 68 +429000.0 True 3 3 Centrum 102 +219000.0 True 2 2 Rataje 38 +1200000.0 True 4 2 Jeżyce 188 +350000.0 True 3 0 Winogrady 48 +250000.0 True 2 4 Rataje 44 +410000.0 True 2 9 Rataje 51 +485000.0 False 2 4 Łazarz 80 +409240.0 False 2 3 Piątkowo 67 +454960.0 False 2 1 Łazarz 87 +384500.0 False 2 3 Piątkowo 50 +392420.0 False 2 3 Piątkowo 70 +295020.0 False 2 2 Piątkowo 70 +298320.0 False 2 2 Piątkowo 20 +295020.0 False 2 1 Piątkowo 70 +298320.0 False 2 1 Piątkowo 20 +297000.0 False 2 1 Piątkowo 45 +286080.0 False 2 0 Piątkowo 70 +293800.0 False 2 0 Piątkowo 20 +292500.0 False 2 0 Piątkowo 45 +300950.0 False 2 0 Piątkowo 30 +227500.0 False 2 3 Piątkowo 20 +427060.0 False 2 3 Piątkowo 50 +699000.0 True 4 2 Naramowice 92 +409240.0 False 2 3 Piątkowo 67 +287760.0 False 2 2 Piątkowo 60 +278720.0 False 2 2 Piątkowo 60 +287100.0 False 2 2 Piątkowo 50 +240000.0 True 2 0 Grunwald 60 +295020.0 False 2 2 Piątkowo 70 +287760.0 False 2 1 Piątkowo 60 +278720.0 False 2 1 Piątkowo 60 +287100.0 False 2 1 Piątkowo 50 +360000.0 True 2 5 Grunwald 41 +304920.0 False 2 1 Piątkowo 20 +295020.0 False 2 1 Piątkowo 70 +239000.0 True 2 4 Rataje 38 +360000.0 True 3 1 Jeżyce 20 +350000.0 True 4 4 Stare 60 +450000.0 True 2 2 Stare 40 +211190.0 False 2 0 Piątkowo 78 +294840.0 False 2 4 Winogrady 50 +399000.0 False 3 2 Winogrady 98 +299514.0 False 2 1 Starołęka 85 +299000.0 True 2 4 Grunwald 37 +287000.0 True 2 16 Rataje 49 +420000.0 True 4 3 Łazarz 104 +274900.0 True 2 13 Nowe 80 +720000.0 True 4 0 Centrum 163 +339000.0 True 3 1 Rataje 66 +480000.0 True 2 2 Grunwald 10 +283400.0 False 2 0 Piątkowo 60 +282750.0 False 2 0 Piątkowo 50 +300300.0 False 2 0 Piątkowo 20 +286080.0 False 2 0 Piątkowo 70 +210000.0 True 2 2 Zawady 42 +320000.0 True 2 4 Winogrady 57 +410000.0 True 2 5 Rataje 50 +315000.0 True 3 0 Stare 63 +365000.0 True 2 1 Jeżyce 56 +340000.0 True 3 9 Rataje 30 +339000.0 True 3 9 Rataje 65 +325000.0 True 3 7 Rataje 90 +349000.0 True 3 2 Górczyn 55 +375000.0 True 4 2 Centrum 72 +269000.0 True 3 3 Winogrady 48 +495000.0 True 4 3 Naramowice 104 +329000.0 True 3 3 Wilda 82 +385000.0 True 3 0 Łazarz 80 +395000.0 True 2 1 Stare 30 +285000.0 True 2 3 Wilda 43 +325000.0 True 2 3 Centrum 57 +305000.0 True 2 1 Sołacz 48 +339000.0 True 3 0 Rataje 20 +480000.0 True 3 1 Grunwald 40 +630000.0 True 4 0 Stare 84 +275000.0 True 2 2 Plewiska 62 +350000.0 True 2 4 Jeżyce 56 +488000.0 True 3 3 Grunwald 70 +305000.0 True 2 1 Winiary 48 +255000.0 True 2 4 Rataje 70 +285000.0 True 3 0 Wilda 61 +282995.0 True 2 0 Starołęka 59 +263000.0 True 3 4 Grunwald 48 +380931.0 False 3 3 Starołęka 82 +329000.0 True 2 3 Rataje 49 +325000.0 True 3 7 Rataje 90 +350000.0 True 3 0 Starołęka 44 +268000.0 True 2 0 Rataje 43 +253000.0 True 2 4 Grunwald 42 +269000.0 True 2 1 Rataje 50 +325000.0 True 3 7 Rataje 63 +300000.0 True 3 6 Wilda 50 +329000.0 True 3 1 Piątkowo 63 +415000.0 True 2 5 Nowe 53 +270000.0 True 3 4 Rataje 47 +300000.0 True 3 6 Wilda 50 +690000.0 True 5 1 Jeżyce 70 +250000.0 True 2 5 Wilda 12 +344000.0 True 2 2 Wilczak 50 +329000.0 True 3 3 Piątkowo 60 +978009.0 False 4 7 Grunwald 2 +864244.5 False 4 7 Grunwald 71 +329000.0 True 3 1 Piątkowo 63 +255000.0 True 2 2 Dębiec 48 +279999.0 True 2 1 Piątkowo 90 +245000.0 True 2 2 Winogrady 20 +510000.0 True 3 3 Grunwald 79 +380000.0 True 2 1 Centrum 67 +355000.0 False 3 0 Stare 61 +355000.0 False 3 0 Podolany 61 +430000.0 False 4 0 Stare 75 +430000.0 False 4 0 Podolany 75 +475000.0 False 4 0 Stare 72 +475000.0 False 4 0 Podolany 72 +455000.0 False 4 0 Stare 72 +455000.0 False 4 0 Podolany 72 +495000.0 False 4 0 Stare 7 +495000.0 False 4 0 Podolany 7 +652100.0 False 4 3 Stare 79 +476200.0 False 3 1 Stare 59 +476200.0 False 3 1 Chwaliszewo 59 +349700.0 False 2 2 Stare 15 +349700.0 False 2 2 Centrum 15 +340000.0 True 3 0 Stare 80 +555000.0 True 5 3 Piątkowo 125 +255000.0 True 2 2 Dębiec 48 +295000.0 True 3 2 Os 20 +295000.0 True 3 2 Os 20 +210000.0 True 2 0 Wilda 36 +239000.0 True 2 1 Grunwald 60 +269000.0 True 2 1 Stare 70 +460040.0 False 3 5 Grunwald 20 +399000.0 False 5 0 Szczepankowo 68 +372651.0 True 2 1 Stare 5 +349668.0 True 2 2 Stare 15 +282390.0 True 2 3 Stare 64 +597184.0 True 2 4 Stare 61 +320000.0 True 2 1 Grunwald 30 +269000.0 True 2 16 Rataje 49 +359000.0 True 2 1 Jeżyce 40 +285000.0 True 3 0 Dębiec 50 +290000.0 True 2 3 Stare 60 +320000.0 True 3 1 Grunwald 78 +344000.0 True 2 2 Wilczak 50 +395000.0 True 2 1 Stare 30 +299000.0 True 2 0 Dębiec 52 +495000.0 True 4 3 Jeżyce 107 +319000.0 True 2 1 Grunwald 52 +395000.0 True 2 1 Naramowice 30 +319000.0 True 2 1 Grunwald 52 +269000.0 True 2 0 Grunwald 46 +380000.0 True 4 6 Piątkowo 90 +297297.0 False 2 4 Podolany 82 +33760350.0 False 3 4 Podolany 71 +420000.0 True 3 1 Stare 60 +3559725.0 False 3 4 Podolany 85 +3559725.0 False 3 4 Podolany 85 +259000.0 True 2 1 Stare 60 +465000.0 True 3 3 Nowe 71 +282994.0 False 2 0 Starołęka 59 +300680.0 False 2 2 Starołęka 54 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +380000.0 True 3 3 Piątkowo 90 +270000.0 True 3 1 Starołęka 30 +365000.0 True 2 2 Grunwald 51 +550000.0 True 3 2 Stare 101 +300000.0 True 2 1 Naramowice 52 +450000.0 True 4 1 Grunwald 113 +490000.0 True 4 0 Naramowice 40 +216500.0 True 2 3 Nowe 30 +244071.0 True 2 1 Nowe 93 +192750.0 True 2 1 Nowe 55 +156562.0 True 2 1 Nowe 54 +350000.0 True 4 4 Piątkowo 76 +329000.0 True 3 3 Piątkowo 60 +298000.0 True 2 4 Wilda 45 +374000.0 True 3 4 Wilczak 30 +460000.0 True 2 2 Centrum 56 +288000.0 True 3 4 Winogrady 30 +400000.0 True 2 1 Świerczewo 60 +220000.0 True 2 4 Grunwald 43 +290000.0 True 2 4 Grunwald 53 +298000.0 True 2 4 Wilda 45 +439000.0 True 2 3 Jeżyce 60 +237000.0 True 2 2 Dębiec 44 +180000.0 True 3 2 Wilda 35 +330000.0 True 2 1 Jeżyce 50 +348000.0 True 3 9 Rataje 65 +439000.0 True 4 2 Grunwald 89 +269000.0 True 2 6 Rataje 70 +360000.0 True 3 3 Stare 63 +1000000.0 True 4 1 Centrum 103 +649400.0 False 3 4 Rataje 50 +311570.0 False 2 4 Rataje 51 +386883.0 False 3 4 Rataje 7 +383928.0 False 3 3 Rataje 46 +294906.0 False 2 3 Rataje 74 +309741.0 False 2 3 Rataje 89 +295734.0 False 2 3 Rataje 86 +384540.0 False 3 3 Rataje 55 +377947.0 False 3 2 Rataje 41 +310707.0 False 2 2 Rataje 3 +296631.0 False 2 2 Rataje 99 +380091.0 False 3 2 Rataje 73 +375672.0 False 3 1 Rataje 92 +293352.0 False 2 1 Rataje 14 +307156.0 False 2 1 Rataje 17 +293352.0 False 2 1 Rataje 14 +535000.0 True 2 3 Łazarz 59 +375606.0 False 3 1 Rataje 91 +293488.0 False 3 0 Rataje 94 +293488.0 False 2 0 Rataje 57 +260000.0 True 2 3 Rataje 38 +307428.0 False 2 0 Rataje 21 +293488.0 False 2 0 Rataje 16 +375408.0 False 3 0 Rataje 88 +325000.0 True 2 0 Rataje 47 +405000.0 True 3 2 Rataje 70 +360000.0 True 3 2 Rataje 20 +275000.0 True 2 13 Rataje 49 +410000.0 True 2 5 Rataje 30 +243828.0 False 2 4 Podolany 68 +398853.0 False 3 3 Podolany 18 +421258.0 False 4 3 Podolany 1 +348835.0 False 3 3 Podolany 63 +273546.0 False 2 3 Podolany 76 +256171.0 False 2 3 Podolany 79 +298116.0 False 2 3 Podolany 96 +306247.0 False 2 3 Podolany 35 +337602.0 False 3 3 Podolany 71 +357084.0 False 3 3 Podolany 4 +244647.0 False 2 3 Podolany 82 +641000.0 True 3 3 Łazarz 75 +277000.0 True 2 10 Nowe 80 +450000.0 True 2 2 Grunwald 70 +242000.0 True 2 1 Grunwald 52 +310000.0 True 3 4 Jeżyce 50 +475000.0 True 3 4 Wilda 66 +475000.0 True 3 4 Wilda 66 +120000.0 True 3 3 Grunwald 35 +120000.0 True 3 3 Grunwald 35 +1850000.0 True 5 1 Grunwald 196 +350000.0 True 4 4 Grunwald 50 +280000.0 True 4 4 Grunwald 40 +490000.0 True 4 4 Grunwald 70 +495000.0 True 3 1 Naramowice 70 +545000.0 True 3 0 Rataje 71 +310000.0 True 3 10 Rataje 80 +209000.0 True 2 0 Wilda 36 +295000.0 True 2 4 Garbary 33 +200000.0 True 2 8 Dębiec 50 +359900.0 True 4 4 Rataje 74 +320000.0 True 3 3 Jeżyce 70 +300000.0 True 2 1 Naramowice 23 +535000.0 True 4 2 Wilda 120 +620000.0 True 3 2 Naramowice 60 +495000.0 True 4 1 Naramowice 10 +240000.0 True 2 10 Rataje 36 +597000.0 True 3 0 Naramowice 60 +260000.0 True 2 0 Rataje 40 +399000.0 True 3 0 Winogrady 62 +275000.0 True 3 7 Wilda 20 +350000.0 True 2 2 Piątkowo 50 +429000.0 True 3 0 Grunwald 75 +380000.0 True 3 8 Rataje 80 +295000.0 True 2 1 Rataje 30 +339000.0 True 3 1 Rataje 88 +382000.0 True 3 3 Centrum 30 +299000.0 True 2 2 Sołacz 58 +499000.0 True 3 1 Grunwald 64 +549000.0 True 3 2 Jeżyce 106 +239000.0 True 2 1 Grunwald 36 +295000.0 True 3 2 Grunwald 49 +470000.0 True 4 2 Sołacz 87 +413000.0 True 3 3 Łazarz 46 +259000.0 True 2 1 Jeżyce 47 +348000.0 True 3 9 Nowe 65 +259000.0 True 2 0 Ławica 60 +269000.0 True 2 9 Rataje 49 +224000.0 True 2 0 Łazarz 50 +260000.0 True 3 4 Grunwald 49 +315000.0 True 3 0 Piątkowo 60 +379999.0 True 3 3 Wilda 67 +350000.0 True 2 1 Rataje 63 +270000.0 True 2 4 Grunwald 38 +250000.0 True 3 3 Rataje 53 +439000.0 True 4 2 Łazarz 92 +499000.0 True 3 1 Rataje 50 +290000.0 True 2 2 Dębiec 66 +320000.0 True 2 4 Łazarz 80 +379000.0 True 3 0 Wilda 67 +399000.0 True 3 2 Dębiec 91 +220000.0 True 2 4 Grunwald 43 +268000.0 True 3 4 Jeżyce 50 +399000.0 True 3 1 Bonin 68 +329000.0 True 3 4 Rataje 63 +353457.0 False 2 3 Stare 16 +347900.0 True 3 3 Nowe 10 +237000.0 True 2 2 Dębiec 44 +399000.0 True 3 1 Sołacz 66 +488000.0 True 3 3 Grunwald 70 +220000.0 True 2 4 Grunwald 43 +390000.0 True 3 2 Podolany 68 +299000.0 True 2 0 Wilda 52 +320000.0 True 3 4 Winogrady 50 +370000.0 True 4 4 Piątkowo 73 +339000.0 True 3 9 Rataje 65 +348000.0 True 3 9 Rataje 65 +420000.0 False 4 0 Grunwald 82 +495000.0 True 4 1 Stare 98 +329000.0 True 2 1 Stare 54 +699000.0 True 3 2 Stare 92 +487000.0 True 3 0 Stare 73 +375000.0 True 3 0 Naramowice 69 +270000.0 True 3 4 Rataje 48 +230000.0 True 2 1 Dębiec 38 +498000.0 True 4 4 Centrum 85 +390000.0 True 3 2 Podolany 68 +330000.0 True 4 2 Rataje 62 +299000.0 True 3 6 Jeżyce 70 +270000.0 True 3 4 Rataje 48 +390000.0 True 3 2 Podolany 68 +269000.0 True 2 2 Sołacz 49 +270000.0 True 3 4 Rataje 48 +232034.0 True 2 1 Starołęka 86 +265000.0 True 2 4 Winiary 10 +475000.0 True 2 4 Centrum 54 +585000.0 True 4 1 Piątkowo 100 +260000.0 True 2 0 Naramowice 46 +350000.0 True 4 4 Stare 76 +430000.0 True 2 5 Wilda 57 +366770.0 True 3 1 Winogrady 10 +285200.0 True 2 1 Winogrady 46 +319055.0 True 3 3 Grunwald 21 +307881.0 True 3 0 Grunwald 16 +267702.0 True 2 2 Grunwald 22 +239592.0 True 2 5 Grunwald 59 +375529.0 False 2 3 Stare 71 +247705.0 False 2 1 Podolany 74 +247705.0 False 2 1 Piątkowo 74 +411684.0 False 3 3 Winogrady 17 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +270000.0 True 3 0 Grunwald 48 +350000.0 True 4 1 Wilda 80 +340000.0 True 4 4 Winogrady 90 +599000.0 True 4 4 Centrum 109 +369000.0 True 3 0 Wilda 30 +549000.0 True 3 3 Grunwald 60 +345865.0 True 3 2 Jeżyce 21 +261000.0 True 2 2 Jeżyce 57 +410000.0 True 3 2 Jeżyce 74 +339000.0 True 2 2 Centrum 53 +399000.0 True 3 1 Grunwald 65 +410000.0 True 2 2 Jeżyce 74 +295000.0 True 2 2 Raszyn 50 +240000.0 True 2 16 Rataje 36 +250000.0 True 2 4 Rataje 23 +245000.0 True 2 4 Rataje 44 +269000.0 True 2 9 Rataje 49 +240000.0 True 2 2 Dębiec 48 +262000.0 True 2 4 Grunwald 60 +349000.0 True 3 1 Grunwald 57 +365000.0 True 3 1 Rataje 67 +409000.0 True 3 1 Malta 90 +298000.0 True 2 1 Łazarz 55 +599000.0 True 3 3 Grunwald 83 +289000.0 True 2 2 Jeżyce 42 +390000.0 True 3 3 Naramowice 48 +270000.0 True 2 2 Bonin 49 +250000.0 True 2 0 Naramowice 40 +350000.0 True 3 1 Naramowice 51 +270000.0 True 2 2 Sołacz 49 +260000.0 True 2 0 Rataje 46 +339000.0 True 3 9 Rataje 65 +348000.0 True 3 9 Rataje 65 +329000.0 True 3 2 Rataje 59 +230000.0 True 2 1 Dębiec 37 +238000.0 True 2 2 Grunwald 37 +392000.0 True 4 0 Piątkowo 74 +200000.0 True 2 0 Rataje 30 +370000.0 True 4 2 Piątkowo 74 +347000.0 True 3 1 Naramowice 47 +432000.0 True 2 5 Centrum 40 +435000.0 True 3 1 Piątkowo 84 +389000.0 True 2 1 Podolany 46 +799999.0 True 3 1 Sołacz 90 +248000.0 True 3 0 Jeżyce 74 +266000.0 True 2 2 Piątkowo 49 +316498.0 True 2 2 Stare 77 +519000.0 True 3 1 Rataje 50 +442150.0 True 2 2 Stare 75 +395000.0 True 3 2 Centrum 74 +599000.0 True 2 1 Centrum 70 +550.0 True 5 3 Naramowice 15 +499000.0 True 3 0 Grunwald 10 +499000.0 True 3 0 Grunwald 10 +459000.0 True 2 1 Centrum 48 +365000.0 True 3 2 Jeżyce 50 +375000.0 True 3 2 Jeżyce 50 +450000.0 True 3 11 Jeżyce 50 +289000.0 True 2 4 Ogrody 41 +230000.0 True 2 5 Winogrady 60 +440000.0 True 2 4 Centrum 55 +599000.0 True 3 2 Centrum 80 +343200.0 True 3 4 Winogrady 52 +435000.0 True 3 5 Wilda 70 +385000.0 True 2 1 Centrum 60 +300000.0 True 3 3 Centrum 88 +550000.0 True 3 1 Junikowo 84 +529000.0 True 4 4 Centrum 85 +460000.0 True 4 2 Bonin 87 +335000.0 True 3 3 Wilda 82 +405000.0 True 4 2 Nowe 71 +379000.0 True 3 0 Wilda 67 +379000.0 True 3 3 Winiary 55 +360000.0 True 3 4 Rataje 69 +495000.0 True 4 1 Grunwald 64 +285000.0 True 2 3 Wilda 60 +379999.0 True 3 3 Wilda 67 +370000.0 True 2 13 Rataje 67 +700000.0 True 4 1 Górczyn 160 +479000.0 True 3 3 Górczyn 70 +385000.0 True 3 0 Łazarz 80 +550000.0 True 4 1 Łazarz 50 +260000.0 True 3 4 Grunwald 47 +755000.0 True 4 2 Łazarz 90 +319000.0 True 2 0 Górczyn 54 +485000.0 True 2 2 Centrum 55 +485000.0 True 2 2 Centrum 55 +576500.0 True 2 5 Centrum 50 +576500.0 True 2 5 Chwaliszewo 50 +339000.0 True 2 5 Górczyn 41 +438503.0 True 3 2 Centrum 57 +419000.0 True 2 0 Rataje 55 +354454.0 False 2 3 Grunwald 17 +363258.0 False 2 1 Górczyn 59 +489780.0 False 4 2 Górczyn 63 +491520.0 False 4 1 Górczyn 92 +273875.5 False 2 1 Grunwald 13 +267000.0 True 2 2 Dębiec 35 +260000.0 True 2 2 Piątkowo 90 +587000.0 True 4 3 Łazarz 38 +460000.0 True 3 1 Naramowice 110 +695000.0 True 4 1 Rataje 70 +506657.0 True 4 11 Grunwald 73 +338325.0 True 2 13 Grunwald 5 +249641.0 True 2 0 Ogrody 54 +298250.0 True 2 5 Grunwald 38 +297421.0 True 2 2 Grunwald 24 +275000.0 True 2 9 Nowe 38 +249641.0 True 2 0 Jeżyce 54 +344141.0 True 2 8 Winogrady 47 +318384.0 True 3 6 Jeżyce 24 +269984.0 True 3 4 Winogrady 76 +447000.0 True 3 4 Grunwald 20 +450000.0 True 3 2 Strzeszyn 70 +690000.0 True 4 5 Górczyn 25 +334000.0 True 2 4 Sołacz 50 +289476.0 False 2 3 Jeżyce 84 +533745.0 False 5 2 Starołęka 4 +333694.0 False 3 1 Podolany 32 +333694.0 False 3 1 Piątkowo 38 +310000.0 True 2 2 Centrum 74 +310000.0 True 2 1 Grunwald 52 +250000.0 True 2 2 Łazarz 36 +265000.0 True 2 4 Jeżyce 43 +558745.0 False 3 3 Stare 62 +298000.0 True 2 5 Centrum 50 +347090.0 False 3 1 Winogrady 90 +362459.0 False 3 0 Starołęka 80 +754000.0 True 7 1 Stare 116 +247705.0 False 2 1 Podolany 74 +313000.0 True 2 4 Piątkowo 49 +339000.0 True 3 8 Nowe 78 +207000.0 True 2 2 Wilda 33 +295000.0 True 2 4 Grunwald 50 +330000.0 True 3 0 Jeżyce 78 +324500.0 True 2 5 Wilda 65 +429000.0 True 3 4 Wilda 47 +275000.0 True 2 9 Rataje 38 +365000.0 True 4 1 Nowe 54 +259000.0 True 2 6 Winogrady 38 +369000.0 True 2 3 Piątkowo 60 +414225.0 True 3 3 Centrum 23 +269000.0 True 3 3 Winogrady 48 +320000.0 True 2 3 Rataje 20 +288465.0 True 2 1 Starołęka 77 +321845.0 False 3 1 Grunwald 55 +389000.0 True 3 4 Piątkowo 16 +289000.0 True 2 7 Winiary 80 +249000.0 True 2 0 Komorniki 53 +391729.0 True 3 2 Winogrady 21 +285383.0 True 2 1 Winogrady 37 +228144.0 True 3 2 Nowe 56 +204450.0 True 2 1 Nowe 33 +496573.0 False 3 2 Stare 78 +286000.0 True 2 5 Centrum 49 +269000.0 True 2 1 Ogrody 50 +114642.0 True 2 0 Łazarz 46 +286000.0 True 2 5 Centrum 49 +390000.0 True 2 0 Świerczewo 60 +320000.0 True 4 1 Jeżyce 40 +706655.0 False 3 2 Nowe 45 +754000.0 False 5 0 Morasko 42 +259000.0 True 3 4 Winogrady 60 +289000.0 True 2 7 Winogrady 80 +350000.0 True 3 0 Rataje 63 +260000.0 True 2 1 Łazarz 54 +319990.0 True 2 3 Jeżyce 70 +228144.0 False 3 2 Głuszyna 56 +156085.0 False 2 2 Głuszyna 45 +350000.0 True 4 4 Stare 60 +394000.0 False 4 0 Szczepankowo 77 +287882.0 False 2 1 Starołęka 85 +445000.0 True 4 3 Piątkowo 65 +229000.0 True 2 1 Grunwald 16 +220000.0 True 2 3 Jeżyce 37 +285000.0 True 3 2 Antoninek 61 +550000.0 True 3 1 Jeżyce 73 +504326.0 True 4 4 Stare 26 +371930.0 True 4 2 Jeżyce 57 +255000.0 True 3 2 Grunwald 20 +279000.0 True 2 3 Piątkowo 30 +325000.0 True 2 0 Nowe 80 +604395.0 True 5 1 Wilda 31 +558000.0 True 5 1 Wilda 2 +1007500.0 False 4 1 Starołęka 94 +1203616.0 False 5 0 Starołęka 71 +298980.0 False 2 5 Winogrady 30 +263140.0 False 2 0 Naramowice 5 +281988.0 False 2 7 Naramowice 76 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +282944.0 False 2 0 Starołęka 59 +349668.0 False 2 2 Stare 15 +321904.0 False 2 4 Winogrady 92 +367000.0 True 3 1 Centrum 30 +350000.0 True 3 1 Nowe 63 +350000.0 True 2 1 Rataje 63 +399000.0 True 3 5 Grunwald 98 +429000.0 True 3 3 Centrum 102 +451000.0 True 3 2 Wilda 30 +565000.0 True 4 0 Sołacz 90 +285000.0 True 3 2 Antoninek 61 +350000.0 True 2 1 Rataje 54 +299000.0 True 2 5 Centrum 50 +269000.0 True 2 9 Rataje 49 +249000.0 True 2 2 Grunwald 46 +285000.0 True 3 2 Antoninek 10 +250000.0 True 2 4 Wilda 54 +269000.0 True 3 1 Wilda 68 +350000.0 True 4 4 Piątkowo 76 +360000.0 True 3 1 Grunwald 49 +260000.0 True 2 0 Rataje 46 +350000.0 True 2 4 Jeżyce 56 +263000.0 True 2 1 Rataje 44 +285000.0 True 2 2 Centrum 52 +285000.0 True 2 2 Łazarz 52 +429000.0 True 4 2 Grunwald 92 +211190.0 False 2 0 Podolany 78 +219000.0 True 2 3 Wilda 40 +820000.0 True 4 1 Grunwald 133 +299000.0 True 2 1 Centrum 11 +288000.0 True 2 4 Naramowice 44 +820000.0 True 4 1 Grunwald 133 +470000.0 True 4 2 Sołacz 87 +364000.0 True 3 4 Nowe 90 +706655.0 False 3 2 Nowe 45 +425000.0 True 3 1 Rataje 70 +248000.0 True 2 2 Winogrady 80 +260000.0 True 3 10 Śródka 48 +289000.0 True 2 0 Grunwald 80 +389000.0 True 3 4 Nowe 84 +253000.0 True 2 0 Łazarz 10 +449000.0 False 5 0 Szczepankowo 68 +225288.0 False 2 1 Rataje 91 +389528.0 False 2 2 Stare 87 +481903.0 False 3 2 Stare 53 +349000.0 False 4 0 Szczepankowo 29 +534523.0 False 3 2 Stare 62 +465538.0 False 3 1 Stare 78 +263000.0 True 2 0 Wilda 75 +370000.0 True 4 4 Piątkowo 76 +305000.0 True 3 3 Winogrady 60 +180000.0 True 3 2 Wilda 35 +189000.0 True 2 4 Wilda 35 +357692.0 False 3 2 Starołęka 31 +282994.0 False 2 0 Starołęka 59 +211190.0 False 2 0 Piątkowo 78 +349000.0 False 4 0 Szczepankowo 29 +277823.0 False 2 2 Podolany 70 +424377.0 False 4 2 Starołęka 14 +282944.0 False 2 0 Starołęka 59 +282944.0 False 2 0 Starołęka 59 +245000.0 True 2 7 Rataje 44 +570000.0 True 4 0 Jeżyce 90 +720000.0 True 4 7 Jeżyce 90 +237000.0 True 2 2 Dębiec 44 +329000.0 True 3 3 Piątkowo 60 +270000.0 True 3 3 Stare 47 +487000.0 True 3 0 Naramowice 83 +271000.0 True 2 3 Stare 37 +372000.0 False 4 1 Grunwald 87 +487000.0 True 3 0 Stare 11 +326000.0 True 2 1 Sołacz 39 +270000.0 True 2 10 Śródka 48 +349000.0 True 3 3 Rataje 63 +285000.0 True 2 2 Grunwald 52 +262500.0 True 4 0 Wilda 75 +350000.0 True 2 1 Rataje 80 +199000.0 True 2 3 Grunwald 35 +349000.0 False 4 0 Szczepankowo 29 +250000.0 True 2 3 Wilda 10 +234000.0 True 2 7 Wilda 46 +210000.0 True 2 1 Wilda 65 +249000.0 True 2 10 Grunwald 43 +469000.0 True 2 1 Winogrady 30 +235000.0 True 2 0 Nowe 10 +265000.0 True 2 0 Centrum 40 +329000.0 True 3 13 Rataje 65 +265000.0 True 2 2 Piątkowo 70 +350000.0 True 3 0 Stare 10 +307000.0 True 2 4 Stare 49 +315000.0 True 3 0 Stare 63 +350000.0 True 3 0 Rataje 63 +690000.0 True 2 1 Stare 20 +423000.0 True 2 2 Wilda 49 +250000.0 True 2 6 Grunwald 31 +292000.0 True 3 2 Winogrady 47 +249000.0 True 2 10 Grunwald 42 +350000.0 True 2 3 Rataje 52 +780000.0 True 3 0 Grunwald 87 +1000000.0 True 15 5 Wilda 50 +535000.0 True 2 2 Centrum 55 +285200.0 True 2 0 Stare 46 +434201.0 True 4 1 Nowe 54 +344152.0 True 3 0 Nowe 80 +396000.0 True 3 1 Wilda 50 +240000.0 True 2 16 Rataje 36 +390000.0 True 3 4 Piątkowo 74 +288000.0 True 2 4 Naramowice 22 +518000.0 True 4 0 Wilda 41 +320000.0 True 4 3 Stare 40 +449000.0 True 5 3 Wilda 97 +249000.0 True 2 10 Grunwald 42 +289000.0 True 3 4 Winogrady 48 +289000.0 True 2 7 Jeżyce 80 +330715.0 True 2 2 Wilda 13 +97000.0 True 2 4 Wilda 80 +285000.0 True 2 2 Łazarz 20 +389000.0 True 3 4 Piątkowo 69 +249000.0 True 2 4 Rataje 44 +409000.0 True 3 1 Rataje 62 +240000.0 True 2 2 Dębiec 48 +289000.0 True 3 4 Stare 47 +270000.0 True 3 10 Grunwald 52 +389000.0 True 3 4 Piątkowo 69 +179000.0 True 2 0 Grunwald 34 +364000.0 False 3 6 Grunwald 64 +410000.0 True 2 4 Jeżyce 43 +590000.0 True 3 3 Jeżyce 30 +325000.0 True 3 2 Jeżyce 64 +398000.0 True 3 3 Łazarz 96 +255000.0 True 2 2 Wilda 72 +329000.0 True 2 1 Naramowice 40 +290000.0 True 2 6 Winiary 49 +319875.0 False 2 8 Grunwald 18 +356251.9 False 3 13 Grunwald 20 +319875.0 False 2 7 Grunwald 18 +350557.33 False 2 13 Grunwald 58 +338325.0 False 2 13 Grunwald 5 +329763.26 False 2 9 Grunwald 94 +324400.97 False 2 7 Grunwald 94 +388352.0 False 3 7 Grunwald 60 +347633.0 False 3 10 Grunwald 20 +409713.0 False 3 11 Grunwald 62 +330368.0 False 2 12 Grunwald 62 +347839.75 False 2 12 Grunwald 58 +347193.22 False 3 11 Grunwald 7 +350506.16 False 3 11 Grunwald 20 +342405.13 False 2 11 Grunwald 58 +319875.0 False 2 9 Grunwald 18 +341703.96 False 3 8 Grunwald 21 +336969.98 False 2 10 Grunwald 58 +413044.0 False 3 12 Grunwald 62 +341703.96 False 3 9 Grunwald 21 +325206.0 False 2 10 Grunwald 62 +338111.0 False 2 15 Grunwald 62 +424977.14 False 4 5 Grunwald 20 +327787.0 False 2 11 Grunwald 62 +353378.74 False 3 12 Grunwald 20 +332949.0 False 2 13 Grunwald 62 +383760.0 False 3 6 Grunwald 60 +335530.0 False 2 14 Grunwald 62 +387040.0 False 3 5 Grunwald 60 +302985.6 False 2 4 Grunwald 18 +421375.5 False 4 4 Grunwald 20 +410780.0 False 3 3 Grunwald 44 +417773.83 False 4 3 Grunwald 20 +303286.5 False 2 3 Grunwald 13 +302038.4 False 2 3 Grunwald 2 +319055.27 False 3 3 Grunwald 21 +414352.0 False 3 4 Grunwald 44 +417807.03 False 4 4 Grunwald 7 +414172.54 False 4 2 Grunwald 20 +352390.0 False 2 12 Grunwald 80 +377200.0 False 3 3 Grunwald 60 +314089.0 False 2 5 Grunwald 49 +339072.0 False 2 9 Grunwald 98 +321812.5 False 2 8 Grunwald 49 +500203.02 False 4 10 Grunwald 73 +355080.0 False 2 13 Grunwald 80 +325184.0 False 2 11 Grunwald 81 +297420.8 False 2 3 Grunwald 24 +506566.5 False 4 11 Grunwald 73 +335722.5 False 2 12 Grunwald 5 +349700.0 False 2 11 Grunwald 80 +330517.5 False 2 10 Grunwald 5 +495722.51 False 4 9 Grunwald 99 +426416.8 False 4 6 Grunwald 20 +327081.85 False 2 8 Grunwald 94 +307080.0 False 2 5 Grunwald 18 +305793.0 False 2 4 Grunwald 13 +380480.0 False 3 4 Grunwald 60 +312198.0 False 2 6 Grunwald 18 +410665.2 False 4 2 Grunwald 7 +333231.99 False 3 7 Grunwald 21 +514939.5 False 4 13 Grunwald 73 +317880.0 False 2 2 Grunwald 98 +510753.0 False 4 12 Grunwald 73 +333120.0 False 2 11 Grunwald 5 +324387.0 False 2 9 Grunwald 49 +311514.5 False 2 4 Grunwald 49 +495722.51 False 4 8 Grunwald 99 +331125.0 False 2 5 Grunwald 98 +495782.26 False 4 7 Grunwald 99 +328476.0 False 2 4 Grunwald 98 +316848.0 False 2 6 Grunwald 52 +442803.77 False 4 5 Grunwald 7 +315819.0 False 2 5 Grunwald 13 +293436.18 False 2 1 Grunwald 15 +435784.0 False 3 5 Grunwald 44 +414235.76 False 4 3 Grunwald 7 +407208.0 False 3 2 Grunwald 44 +579000.0 True 4 3 Naramowice 97 +410000.0 True 2 5 Rataje 53 +199000.0 True 2 4 Grunwald 20 +375000.0 True 2 3 Grunwald 51 +350000.0 True 3 0 Naramowice 59 +289000.0 True 3 4 Winogrady 47 +240000.0 True 2 16 Rataje 36 +350000.0 True 3 1 Naramowice 51 +238000.0 True 3 2 Warszawskie 48 +277823.0 False 2 2 Podolany 70 +372000.0 True 4 1 Nadolnik 125 +410000.0 True 2 5 Rataje 53 +249000.0 True 2 4 Rataje 44 +420000.0 True 2 1 Naramowice 50 +420000.0 True 2 3 Naramowice 50 +339000.0 True 2 2 Stare 53 +298000.0 True 3 1 Nowe 30 +250000.0 True 3 0 Stare 45 +475000.0 True 4 4 Naramowice 50 +329000.0 True 3 1 Jeżyce 112 +439000.0 True 3 3 Grunwald 10 +250000.0 True 2 6 Winogrady 42 +259000.0 True 3 1 Grunwald 48 +375000.0 True 2 7 Piątkowo 90 +295000.0 True 2 7 Stare 10 +370000.0 True 4 4 Piątkowo 60 +325000.0 True 3 3 Łazarz 62 +375000.0 True 3 1 Nowe 63 +390000.0 True 4 4 Piątkowo 74 +288000.0 True 3 4 Stare 30 +468000.0 True 2 3 Grunwald 60 +250000.0 True 2 6 Winogrady 42 +350000.0 True 2 2 Jeżyce 46 +292000.0 True 3 2 Winogrady 30 +310000.0 True 2 1 Nowe 40 +289000.0 True 3 4 Winogrady 47 +405900.0 True 3 2 Stare 82 +149000.0 True 3 5 Nowe 56 +326000.0 True 2 1 Sołacz 39 +350000.0 True 2 2 Jeżyce 47 +224343.0 False 2 4 Starołęka 35 +362220.0 False 3 3 Starołęka 60 +287394.0 False 2 2 Starołęka 50 +320739.0 False 3 1 Starołęka 56 +177000.0 True 2 2 Dębiec 25 +313000.0 True 2 1 Górczyn 48 +313000.0 True 2 1 Dębiec 48 +429000.0 True 3 4 Rataje 79 +643720.0 True 4 0 Stare 60 +325000.0 True 2 3 Stare 60 +319000.0 True 2 0 Grunwald 20 +364000.0 True 3 1 Nowe 67 +285000.0 True 2 2 Łazarz 52 +339000.0 True 2 2 Centrum 53 +279000.0 True 2 0 Naramowice 43 +350000.0 True 2 4 Jeżyce 53 +419000.0 True 3 1 Piątkowo 74 +195000.0 True 2 3 Zawady 35 +390000.0 True 2 0 Centrum 60 +177000.0 True 2 2 Dębiec 70 +279000.0 True 2 1 Stare 60 +489000.0 True 4 2 Wilda 120 +299000.0 True 2 1 Jeżyce 32 +205000.0 True 2 4 Wilda 27 +362000.0 True 2 1 Centrum 50 +285000.0 True 2 2 Łazarz 52 +998000.0 True 6 2 Stare 161 +259000.0 True 3 2 Grunwald 45 +439000.0 True 2 3 Rataje 53 +550000.0 True 4 1 Górczyn 90 +310000.0 True 3 10 Nowe 40 +355000.0 True 3 2 Stare 64 +252000.0 True 2 9 Grunwald 50 +659000.0 True 3 2 Nowe 60 +307000.0 True 2 4 Piątkowo 49 +347900.0 True 3 3 Nowe 10 +229000.0 True 2 3 Stare 56 +569000.0 True 4 0 Wilda 50 +136000.0 True 2 1 Nowe 43 +102500.0 True 2 3 Nowe 80 +485000.0 True 4 2 Grunwald 89 +360000.0 True 3 3 Nowe 63 +339000.0 True 3 3 Stare 90 +285000.0 True 2 0 Łazarz 49 +299000.0 True 2 1 Centrum 52 +429999.0 True 3 3 Centrum 20 +429999.0 True 3 3 Centrum 20 +395000.0 True 3 3 Wilda 75 +307000.0 True 2 4 Piątkowo 49 +326000.0 True 2 4 Łazarz 80 +382280.0 True 3 3 Centrum 50 +233239.0 False 2 2 Podolany 87 +400608.0 False 3 2 Podolany 48 +422604.0 False 4 2 Podolany 24 +350064.0 False 3 2 Podolany 84 +349420.0 False 3 2 Podolany 73 +275008.0 False 2 2 Podolany 1 +255762.0 False 2 2 Podolany 72 +257400.0 False 2 2 Podolany 44 +307710.0 False 2 2 Podolany 60 +338188.0 False 3 2 Podolany 81 +258336.0 False 2 2 Podolany 16 +370948.0 False 4 2 Podolany 41 +358605.0 False 3 2 Podolany 30 +245934.0 False 2 2 Podolany 4 +233941.0 False 2 1 Podolany 99 +401544.0 False 3 1 Podolany 64 +424008.0 False 4 1 Podolany 48 +350181.0 False 3 1 Podolany 86 +349537.0 False 3 1 Podolany 75 +275710.0 False 2 1 Podolany 13 +256756.0 False 2 1 Podolany 89 +258102.0 False 2 1 Podolany 12 +255000.0 True 2 3 Jeżyce 38 +300222.0 False 2 1 Podolany 22 +308412.0 False 2 1 Podolany 72 +338305.0 False 3 1 Podolany 83 +259038.0 False 2 1 Podolany 28 +371884.0 False 4 1 Podolany 57 +359541.0 False 3 1 Podolany 46 +234636.0 False 2 1 Podolany 16 +234234.0 False 2 0 Podolany 4 +401719.0 False 3 0 Podolany 67 +423715.0 False 4 0 Podolany 43 +350181.0 False 3 0 Podolany 86 +249537.0 False 3 0 Podolany 75 +276061.0 False 2 0 Podolany 19 +257341.0 False 2 0 Podolany 99 +258453.0 False 2 0 Podolany 18 +220837.0 False 2 0 Podolany 75 +419000.0 True 2 7 Grunwald 20 +419000.0 True 3 4 Wilda 60 +379000.0 True 2 3 Winogrady 48 +315000.0 True 3 0 Piątkowo 60 +339000.0 True 3 1 Rataje 67 +270000.0 True 2 4 Grunwald 38 +268000.0 True 2 5 Rataje 42 +1500000.0 True 3 5 Centrum 68 +264000.0 True 3 4 Nowe 53 +432000.0 True 4 1 Grunwald 72 +449900.0 True 3 2 Stare 81 +295000.0 True 2 1 Nowe 39 +290000.0 True 2 6 Sołacz 49 +307000.0 True 2 4 Piątkowo 49 +285000.0 True 2 3 Piątkowo 49 +285000.0 True 2 3 Wilda 60 +519000.0 True 3 1 Rataje 50 +264000.0 True 3 4 Rataje 53 +318000.0 True 2 4 Piątkowo 49 +325000.0 True 3 3 Sołacz 40 +377685.0 False 2 4 Podolany 4 +377685.0 False 3 4 Podolany 67 +423715.0 False 4 0 Podolany 43 +350181.0 False 3 0 Podolany 86 +349537.0 False 3 0 Podolany 75 +276061.0 False 2 0 Podolany 19 +242990.0 False 2 0 Podolany 18 +283645.0 False 2 0 Podolany 39 +308763.0 False 2 0 Podolany 78 +338305.0 False 3 0 Podolany 83 +480000.0 True 2 2 Centrum 56 +499000.0 True 2 2 Nowe 36 +299000.0 True 2 16 Rataje 49 +355000.0 True 3 2 Stare 64 +210000.0 True 2 0 Grunwald 52 +277098.0 True 2 0 Nowe 59 +410000.0 True 3 1 Górczyn 82 +399000.0 True 3 2 Górczyn 91 +390000.0 True 3 1 Łazarz 75 +370000.0 True 2 0 Górczyn 65 +239000.0 True 2 3 Piątkowo 59 +185000.0 True 2 8 Wilda 38 +432000.0 True 3 0 Wilda 72 +360000.0 True 3 4 Rataje 69 +259330.0 False 2 0 Podolany 33 +372996.0 False 4 0 Podolany 76 +360000.0 True 3 2 Rataje 69 +370000.0 True 4 4 Piątkowo 76 +338579.0 False 3 0 Podolany 56 +231550.0 False 2 0 Podolany 10 +325000.0 True 2 1 Jeżyce 56 +355000.0 True 2 4 Jeżyce 56 +275000.0 True 2 1 Sołacz 50 +355000.0 True 3 2 Piątkowo 66 +224000.0 True 2 0 Górczyn 50 +499000.0 True 3 1 Grunwald 65 +1300000.0 True 2 3 Wilda 90 +399000.0 True 2 4 Grunwald 49 +349999.0 True 4 4 Stare 60 +390000.0 True 3 3 Stare 48 +325000.0 True 3 4 Jeżyce 30 +360000.0 True 3 2 Rataje 69 +389000.0 True 3 4 Stare 74 +450000.0 True 3 2 Naramowice 66 +660000.0 True 4 2 Winogrady 110 +313000.0 True 2 4 Jeżyce 50 +289000.0 True 2 6 Jeżyce 86 +279000.0 True 3 3 Rataje 54 +282000.0 True 2 1 Jeżyce 38 +282000.0 True 2 1 Strzeszyn 38 +225000.0 True 2 2 Grunwald 38 +339000.0 True 3 0 Jeżyce 24 +519000.0 True 3 1 Nowe 64 +189000.0 True 2 2 Grunwald 35 +275000.0 True 3 2 Grunwald 60 +1550000.0 True 6 1 Grunwald 170 +290000.0 True 2 6 Jeżyce 49 +185000.0 True 2 8 Dębiec 80 +270000.0 True 2 4 Grunwald 38 +349000.0 True 3 0 Grunwald 60 +349000.0 True 3 0 Grunwald 60 +360000.0 True 3 2 Nowe 69 +575000.0 True 4 4 Jeżyce 94 +360000.0 True 2 1 Centrum 50 +327000.0 True 4 3 Dębiec 75 +499000.0 True 2 2 Stare 43 +379000.0 True 3 0 Rataje 56 +379000.0 True 3 3 Jeżyce 55 +359000.0 True 2 3 Rataje 48 +205000.0 True 2 2 Starołęka 40 +280000.0 True 2 1 Stare 30 +359000.0 True 3 2 Piątkowo 50 +465374.0 False 3 2 Stare 62 +250000.0 True 2 6 Sołacz 42 +237000.0 True 2 10 Grunwald 38 +365000.0 True 2 1 Centrum 50 +449000.0 True 3 1 Naramowice 89 +329000.0 True 3 7 Rataje 80 +390000.0 True 3 3 Piątkowo 48 +275000.0 True 2 2 Piątkowo 58 +365000.0 True 3 1 Stare 64 +280000.0 True 3 9 Jeżyce 48 +425000.0 True 3 0 Piątkowo 50 +1500000.0 True 3 0 Grunwald 100 +310000.0 True 2 2 Centrum 73 +235000.0 True 2 3 Grunwald 38 +286000.0 True 2 4 Centrum 49 +350000.0 True 2 4 Jeżyce 56 +225000.0 True 2 0 Górczyn 50 +360000.0 True 4 0 Piątkowo 60 +409000.0 True 3 1 Malta 90 +313000.0 True 2 4 Piątkowo 49 +259000.0 True 2 5 Grunwald 45 +279000.0 True 2 5 Centrum 42 +314900.0 True 2 2 Naramowice 41 +635000.0 True 4 3 Grunwald 70 +300000.0 True 3 1 Rataje 80 +390000.0 True 4 1 Jeżyce 70 +615000.0 True 4 1 Jeżyce 130 +525000.0 True 4 3 Jeżyce 70 +199000.0 True 2 6 Grunwald 20 +299000.0 True 3 2 Grunwald 49 +300000.0 True 3 2 Grunwald 49 +259000.0 True 2 3 Rataje 49 +375000.0 True 3 1 Rataje 62 +365000.0 True 4 1 Wilda 79 +248000.0 True 2 14 Rataje 49 +340000.0 True 2 0 Junikowo 62 +280000.0 True 3 1 Jeżyce 58 +475000.0 True 4 0 Górczyn 102 +379000.0 True 3 0 Wilda 67 +399000.0 True 4 0 Nowe 69 +404000.0 True 4 0 Nowe 69 +339000.0 True 3 13 Nowe 65 +369000.0 True 2 3 Stare 49 +370000.0 True 2 4 Rataje 80 +382280.0 True 3 3 Stare 30 +259000.0 True 2 3 Żegrze 49 +329000.0 True 3 7 Rataje 66 +410000.0 True 5 0 Łazarz 111 +295000.0 True 2 4 Wilda 35 +349000.0 True 2 2 Stare 33 +239000.0 True 2 3 Rataje 53 +275000.0 True 2 13 Rataje 49 +495000.0 True 4 1 Naramowice 98 +239000.0 True 2 0 Naramowice 80 +384000.0 True 4 0 Grunwald 93 +289000.0 True 2 2 Zawady 48 +210000.0 True 2 3 Grunwald 38 +329000.0 True 2 3 Rataje 50 +439000.0 True 4 2 Grunwald 92 +235000.0 True 2 3 Grunwald 50 +398000.0 True 2 1 Grunwald 32 +150000.0 True 2 2 Nowe 50 +650000.0 True 3 2 Centrum 101 +191000.0 True 2 0 Górczyn 42 +238000.0 True 2 8 Jeżyce 37 +550000.0 True 3 1 Grunwald 73 +210000.0 True 2 0 Grunwald 65 +308000.0 True 3 0 Jeżyce 70 +620000.0 True 4 1 Smochowice 82 +565000.0 True 4 0 Sołacz 90 +259000.0 True 2 5 Górczyn 45 +259000.0 True 2 4 Grunwald 50 +395000.0 True 4 1 Wilda 80 +300000.0 True 2 1 Centrum 8 +245000.0 True 2 2 Centrum 8 +250000.0 True 2 4 Nowe 23 +399000.0 False 5 0 Szczepankowo 77 +399000.0 False 5 0 Szczepankowo 77 +399000.0 False 5 0 Szczepankowo 77 +402000.0 False 5 0 Szczepankowo 77 +402000.0 False 5 0 Szczepankowo 77 +402000.0 False 5 0 Szczepankowo 77 +402000.0 False 5 0 Szczepankowo 77 +375000.0 True 3 4 Winogrady 65 +248000.0 True 2 14 Rataje 49 +1017445.0 False 6 8 Nowe 53 +316357.0 False 2 7 Nowe 82 +316547.0 False 2 5 Nowe 85 +316674.0 False 2 1 Nowe 87 +356933.0 False 3 1 Nowe 21 +317944.0 False 2 7 Nowe 7 +318198.0 False 2 4 Nowe 11 +318452.0 False 2 3 Nowe 15 +318452.0 False 2 2 Nowe 15 +318071.0 False 2 1 Nowe 9 +350583.0 False 3 1 Nowe 21 +603948.0 False 4 5 Nowe 11 +606171.0 False 4 3 Nowe 46 +606171.0 False 4 2 Nowe 46 +324800.0 False 2 3 Nowe 56 +324800.0 False 2 1 Nowe 56 +460184.0 False 4 7 Nowe 47 +460248.0 False 4 6 Nowe 48 +484314.0 False 4 4 Nowe 27 +484505.0 False 4 3 Nowe 30 +484505.0 False 4 2 Nowe 30 +483616.0 False 4 1 Nowe 16 +424370.0 False 4 3 Nowe 83 +424370.0 False 4 2 Nowe 83 +549211.0 False 4 1 Nowe 49 +359000.0 True 2 4 Grunwald 40 +439000.0 True 4 2 Łazarz 92 +402000.0 False 5 0 Szczepankowo 77 +327000.0 True 3 3 Stare 64 +349000.0 True 4 2 Rataje 20 +380000.0 True 3 4 Nowe 100 +300000.0 True 2 2 Winogrady 58 +339000.0 True 3 3 Stare 37 +664443.3 False 2 2 Stare 57 +308000.0 True 3 4 Rataje 70 +240000.0 True 2 6 Grunwald 42 +270000.0 True 3 0 Grunwald 48 +320000.0 True 3 8 Rataje 78 +319000.0 True 2 2 Jeżyce 55 +335400.0 True 2 1 Łazarz 52 +250000.0 True 3 3 Nowe 53 +355000.0 True 4 0 Stare 88 +360000.0 True 4 0 Grunwald 66 +495000.0 True 3 0 Centrum 63 +268900.0 True 3 10 Grunwald 56 +379000.0 True 2 3 Stare 16 +287000.0 True 2 10 Winogrady 80 +250000.0 True 2 4 Rataje 44 +279000.0 True 4 3 Rataje 62 +265000.0 True 3 0 Rataje 48 +225000.0 True 2 0 Grunwald 50 +290000.0 True 3 8 Osiedle 70 +228000.0 True 4 4 Swarzędz 64 +330000.0 True 4 0 Grunwald 50 +495000.0 True 3 1 Grunwald 64 +307000.0 True 2 4 Piątkowo 50 +225000.0 True 2 7 Ogrody 53 +340000.0 True 2 2 Naramowice 16 +245000.0 True 2 9 Rataje 38 +439000.0 True 3 3 Piątkowo 77 +499000.0 True 4 4 Stare 85 +249000.0 True 3 4 Rataje 53 +410000.0 True 5 0 Łazarz 8 +379000.0 True 2 5 Grunwald 50 +300000.0 True 3 1 Grunwald 48 +1780000.0 True 4 0 Stare 86 +459000.0 True 3 1 Grunwald 81 +450000.0 True 3 2 Stare 67 +1040000.0 True 2 10 Centrum 79 +320000.0 True 2 1 Naramowice 23 +430000.0 True 3 3 Łazarz 96 +380000.0 True 2 6 Dębiec 55 +240000.0 True 2 11 Rataje 42 +275000.0 True 2 2 Naramowice 60 +265000.0 True 2 1 Wilda 60 +515000.0 True 4 2 Jeżyce 87 +420000.0 True 4 3 Grunwald 50 +349000.0 True 2 3 Jeżyce 50 +253000.0 True 2 9 Stare 38 +259500.0 True 2 0 Łazarz 90 +460000.0 True 3 1 Antoninek 8 +379000.0 True 3 0 Rataje 57 +379000.0 True 3 0 Rataje 57 +480000.0 True 4 1 Grunwald 64 +325000.0 True 3 0 Stare 78 +379000.0 True 3 0 Nowe 56 +365000.0 True 2 1 Centrum 50 +349000.0 True 2 3 Centrum 56 +399000.0 True 2 1 Rataje 54 +420000.0 True 3 1 Jeżyce 38 +569000.0 True 4 0 Wilda 118 +302000.0 True 2 3 Winogrady 49 +460000.0 True 3 0 Grunwald 65 +450000.0 True 3 1 Grunwald 84 +269000.0 True 2 4 Rataje 40 +945000.0 True 6 2 Stare 126 +900000.0 True 6 1 Stare 120 +1845000.0 True 12 1 Stare 246 +360000.0 True 3 2 Grunwald 58 +473120.0 True 2 2 Grunwald 14 +458175.0 True 3 0 Grunwald 9 +538229.0 True 3 3 Grunwald 12 +439000.0 True 3 3 Piątkowo 70 +365000.0 True 3 2 Rataje 65 +640174.0 True 3 0 Grunwald 7 +289000.0 True 3 3 Rataje 48 +442612.0 True 2 4 Grunwald 11 +321845.0 False 3 1 Grunwald 55 +349000.0 True 3 5 Rataje 78 +439000.0 True 4 2 Grunwald 92 +395000.0 True 4 4 Stare 84 +390000.0 False 2 2 Grunwald 53 +320000.0 True 3 0 Rataje 56 +480000.0 True 2 1 Stare 44 +315000.0 True 3 1 Nowe 62 +379000.0 True 3 1 Piątkowo 78 +249000.0 True 2 4 Rataje 44 +419000.0 True 3 2 Piątkowo 20 +375000.0 True 3 4 Winogrady 65 +320000.0 True 3 6 Rataje 56 +527150.0 True 4 3 Winogrady 10 +444600.0 True 3 2 Winogrady 40 +360000.0 True 2 1 Centrum 50 +210000.0 True 2 0 Dębiec 37 +747000.0 True 3 7 Nowe 83 +760000.0 True 4 1 Stare 96 +354000.0 True 4 0 Jeżyce 71 +354000.0 True 4 0 Jeżyce 71 +595000.0 True 7 1 Jeżyce 136 +369000.0 True 3 3 Centrum 63 +279000.0 True 2 1 Naramowice 51 +379000.0 True 3 0 Rataje 57 +358000.0 True 3 2 Nowe 90 +350000.0 True 3 1 Starołęka 15 +529000.0 True 4 2 Centrum 107 +840000.0 True 4 0 Centrum 100 +311500.0 True 2 1 Wilda 89 +280000.0 True 2 5 Naramowice 41 +243656.0 True 2 1 Jeżyce 64 +259000.0 True 2 0 Grunwald 40 +260127.0 True 2 1 Ogrody 41 +210000.0 True 2 0 Dębiec 37 +417231.0 True 2 2 Stare 50 +290000.0 True 20 2 Stare 80 +209000.0 True 2 10 Rataje 38 +353000.0 True 3 2 Grunwald 52 +406100.0 True 3 2 Grunwald 61 +389000.0 True 4 0 Nowe 75 +295850.0 True 3 2 Ostrów 33 +295660.0 True 2 1 Ostrów 87 +241940.0 True 2 1 Jeżyce 51 +480000.0 True 4 4 Wilda 80 +449000.0 True 3 2 Wilda 104 +1850000.0 True 7 1 Sołacz 206 +394000.0 False 4 1 Nowe 69 +469000.0 True 3 2 Grunwald 40 +280000.0 True 3 9 Jeżyce 48 +325000.0 True 2 1 Jeżyce 56 +425000.0 True 4 6 Nowe 85 +510000.0 True 3 3 Grunwald 70 +220000.0 True 2 0 Grunwald 50 +319000.0 True 2 3 Podolany 40 +315000.0 True 3 3 Rataje 56 +234400.0 True 2 0 Górczyn 50 +235000.0 True 2 4 Winogrady 68 +229000.0 True 2 8 Winogrady 62 +820000.0 True 4 0 Jeżyce 41 +239000.0 True 2 5 Winogrady 68 +450000.0 True 3 2 Naramowice 67 +310000.0 True 2 2 Centrum 73 +239900.0 True 2 4 Rataje 38 +364520.0 False 3 1 Jeżyce 8 +285285.0 False 3 3 Jeżyce 89 +439000.0 True 3 0 Szczepankowo 77 +224000.0 True 2 0 Łazarzm 50 +820000.0 True 4 3 Centrum 59 +255200.0 True 2 0 Jeżyce 13 +253000.0 True 2 2 Jeżyce 2 +246000.0 True 2 1 Jeżyce 12 +235000.0 True 2 4 Rataje 38 +365000.0 True 4 1 Nowe 54 +299000.0 True 2 2 Grunwald 35 +319000.0 True 2 4 Łazarz 46 +263000.0 True 2 2 Dębiec 48 +1555200.0 True 4 2 Jeżyce 144 +265000.0 True 2 2 Rataje 38 +279000.0 True 2 1 Stare 60 +655000.0 True 3 4 Stare 60 +307000.0 True 2 4 Piątkowo 20 +569000.0 True 4 0 Wilda 40 +310000.0 True 3 1 Piątkowo 60 +430000.0 True 2 3 Grunwald 70 +259000.0 True 2 2 Stare 49 +487000.0 True 3 0 Naramowice 83 +298500.0 True 2 1 Jeżyce 28 +420000.0 True 5 0 Łazarz 8 +680000.0 True 3 0 Stare 89 +669000.0 True 2 0 Łazarz 70 +359000.0 True 2 2 Jeżyce 50 +299900.0 True 2 2 Jeżyce 60 +760000.0 True 5 1 Centrum 73 +604836.0 True 4 6 Grunwald 40 +263400.0 True 2 0 Grunwald 90 +340166.0 True 3 0 Grunwald 10 +480000.0 True 3 0 Rataje 69 +320000.0 True 2 3 Stare 55 +420000.0 True 3 3 Łazarz 95 +690000.0 True 5 1 Stare 100 +568000.0 True 4 0 Centrum 114 +520000.0 True 4 1 Nowe 91 +299000.0 True 2 2 Jeżyce 61 +680000.0 True 3 0 Stare 89 +290000.0 True 2 5 Winogrady 80 +177000.0 True 2 2 Wilda 34 +360000.0 True 3 4 Nowe 63 +820000.0 True 5 1 Winogrady 128 +339000.0 True 3 3 Jeżyce 80 +439000.0 True 3 3 Stare 70 +335000.0 True 3 9 Rataje 66 +599000.0 True 3 3 Górczyn 60 +720000.0 True 4 2 Grunwald 144 +263000.0 True 3 3 Grunwald 48 +270000.0 True 2 0 Jeżyce 20 +339000.0 True 3 4 Winogrady 90 +250000.0 True 2 6 Rataje 23 +340000.0 True 2 2 Garbary 48 +250000.0 True 2 1 Winogrady 38 +487000.0 True 3 0 Stare 83 +268001.0 True 2 2 Sołacz 60 +729000.0 True 4 1 Sołacz 10 +533000.0 True 3 9 Rataje 72 +325000.0 True 3 0 Wola 65 +320000.0 True 3 1 Grunwald 74 +549000.0 True 3 3 Grunwald 60 +345000.0 True 3 1 Rataje 78 +239000.0 True 3 2 Wilda 40 +425000.0 True 4 6 Rataje 90 +332339.0 False 2 5 Dolna 67 +308481.0 False 2 5 Dolna 74 +315537.0 False 2 5 Dolna 45 +319927.0 False 2 5 Dolna 49 +491139.0 False 4 5 Dolna 50 +1500000.0 True 3 5 Stare 68 +292981.0 False 2 5 Dolna 2 +309465.0 False 2 5 Dolna 56 +309838.0 False 2 5 Dolna 39 +457004.0 False 4 5 Dolna 25 +498921.0 False 4 5 Dolna 65 +296180.0 False 2 5 Dolna 47 +300204.0 False 2 5 Dolna 70 +309246.0 False 2 5 Dolna 99 +484168.0 False 3 5 Dolna 8 +306666.0 False 2 4 Dolna 45 +310923.0 False 2 4 Dolna 49 +284921.0 False 2 4 Dolna 2 +300495.0 False 2 4 Dolna 56 +301128.0 False 2 4 Dolna 39 +444872.0 False 4 4 Dolna 25 +484149.0 False 4 4 Dolna 65 +288032.0 False 2 4 Dolna 47 +291765.0 False 2 4 Dolna 70 +412908.0 False 3 4 Dolna 78 +431187.0 False 3 4 Dolna 43 +304231.0 False 2 4 Dolna 99 +469840.0 False 3 4 Dolna 8 +866623.0 False 5 3 Dolna 26 +308005.0 False 2 3 Dolna 49 +472873.0 False 4 3 Dolna 50 +282503.0 False 2 3 Dolna 2 +298253.0 False 2 3 Dolna 56 +298306.0 False 2 3 Dolna 39 +439966.0 False 4 3 Dolna 25 +480336.0 False 4 3 Dolna 65 +285180.0 False 2 3 Dolna 47 +289032.0 False 2 3 Dolna 70 +405142.0 False 3 3 Dolna 78 +750062.0 False 4 6 Wilda 42 +555180.0 False 3 6 Wilda 44 +555180.0 False 3 6 Wilda 44 +855063.0 False 5 3 Dolna 59 +750013.0 False 4 6 Wilda 69 +333852.0 False 2 5 Wilda 70 +525525.0 False 3 5 Wilda 50 +241574.0 False 2 5 Wilda 56 +466175.0 False 3 3 Dolna 8 +670380.0 False 4 5 Wilda 85 +670380.0 False 4 5 Wilda 85 +350719.0 False 2 5 Wilda 11 +399772.0 False 3 5 Wilda 98 +399772.0 False 3 5 Wilda 98 +318202.0 False 2 4 Wilda 85 +316272.0 False 2 4 Wilda 92 +292691.0 False 2 4 Wilda 61 +295370.0 False 2 4 Wilda 43 +393624.0 False 3 4 Wilda 64 +393624.0 False 3 4 Wilda 64 +295370.0 False 2 4 Wilda 43 +295370.0 False 2 4 Wilda 43 +353048.0 False 2 4 Wilda 9 +247217.0 False 2 4 Wilda 99 +316866.0 False 2 3 Wilda 1 +314355.0 False 2 3 Wilda 92 +276293.0 False 2 3 Wilda 75 +278813.0 False 2 3 Wilda 14 +385453.0 False 3 3 Wilda 64 +385453.0 False 3 3 Wilda 64 +293783.0 False 2 3 Wilda 14 +293454.0 False 2 3 Wilda 14 +351450.0 False 2 3 Wilda 25 +245769.0 False 2 3 Wilda 13 +245769.0 False 2 3 Wilda 13 +310696.0 False 2 2 Wilda 17 +311019.0 False 2 2 Wilda 22 +285966.0 False 2 2 Wilda 88 +288567.0 False 2 2 Wilda 27 +399406.0 False 3 2 Wilda 89 +288567.0 False 2 2 Wilda 27 +288567.0 False 2 2 Wilda 27 +345075.0 False 2 2 Wilda 50 +217361.0 False 2 2 Wilda 91 +309586.0 False 2 1 Wilda 32 +310826.0 False 2 1 Wilda 34 +276016.0 False 2 1 Wilda 2 +278518.0 False 2 1 Wilda 41 +384128.0 False 3 1 Wilda 2 +384128.0 False 3 1 Wilda 2 +277824.0 False 2 1 Wilda 41 +277824.0 False 2 1 Wilda 41 +344376.0 False 2 1 Wilda 75 +242751.0 False 2 1 Wilda 40 +360000.0 True 3 2 Grunwald 60 +227012.0 False 2 1 Wilda 4 +456960.0 False 3 5 Jeżyce 20 +765451.0 False 5 5 Jeżyce 81 +473754.0 False 3 5 Jeżyce 66 +445900.0 False 3 5 Jeżyce 70 +310170.0 False 2 5 Jeżyce 31 +747600.0 False 5 5 Jeżyce 80 +558693.0 False 4 5 Jeżyce 97 +558486.0 False 4 5 Jeżyce 94 +497628.0 False 3 5 Jeżyce 12 +412297.0 False 2 5 Jeżyce 7 +392231.0 False 2 5 Jeżyce 26 +332253.0 False 3 5 Jeżyce 59 +310170.0 False 3 5 Jeżyce 31 +413236.0 False 3 5 Jeżyce 77 +459151.0 False 3 4 Jeżyce 53 +388600.0 False 3 4 Jeżyce 58 +357204.0 False 3 4 Jeżyce 53 +542365.0 False 4 4 Jeżyce 95 +406065.0 False 3 4 Jeżyce 85 +368628.0 False 3 4 Jeżyce 21 +362372.0 False 3 4 Jeżyce 29 +257250.0 False 2 4 Jeżyce 75 +542298.0 False 4 4 Jeżyce 94 +485013.0 False 3 4 Jeżyce 39 +413567.0 False 3 4 Jeżyce 14 +370260.0 False 3 4 Jeżyce 45 +325244.0 False 2 4 Jeżyce 83 +324921.0 False 2 4 Jeżyce 9 +454986.0 False 3 4 Jeżyce 94 +323004.0 False 2 4 Jeżyce 94 +297145.0 False 2 4 Jeżyce 35 +383977.0 False 3 4 Jeżyce 31 +382800.0 False 3 3 Jeżyce 58 +452298.0 False 3 3 Jeżyce 53 +400180.0 False 3 3 Jeżyce 85 +351951.0 False 3 3 Jeżyce 53 +363207.0 False 3 3 Jeżyce 21 +257250.0 False 2 3 Jeżyce 75 +534600.0 False 4 3 Jeżyce 81 +534270.0 False 4 3 Jeżyce 95 +357043.0 False 3 3 Jeżyce 29 +477774.0 False 3 3 Jeżyce 39 +410410.0 False 3 3 Jeżyce 14 +320461.0 False 2 3 Jeżyce 83 +364815.0 False 3 3 Jeżyce 45 +320280.0 False 2 3 Jeżyce 10 +448392.0 False 3 3 Jeżyce 94 +318110.0 False 2 3 Jeżyce 94 +292710.0 False 2 3 Jeżyce 35 +378246.0 False 2 3 Jeżyce 31 +448871.5 False 3 2 Jeżyce 53 +377000.0 False 3 2 Jeżyce 58 +394295.0 False 3 2 Jeżyce 85 +344071.5 False 3 2 Jeżyce 53 +253575.0 False 2 2 Jeżyce 75 +530222.5 False 4 2 Jeżyce 95 +357786.0 False 3 2 Jeżyce 21 +351648.0 False 3 2 Jeżyce 28 +530550.0 False 4 2 Jeżyce 81 +474154.5 False 3 2 Jeżyce 39 +407382.0 False 3 2 Jeżyce 16 +359370.0 False 3 2 Jeżyce 45 +320461.0 False 2 2 Jeżyce 83 +317925.0 False 2 2 Jeżyce 10 +211830.0 False 2 2 Jeżyce 70 +441798.0 False 3 2 Jeżyce 94 +318110.0 False 2 2 Jeżyce 94 +290427.0 False 2 2 Jeżyce 34 +377000.0 False 3 1 Jeżyce 58 +375380.5 False 3 2 Jeżyce 31 +444925.0 False 3 1 Jeżyce 45 +394295.0 False 3 1 Jeżyce 85 +346698.0 False 3 1 Jeżyce 53 +357786.0 False 3 1 Jeżyce 21 +249900.0 False 2 1 Jeżyce 75 +526500.0 False 4 1 Jeżyce 81 +526175.0 False 4 1 Jeżyce 95 +351714.0 False 3 1 Jeżyce 29 +470470.0 False 3 1 Jeżyce 38 +407253.0 False 3 1 Jeżyce 14 +320796.0 False 2 1 Jeżyce 88 +315637.0 False 2 1 Jeżyce 11 +435798.0 False 3 1 Jeżyce 3 +359238.0 False 3 1 Jeżyce 43 +288340.0 False 2 1 Jeżyce 36 +315727.5 False 2 1 Jeżyce 95 +372515.0 False 3 1 Jeżyce 31 +448413.0 False 3 0 Jeżyce 46 +418470.0 False 3 0 Jeżyce 38 +453960.0 False 3 0 Jeżyce 84 +444080.0 False 3 0 Jeżyce 32 +309487.5 False 2 0 Jeżyce 25 +423150.0 False 3 0 Jeżyce 10 +334230.0 False 2 0 Jeżyce 42 +453260.0 False 3 0 Jeżyce 20 +452121.0 False 3 2 Dolna 60 +296290.0 False 2 2 Dolna 57 +420388.0 False 3 2 Dolna 11 +321845.0 False 3 1 Grunwald 55 +286082.0 False 2 2 Dolna 20 +457458.0 False 4 2 Dolna 37 +293768.0 False 2 2 Dolna 56 +295485.0 False 2 2 Dolna 39 +436530.0 False 4 2 Dolna 25 +475052.0 False 4 2 Dolna 65 +282980.0 False 2 2 Dolna 47 +286299.0 False 2 2 Dolna 70 +840000.0 True 6 1 Winogrady 129 +442612.0 True 2 4 Grunwald 11 +324558.0 True 2 4 Grunwald 61 +620000.0 True 3 2 Grunwald 73 +265000.0 True 3 4 Łazarz 55 +393789.0 False 3 2 Dolna 78 +298381.0 False 2 2 Dolna 99 +461040.0 False 3 2 Dolna 8 +443502.0 False 3 1 Dolna 60 +485000.0 True 5 2 Łazarz 87 +215000.0 True 2 0 Wilda 36 +412342.0 False 3 1 Dolna 11 +298885.0 False 2 1 Dolna 96 +459470.0 False 4 1 Dolna 50 +289283.0 False 2 1 Dolna 56 +289842.0 False 2 1 Dolna 39 +431316.0 False 4 1 Dolna 25 +280833.0 False 2 1 Dolna 70 +381420.0 False 3 1 Dolna 78 +396421.0 False 3 1 Dolna 79 +483194.0 False 4 1 Dolna 71 +306880.0 False 2 1 Dolna 27 +374734.0 False 3 1 Dolna 43 +760000.0 True 4 1 Centrum 95 +292530.0 False 2 1 Dolna 99 +452976.0 False 3 1 Dolna 8 +446521.0 False 2 0 Dolna 60 +268373.0 False 2 0 Dolna 57 +260000.0 True 2 0 Naramowice 47 +266788.0 False 2 0 Dolna 21 +399355.0 False 3 0 Dolna 11 +290270.0 False 2 0 Dolna 96 +294964.0 False 2 0 Dolna 32 +463973.0 False 4 0 Dolna 50 +282449.0 False 2 0 Dolna 56 +283698.0 False 2 0 Dolna 39 +364073.0 False 3 0 Dolna 4 +376181.0 False 3 0 Dolna 7 +284140.0 False 2 0 Dolna 94 +290853.0 False 2 0 Dolna 80 +336456.0 False 3 0 Dolna 63 +530000.0 True 3 0 Grunwald 63 +135000.0 True 2 4 skiej 86 +799000.0 True 4 0 Grunwald 118 +329000.0 True 3 1 Jeżyce 112 +260000.0 True 2 0 Naramowice 47 +550000.0 True 3 1 Rataje 81 +443102.0 False 3 0 Dolna 80 +549000.0 True 3 2 Jeżyce 106 +499000.0 True 5 4 Jeżyce 93 +404000.0 True 3 2 Piątkowo 90 +387645.0 False 3 5 Grunwald 10 +294810.0 False 2 5 Grunwald 50 +229000.0 True 2 2 Jeżyce 34 +487000.0 True 3 0 Naramowice 83 +367211.0 False 3 4 Grunwald 10 +367211.0 False 3 4 Grunwald 10 +273497.0 False 2 4 Grunwald 90 +289695.0 False 2 4 Grunwald 50 +367211.0 False 3 3 Grunwald 10 +273497.0 False 2 3 Grunwald 90 +289695.0 False 2 3 Grunwald 50 +284711.0 False 2 3 Grunwald 70 +360600.0 False 3 3 Grunwald 10 +360600.0 False 3 2 Grunwald 10 +360000.0 True 3 4 Rataje 69 +273497.0 False 2 2 Grunwald 90 +289695.0 False 2 2 Grunwald 50 +284711.0 False 2 2 Grunwald 70 +353989.0 False 3 1 Grunwald 10 +284115.0 False 2 1 Grunwald 50 +279227.0 False 2 1 Grunwald 70 +346777.0 False 3 1 Grunwald 10 +279000.0 False 2 0 Grunwald 50 +340166.0 False 2 0 Grunwald 70 +340166.0 False 3 0 Grunwald 10 +279594.0 False 2 2 Grunwald 10 +289738.0 False 2 2 Grunwald 70 +346798.0 False 3 2 Grunwald 70 +235545.0 True 3 0 Plewiska 57 +274302.0 False 2 1 Grunwald 10 +284254.0 False 2 1 Grunwald 70 +420000.0 True 3 3 Grunwald 96 +340234.0 False 3 1 Grunwald 70 +269010.0 False 2 0 Grunwald 10 +279594.0 False 2 5 Grunwald 10 +340781.0 False 3 4 Grunwald 70 +284088.0 False 2 4 Grunwald 60 +274743.0 False 2 4 Grunwald 10 +340781.0 False 3 3 Grunwald 70 +284088.0 False 2 3 Grunwald 60 +274743.0 False 2 3 Grunwald 10 +340781.0 False 3 2 Grunwald 70 +284088.0 False 2 2 Grunwald 60 +274743.0 False 2 2 Grunwald 10 +328200.0 False 3 1 Grunwald 70 +273600.0 False 2 1 Grunwald 60 +264600.0 False 2 1 Grunwald 10 +334217.0 False 3 0 Grunwald 70 +800000.0 True 4 3 Stare 103 +317000.0 True 3 3 Naramowice 53 +392181.0 False 4 4 Stare 25 +275000.0 True 2 13 Rataje 49 +330000.0 True 3 2 Grunwald 60 +290000.0 True 4 3 Rataje 50 +215000.0 True 2 0 Wilda 36 +368520.0 True 2 2 Jeżyce 50 +275000.0 True 3 1 Grunwald 90 +439000.0 True 4 2 Łazarz 92 +370000.0 True 3 3 Wilda 78 +962376.0 False 4 5 Centrum 9 +369000.0 True 3 1 Piątkowo 90 +445000.0 True 3 1 Grunwald 69 +250000.0 True 2 10 Grunwald 42 +439000.0 True 4 2 Łazarz 92 +187000.0 True 2 3 Zawady 35 +265000.0 True 3 10 Grunwald 53 +389900.0 True 3 10 Winogrady 67 +387645.0 False 3 5 Grunwald 10 +294810.0 False 2 5 Grunwald 50 +367211.0 False 3 4 Grunwald 10 +289695.0 False 2 4 Grunwald 50 +295000.0 True 2 4 Naramowice 58 +330000.0 True 2 3 Wilda 53 +187000.0 True 2 2 Zawady 35 +273497.0 False 2 3 Grunwald 90 +289695.0 False 2 3 Grunwald 50 +284711.0 False 2 3 Grunwald 70 +367211.0 False 3 2 Grunwald 10 +273497.0 False 2 2 Grunwald 90 +289695.0 False 2 2 Grunwald 50 +284711.0 False 2 2 Grunwald 70 +360600.0 False 3 2 Grunwald 10 +263400.0 False 2 1 Grunwald 90 +279000.0 False 2 1 Grunwald 50 +274200.0 False 2 1 Grunwald 70 +263400.0 False 2 0 Grunwald 9 +279000.0 False 2 0 Grunwald 50 +1725000.0 True 3 0 Stare 136 +279594.0 False 2 2 Grunwald 10 +340234.0 False 3 2 Grunwald 70 +274302.0 False 2 1 Grunwald 10 +284254.0 False 2 1 Grunwald 70 +333670.0 False 3 1 Grunwald 70 +310000.0 True 3 1 Wilda 88 +475000.0 True 3 1 Stare 68 +335000.0 True 2 4 Centrum 45 +279594.0 False 2 2 Grunwald 10 +289738.0 False 2 2 Grunwald 70 +340234.0 False 3 2 Grunwald 70 +274302.0 False 2 1 Grunwald 10 +399000.0 True 2 2 Łazarz 51 +333670.0 False 3 1 Grunwald 70 +499000.0 True 3 1 Rataje 50 +269010.0 False 2 0 Grunwald 10 +230000.0 True 3 4 Centrum 52 +230000.0 True 2 4 Stare 52 +250000.0 True 2 4 Rataje 50 +289000.0 True 2 2 Ogrody 44 +215000.0 True 2 8 Rataje 42 +239000.0 True 2 2 Rataje 38 +293000.0 True 3 1 Wilda 79 +339000.0 True 3 1 Grunwald 54 +307000.0 True 2 4 Stare 48 +280000.0 True 3 4 Rataje 48 +595000.0 True 5 4 Wilda 54 +379000.0 True 3 1 Stare 90 +569000.0 True 2 2 Stare 20 +445000.0 True 2 1 Stare 80 +475000.0 True 3 0 Stare 66 +420000.0 True 3 1 Centrum 60 +259500.0 True 2 0 Grunwald 90 +259500.0 True 2 0 Grunwald 90 +230000.0 True 2 0 Centrum 46 +99000.0 True 2 2 Wilda 52 +329000.0 True 4 4 Rataje 72 +295000.0 True 3 2 Rataje 54 +225000.0 True 2 1 Rataje 42 +285000.0 True 2 3 Wilda 60 +1600000.0 True 3 2 Górczyn 79 +333000.0 True 3 4 Wilda 8 +1600000.0 True 3 2 Górczyn 79 +333000.0 True 3 4 Wilda 8 +2192000.0 True 4 1 Grunwald 21 +339000.0 True 3 4 Winogrady 90 +3233000.0 True 5 1 Grunwald 28 +489000.0 True 2 8 Centrum 39 +336000.0 True 2 3 Istnieje 48 +359000.0 True 3 1 Świerczewo 70 +239000.0 True 2 3 Winogrady 38 +240000.0 True 2 2 Dębiec 48 +439000.0 True 3 0 Jeżyce 75 +404000.0 True 2 2 Centrum 50 +361300.0 False 3 1 Grunwald 66 +385000.0 True 2 1 Centrum 50 +244000.0 False 2 3 Jeżyce 40 +215000.0 True 2 1 Jeżyce 70 +465000.0 True 3 0 Grunwald 60 +329000.0 True 2 0 Naramowice 51 +309000.0 True 3 1 Rataje 20 +420000.0 True 2 3 Stare 50 +480000.0 True 4 3 Centrum 94 +620000.0 True 4 3 Centrum 50 +342000.0 True 3 4 Winogrady 87 +326000.0 True 3 6 Winogrady 1 +330000.0 True 3 7 Piątkowo 40 +315000.0 True 3 0 Nowe 63 +360000.0 True 4 0 Grunwald 66 +360000.0 True 3 3 Nowe 65 +325000.0 True 2 2 Grunwald 47 +531000.0 True 2 1 Grunwald 59 +377000.0 True 3 1 Piątkowo 63 +640000.0 True 3 2 Centrum 80 +150000.0 True 2 2 Nowe 50 +640000.0 True 3 2 Stare 80 +499000.0 True 4 2 Naramowice 85 +250000.0 True 2 10 Grunwald 42 +250000.0 True 3 3 Rataje 53 +333200.0 True 3 4 Wilda 68 +385000.0 True 2 1 Jeżyce 46 +248000.0 True 2 10 Grunwald 42 +389999.0 True 3 4 Grunwald 82 +204999.0 True 2 7 Malta 30 +410000.0 True 5 0 Łazarz 114 +370000.0 True 3 4 Stare 84 +225000.0 True 2 4 Warszawskie 50 +349000.0 True 3 3 Wilda 20 +289000.0 True 3 1 Grunwald 45 +1330000.0 True 3 0 Malta 100 +235000.0 True 3 2 Starołęka 51 +549000.0 True 2 8 Centrum 39 +498000.0 True 4 4 Centrum 86 +525000.0 True 4 3 Nowe 88 +550000.0 True 3 5 Grunwald 73 +410000.0 True 5 0 Łazarz 114 +399000.0 True 3 4 Jeżyce 63 +289000.0 True 3 0 Nowe 10 +308039.0 True 2 0 Stare 52 +322497.0 True 2 6 Stare 51 +220000.0 True 2 1 Łazarz 35 +309000.0 True 3 14 Rataje 80 +293760.0 True 2 3 Winogrady 90 +392181.0 True 3 4 Stare 69 +307257.0 True 2 2 Stare 50 +263140.0 True 2 0 Stare 45 +281881.0 True 2 1 Stare 46 +399000.0 True 5 4 Centrum 10 +511000.0 True 4 1 Stare 104 +428400.0 True 3 0 Piątkowo 60 +260000.0 True 2 2 Jeżyce 10 +369000.0 True 3 1 Stare 90 +379000.0 True 3 1 Piątkowo. 78 +346320.0 True 2 3 Grunwald 40 +440700.0 True 3 3 Grunwald 50 +321285.0 False 2 4 Stare 30 +385000.0 True 3 0 Grunwald 80 +569000.0 True 4 0 Wilda 50 +296033.0 True 2 3 Stare 49 +295362.0 True 2 2 Stare 48 +295362.0 True 2 1 Stare 48 +420000.0 True 5 0 Łazarz 8 +273875.0 True 2 1 Grunwald 13 +450000.0 True 2 2 Jeżyce 41 +379000.0 True 3 1 Piątkowo 78 +270000.0 True 3 3 Rataje 48 +278460.0 True 2 0 Winogrady 10 +298980.0 True 2 5 Stare 30 +369000.0 True 3 1 Piątkowo 78 +450000.0 True 3 0 Winogrady 70 +219000.0 True 2 0 Wilda 36 +345000.0 True 3 5 Rataje 77 +371930.0 False 4 2 Jeżyce 20 +313566.0 False 3 3 Jeżyce 50 +365000.0 True 3 4 Rataje 63 +297000.0 True 2 7 Bonin 49 +350805.0 False 2 2 Rynek 97 +365000.0 True 4 3 Grunwald 68 +405000.0 True 4 2 Rataje 71 +259000.0 True 2 2 Nowe 40 +340000.0 True 3 0 Centrum 10 +275000.0 True 2 0 Dębiec 50 +435000.0 True 3 0 Stare 25 +750000.0 True 2 1 Stare 80 +570000.0 True 4 3 Grunwald 137 +290000.0 True 2 5 Winogrady 42 +360000.0 True 3 14 Rataje 80 +770000.0 True 4 1 Centrum 142 +285000.0 True 2 0 Łazarz 49 +263553.0 True 2 0 Winogrady 67 +475000.0 True 4 4 Wilda 84 +414566.0 False 3 1 Malta 1 +422000.0 False 3 1 Malta 66 +425402.0 False 3 0 Malta 75 +440224.0 False 3 4 Malta 8 +440224.0 False 3 4 Malta 8 +416214.0 False 3 2 Malta 75 +633832.0 False 4 4 Malta 73 +422670.0 False 3 3 Malta 75 +420174.0 False 3 2 Malta 75 +423922.0 False 3 1 Malta 75 +633344.0 False 4 4 Malta 65 +422372.0 False 3 2 Malta 74 +499000.0 True 3 1 Rataje 64 +410110.0 False 3 2 Malta 49 +424178.0 False 3 1 Malta 79 +229000.0 True 2 0 Rataje 38 +422322.0 False 3 1 Malta 73 +411628.0 False 3 0 Malta 68 +438016.0 False 3 4 Malta 10 +441084.0 False 3 4 Malta 10 +380931.0 True 3 3 Nowe 83 +365000.0 True 4 3 Grunwald 68 +365000.0 True 4 3 Grunwald 68 +350000.0 True 3 7 Piątkowo 63 +47475.0 True 2 11 Wilda 75 +289000.0 True 3 0 Winogrady 48 +520000.0 False 4 3 Grunwald 10 +520000.0 False 4 4 Grunwald 12 +520000.0 False 4 3 Grunwald 12 +520000.0 False 4 2 Grunwald 11 +475000.0 True 5 4 Grunwald 23 +281576.0 False 2 2 Stare 16 +380900.0 True 3 3 Nowe 67 +485000.0 True 5 2 Łazarz 88 +239000.0 True 2 4 Rataje 38 +250000.0 True 2 6 Nowe 45 +429000.0 True 4 2 Jeżyce 110 +370000.0 True 4 0 Wilda 80 +275000.0 True 3 4 Wilda 77 +850000.0 True 5 1 Grunwald 135 +265000.0 True 2 4 Rataje 38 +349000.0 True 3 2 Rataje 64 +229000.0 True 2 0 Grunwald 47 +320000.0 True 3 4 Rataje 60 +430000.0 True 3 2 Rataje 64 +389000.0 True 3 4 Rataje 80 +619000.0 True 4 0 Jeżyce 99 +329900.0 True 2 1 Naramowice 20 +430000.0 True 3 2 Rataje 64 +520000.0 True 4 1 Centrum 50 +369000.0 True 3 0 Stare 64 +505877.0 False 2 5 Centrum 22 +619000.0 True 5 1 Jeżyce 146 +389740.0 True 2 2 Łazarz 96 +434525.0 True 2 2 Łazarz 85 +552955.0 True 3 2 Łazarz 7 +350805.0 True 2 2 Łazarz 97 +279000.0 True 2 0 Piątkowo 10 +460135.0 True 3 0 Łazarz 79 +392790.0 True 3 5 Stare 30 +309000.0 True 4 4 Grunwald 70 +219000.0 True 2 2 Dębiec 30 +1345500.0 True 5 1 Grunwald 117 +690000.0 True 4 5 Grunwald 24 +886860.0 False 3 5 Centrum 80 +372000.0 False 4 0 Grunwald 49 +502136.0 False 2 5 Centrum 77 +342000.0 False 3 1 Grunwald 27 +372000.0 False 4 0 Grunwald 49 +342000.0 False 3 1 Grunwald 27 +473770.0 False 2 5 Centrum 7 +798966.0 False 2 5 Centrum 33 +561663.0 False 3 4 Centrum 69 +396248.0 False 2 4 Centrum 77 +278000.0 True 2 0 Piątkowo 45 +368019.0 False 2 4 Centrum 18 +369000.0 True 3 0 Stare 64 +380000.0 True 4 1 Piątkowo 75 +1345500.0 False 5 1 Grunwald 117 +365000.0 True 2 1 Centrum 50 +659000.0 True 4 1 Rataje 78 +344000.0 True 3 3 Nowe 65 +310000.0 True 2 4 Winogrady 45 +275000.0 True 2 0 Centrum 44 +328000.0 True 4 2 Grunwald 75 +382156.0 False 2 4 Centrum 21 +383676.0 False 2 4 Centrum 4 +387597.0 False 2 4 Centrum 49 +1555200.0 True 4 2 Jeżyce 144 +378128.0 False 2 3 Centrum 77 +649999.0 True 4 1 Stare 90 +584000.0 True 3 1 Centrum 89 +229000.0 True 2 0 Winogrady 38 +238900.0 True 2 0 Grunwald 47 +239000.0 True 2 0 Raszyn 47 +254000.0 True 2 1 Nowe 44 +469000.0 True 3 0 Naramowice 52 +215000.0 True 2 3 Centrum 38 +495000.0 True 3 1 Grunwald 37 +490000.0 True 4 2 Centrum 90 +268000.0 True 2 4 Winogrady 37 +262000.0 True 2 2 Rataje 50 +321845.0 False 3 1 Grunwald 55 +265000.0 True 2 0 Wilda 50 +329000.0 True 4 4 Nowe 20 +360000.0 True 3 3 Naramowice 63 +341776.0 False 2 2 Centrum 14 +356774.0 False 2 1 Centrum 10 +230000.0 True 2 0 Rataje 38 +270000.0 True 2 0 Dębiec 50 +330255.0 False 2 1 Centrum 14 +275000.0 True 2 0 Dębiec 50 +210000.0 True 2 0 Wilda 36 +291000.0 True 4 1 Wilda 70 +1465000.0 True 6 3 Łazarz 38 +579000.0 True 3 1 Łazarz 3 +401000.0 True 3 1 Łazarz 49 +626000.0 True 3 1 Łazarz 59 +558000.0 True 4 1 Wilda 93 +533000.0 True 2 2 Łazarz 19 +595000.0 True 2 2 Łazarz 70 +269000.0 True 2 6 Rataje 50 +520000.0 True 4 7 Nowe 98 +269000.0 True 2 6 Rataje 49 +750000.0 True 4 0 Naramowice 133 +370000.0 True 2 1 Nowe 53 +499000.0 True 3 1 Jeżyce 40 +545000.0 True 2 4 Centrum 49 +420000.0 True 3 3 Łazarz 47 +569000.0 True 4 0 Wilda 50 +370000.0 True 2 2 Naramowice 70 +345000.0 True 3 0 Nowe 60 +207000.0 True 2 1 Dębiec 45 +215000.0 True 2 1 Ogrody 38 +250000.0 True 3 3 Nowe 53 +420000.0 True 2 2 Łazarz 51 +269000.0 True 2 6 Rataje 50 +350000.0 True 2 3 Jeżyce 70 +225200.0 True 2 1 Nowe 39 +348000.0 True 3 3 Piątkowo 63 +260000.0 True 2 0 Naramowice 47 +449000.0 True 6 3 Stare 74 +260000.0 True 2 0 Stare 79 +288000.0 True 2 0 Jeżyce 50 +175000.0 True 2 4 Głuszyna 38 +289000.0 True 2 1 Wilda 47 +439000.0 True 4 2 Grunwald 92 +289000.0 True 3 3 Nowe 63 +184000.0 True 2 0 Grunwald 34 +450000.0 True 3 2 Naramowice 66 +360000.0 True 4 3 Grunwald 70 +379999.0 True 2 5 Jeżyce 61 +368712.0 False 2 5 Centrum 34 +348750.0 False 2 4 Centrum 54 +348750.0 False 2 3 Centrum 58 +393120.0 False 2 3 Centrum 52 +368712.0 False 2 2 Centrum 73 +362880.0 False 2 1 Centrum 37 +368712.0 False 2 0 Centrum 89 +362880.0 False 2 0 Centrum 72 +326430.0 False 2 0 Centrum 40 +480000.0 True 3 3 Stare 94 +360000.0 True 4 3 Grunwald 61 +525000.0 True 4 3 Jeżyce 104 +249000.0 True 2 4 Grunwald 38 +333775.0 True 2 1 Stare 35 +339822.0 True 3 3 Jeżyce 10 +360486.0 True 2 4 Jeżyce 10 +365000.0 True 2 1 Stare 10 +310000.0 True 3 1 Piątkowo 60 +339000.0 True 3 0 Rataje 63 +649000.0 True 4 1 Jeżyce 70 +356000.0 True 3 2 Naramowice 80 +345000.0 True 4 11 Grunwald 40 +499000.0 True 4 3 Stare 103 +269000.0 True 2 1 Rataje 49 +285000.0 True 2 4 Jeżyce 56 +308736.0 True 3 1 Jeżyce 24 +346689.0 True 3 2 Jeżyce 3 +241939.0 True 2 4 Jeżyce 51 +377622.0 True 4 4 Jeżyce 94 +245616.0 True 2 1 Jeżyce 8 +366208.0 True 3 6 Jeżyce 22 +195000.0 True 2 4 Grunwald 70 +262656.0 True 2 5 Stare 4 +458000.0 True 3 4 Centrum 87 +1115000.0 True 2 2 Grunwald 7 +285000.0 True 2 3 Wilda 50 +240000.0 True 2 8 Dębiec 38 +390000.0 True 3 3 Grunwald 87 +259500.0 True 2 0 Łazarz 90 +420000.0 True 2 3 Wilda 70 +560000.0 True 4 1 Naramowice 156 +429000.0 True 3 4 Nowe 79 +340000.0 True 3 0 Stare 70 +340000.0 True 3 0 Stare 70 +270000.0 True 2 2 Rataje 49 +428000.0 True 3 3 Centrum 43 +190000.0 True 2 8 Dębiec 50 +240000.0 True 2 8 Dębiec 38 +315000.0 True 2 2 Piątkowo 48 +404000.0 True 3 0 Warszawskie 52 +249000.0 True 2 0 Jeżyce 33 +350000.0 True 2 3 Grunwald 53 +239000.0 True 2 3 Rataje 49 +245000.0 True 2 9 Rataje 38 +706655.0 False 3 2 Nowe 45 +269973.0 False 3 1 Nowe 50 +249984.0 False 3 1 Nowe 64 +229990.0 False 3 1 Nowe 80 +269967.0 False 3 1 Nowe 30 +269973.0 False 3 1 Nowe 50 +189990.0 False 2 1 Nowe 12 +259993.0 False 3 1 Nowe 18 +199990.0 False 2 1 Nowe 95 +290000.0 True 2 2 Winogrady 41 +259993.0 False 3 1 Nowe 18 +279989.0 False 3 1 Nowe 58 +410000.0 True 3 1 Stare 60 +325000.0 True 2 4 Nowe 49 +285000.0 True 2 3 Wilda 60 +415000.0 True 3 2 Jeżyce 10 +245000.0 True 2 3 Naramowice 45 +260000.0 True 2 2 Rataje 38 +285000.0 True 2 3 Wilda 43 +269000.0 True 2 6 Rataje 50 +345000.0 True 3 5 Rataje 77 +259988.0 False 3 0 Nowe 73 +259980.0 False 3 0 Nowe 52 +189991.0 False 2 0 Nowe 40 +239994.0 False 3 0 Nowe 80 +259980.0 False 3 0 Nowe 52 +259988.0 False 3 0 Nowe 73 +349000.0 True 3 1 Nowe 108 +398000.0 True 3 2 Stare 20 +198789.0 False 2 0 Nowe 15 +198789.0 False 2 0 Nowe 15 +189661.0 False 2 0 Nowe 49 +255000.0 True 2 6 Rataje 49 +310576.0 True 3 3 Stare 55 +330680.0 True 2 1 Stare 59 +1214533.0 True 5 0 Grunwald 50 +550000.0 True 3 1 Grunwald 84 +230000.0 True 2 3 Rataje 36 +389000.0 True 3 2 Jeżyce 10 +300000.0 True 2 2 Winogrady 30 +435000.0 True 4 0 Dębiec 89 +1990000.0 True 3 1 Stare 150 +531000.0 True 2 1 Grunwald 59 +550000.0 True 3 1 Grunwald 84 +230000.0 True 2 3 Rataje 36 +389000.0 True 3 2 Jeżyce 10 +300000.0 True 2 2 Winogrady 30 +310576.0 True 3 3 Stare 55 +330680.0 True 2 1 Stare 59 +1214533.0 True 5 0 Grunwald 50 +550000.0 True 3 1 Grunwald 84 +259988.0 False 3 0 Nowe 73 +259980.0 False 3 0 Nowe 52 +189991.0 False 2 0 Nowe 40 +239994.0 False 3 0 Nowe 80 +259980.0 False 3 0 Nowe 52 +259988.0 False 3 0 Nowe 73 +349000.0 True 3 1 Nowe 108 +398000.0 True 3 2 Stare 20 +198789.0 False 2 0 Nowe 15 +198789.0 False 2 0 Nowe 15 +189661.0 False 2 0 Nowe 49 +255000.0 True 2 6 Rataje 49 +310576.0 True 3 3 Stare 55 +330680.0 True 2 1 Stare 59 +1214533.0 True 5 0 Grunwald 50 +550000.0 True 3 1 Grunwald 84 +230000.0 True 2 3 Rataje 36 +389000.0 True 3 2 Jeżyce 10 +300000.0 True 2 2 Winogrady 30 +435000.0 True 4 0 Dębiec 89 +1990000.0 True 3 1 Stare 150 +531000.0 True 2 1 Grunwald 59 +779000.0 True 3 2 Stare 113 +350000.0 True 2 3 Grunwald 53 +350000.0 True 2 1 Zawady 53 +260000.0 True 3 1 Grunwald 48 +350000.0 True 3 3 Nowe 67 +449000.0 True 3 1 Stare 110 +280000.0 True 3 4 Rataje 48 +280000.0 True 3 4 Rataje 48 +390000.0 True 3 3 Grunwald 87 +390000.0 True 3 3 Wilda 70 +462000.0 True 2 3 Winogrady 70 +220000.0 True 2 3 Rataje 42 +368000.0 True 3 2 Winiary 51 +368000.0 True 3 2 Winiary 51 +368000.0 True 3 2 Winiary 51 +402000.0 True 3 1 Winogrady 27 +289000.0 True 2 7 Winiary 48 +320000.0 True 2 2 Zawady 53 +233361.0 True 2 4 Jeżyce 60 +245000.0 True 2 3 Stare 50 +299500.0 False 3 0 Junikowo 59 +462000.0 True 2 3 Winogrady 57 +378000.0 False 4 0 Junikowo 35 +225000.0 True 4 3 Wilda 60 +249000.0 True 2 4 Winiary 49 +569000.0 True 4 0 Wilda 40 +308736.0 True 2 2 Jeżyce 48 +356000.0 True 3 2 Naramowice 63 +349000.0 True 3 1 Stare 83 +1650000.0 True 4 0 Sołacz 70 +330000.0 True 2 3 Wilda 53 +346689.0 True 3 4 Jeżyce 55 +363347.0 True 4 5 Jeżyce 57 diff --git a/w2/ex2data2.txt b/w2/ex2data2.txt new file mode 100644 index 0000000..a888992 --- /dev/null +++ b/w2/ex2data2.txt @@ -0,0 +1,118 @@ +0.051267,0.69956,1 +-0.092742,0.68494,1 +-0.21371,0.69225,1 +-0.375,0.50219,1 +-0.51325,0.46564,1 +-0.52477,0.2098,1 +-0.39804,0.034357,1 +-0.30588,-0.19225,1 +0.016705,-0.40424,1 +0.13191,-0.51389,1 +0.38537,-0.56506,1 +0.52938,-0.5212,1 +0.63882,-0.24342,1 +0.73675,-0.18494,1 +0.54666,0.48757,1 +0.322,0.5826,1 +0.16647,0.53874,1 +-0.046659,0.81652,1 +-0.17339,0.69956,1 +-0.47869,0.63377,1 +-0.60541,0.59722,1 +-0.62846,0.33406,1 +-0.59389,0.005117,1 +-0.42108,-0.27266,1 +-0.11578,-0.39693,1 +0.20104,-0.60161,1 +0.46601,-0.53582,1 +0.67339,-0.53582,1 +-0.13882,0.54605,1 +-0.29435,0.77997,1 +-0.26555,0.96272,1 +-0.16187,0.8019,1 +-0.17339,0.64839,1 +-0.28283,0.47295,1 +-0.36348,0.31213,1 +-0.30012,0.027047,1 +-0.23675,-0.21418,1 +-0.06394,-0.18494,1 +0.062788,-0.16301,1 +0.22984,-0.41155,1 +0.2932,-0.2288,1 +0.48329,-0.18494,1 +0.64459,-0.14108,1 +0.46025,0.012427,1 +0.6273,0.15863,1 +0.57546,0.26827,1 +0.72523,0.44371,1 +0.22408,0.52412,1 +0.44297,0.67032,1 +0.322,0.69225,1 +0.13767,0.57529,1 +-0.0063364,0.39985,1 +-0.092742,0.55336,1 +-0.20795,0.35599,1 +-0.20795,0.17325,1 +-0.43836,0.21711,1 +-0.21947,-0.016813,1 +-0.13882,-0.27266,1 +0.18376,0.93348,0 +0.22408,0.77997,0 +0.29896,0.61915,0 +0.50634,0.75804,0 +0.61578,0.7288,0 +0.60426,0.59722,0 +0.76555,0.50219,0 +0.92684,0.3633,0 +0.82316,0.27558,0 +0.96141,0.085526,0 +0.93836,0.012427,0 +0.86348,-0.082602,0 +0.89804,-0.20687,0 +0.85196,-0.36769,0 +0.82892,-0.5212,0 +0.79435,-0.55775,0 +0.59274,-0.7405,0 +0.51786,-0.5943,0 +0.46601,-0.41886,0 +0.35081,-0.57968,0 +0.28744,-0.76974,0 +0.085829,-0.75512,0 +0.14919,-0.57968,0 +-0.13306,-0.4481,0 +-0.40956,-0.41155,0 +-0.39228,-0.25804,0 +-0.74366,-0.25804,0 +-0.69758,0.041667,0 +-0.75518,0.2902,0 +-0.69758,0.68494,0 +-0.4038,0.70687,0 +-0.38076,0.91886,0 +-0.50749,0.90424,0 +-0.54781,0.70687,0 +0.10311,0.77997,0 +0.057028,0.91886,0 +-0.10426,0.99196,0 +-0.081221,1.1089,0 +0.28744,1.087,0 +0.39689,0.82383,0 +0.63882,0.88962,0 +0.82316,0.66301,0 +0.67339,0.64108,0 +1.0709,0.10015,0 +-0.046659,-0.57968,0 +-0.23675,-0.63816,0 +-0.15035,-0.36769,0 +-0.49021,-0.3019,0 +-0.46717,-0.13377,0 +-0.28859,-0.060673,0 +-0.61118,-0.067982,0 +-0.66302,-0.21418,0 +-0.59965,-0.41886,0 +-0.72638,-0.082602,0 +-0.83007,0.31213,0 +-0.72062,0.53874,0 +-0.59389,0.49488,0 +-0.48445,0.99927,0 +-0.0063364,0.99927,0 +0.63265,-0.030612,0 diff --git a/w2/fit.png b/w2/fit.png new file mode 100644 index 0000000..3d758e6 Binary files /dev/null and b/w2/fit.png differ diff --git a/w2/iris.csv b/w2/iris.csv new file mode 100644 index 0000000..3fb24af --- /dev/null +++ b/w2/iris.csv @@ -0,0 +1,151 @@ +sl,sw,pl,pw,Gatunek +5.2,3.4,1.4,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +6.7,3.1,5.6,2.4,Iris-virginica +6.5,3.2,5.1,2.0,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +6.0,2.7,5.1,1.6,Iris-versicolor +5.7,2.6,3.5,1.0,Iris-versicolor +5.0,2.0,3.5,1.0,Iris-versicolor +5.2,3.5,1.5,0.2,Iris-setosa +4.8,3.0,1.4,0.1,Iris-setosa +6.7,3.3,5.7,2.5,Iris-virginica +6.1,3.0,4.9,1.8,Iris-virginica +4.8,3.4,1.9,0.2,Iris-setosa +5.8,2.8,5.1,2.4,Iris-virginica +4.4,2.9,1.4,0.2,Iris-setosa +7.2,3.0,5.8,1.6,Iris-virginica +4.4,3.2,1.3,0.2,Iris-setosa +5.0,3.5,1.3,0.3,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +7.7,2.8,6.7,2.0,Iris-virginica +5.0,3.6,1.4,0.2,Iris-setosa +6.2,2.8,4.8,1.8,Iris-virginica +6.0,2.2,5.0,1.5,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +5.0,3.2,1.2,0.2,Iris-setosa +6.7,3.1,4.4,1.4,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +5.1,3.4,1.5,0.2,Iris-setosa +6.0,2.9,4.5,1.5,Iris-versicolor +5.3,3.7,1.5,0.2,Iris-setosa +5.6,2.9,3.6,1.3,Iris-versicolor +5.5,2.5,4.0,1.3,Iris-versicolor +5.5,2.4,3.7,1.0,Iris-versicolor +4.4,3.0,1.3,0.2,Iris-setosa +6.6,3.0,4.4,1.4,Iris-versicolor +7.9,3.8,6.4,2.0,Iris-virginica +5.7,2.8,4.1,1.3,Iris-versicolor +5.8,2.7,4.1,1.0,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +5.1,3.8,1.9,0.4,Iris-setosa +5.0,3.4,1.6,0.4,Iris-setosa +5.5,2.6,4.4,1.2,Iris-versicolor +5.0,3.4,1.5,0.2,Iris-setosa +6.8,2.8,4.8,1.4,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.1,3.8,1.6,0.2,Iris-setosa +6.4,3.2,5.3,2.3,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +5.7,2.8,4.5,1.3,Iris-versicolor +5.8,2.6,4.0,1.2,Iris-versicolor +4.7,3.2,1.6,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +6.3,3.4,5.6,2.4,Iris-virginica +5.1,3.8,1.5,0.3,Iris-setosa +7.0,3.2,4.7,1.4,Iris-versicolor +5.4,3.0,4.5,1.5,Iris-versicolor +6.0,2.2,4.0,1.0,Iris-versicolor +6.0,3.0,4.8,1.8,Iris-virginica +6.2,2.9,4.3,1.3,Iris-versicolor +5.6,3.0,4.1,1.3,Iris-versicolor +4.9,3.0,1.4,0.2,Iris-setosa +5.0,2.3,3.3,1.0,Iris-versicolor +6.3,2.5,5.0,1.9,Iris-virginica +4.8,3.4,1.6,0.2,Iris-setosa +5.9,3.0,4.2,1.5,Iris-versicolor +4.6,3.6,1.0,0.2,Iris-setosa +5.0,3.5,1.6,0.6,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.0,3.0,1.6,0.2,Iris-setosa +5.6,3.0,4.5,1.5,Iris-versicolor +6.3,2.8,5.1,1.5,Iris-virginica +5.2,2.7,3.9,1.4,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +7.7,3.0,6.1,2.3,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +6.4,2.9,4.3,1.3,Iris-versicolor +6.5,3.0,5.5,1.8,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +4.7,3.2,1.3,0.2,Iris-setosa +5.5,2.4,3.8,1.1,Iris-versicolor +5.4,3.4,1.5,0.4,Iris-setosa +7.2,3.6,6.1,2.5,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +6.1,3.0,4.6,1.4,Iris-versicolor +6.0,3.4,4.5,1.6,Iris-versicolor +6.3,2.7,4.9,1.8,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.5,3.5,1.3,0.2,Iris-setosa +6.7,3.0,5.2,2.3,Iris-virginica +4.6,3.1,1.5,0.2,Iris-setosa +5.8,2.7,5.1,1.9,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +4.8,3.0,1.4,0.3,Iris-setosa +7.1,3.0,5.9,2.1,Iris-virginica +5.9,3.0,5.1,1.8,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +5.4,3.9,1.7,0.4,Iris-setosa +6.4,3.2,4.5,1.5,Iris-versicolor +5.1,2.5,3.0,1.1,Iris-versicolor +6.3,2.9,5.6,1.8,Iris-virginica +7.2,3.2,6.0,1.8,Iris-virginica +5.4,3.4,1.7,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +6.1,2.8,4.0,1.3,Iris-versicolor +7.7,3.8,6.7,2.2,Iris-virginica +5.7,2.9,4.2,1.3,Iris-versicolor +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +6.5,3.0,5.2,2.0,Iris-virginica +4.9,3.1,1.5,0.1,Iris-setosa +6.3,2.3,4.4,1.3,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.7,3.8,1.7,0.3,Iris-setosa +6.4,2.8,5.6,2.1,Iris-virginica +4.9,2.4,3.3,1.0,Iris-versicolor +5.7,2.5,5.0,2.0,Iris-virginica +5.5,4.2,1.4,0.2,Iris-setosa +6.7,3.0,5.0,1.7,Iris-versicolor +5.0,3.3,1.4,0.2,Iris-setosa +6.3,2.5,4.9,1.5,Iris-versicolor +5.4,3.7,1.5,0.2,Iris-setosa +7.7,2.6,6.9,2.3,Iris-virginica +5.7,3.0,4.2,1.2,Iris-versicolor +7.6,3.0,6.6,2.1,Iris-virginica +4.8,3.1,1.6,0.2,Iris-setosa +5.6,2.8,4.9,2.0,Iris-virginica +4.5,2.3,1.3,0.3,Iris-setosa +6.8,3.2,5.9,2.3,Iris-virginica +6.3,3.3,6.0,2.5,Iris-virginica +4.6,3.4,1.4,0.3,Iris-setosa +5.8,2.7,3.9,1.2,Iris-versicolor +5.5,2.3,4.0,1.3,Iris-versicolor +5.2,4.1,1.5,0.1,Iris-setosa +6.6,2.9,4.6,1.3,Iris-versicolor +4.3,3.0,1.1,0.1,Iris-setosa +6.8,3.0,5.5,2.1,Iris-virginica +5.8,4.0,1.2,0.2,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +6.5,3.0,5.8,2.2,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica diff --git a/w2/learning-curves.png b/w2/learning-curves.png new file mode 100644 index 0000000..0dcc560 Binary files /dev/null and b/w2/learning-curves.png differ diff --git a/w2/polynomial_logistic.tsv b/w2/polynomial_logistic.tsv new file mode 100644 index 0000000..87337f2 --- /dev/null +++ b/w2/polynomial_logistic.tsv @@ -0,0 +1,100 @@ +1 0.25777005758108174 0.601012316037165 +1 0.3659669567447452 -0.11214686303429633 +0 0.49453050141627375 0.47110655546911206 +0 0.7029060372914113 -0.9225798301680093 +0 0.46658862037642423 -0.6226973935055724 +0 0.8793946243263941 -0.11408014657778076 +0 -0.3311850002119068 0.8444766749977881 +0 -0.5435170087333634 0.8851383010436487 +0 0.9197924083397226 0.41607011737177735 +0 0.28011742147804797 0.6143115673056148 +0 0.9475436344725683 -0.7830731144606005 +0 0.4904989452188586 0.649356142549592 +0 -0.865983500565505 0.9896361556274065 +0 -0.8579184997717257 0.3062253122060574 +0 0.08082005095746103 -0.7736760810964189 +0 -0.3363842450225085 -0.8802992880290186 +0 0.4748472924067402 0.9756949850919965 +0 -0.7956979203895616 0.8751067723304518 +1 0.06752895667287606 -0.7683056187589332 +0 -0.5825898275446799 0.8068359661366173 +1 0.1109238791315652 -0.2034825016864903 +0 0.5011542085506828 0.9366868642789181 +0 0.2011359606302785 0.4800561245801245 +1 -0.38620580274071115 0.4003933803256208 +1 -0.1722113915778094 0.3926707935387965 +0 0.6575404624823169 -0.7070032890943085 +1 -0.2832309098070882 0.034184675674787446 +1 -0.16828017341376333 -0.1628482245819587 +0 -0.6552618226108893 -0.3159705063754401 +0 -0.6466772083696701 -0.07116372625398881 +0 0.848711325640519 0.2132898335742659 +1 -0.35490315474701606 -0.0025105634256454845 +0 -0.36568446532837817 0.5637325774329354 +0 -0.5089179414092766 0.8086671779253405 +0 0.9609295951994559 -0.12114542304082354 +0 0.055563338045806265 0.8532855304613407 +0 -0.8937129542754998 -0.02555660184206876 +0 0.40678784672410284 -0.5480665560665205 +0 -0.7683896050204841 0.9475293644451854 +0 -0.515467982993429 -0.5389177617277066 +0 0.9693903475176826 -0.9765032993967369 +0 -0.5476549714934908 -0.018838768427513974 +0 0.5262277827151787 -0.9936327305281174 +1 0.9394838829593151 0.9962891110157359 +0 -0.935709119652979 -0.6940925482964921 +0 0.6161569745665239 -0.044448545050667976 +0 -0.08521587367561922 0.9636255303204684 +0 0.9073344675416231 -0.08813265618067079 +1 -0.1563237189794715 0.05022859605451302 +0 -0.9785642881644829 -0.5076719844587916 +0 -0.5494648865481802 -0.6044852696776528 +0 -0.7170122682018529 -0.6250685449461151 +1 0.5333872877810009 0.1395189003073396 +0 -0.49270328980187905 0.9081426529064955 +1 0.07777642690144848 -0.44188199856981347 +0 0.8328452661100116 0.5508441451500428 +1 -0.33275827507477573 -0.15434344174028314 +0 -0.9057550401714867 0.6324599729071743 +0 -0.8476574433184823 0.5739140088331203 +0 -0.37393930555231103 0.7361874446899226 +1 0.6610910543790163 0.0036185958785315275 +0 0.49147748571126004 -0.6155167984371757 +0 0.31992462553488177 -0.38253832622755657 +0 0.7398386519468336 -0.915886088774648 +0 0.5915392280694003 0.011422405850611383 +0 -0.5818860867200502 -0.44086037005029377 +0 -0.9066322824076023 0.21754010215910524 +1 0.12243932470792318 -0.3830697406526009 +0 0.40607941790742297 0.5626829623336307 +1 -0.1210920179663808 -0.20552144405177608 +0 0.48099006522554233 0.9583656149315158 +0 -0.059491720260914205 0.6161097510891897 +1 -0.053220979060695006 0.07562497263502688 +0 -0.8742304482942296 -0.13488952315510616 +0 0.7362712712103594 0.6087347685508093 +0 0.025549937023763736 -0.6202087182389777 +0 0.6755333538371804 0.7047713746899604 +0 -0.3954771867034055 0.3567082570178153 +1 0.24896928809009156 -0.17106278785061302 +0 0.6133735778535989 -0.6297261231852487 +1 -0.35955189872833593 -0.2086164112593747 +0 0.646544898896497 0.8858921579510579 +0 0.6459228334265068 -0.9141274779126995 +0 -0.5279127041052518 -0.11119649758918437 +0 -0.47141090620857784 -0.29849889702571786 +1 0.1901970467567704 -0.5049996808415897 +0 -0.5497623652380574 -0.49032403671408553 +0 -0.5759454285366339 0.445122514716527 +0 -0.7800687910859982 -0.4823078816937112 +0 0.39722150362989095 0.5827352140491311 +1 0.018540458464545218 -0.20805328372207677 +0 -0.14419638252986933 -0.8679481460173017 +1 -0.15012196110925857 0.5474017473230433 +1 -0.11028545705088533 0.5371497474265077 +0 -0.46577855502057375 -0.9226883886539352 +0 0.4843595022265692 0.47692504895620713 +0 0.4330264545403766 -0.40096944878062857 +0 -0.7401024435876022 0.758623363044544 +0 0.20470935356917574 -0.7551473328272353 +0 0.1877078820888327 -0.3377139504156679 diff --git a/w2/zumz182.zip b/w2/zumz182.zip new file mode 100644 index 0000000..851d473 Binary files /dev/null and b/w2/zumz182.zip differ diff --git a/w2/zumz182a.ipynb b/w2/zumz182a.ipynb new file mode 100644 index 0000000..d4712cf --- /dev/null +++ b/w2/zumz182a.ipynb @@ -0,0 +1,23080 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe UMZ 2017/2018\n", + "# 2. Regresja logistyczna\n", + "\n", + "### Część 1" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.1. Metoda gradientu prostego w praktyce" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Kryterium stopu" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Na wykresie zobaczymy porównanie regresji dla różnych wartości `eps`" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib\n", + "import matplotlib.pyplot as pl\n", + "import ipywidgets as widgets\n", + "\n", + "%matplotlib inline\n", + "%config InlineBackend.figure_format = 'svg'\n", + "\n", + "from IPython.display import display, Math, Latex\n", + "\n", + "# Wyświetlanie macierzy w LaTeX-u\n", + "def LatexMatrix(matrix):\n", + " ltx = r'\\left[\\begin{array}'\n", + " m, n = matrix.shape\n", + " ltx += '{' + (\"r\" * n) + '}'\n", + " for i in range(m):\n", + " ltx += r\" & \".join([('%.4f' % j.item()) for j in matrix[i]]) + r\" \\\\ \"\n", + " ltx += r'\\end{array}\\right]'\n", + " return ltx\n", + "\n", + "# Wczytwanie danych z pliku za pomocą numpy\n", + "data = np.loadtxt('data_company.csv', delimiter=',')\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 0:n].reshape(m, n)\n", + "\n", + "# Dodaj kolumnę jedynek do macierzy\n", + "XMx = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "yMx = np.matrix(data[:, 1]).reshape(m, 1)\n", + "\n", + "# Hipoteza (wersja macierzowa)\n", + "def hMx(theta, X):\n", + " return X * theta\n", + "\n", + "# Wykres danych (wersja macierzowa)\n", + "def regdotsMx(X, y, xlabel='Populacja', ylabel='Zysk'): \n", + " fig = pl.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.scatter([X[:, 1]], [y], c='r', s=50, label='Dane')\n", + " \n", + " ax.set_xlabel(xlabel)\n", + " ax.set_ylabel(ylabel)\n", + " ax.margins(.05, .05)\n", + " pl.ylim(y.min() - 1, y.max() + 1)\n", + " pl.xlim(np.min(X[:, 1]) - 1, np.max(X[:, 1]) + 1)\n", + " return fig\n", + "\n", + "# Wykres krzywej regresji (wersja macierzowa)\n", + "def reglineMx(fig, fun, theta, X):\n", + " ax = fig.axes[0]\n", + " x0 = np.min(X[:, 1]) - 1.0\n", + " x1 = np.max(X[:, 1]) + 1.0\n", + " L = [x0, x1]\n", + " LX = np.matrix([1, x0, 1, x1]).reshape(2, 2)\n", + " ax.plot(L, fun(theta, LX), linewidth='2',\n", + " label=(r'$y={theta0:.2}{op}{theta1:.2}x$'.format(\n", + " theta0=float(theta[0][0]),\n", + " theta1=(float(theta[1][0]) if theta[1][0] >= 0 else float(-theta[1][0])),\n", + " op='+' if theta[1][0] >= 0 else '-')))\n", + "\n", + "# Legenda wykresu\n", + "def legend(fig):\n", + " ax = fig.axes[0]\n", + " handles, labels = ax.get_legend_handles_labels()\n", + " # try-except block is a fix for a bug in Poly3DCollection\n", + " try:\n", + " fig.legend(handles, labels, fontsize='15', loc='lower right')\n", + " except AttributeError:\n", + " pass\n", + "\n", + "# Wersja macierzowa funkcji kosztu\n", + "def JMx(theta,X,y):\n", + " m = len(y)\n", + " J = 1.0 / (2.0 * m) * ((X * theta - y).T * ( X * theta - y))\n", + " return J.item()\n", + "\n", + "# Wersja macierzowa gradientu funkcji kosztu\n", + "def dJMx(theta,X,y):\n", + " return 1.0 / len(y) * (X.T * (X * theta - y)) \n", + "\n", + "# Implementacja algorytmu gradientu prostego za pomocą numpy i macierzy\n", + "def GDMx(fJ, fdJ, theta, X, y, alpha=0.1, eps=10**-3):\n", + " current_cost = fJ(theta, X, y)\n", + " logs = [[current_cost, theta]]\n", + " while True:\n", + " theta = theta - alpha * fdJ(theta, X, y) # implementacja wzoru\n", + " current_cost, prev_cost = fJ(theta, X, y), current_cost\n", + " if current_cost > 10000:\n", + " break\n", + " if abs(prev_cost - current_cost) <= eps:\n", + " break\n", + " logs.append([current_cost, theta]) \n", + " return theta, logs\n", + "\n", + "thetaStartMx = np.matrix([0, 0]).reshape(2, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "fig = regdotsMx(XMx, yMx)\n", + "theta_e1, logs1 = GDMx(JMx, dJMx, thetaStartMx, XMx, yMx, alpha=0.01, eps=0.01)\n", + "reglineMx(fig, hMx, theta_e1, XMx)\n", + "theta_e2, logs2 = GDMx(JMx, dJMx, thetaStartMx, XMx, yMx, alpha=0.01, eps=0.000001)\n", + "reglineMx(fig, hMx, theta_e2, XMx)\n", + "legend(fig)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\\theta_{10^{-2}} = \\left[\\begin{array}{r}0.0511 \\\\ 0.7957 \\\\ \\end{array}\\right]\\quad\\theta_{10^{-6}} = \\left[\\begin{array}{r}-3.8407 \\\\ 1.1875 \\\\ \\end{array}\\right]$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Math(r'\\theta_{10^{-2}} = ' + LatexMatrix(theta_e1) +\n", + " r'\\quad\\theta_{10^{-6}} = ' + LatexMatrix(theta_e2)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Długość kroku ($\\alpha$)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Jak zmienia się koszt w kolejnych krokach w zależności od alfa\n", + "\n", + "def costchangeplot(logs):\n", + " fig = pl.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.set_xlabel('krok')\n", + " ax.set_ylabel(r'$J(\\theta)$')\n", + "\n", + " X = np.arange(0, 100, 1)\n", + " Y = [logs[step][0] if step < len(logs) else None for step in X]\n", + " ax.plot(X, Y, linewidth='2', label=(r'$J(\\theta)$'))\n", + " return fig\n", + "\n", + "def slide1(alpha):\n", + " best_theta, logs = GDMx(JMx, dJMx, thetaStartMx, XMx, yMx, alpha=alpha, eps=0.0001)\n", + " fig = costchangeplot(logs)\n", + " legend(fig)\n", + "\n", + "sliderAlpha1 = widgets.FloatSlider(min=0.01, max=0.03, step=0.001, value=0.02, description=r'$\\alpha$', width=300)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "98679fb9d83947408fe409f5eaeec810", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(FloatSlider(value=0.02, description=u'$\\\\alpha$', max=0.03, min=0.01, step=0.001), Button(description=u'Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(slide1, alpha=sliderAlpha1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.2. Normalizacja danych" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Użyjemy danych z „Gratka flats challenge 2017”.\n", + "\n", + "Rozważmy model $h(x) = \\theta_0 + \\theta_1 x_1 + \\theta_2 x_2$, w którym cena mieszkania prognozowana jest na podstawie liczby pokoi $x_1$ i metrażu $x_2$:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "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", + "
priceroomssqrMetres
0476118.00378
1459531.00362
2411557.00315
3496416.00414
4406032.00315
5450026.00380
6571229.15239
7325000.00354
8268229.00290
9604836.00440
\n", + "
" + ], + "text/plain": [ + " price rooms sqrMetres\n", + "0 476118.00 3 78\n", + "1 459531.00 3 62\n", + "2 411557.00 3 15\n", + "3 496416.00 4 14\n", + "4 406032.00 3 15\n", + "5 450026.00 3 80\n", + "6 571229.15 2 39\n", + "7 325000.00 3 54\n", + "8 268229.00 2 90\n", + "9 604836.00 4 40" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Wczytanie danych przy pomocy biblioteki pandas\n", + "import pandas\n", + "alldata = pandas.read_csv('data_flats.tsv', header=0, sep='\\t',\n", + " usecols=['price', 'rooms', 'sqrMetres'])\n", + "alldata[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def show_mins_and_maxs(XMx):\n", + " mins = np.amin(XMx, axis=0).tolist()[0] # wartości minimalne\n", + " maxs = np.amax(XMx, axis=0).tolist()[0] # wartości maksymalne\n", + " for i, (xmin, xmax) in enumerate(zip(mins, maxs)):\n", + " display(Math(\n", + " r'${:.2F} \\leq x_{} \\leq {:.2F}$'.format(xmin, i, xmax)))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie danych\n", + "\n", + "import numpy as np\n", + "\n", + "%matplotlib inline\n", + "\n", + "data2 = np.matrix(alldata[['rooms', 'sqrMetres', 'price']])\n", + "\n", + "m, n_plus_1 = data2.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data2[:, 0:n]\n", + "\n", + "XMx2 = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "yMx2 = np.matrix(data2[:, -1]).reshape(m, 1) / 1000.0" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Cechy w danych treningowych przyjmują wartości z zakresu:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$1.00 \\leq x_0 \\leq 1.00$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$2.00 \\leq x_1 \\leq 7.00$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$12.00 \\leq x_2 \\leq 196.00$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "show_mins_and_maxs(XMx2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Jak widzimy, $x_2$ przyjmuje wartości dużo większe niż $x_1$.\n", + "Powoduje to, że wykres funkcji kosztu jest bardzo „spłaszczony” wzdłuż jednej z osi:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def contour_plot(X, y, rescale=10**8):\n", + " theta0_vals = np.linspace(-100000, 100000, 100)\n", + " theta1_vals = np.linspace(-100000, 100000, 100)\n", + "\n", + " J_vals = np.zeros(shape=(theta0_vals.size, theta1_vals.size))\n", + " for t1, element in enumerate(theta0_vals):\n", + " for t2, element2 in enumerate(theta1_vals):\n", + " thetaT = np.matrix([1.0, element, element2]).reshape(3,1)\n", + " J_vals[t1, t2] = JMx(thetaT, X, y) / rescale\n", + " \n", + " pl.figure()\n", + " pl.contour(theta0_vals, theta1_vals, J_vals.T, np.logspace(-2, 3, 20))\n", + " pl.xlabel(r'$\\theta_1$')\n", + " pl.ylabel(r'$\\theta_2$')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "contour_plot(XMx2, yMx2, rescale=10**10)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Skalowanie" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Będziemy dążyć do tego, żeby każda z cech przyjmowała wartości w podobnym zakresie.\n", + "\n", + "W tym celu przeskalujemy wartości każdej z cech, dzieląc je przez wartość maksymalną:\n", + "\n", + "$$ \\hat{x_i}^{(j)} := \\frac{x_i^{(j)}}{\\max_j x_i^{(j)}} $$" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$1.00 \\leq x_0 \\leq 1.00$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$0.29 \\leq x_1 \\leq 1.00$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$0.06 \\leq x_2 \\leq 1.00$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "XMx2_scaled = XMx2 / np.amax(XMx2, axis=0)\n", + "\n", + "show_mins_and_maxs(XMx2_scaled)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "contour_plot(XMx2_scaled, yMx2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Normalizacja średniej" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Będziemy dążyć do tego, żeby dodatkowo średnia wartość każdej z cech była w okolicach $0$.\n", + "\n", + "W tym celu oprócz przeskalowania odejmiemy wartość średniej od wartości każdej z cech:\n", + "\n", + "$$ \\hat{x_i}^{(j)} := \\frac{x_i^{(j)} - \\mu_i}{\\max_j x_i^{(j)}} $$" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$$0.00 \\leq x_0 \\leq 0.00$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$-0.10 \\leq x_1 \\leq 0.62$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$-0.23 \\leq x_2 \\leq 0.70$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "XMx2_norm = (XMx2 - np.mean(XMx2, axis=0)) / np.amax(XMx2, axis=0)\n", + "\n", + "show_mins_and_maxs(XMx2_norm)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "contour_plot(XMx2_norm, yMx2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.3. Regresja logistyczna" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + " * Uwaga: _regresja_ logistyczna jest algorytmem dla problemów _klasyfikacji_ (nie _regresji_, wbrew nazwie)!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Klasyfikacja dwuklasowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "### Przykład: kosaciec szczecinkowy (_Iris setosa_)\n", + "\n", + "Mamy dane dotyczące długości płatków i chcielibyśmy na tej podstawie określić, czy jest to roślina z gatunku _Iris setosa_" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "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", + "
dł. płatkaIris setosa?
01.41.0
11.51.0
25.60.0
35.10.0
44.50.0
55.10.0
\n", + "
" + ], + "text/plain": [ + " dł. płatka Iris setosa?\n", + "0 1.4 1.0\n", + "1 1.5 1.0\n", + "2 5.6 0.0\n", + "3 5.1 0.0\n", + "4 4.5 0.0\n", + "5 5.1 0.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas\n", + "data_iris_setosa = (\n", + " pandas.read_csv('iris.csv', usecols=['pł.dł.', 'Gatunek'])\n", + " .apply(lambda x: [x[0], 1 if x[1] == 'Iris-setosa' else 0], axis=1))\n", + "data_iris_setosa.columns = ['dł. płatka', 'Iris setosa?']\n", + "data_iris_setosa[:6]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Rysowanie progu\n", + "def threshold(fig, theta):\n", + " x_thr = (0.5 - theta.item(0)) / theta.item(1)\n", + " ax = fig.axes[0]\n", + " ax.plot([x_thr, x_thr], [-1, 2],\n", + " color='orange', linestyle='dashed',\n", + " label=u'próg: $x={:.2F}$'.format(x_thr))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Spróbujmy zastosować regresję liniową:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "m, n_plus_1 = data_iris_setosa.values.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data_iris_setosa.values[:, 0:n].reshape(m, n)\n", + "\n", + "XMx3 = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "yMx3 = np.matrix(data_iris_setosa.values[:, 1]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "fig = regdotsMx(XMx3, yMx3, xlabel='x', ylabel='Iris setosa?')\n", + "theta_e3, logs3 = GDMx(JMx, dJMx, thetaStartMx, XMx3, yMx3, alpha=0.03, eps=0.000001)\n", + "reglineMx(fig, hMx, theta_e3, XMx3)\n", + "threshold(fig, theta_e3)\n", + "legend(fig)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + " * Krzywa regresji liniowej jest niezbyt dopasowana do danych klasyfikacyjnych.\n", + " * Zastosowanie progu $y = 0.5$ nie zawsze pomaga uzyskać sensowny rezultat.\n", + " * $h(x)$ może przyjmować wartości mniejsze od $0$ i większe od $1$ – jak interpretować takie wyniki?\n", + "\n", + "Wniosek: w przypadku problemów klasyfikacyjnych regresja liniowa nie wydaje się najlepszym rozwiązaniem." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Funkcja logistyczna (sigmoidalna):\n", + "\n", + "$$g(x) = \\dfrac{1}{1+e^{-x}}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "def logistic(x):\n", + " return 1.0 / (1.0 + np.exp(-x))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "def plot_logistic():\n", + " x = np.linspace(-5,5,200)\n", + " y = logistic(x)\n", + "\n", + " fig = plt.figure(figsize=(7,5))\n", + " ax = fig.add_subplot(111)\n", + " plt.ylim(-.1,1.1)\n", + " ax.plot(x, y, linewidth='2')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Wykres funkcji logistycznej $g(x) = \\dfrac{1}{1+e^{-x}}$:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "plot_logistic()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Funkcja regresji logistycznej:\n", + "\n", + "$$h_\\theta(x) = g(\\theta^T \\, x) = \\dfrac{1}{1 + e^{-\\theta^T x}}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Wersja macierzowa:\n", + "\n", + "$$h_\\theta(X) = g(X \\, \\theta) = \\dfrac{1}{1 + e^{-X \\theta}}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Funkcja regresji logistcznej\n", + "def h(theta, X):\n", + " return 1.0/(1.0 + np.exp(-X * theta))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Funkcja kosztu dla regresji logistycznej:\n", + "\n", + "$$J(\\theta) = -\\dfrac{1}{m} \\left( \\sum_{i=1}^{m} y^{(i)} \\log h_\\theta( x^{(i)} ) + \\left( 1 - y^{(i)} \\right) \\log \\left( 1 - h_\\theta (x^{(i)}) \\right) \\right)$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Gradient dla regresji logistycznej (wersja macierzowa):\n", + "\n", + "$$\\nabla J(\\theta) = \\frac{1}{|\\vec y|} X^T \\left( h_\\theta(X) - \\vec y \\right)$$\n", + "\n", + "(Jedyna różnica między gradientem dla regresji logistycznej a gradientem dla regresji liniowej to postać $h_\\theta$)." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Funkcja kosztu dla regresji logistycznej\n", + "def J(h, theta, X, y):\n", + " m = len(y)\n", + " h_val = h(theta, X)\n", + " s1 = np.multiply(y, np.log(h_val))\n", + " s2 = np.multiply((1 - y), np.log(1 - h_val))\n", + " return -np.sum(s1 + s2, axis=0) / m" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "# Gradient dla regresji logistycznej\n", + "def dJ(h, theta, X, y):\n", + " return 1.0 / len(y) * (X.T * (h(theta, X) - y))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Metoda gradientu prostego dla regresji logistycznej\n", + "def GD(h, fJ, fdJ, theta, X, y, alpha=0.01, eps=10**-3, maxSteps=10000):\n", + " errorCurr = fJ(h, theta, X, y)\n", + " errors = [[errorCurr, theta]]\n", + " while True:\n", + " # oblicz nowe theta\n", + " theta = theta - alpha * fdJ(h, theta, X, y)\n", + " # raportuj poziom błędu\n", + " errorCurr, errorPrev = fJ(h, theta, X, y), errorCurr\n", + " # kryteria stopu\n", + " if abs(errorPrev - errorCurr) <= eps:\n", + " break\n", + " if len(errors) > maxSteps:\n", + " break\n", + " errors.append([errorCurr, theta]) \n", + " return theta, errors" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('error =', matrix([[ 0.05755617]]))\n", + "('theta =', matrix([[ 5.02530461],\n", + " [-1.99174803]]))\n" + ] + } + ], + "source": [ + "# Uruchomienie metody gradientu prostego dla regresji logistycznej\n", + "thetaBest, errors = GD(h, J, dJ, thetaStartMx, XMx3, yMx3, \n", + " alpha=0.1, eps=10**-7, maxSteps=1000)\n", + "print(\"error =\", errors[-1][0])\n", + "print(\"theta =\", thetaBest)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Funkcja regresji logistycznej (wersja skalarna)\n", + "def scalar_logistic_regression_function(theta, x):\n", + " return 1.0/(1.0 + np.exp(-(theta.item(0) + theta.item(1) * x)))\n", + "\n", + "# Rysowanie progu\n", + "def threshold_val(fig, x_thr):\n", + " ax = fig.axes[0]\n", + " ax.plot([x_thr, x_thr], [-1, 2],\n", + " color='orange', linestyle='dashed',\n", + " label=u'próg: $x={:.2F}$'.format(x_thr))\n", + "\n", + "# Wykres krzywej regresji logistycznej\n", + "def logistic_regline(fig, theta, X):\n", + " ax = fig.axes[0]\n", + " x0 = np.min(X[:, 1]) - 1.0\n", + " x1 = np.max(X[:, 1]) + 1.0\n", + " Arg = np.arange(x0, x1, 0.1)\n", + " Val = scalar_logistic_regression_function(theta, Arg)\n", + " ax.plot(Arg, Val, linewidth='2')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "fig = regdotsMx(XMx3, yMx3, xlabel='x', ylabel='Iris setosa?')\n", + "logistic_regline(fig, thetaBest, XMx3)\n", + "threshold_val(fig, 2.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Traktujemy wartość $h_\\theta(x)$ jako prawdopodobieństwo, że cecha przyjmie wartość pozytywną:\n", + "\n", + "$$ h_\\theta(x) = P(y = 1 \\, | \\, x; \\theta) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Dwuklasowa regresja logistyczna: więcej cech" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Weźmy pod uwagę następujące cechy:\n", + " * długość dziełek kielicha\n", + " * szerokość działek kielicha\n", + " * długość płatka\n", + " * szerokość płatka" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "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", + "
slswplpwIris setosa?
05.23.41.40.21.0
15.13.71.50.41.0
26.73.15.62.40.0
36.53.25.12.00.0
44.92.54.51.70.0
56.02.75.11.60.0
\n", + "
" + ], + "text/plain": [ + " sl sw pl pw Iris setosa?\n", + "0 5.2 3.4 1.4 0.2 1.0\n", + "1 5.1 3.7 1.5 0.4 1.0\n", + "2 6.7 3.1 5.6 2.4 0.0\n", + "3 6.5 3.2 5.1 2.0 0.0\n", + "4 4.9 2.5 4.5 1.7 0.0\n", + "5 6.0 2.7 5.1 1.6 0.0" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas\n", + "src_cols = ['sl', 'sw', 'pl', 'pw', 'Gatunek']\n", + "trg_cols = ['sl', 'sw', 'pl', 'pw', 'Iris setosa?']\n", + "data_iris_setosa_multi = (\n", + " pandas.read_csv('iris.csv', usecols=src_cols)\n", + " .apply(lambda x: [x[0], x[1], x[2], x[3], 1 if x[4] == 'Iris-setosa' else 0], axis=1))\n", + "data_iris_setosa_multi.columns = trg_cols\n", + "data_iris_setosa_multi[:6]" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "seaborn.pairplot(\n", + " data_iris_setosa_multi,\n", + " vars=[c for c in data_iris_setosa_multi.columns if c != 'Iris setosa?'], \n", + " hue='Iris setosa?', size=1.5, aspect=1.75)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 1. 5.2 3.4 1.4 0.2]\n", + " [ 1. 5.1 3.7 1.5 0.4]\n", + " [ 1. 6.7 3.1 5.6 2.4]\n", + " [ 1. 6.5 3.2 5.1 2. ]\n", + " [ 1. 4.9 2.5 4.5 1.7]\n", + " [ 1. 6. 2.7 5.1 1.6]]\n", + "[[ 1.]\n", + " [ 1.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n" + ] + } + ], + "source": [ + "# Przygotowanie danych\n", + "m, n_plus_1 = data_iris_setosa_multi.values.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data_iris_setosa_multi.values[:, 0:n].reshape(m, n)\n", + "\n", + "XMx4 = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "yMx4 = np.matrix(data_iris_setosa_multi.values[:, n]).reshape(m, 1)\n", + "\n", + "print(XMx4[:6])\n", + "print(yMx4[:6])" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Podział danych na zbiór trenujący i testowy\n", + "XTrain, XTest = XMx4[:100], XMx4[100:]\n", + "yTrain, yTest = yMx4[:100], yMx4[100:]\n", + "\n", + "# Macierz parametrów początkowych\n", + "thetaTemp = np.ones(5).reshape(5,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('error =', matrix([[ 0.006797]]))\n", + "('theta =', matrix([[ 1.11414027],\n", + " [ 0.14887292],\n", + " [ 2.13284493],\n", + " [-2.89324615],\n", + " [-0.66543637]]))\n" + ] + } + ], + "source": [ + "thetaBest, errors = GD(h, J, dJ, thetaTemp, XTrain, yTrain, \n", + " alpha=0.1, eps=10**-7, maxSteps=1000)\n", + "print(\"error =\", errors[-1][0])\n", + "print(\"theta =\", thetaBest)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Funkcja decyzyjna regresji logistycznej\n", + "\n", + "$$ c = \\left\\{ \n", + "\\begin{array}{ll}\n", + "1, & \\mbox{gdy } P(y=1 \\, | \\, x; \\theta) > 0.5 \\\\\n", + "0 & \\mbox{w przeciwnym przypadku}\n", + "\\end{array}\\right.\n", + "$$\n", + "\n", + "$$ P(y=1 \\,| \\, x; \\theta) = h_\\theta(x) $$" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('theta =', matrix([[ 1.11414027],\n", + " [ 0.14887292],\n", + " [ 2.13284493],\n", + " [-2.89324615],\n", + " [-0.66543637]]))\n", + "('x0 =', matrix([[ 1. , 7.3, 2.9, 6.3, 1.8]]))\n", + "('h(x0) =', 1.606143695982493e-05)\n", + "('c(x0) =', (0, 1.606143695982493e-05), '\\n')\n" + ] + } + ], + "source": [ + "def classifyBi(theta, X):\n", + " prob = h(theta, X).item()\n", + " return (1, prob) if prob > 0.5 else (0, prob)\n", + "\n", + "print(\"theta =\", thetaBest)\n", + "print(\"x0 =\", XTest[0])\n", + "print(\"h(x0) =\", h(thetaBest, XTest[0]).item())\n", + "print(\"c(x0) =\", classifyBi(thetaBest, XTest[0]), \"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Skuteczność" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0, '<=>', 0, '-- prob:', 0.0)\n", + "(1, '<=>', 1, '-- prob:', 0.9816)\n", + "(0, '<=>', 0, '-- prob:', 0.0001)\n", + "(0, '<=>', 0, '-- prob:', 0.0005)\n", + "(0, '<=>', 0, '-- prob:', 0.0001)\n", + "(1, '<=>', 1, '-- prob:', 0.9936)\n", + "(0, '<=>', 0, '-- prob:', 0.0059)\n", + "(0, '<=>', 0, '-- prob:', 0.0992)\n", + "(0, '<=>', 0, '-- prob:', 0.0001)\n", + "(0, '<=>', 0, '-- prob:', 0.0001)\n", + "('\\nAccuracy:', 1.0)\n" + ] + } + ], + "source": [ + "acc = 0.0\n", + "for i, rest in enumerate(yTest):\n", + " cls, prob = classifyBi(thetaBest, XTest[i])\n", + " if i < 10:\n", + " print(int(yTest[i].item()), \"<=>\", cls, \"-- prob:\", round(prob, 4))\n", + " acc += cls == yTest[i].item()\n", + "\n", + "print(\"\\nAccuracy:\", acc / len(XTest))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.4. Wieloklasowa regresja logistyczna" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Przykład: gatunki irysów (kosaćców)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "Kosaciec szczecinkowy (_Iris setosa_)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "Kosaciec amerykański (_Iris virginica_)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "Kosaciec różnobarwny (_Iris versicolor_)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Cechy:\n", + " * długość działek kielicha\n", + " * szerokość działek kielicha\n", + " * długość płatka\n", + " * szerokość płatka" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Wczytanie danych" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "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", + "
slswplpwGatunek
05.23.41.40.2Iris-setosa
15.13.71.50.4Iris-setosa
26.73.15.62.4Iris-virginica
36.53.25.12.0Iris-virginica
44.92.54.51.7Iris-virginica
56.02.75.11.6Iris-versicolor
\n", + "
" + ], + "text/plain": [ + " sl sw pl pw Gatunek\n", + "0 5.2 3.4 1.4 0.2 Iris-setosa\n", + "1 5.1 3.7 1.5 0.4 Iris-setosa\n", + "2 6.7 3.1 5.6 2.4 Iris-virginica\n", + "3 6.5 3.2 5.1 2.0 Iris-virginica\n", + "4 4.9 2.5 4.5 1.7 Iris-virginica\n", + "5 6.0 2.7 5.1 1.6 Iris-versicolor" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas\n", + "data_iris = pandas.read_csv('iris.csv')\n", + "data_iris[:6]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Przygotowanie danych" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('X = ', matrix([[ 1. , 5.2, 3.4, 1.4, 0.2],\n", + " [ 1. , 5.1, 3.7, 1.5, 0.4],\n", + " [ 1. , 6.7, 3.1, 5.6, 2.4],\n", + " [ 1. , 6.5, 3.2, 5.1, 2. ]]))\n", + "('y = ', matrix([['Iris-setosa'],\n", + " ['Iris-setosa'],\n", + " ['Iris-virginica'],\n", + " ['Iris-virginica']], dtype=object))\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "features = ['sl', 'sw', 'pl', 'pw']\n", + "m = len(data_iris)\n", + "X = np.matrix(data_iris[features])\n", + "X0 = np.ones(m).reshape(m, 1)\n", + "X = np.hstack((X0, X))\n", + "y = np.matrix(data_iris[[\"Gatunek\"]]).reshape(m, 1)\n", + "\n", + "print(\"X = \", X[:4])\n", + "print(\"y = \", y[:4])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Zamieńmy etykiety tekstowe w tablicy $y$ na wektory jednostkowe (_one-hot vectors_):\n", + "\n", + "$$\n", + "\\begin{array}{ccc}\n", + "\\mbox{\"Iris-setosa\"} & \\mapsto & \\left[ \\begin{array}{ccc} 1 & 0 & 0 \\\\ \\end{array} \\right] \\\\\n", + "\\mbox{\"Iris-virginica\"} & \\mapsto & \\left[ \\begin{array}{ccc} 0 & 1 & 0 \\\\ \\end{array} \\right] \\\\\n", + "\\mbox{\"Iris-versicolor\"} & \\mapsto & \\left[ \\begin{array}{ccc} 0 & 0 & 1 \\\\ \\end{array} \\right] \\\\\n", + "\\end{array}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Wówczas zamiast wektora $y$ otrzymamy macierz $Y$:\n", + "\n", + "$$\n", + "y \\; = \\;\n", + "\\left[\n", + "\\begin{array}{c}\n", + "y^{(1)} \\\\\n", + "y^{(2)} \\\\\n", + "y^{(3)} \\\\\n", + "y^{(4)} \\\\\n", + "y^{(5)} \\\\\n", + "\\vdots \\\\\n", + "\\end{array}\n", + "\\right]\n", + "\\; = \\;\n", + "\\left[\n", + "\\begin{array}{c}\n", + "\\mbox{\"Iris-setosa\"} \\\\\n", + "\\mbox{\"Iris-setosa\"} \\\\\n", + "\\mbox{\"Iris-virginica\"} \\\\\n", + "\\mbox{\"Iris-versicolor\"} \\\\\n", + "\\mbox{\"Iris-virginica\"} \\\\\n", + "\\vdots \\\\\n", + "\\end{array}\n", + "\\right]\n", + "\\quad \\mapsto \\quad\n", + "Y \\; = \\;\n", + "\\left[\n", + "\\begin{array}{ccc}\n", + "1 & 0 & 0 \\\\\n", + "1 & 0 & 0 \\\\\n", + "0 & 1 & 0 \\\\\n", + "0 & 0 & 1 \\\\\n", + "0 & 1 & 0 \\\\\n", + "\\vdots & \\vdots & \\vdots \\\\\n", + "\\end{array}\n", + "\\right]\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def mapY(y, cls):\n", + " m = len(y)\n", + " yBi = np.matrix(np.zeros(m)).reshape(m, 1)\n", + " yBi[y == cls] = 1.\n", + " return yBi\n", + "\n", + "def indicatorMatrix(y):\n", + " classes = np.unique(y.tolist())\n", + " m = len(y)\n", + " k = len(classes)\n", + " Y = np.matrix(np.zeros((m, k)))\n", + " for i, cls in enumerate(classes):\n", + " Y[:, i] = mapY(y, cls)\n", + " return Y\n", + "\n", + "# one-hot matrix\n", + "Y = indicatorMatrix(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Podział danych na zbiór trenujący i testowy\n", + "XTrain, XTest = X[:100], X[100:]\n", + "YTrain, YTest = Y[:100], Y[100:]\n", + "\n", + "# Macierz parametrów początkowych\n", + "thetaTemp = np.ones(5).reshape(5,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": [ + "g = seaborn.pairplot(data_iris, hue='Gatunek', size=1.75, aspect=1.5) " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Od regresji logistycznej dwuklasowej do wieloklasowej\n", + "\n", + "* Irysy są przydzielone do trzech klas: _Iris-setosa_ (0), _Iris-versicolor_ (1), _Iris-virginica_ (2).\n", + "* Wiemy, jak stworzyć klasyfikatory typu _Iris-setosa_ vs. _Nie-Iris-setosa_ (tzw. _one-vs-all_).\n", + "* Możemy stworzyć trzy klasyfikatory $h_{\\theta_1}, h_{\\theta_2}, h_{\\theta_3}$ (otrzymując trzy zestawy parametrów $\\theta$) i wybrać klasę o najwyższym prawdopodobieństwie." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Funkcja _softmax_\n", + "\n", + "Odpowiednikiem funkcji logistycznej dla wieloklasowej regresji logistycznej jest funkcja $\\mathrm{softmax}$:\n", + "\n", + "$$ \\textrm{softmax}(k,x_1,\\dots,x_n) = \\dfrac{e^{x_k}}{\\sum_{i=i}^{n}e^{x_i}} $$\n", + "\n", + "$$P(y=c|x;\\theta_1,\\ldots,\\theta_k) = \\textrm{softmax}(c,\\theta_1^Tx,\\ldots,\\theta_k^Tx)$$" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('X5 =', matrix([[ 1. , 5.2, 3.4, 1.4, 0.2],\n", + " [ 1. , 5.1, 3.7, 1.5, 0.4],\n", + " [ 1. , 6.7, 3.1, 5.6, 2.4]]))\n", + "('softmax =', matrix([[ 0.00175241, 0.11686208, 0.01931717, 0.0026143 , 0.00078741],\n", + " [ 0.00175241, 0.10574119, 0.02607546, 0.00288924, 0.00096175],\n", + " [ 0.00175241, 0.52373952, 0.01431051, 0.17433774, 0.00710639]]))\n" + ] + } + ], + "source": [ + "# Zapis macierzowy funkcji softmax\n", + "def softmax(X):\n", + " return np.exp(X) / np.sum(np.exp(X))\n", + "\n", + "X5 = X[:3]\n", + "print(\"X5 =\", X5)\n", + "print(\"softmax =\", softmax(X5))" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 2.1]\n", + " [ 0.5]\n", + " [ 0.8]\n", + " [ 0.9]\n", + " [ 3.2]]\n", + "('Suma X =', 7.5000000000000009, '\\n')\n", + "[[ 0.20921428]\n", + " [ 0.04223963]\n", + " [ 0.05701754]\n", + " [ 0.06301413]\n", + " [ 0.62851442]]\n", + "('Suma P =', 0.99999999999999989)\n" + ] + } + ], + "source": [ + "XN = np.matrix([2.1, 0.5, 0.8, 0.9, 3.2]).reshape(5,1)\n", + "P = softmax(XN)\n", + "print(XN)\n", + "print(\"Suma X =\", np.sum(XN), \"\\n\")\n", + "print(P)\n", + "print(\"Suma P =\", np.sum(P)) " + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(matrix([[ 0.5672792 ],\n", + " [ 0.34410521],\n", + " [ 1.21453693],\n", + " [-2.06603751],\n", + " [-0.71099741]]), '\\n')\n", + "(matrix([[ 0.40938528],\n", + " [ 0.07134866],\n", + " [-0.93345289],\n", + " [ 0.62108863],\n", + " [-0.8021439 ]]), '\\n')\n", + "(matrix([[-0.13931903],\n", + " [-1.53046299],\n", + " [-2.02411945],\n", + " [ 2.24311323],\n", + " [ 2.75874817]]), '\\n')\n" + ] + } + ], + "source": [ + "def trainMaxEnt(X, Y):\n", + " n = X.shape[1]\n", + " thetas = []\n", + " for c in range(Y.shape[1]):\n", + " YBi = Y[:,c]\n", + " theta = np.matrix(np.random.random(n)).reshape(n,1)\n", + " thetaBest, errors = GD(h, J, dJ, theta, \n", + " X, YBi, alpha=0.1, eps=10**-4)\n", + " thetas.append(thetaBest)\n", + " return thetas\n", + "\n", + "thetas = trainMaxEnt(XTrain, YTrain);\n", + "for theta in thetas:\n", + " print(theta, \"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Funkcja decyzyjna wieloklasowej regresji logistycznej\n", + "\n", + "$$ c = \\mathop{\\textrm{arg}\\,\\textrm{max}}_{i \\in \\{1, \\ldots ,k\\}} P(y=i|x;\\theta_1,\\ldots,\\theta_k) $$" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('YTest =', matrix([[ 0., 0., 1.],\n", + " [ 1., 0., 0.],\n", + " [ 0., 0., 1.],\n", + " [ 0., 0., 1.],\n", + " [ 0., 0., 1.],\n", + " [ 1., 0., 0.]]))\n", + "('YTestCls =', matrix([[ 2.],\n", + " [ 0.],\n", + " [ 2.],\n", + " [ 2.],\n", + " [ 2.],\n", + " [ 0.]]), '\\n')\n" + ] + } + ], + "source": [ + "def classify(thetas, X, debug=False):\n", + " regs = np.array([(X*theta).item() for theta in thetas])\n", + " if debug:\n", + " print(\"regs =\", regs)\n", + " probs = softmax(regs)\n", + " if debug:\n", + " print(\"probs =\", np.around(probs,decimals=3))\n", + " return np.argmax(probs), probs\n", + "\n", + "print(\"YTest =\", YTest[:6])\n", + "YTestCls = YTest * np.matrix((0,1,2)).T\n", + "print(\"YTestCls =\", YTestCls[:6], \"\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Ewaluacja" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('regs =', array([-7.69442729, 0.69221651, 1.91571479]))\n", + "('probs =', array([ 0. , 0.227, 0.773]))\n", + "(2, ' <=>', 2, ' -- ', True, [0.0001, 0.2273, 0.7726])\n", + "('regs =', array([ 2.75684328, -1.41961889, -9.58991675]))\n", + "('probs =', array([ 0.985, 0.015, 0. ]))\n", + "(0, ' <=>', 0, ' -- ', True, [0.9849, 0.0151, 0.0])\n", + "('regs =', array([-7.02867886, 0.09552286, 1.9497746 ]))\n", + "('probs =', array([ 0. , 0.135, 0.865]))\n", + "(2, ' <=>', 2, ' -- ', True, [0.0001, 0.1354, 0.8645])\n", + "('regs =', array([-5.57547589, -0.24632327, 1.16421515]))\n", + "('probs =', array([ 0.001, 0.196, 0.803]))\n", + "(2, ' <=>', 2, ' -- ', True, [0.001, 0.196, 0.8031])\n", + "('regs =', array([-6.74108941, 0.77272949, 1.68582768]))\n", + "('probs =', array([ 0. , 0.286, 0.714]))\n", + "(2, ' <=>', 2, ' -- ', True, [0.0002, 0.2863, 0.7135])\n", + "('regs =', array([ 3.36547865, -2.11080509, -11.38109326]))\n", + "('probs =', array([ 0.996, 0.004, 0. ]))\n", + "(0, ' <=>', 0, ' -- ', True, [0.9958, 0.0042, 0.0])\n", + "('\\nAccuracy =', 1.0)\n" + ] + } + ], + "source": [ + "acc = 0.0\n", + "for i in range(len(YTestCls)):\n", + " cls, probs = classify(thetas, XTest[i], i < 6)\n", + " correctCls = int(YTestCls[i].item())\n", + " if i < 6:\n", + " print(correctCls, \" <=>\", cls, \" -- \", cls == correctCls, np.round(probs, 4).tolist())\n", + " acc += correctCls == cls\n", + "print(\"\\nAccuracy =\", acc/len(XTest))" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w2/zumz182a.pdf b/w2/zumz182a.pdf new file mode 100644 index 0000000..63461a5 Binary files /dev/null and b/w2/zumz182a.pdf differ diff --git a/w2/zumz182b.ipynb b/w2/zumz182b.ipynb new file mode 100644 index 0000000..fcf8848 --- /dev/null +++ b/w2/zumz182b.ipynb @@ -0,0 +1,1921 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe UMZ 2017/2018\n", + "# 2. Regresja logistyczna\n", + "### Część 2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.5. Regresja wielomianowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Wybór cech" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Zadanie: przewidzieć cenę działki o kształcie prostokąta.\n", + "\n", + "Jakie cechy wybrać?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + " * $x_1$ – szerokość działki, $x_2$ – długość działki:\n", + "$$ h_{\\theta}(\\vec{x}) = \\theta_0 + \\theta_1 x_1 + \\theta_2 x_2 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + " * $x_1$ – powierzchnia działki:\n", + "$$ h_{\\theta}(\\vec{x}) = \\theta_0 + \\theta_1 x_1 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Regresja wielomianowa" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przydtne importy\n", + "\n", + "import ipywidgets as widgets\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przydatne funkcje\n", + "\n", + "# Wersja macierzowa funkcji kosztu\n", + "def cost(theta, X, y):\n", + " m = len(y)\n", + " J = 1.0 / (2.0 * m) * ((X * theta - y).T * (X * theta - y))\n", + " return J.item()\n", + "\n", + "# Wersja macierzowa gradientu funkcji kosztu\n", + "def gradient(theta, X, y):\n", + " return 1.0 / len(y) * (X.T * (X * theta - y)) \n", + "\n", + "# Algorytm gradientu prostego (wersja macierzowa)\n", + "def gradient_descent(fJ, fdJ, theta, X, y, alpha=0.1, eps=10**-5):\n", + " current_cost = fJ(theta, X, y)\n", + " logs = [[current_cost, theta]]\n", + " while True:\n", + " theta = theta - alpha * fdJ(theta, X, y)\n", + " current_cost, prev_cost = fJ(theta, X, y), current_cost\n", + " if abs(prev_cost - current_cost) > 10**15:\n", + " print('Algorithm does not converge!')\n", + " break\n", + " if abs(prev_cost - current_cost) <= eps:\n", + " break\n", + " logs.append([current_cost, theta]) \n", + " return theta, logs\n", + "\n", + "# Wykres danych (wersja macierzowa)\n", + "def plot_data(X, y, xlabel, ylabel): \n", + " fig = plt.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.scatter([X[:, 1]], [y], c='r', s=50, label='Dane')\n", + " \n", + " ax.set_xlabel(xlabel)\n", + " ax.set_ylabel(ylabel)\n", + " ax.margins(.05, .05)\n", + " plt.ylim(y.min() - 1, y.max() + 1)\n", + " plt.xlim(np.min(X[:, 1]) - 1, np.max(X[:, 1]) + 1)\n", + " return fig\n", + "\n", + "# Wykres funkcji fun\n", + "def plot_fun(fig, fun, X):\n", + " ax = fig.axes[0]\n", + " x0 = np.min(X[:, 1]) - 1.0\n", + " x1 = np.max(X[:, 1]) + 1.0\n", + " Arg = np.arange(x0, x1, 0.1)\n", + " Val = fun(Arg)\n", + " return ax.plot(Arg, Val, linewidth='2')" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych (mieszkania) przy pomocy biblioteki pandas\n", + "\n", + "alldata = pandas.read_csv('data_flats.tsv', header=0, sep='\\t',\n", + " usecols=['price', 'rooms', 'sqrMetres'])\n", + "data = np.matrix(alldata[['sqrMetres', 'price']])\n", + "\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 0:n]\n", + "Xn /= np.amax(Xn, axis=0)\n", + "Xn2 = np.power(Xn, 2) \n", + "Xn2 /= np.amax(Xn2, axis=0)\n", + "Xn3 = np.power(Xn, 3) \n", + "Xn3 /= np.amax(Xn3, axis=0)\n", + "\n", + "X = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n + 1)\n", + "X2 = np.matrix(np.concatenate((np.ones((m, 1)), Xn, Xn2), axis=1)).reshape(m, 2 * n + 1)\n", + "X3 = np.matrix(np.concatenate((np.ones((m, 1)), Xn, Xn2, Xn3), axis=1)).reshape(m, 3 * n + 1)\n", + "y = np.matrix(data[:, -1]).reshape(m, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Postać ogólna regresji wielomianowej:\n", + "\n", + "$$ h_{\\theta}(x) = \\sum_{i=1}^{n} \\theta_i x^i $$" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "# Funkcja regresji wielomianowej\n", + "\n", + "def h_poly(Theta, x):\n", + " return sum(theta * np.power(x, i) for i, theta in enumerate(Theta.tolist()))\n", + "\n", + "def polynomial_regression(theta):\n", + " return lambda x: h_poly(theta, x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Funkcja kwadratowa:\n", + "\n", + "$$ h_{\\theta}(x) = \\theta_0 + \\theta_1 x + \\theta_2 x^2 $$" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nIiIiKeb/AUAiGDKbrPJlAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data(X2, y, xlabel='x', ylabel='y')\n", + "theta_start = np.matrix([0, 0, 0]).reshape(3, 1)\n", + "theta, logs = gradient_descent(cost, gradient, theta_start, X2, y)\n", + "plot_fun(fig, polynomial_regression(theta), X)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Funkcja sześcienna:\n", + "\n", + "$$ h_{\\theta}(x) = \\theta_0 + \\theta_1 x + \\theta_2 x^2 + \\theta_3 x^3 $$" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 397519.38046962]\n", + " [ -841341.14146733]\n", + " [ 2253713.97125102]\n", + " [ -244009.07081946]]\n" + ] + }, + { + "data": { + "image/png": "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\nREREksz/A7DOkj9lyGSTAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data(X3, y, xlabel='x', ylabel='y')\n", + "theta_start = np.matrix([0, 0, 0, 0]).reshape(4, 1)\n", + "theta, _ = gradient_descent(cost, gradient, theta_start, X3, y)\n", + "plot_fun(fig, polynomial_regression(theta), X)\n", + "\n", + "print(theta)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Regresję wielomianową można potraktować jako szczególny przypadek regresji liniowej wielu zmiennych:\n", + "\n", + "$$ h_{\\theta}(x) = \\theta_0 + \\theta_1 x + \\theta_2 x^2 + \\theta_3 x^3 $$\n", + "$$ x_1 = x, \\quad x_2 = x^2, \\quad x_3 = x^3, \\quad \\vec{x} = \\left[ \\begin{array}{ccc} x_0 \\\\ x_1 \\\\ x_2 \\end{array} \\right] $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Uwaga praktyczna: przyda się normalizacja cech, szczególnie skalowanie!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "W ten sposób możemy stosować również inne „pochodne” cechy, np.:\n", + "\n", + "$$ h_{\\theta}(x) = \\theta_0 + \\theta_1 x + \\theta_2 \\sqrt{x} $$\n", + "$$ x_1 = x, \\quad x_2 = \\sqrt{x}, \\quad \\vec{x} = \\left[ \\begin{array}{ccc} x_0 \\\\ x_1 \\end{array} \\right] $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Wielomianowa regresja logistyczna\n", + "\n", + "Podobne modyfikacje cech możemy również stosować dla regresji logistycznej." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def powerme(x1,x2,n):\n", + " X = []\n", + " for m in range(n+1):\n", + " for i in range(m+1):\n", + " X.append(np.multiply(np.power(x1,i),np.power(x2,(m-i))))\n", + " return np.hstack(X)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "matrix([[ 1. , 0.36596696, -0.11214686],\n", + " [ 0. , 0.4945305 , 0.47110656],\n", + " [ 0. , 0.70290604, -0.92257983],\n", + " [ 0. , 0.46658862, -0.62269739],\n", + " [ 0. , 0.87939462, -0.11408015],\n", + " [ 0. , -0.331185 , 0.84447667],\n", + " [ 0. , -0.54351701, 0.8851383 ],\n", + " [ 0. , 0.91979241, 0.41607012],\n", + " [ 0. , 0.28011742, 0.61431157],\n", + " [ 0. , 0.94754363, -0.78307311]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Wczytanie danych\n", + "import pandas\n", + "import numpy as np\n", + "\n", + "alldata = pandas.read_csv('polynomial_logistic.tsv', sep='\\t')\n", + "data = np.matrix(alldata)\n", + "\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 1:]\n", + "\n", + "Xpl = powerme(data[:, 1], data[:, 2], n)\n", + "Ypl = np.matrix(data[:, 0]).reshape(m, 1)\n", + "\n", + "data[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres danych (wersja macierzowa)\n", + "def plot_data_for_classification(X, Y, xlabel, ylabel): \n", + " fig = plt.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " X = X.tolist()\n", + " Y = Y.tolist()\n", + " X1n = [x[1] for x, y in zip(X, Y) if y[0] == 0]\n", + " X1p = [x[1] for x, y in zip(X, Y) if y[0] == 1]\n", + " X2n = [x[2] for x, y in zip(X, Y) if y[0] == 0]\n", + " X2p = [x[2] for x, y in zip(X, Y) if y[0] == 1]\n", + " ax.scatter(X1n, X2n, c='r', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1p, X2p, c='g', marker='o', s=50, label='Dane')\n", + " \n", + " ax.set_xlabel(xlabel)\n", + " ax.set_ylabel(ylabel)\n", + " ax.margins(.05, .05)\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nRQcA9FTPAzgz+7ykNzaZ9SF3f6TXr59w94ckPSRFgxiyel2UUMgjaAEApdDzAM7d37nKf/GSpCtT\nj6+Ip52W9HozuzjuhUumA72VVD9vdzoAAF2W9yCGdnxF0lA84rRf0u2SDntU/+QJSbfFy+2UlFmP\nHgAAQF7yLiNyq5m9KOnHJH3OzI7G03/AzI5IUty79kuSjkr6uqTfd/cT8b+4T9IeM5tRlBP3P7Je\nBwAAgKxRyBcAAKAggijkCwAAgM4RwAEAAASGAA4AACAwBHAAAACBIYADAAAIDAEcAABAYAjgAAAA\nAlPJOnBmdkrS/+3xy1wq6a96/BpFVNX1lqq77lVdb6m6617V9Zaqu+5VXW8p+3V/k7tfttxClQzg\nsmBmU+0U4iubqq63VN11r+p6S9Vd96qut1Tdda/qekvFXXdOoQIAAASGAA4AACAwBHC981DeDchJ\nVddbqu66V3W9peque1XXW6ruuld1vaWCrjs5cAAAAIGhBw4AACAwBHAAAACBIYBbBTP7R2Z2wszq\nZtZyiLGZ3Wxmz5nZjJntTU2/2sy+HE+fMLP+bFq+Oma23sweNbPp+O8lTZb5CTN7JnX7f2Y2Gs/7\npJl9KzVvS/ZrsTLtrHu83PnU+h1OTS/zZ77FzL4UbxNfNbOx1LygPvNW22xq/tr485uJP8+rUvM+\nGE9/zsx+Mst2d0Mb677HzL4Wf8aPmdmbUvOafu9D0MZ6v8/MTqXW7xdT83bG28a0me3MtuWr18a6\n70ut9zfM7HupeSF/5p8ws++Y2fEW883MPhq/L181sxtS8/L/zN2d2wpvkn5I0g9K+oKk4RbLXCTp\nm5KukdQv6c8lXRvP+31Jt8f3f0vSv8h7ndpc79+QtDe+v1fSry+z/HpJr0j6W/HjT0q6Le/16OW6\nSzrTYnppP3NJf1fSUHz/ByS9LOn1oX3mS22zqWX+paTfiu/fLmkivn9tvPxaSVfH/+eivNepy+v+\nE6lt+V8k6x4/bvq9L/qtzfV+n6T/0uS56yU9H/+9JL5/Sd7r1M11b1j+X0v6ROifedz2H5d0g6Tj\nLeaPSPojSSbpRyV9uUifOT1wq+DuX3f355ZZ7CZJM+7+vLuflfQZSdvNzCS9XdLD8XKfkjTau9Z2\n1XZF7ZXaa/dtkv7I3V/taauy0em6X1D2z9zdv+Hu0/H9k5K+I2nZauIF1HSbbVgm/X48LOkd8ee7\nXdJn3H3O3b8laSb+f6FYdt3d/YnUtvykpCsybmMvtPOZt/KTkh5191fc/buSHpV0c4/a2Qudrvsd\nkj6dSct6zN3/RFHnQivbJf2OR56U9Hozu1wF+cwJ4Hpvo6Rvpx6/GE/bIOl77v5aw/QQvMHdX47v\n/4WkNyyz/O1avMH/Wtwlvc/M1na9hb3T7rq/zsymzOzJ5NSxKvSZm9lNio7mv5maHMpn3mqbbbpM\n/Hn+taLPt53nFlmn7d+lqIci0ex7H4J21/un4+/ww2Z2ZYfPLaq22x+fLr9a0uOpyaF+5u1o9d4U\n4jO/OOsXDI2ZfV7SG5vM+pC7P5J1e7Ky1HqnH7i7m1nLWjTx0coPSzqamvxBRUFAv6L6OvdJun+1\nbe6WLq37m9z9JTO7RtLjZvasoh/5wuryZ/67kna6ez2eXOjPHJ0zs5+VNCxpW2ryou+9u3+z+X8I\nzmclfdrd58zsnynqgX17zm3K2u2SHnb386lpZf7MC40Abhnu/s5V/ouXJF2ZenxFPO20ou7Yi+Mj\n+GR6ISy13mb2l2Z2ubu/HP9Yf2eJf/Uzkg66+7nU/056cubM7LclfaArje6Sbqy7u78U/33ezL4g\n6S2S/lAl/8zN7PskfU7RAc6Tqf9d6M+8QattttkyL5rZxZK+X9E23c5zi6yt9pvZOxUF9tvcfS6Z\n3uJ7H8KP+bLr7e6nUw/HFeWFJs99W8Nzv9D1FvZOJ9/Z2yX9q/SEgD/zdrR6bwrxmXMKtfe+ImnI\notGH/Yo2gMMeZUI+oSg/TJJ2SgqlR++wovZKy7d7Ub5EHAAkOWGjkpqOACqoZdfdzC5JThGa2aWS\n3irpa2X/zOPv90FFOSMPN8wL6TNvus02LJN+P26T9Hj8+R6WdLtFo1SvljQk6U8zanc3LLvuZvYW\nSR+XdIu7fyc1ven3PrOWr04763156uEtkr4e3z8q6d3x+l8i6d1aeMah6Nr5vsvM3qwoYf9LqWkh\nf+btOCzp5+LRqD8q6a/jg9FifOZZj5oo003SrYrOfc9J+ktJR+PpPyDpSGq5EUnfUHRU8qHU9GsU\n7dxnJP2BpLV5r1Ob671B0mOSpiV9XtL6ePqwpPHUclcpOlLpa3j+45KeVfQj/nuS1uW9Tt1cd0n/\nIF6/P4//7qrCZy7pZyWdk/RM6rYlxM+82Tar6JTvLfH918Wf30z8eV6Teu6H4uc9J+k9ea9LD9b9\n8/H+LvmMD8fTW37vQ7i1sd4fkXQiXr8nJL059dxfiL8LM5J+Pu916fa6x4//vaQHGp4X+mf+aUWj\n5c8p+i3fJemfS/rn8XyT9LH4fXlWqWoTRfjMuZQWAABAYDiFCgAAEBgCOAAAgMAQwAEAAASGAA4A\nACAwBHAAAACBIYADAAAIDAEcAABAYAjgAKADZvaEmb0rvv+rZvabebcJQPVwLVQA6MyHJd1vZn9b\n0XUfb8m5PQAqiCsxAECHzOyLktZJepu718zsGkWX0Pp+d79t6WcDwOpxChUAOmBmPyzpckln3b0m\nSe7+vLvvyrdlAKqEAA4A2mRml0s6IGm7pDNmdnPOTQJQUQRwANAGM/tbkiYl3evuX5f0HxTlwwFA\n5siBA4BVMrMNkn5N0rskjbv7R3JuEoCSI4ADAAAIDKdQAQAAAkMABwAAEBgCOAAAgMAQwAEAAASG\nAA4AACAwBHAAAACBIYADAAAIDAEcAABAYP4/4wZfiyogf2EAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xpl, Ypl, xlabel=r'$x_1$', ylabel=r'$x_2$')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Propozycja hipotezy:\n", + "\n", + "$$ h_\\theta(x) = g(\\theta^T x) = g(\\theta_0 + \\theta_1 x_1 + \\theta_2 x_2 + \\theta_3 x_3 + \\theta_4 x_4 + \\theta_5 x_5) \\; , $$\n", + "\n", + "gdzie $g$ – funkcja logistyczna, $x_3 = x_1^2$, $x_4 = x_2^2$, $x_5 = x_1 x_2$." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def safeSigmoid(x, eps=0):\n", + " y = 1.0/(1.0 + np.exp(-x))\n", + " if eps > 0:\n", + " y[y < eps] = eps\n", + " y[y > 1 - eps] = 1 - eps\n", + " return y\n", + "\n", + "def h(theta, X, eps=0.0):\n", + " return safeSigmoid(X*theta, eps)\n", + "\n", + "def J(h,theta,X,y, lamb=0):\n", + " m = len(y)\n", + " f = h(theta, X, eps=10**-7)\n", + " j = -np.sum(np.multiply(y, np.log(f)) + \n", + " np.multiply(1 - y, np.log(1 - f)), axis=0)/m\n", + " if lamb > 0:\n", + " j += lamb/(2*m) * np.sum(np.power(theta[1:],2))\n", + " return j\n", + "\n", + "def dJ(h,theta,X,y,lamb=0):\n", + " g = 1.0/y.shape[0]*(X.T*(h(theta,X)-y))\n", + " if lamb > 0:\n", + " g[1:] += lamb/float(y.shape[0]) * theta[1:] \n", + " return g\n", + "\n", + "def classifyBi(theta, X):\n", + " prob = h(theta, X)\n", + " return prob" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Metoda gradientu prostego dla regresji logistycznej\n", + "def GD(h, fJ, fdJ, theta, X, y, alpha=0.01, eps=10**-3, maxSteps=10000):\n", + " errorCurr = fJ(h, theta, X, y)\n", + " errors = [[errorCurr, theta]]\n", + " while True:\n", + " # oblicz nowe theta\n", + " theta = theta - alpha * fdJ(h, theta, X, y)\n", + " # raportuj poziom błędu\n", + " errorCurr, errorPrev = fJ(h, theta, X, y), errorCurr\n", + " # kryteria stopu\n", + " if abs(errorPrev - errorCurr) <= eps:\n", + " break\n", + " if len(errors) > maxSteps:\n", + " break\n", + " errors.append([errorCurr, theta]) \n", + " return theta, errors" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "theta = [[ 1.59558981]\n", + " [ 0.12602307]\n", + " [ 0.65718518]\n", + " [-5.26367581]\n", + " [ 1.96832544]\n", + " [-6.97946065]]\n" + ] + } + ], + "source": [ + "# Uruchomienie metody gradientu prostego dla regresji logistycznej\n", + "theta_start = np.matrix(np.zeros(Xpl.shape[1])).reshape(Xpl.shape[1],1)\n", + "theta, errors = GD(h, J, dJ, theta_start, Xpl, Ypl, \n", + " alpha=0.1, eps=10**-7, maxSteps=10000)\n", + "print(r'theta = {}'.format(theta))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres granicy klas\n", + "def plot_decision_boundary(fig, theta, X):\n", + " ax = fig.axes[0]\n", + " xx, yy = np.meshgrid(np.arange(-1.0, 1.0, 0.02),\n", + " np.arange(-1.0, 1.0, 0.02))\n", + " l = len(xx.ravel())\n", + " C = powerme(xx.reshape(l, 1), yy.reshape(l, 1), n)\n", + " z = classifyBi(theta, C).reshape(int(np.sqrt(l)), int(np.sqrt(l)))\n", + "\n", + " plt.contour(xx, yy, z, levels=[0.5], lw=3);" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/pawel/.local/lib/python2.7/site-packages/matplotlib/contour.py:967: UserWarning: The following kwargs were not used by contour: 'lw'\n", + " s)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xpl, Ypl, xlabel=r'$x_1$', ylabel=r'$x_2$')\n", + "plot_decision_boundary(fig, theta, Xpl)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych\n", + "\n", + "alldata = pandas.read_csv('polynomial_logistic.tsv', sep='\\t')\n", + "data = np.matrix(alldata)\n", + "\n", + "m, n_plus_1 = data.shape\n", + "Xn = data[:, 1:]\n", + "\n", + "n = 10\n", + "Xpl = powerme(data[:, 1], data[:, 2], n)\n", + "Ypl = np.matrix(data[:, 0]).reshape(m, 1)\n", + "\n", + "theta_start = np.matrix(np.zeros(Xpl.shape[1])).reshape(Xpl.shape[1],1)\n", + "theta, errors = GD(h, J, dJ, theta_start, Xpl, Ypl, \n", + " alpha=0.1, eps=10**-7, maxSteps=10000)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Przykład dla większej liczby cech\n", + "fig = plot_data_for_classification(Xpl, Ypl, xlabel=r'$x_1$', ylabel=r'$x_2$')\n", + "plot_decision_boundary(fig, theta, Xpl)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.6. Problem nadmiernego dopasowania" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Obciążenie a wariancja" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Dane do prostego przykładu\n", + "\n", + "data = np.matrix([\n", + " [0.0, 0.0],\n", + " [0.5, 1.8],\n", + " [1.0, 4.8],\n", + " [1.6, 7.2],\n", + " [2.6, 8.8],\n", + " [3.0, 9.0],\n", + " ])\n", + "\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn1 = data[:, 0:n]\n", + "Xn1 /= np.amax(Xn1, axis=0)\n", + "Xn2 = np.power(Xn1, 2) \n", + "Xn2 /= np.amax(Xn2, axis=0)\n", + "Xn3 = np.power(Xn1, 3) \n", + "Xn3 /= np.amax(Xn3, axis=0)\n", + "Xn4 = np.power(Xn1, 4) \n", + "Xn4 /= np.amax(Xn4, axis=0)\n", + "Xn5 = np.power(Xn1, 5) \n", + "Xn5 /= np.amax(Xn5, axis=0)\n", + "\n", + "X1 = np.matrix(np.concatenate((np.ones((m, 1)), Xn1), axis=1)).reshape(m, n + 1)\n", + "X2 = np.matrix(np.concatenate((np.ones((m, 1)), Xn1, Xn2), axis=1)).reshape(m, 2 * n + 1)\n", + "X5 = np.matrix(np.concatenate((np.ones((m, 1)), Xn1, Xn2, Xn3, Xn4, Xn5), axis=1)).reshape(m, 5 * n + 1)\n", + "y = np.matrix(data[:, -1]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nP+LW5Zyqu4/aAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data(X1, y, xlabel='x', ylabel='y')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmAAAAFoCAYAAADw0EcgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8VPW9//H3JzskIWxh3yHsS6LU\npaJWrEvRioqY+Oh+ubW9ty1RrFu1al1qcUP0trc/rt3ubUsiioqKS11aReuCJuxLwr4TtjAJZJ3v\n74+JShEkCZlzZnk9Hw8eSWYmc94cJod3zvIZc84JAAAA3knwOwAAAEC8oYABAAB4jAIGAADgMQoY\nAACAxyhgAAAAHqOAAQAAeCxsBczMfm9mu81s+RG3dTazv5lZWdPHTuFaPgAAQKQK5x6wP0q6+Kjb\nbpH0unMuR9LrTV8DAADEFQvnIFYzGyDpBefc6Kav10j6inNuh5n1lPR359ywsAUAAACIQF6fA9bd\nObej6fOdkrp7vHwAAADfJfm1YOecM7Pj7n4zs2slXStJ6enppw4fPtyzbACAk7dp7yEdrKlXekqi\nBmZnyPwOBITBRx99tMc5l93S7/O6gO0ys55HHILcfbwHOufmSJojSePHj3eLFy/2KiMA4CT95f1N\nuu2Z5eqRlqSXCs9Wn07t/Y4EhIWZbWrN93l9CHKBpO80ff4dSc95vHwAQJiV7w7onhdWSpLuu2IM\n5Qs4hnCOoZgr6Z+ShpnZVjObJulXki4wszJJX236GgAQI2obGvWTuaWqqQ9qyil9dNm4Xn5HAiJS\n2A5BOueuOc5d54drmQAAfz3w8hqt2nFQ/bu01y8mj/I7DhCxmIQPAGgT/1hbod8t2qCkBNPsgjxl\npPp2nRcQ8ShgAICTtqeqVjc8uUSSdP0FQ5Xbt6PPiYDIRgEDAJwU55xunLdEe6pqdfrAzvrhuYP9\njgREPAoYAOCk/O8/N+nNNRXKapesWfm5Skxg4hdwIhQwAECrrd55UPctXCVJuv/KMerVsZ3PiYDo\nQAEDALRKTX2jCueWqq4hqPzxfTVpTE+/IwFRgwIGAGiV+xeu0ppdAQ3qmq47vj7S7zhAVKGAAQBa\n7I3Vu/Snf25ScmJo5EQ6IyeAFqGAAQBaZHegRj+dt1SS9NMLh2lMnyyfEwHRhwIGAGi2YNDphieX\naF91nc4a0kXfP3uQ35GAqEQBAwA02+/f2aC3y/aoU/tkPTw1VwmMnABahQIGAGiWFdsr9cDLayRJ\nM6eMVY+sNJ8TAdGLAgYAOKHDdY2aPrdEdY1BfeP0frpwVA+/IwFRjQIGADihe19cqXUV1RrSLUO3\nX8LICeBkUcAAAF/olRU79Zf3NyslMUGzC3LVLiXR70hA1KOAAQCOa2dljW5+OjRy4qaLh2lUL0ZO\nAG2BAgYAOKZg0GnGk6U6cKhe5wzN1r+dNdDvSEDMoIABAI5pztvr9e66veqSnqKHpo5l5ATQhihg\nAIDPWbr1gB56JTRy4sGpY9Utk5ETQFvizbsAAP+iurZBhUWlagg6fefM/po4vHvLnyQQkIqLpbIy\nKSdHys+XMjPbPiwQpShgAIB/cffzK7VhT7WGdc/UrZNGtPwJFi2SJk2SgkGpulpKT5dmzJAWLpQm\nTGj7wEAU4hAkAOBTC5ftUPHiLUpJStDsa3KVltzCkROBQKh8BQKh8iWFPn5ye1VV24cGohAFDAAg\nSdp+4LBuaRo5cdukERreo0PLn6S4OLTn61iCwdD9AChgAACpMeh0XXGpDtY0aOLwbvr2mf1b90Rl\nZZ/t+TpadbVUXt76kEAMoYABAPTbf6zTBxv2qWtGqh64aqzMWjlyIicndM7XsaSnS0OGtD4kEEM4\nCR8A4tERVymW9B2pR7Z1lSQ9fPU4dc1Ibf3z5ueHTrg/loSE0P0AKGAAEHeOuEqxqj6own97XI1Z\n0rSBKTp3aPbJPXdmZuhqx6OvgkxICN2ekdE2fwcgylHAACCeHHmVoqQ7Jl2vzVk9NGLXet302zul\nb2w++ZI0YYK0fXtoD1t5eeiwY34+5Qs4AgUMAOLJEVcpPjfiHM0fc77S6mv02PMPKrWhLnT/tGkn\nv5yMjLZ5HiBGUcAAIJ40XaW4pUM33X7RjyRJt7/xO+Xs3RK6n6sUAU9wFSQAxJOcHDVkZOr6r9+g\nQGq6Llj7T32j9KXQfVylCHiGAgYA8SQ/X//1pSla3GeUugX2aubLj+vTgRNcpQh4hkOQABBHPtpX\nr8dOu0rmgpr1+m/U+fBBrlIEfEABA4A4cbCmXoVFpQpK+sGX++msod+Xys/jKkXABxQwAIgTP392\nubbuP6zRvTvohkvGSEnj/I4ExC3OAQOAOPBMyVY9V7pd7ZITNbsgTylJbP4BP/ETCAAxbvPeQ/r5\nsyskSXddNlKDsznUCPiNAgYAMay+MajpRSWqqm3Q10b30NXj+/odCYAoYAAQ0x57vUylWw6oZ1aa\n7r9yjMzsxN8EIOwoYAAQo95fv1e/frNcZtKs/Fx1bJ/idyQATShgABCDKg/V6/riUgWd9J9fGawz\nBnXxOxKAI1DAACDGOOf0s2eXaXtljcb17ajrvjrU70gAjkIBA4AYM++jrXpx6Q6lpyRqdn6ukhPZ\n1AORhp9KAIghG/ZU664FoZETv5g8WgO6pvucCMCxUMAAIEbUNQRVWFSiQ3WN+vq4XppySm+/IwE4\nDgoYAMSIWa+t1dKtlerdsZ3uvXw0IyeACEYBA4AY8O66PfrtP9YpwaRHC3KV1S7Z70gAvgAFDACi\n3P7qOs0oXiLnpB9PzNGXBnT2OxKAE/ClgJnZ9Wa2wsyWm9lcM0vzIwcARDvnnG6Zv1Q7D9bolH4d\nNX3iEL8jAWgGzwuYmfWWNF3SeOfcaEmJkgq8zgEAsaDowy16ZcUuZaYmaXZBnpIYOQFEBb9+UpMk\ntTOzJEntJW33KQcARK3y3VX6xfOhkRP3XjFafTu39zkRgObyvIA557ZJekjSZkk7JFU65149+nFm\ndq2ZLTazxRUVFV7HBICIVtvQqMKiEtXUB3VFXm9NzmXkBBBN/DgE2UnSZEkDJfWSlG5m3zz6cc65\nOc658c658dnZ2V7HBICI9tAra7Ri+0H17dxOd08e5XccAC3kxyHIr0ra4JyrcM7VS5ov6cs+5ACA\nqPR2WYX+5+0NSkwwzS7IU2YaIyeAaONHAdss6Qwza2+hKYHnS1rlQw4AiDp7q2o148klkqTrzs/R\nKf06+ZwIQGv4cQ7Y+5KekvSxpGVNGeZ4nQMAoo1zTjc/vVQVgVqdNqCz/vM8Rk4A0SrJj4U65+6U\ndKcfywaAaPXn9zbptVW7lZmWpFkFuUpM4K2GgGjFwBgAiAJrdwV074uhszXuv3KMends53MiACeD\nAgYAEa6mvlHT55aotiGoqaf20aVje/kdCcBJooABQISb+fJqrd4Z0IAu7XXXZYycAGIBBQwAItib\na3brD+9sVFLTyIn0VF9O3QXQxihgABChKgK1unFeaOTEjAuHalzfjj4nAtBWKGAAEIGcc7rxqSXa\nU1WnMwd10Q/OGex3JABtiAIGABHoj+9u1N/XVCirXbIeyR/HyAkgxlDAACDCrNpxUPcvXC1Jmjll\njHpmMXICiDUUMACIIJ+MnKhrDOqa0/rq4tE9/Y4EIAwoYAAQQe57cZXKdldpUHa6fn7pSL/jAAgT\nChgARIjXVu7S/723ScmJpscK8tQ+hZETQKyigAFABNh9sEY3Pb1UknTTRcM1uneWz4kAhBMFDAB8\nFgw63TBvifZV1+nsnK6aNmGg35EAhBn7twHEt0BAKi6WysqknBwpP1/KzPQ0wu8WbdDbZXvUOT1F\nD08dpwRGTgAxjwIGIH4tWiRNmiQFg1J1tZSeLs2YIS1cKE2Y4EmE5dsq9cArn4ycGKtuHdI8WS4A\nf3EIEkB8CgRC5SsQCJUvKfTxk9urqsIe4VBdg6YXlai+0elbZ/TXBSO7h32ZACIDBQxAfCouDu35\nOpZgMHR/mN3zwiqtr6hWTrcM3XbJiLAvD0DkoIABiE9lZZ/t+TpadbVUXh7Wxb+8fKfmfrBZKUkJ\neuyaPKUlJ4Z1eQAiCwUMQHzKyQmd83Us6enSkCFhW/SOysO6ZX5o5MQtFw/XiJ4dwrYsAJGJAgYg\nPuXnSwnH2QQmJITuD4PGoNOM4iU6cKheXxmWre+dNSAsywEQ2ShgAOJTZmboasfMzM/2hKWnf3Z7\nRkZYFjvnrfX65/q96pqRogevGiczRk4A8YgxFADi14QJ0vbtoRPuy8tDhx3z88NWvpZsOaCHX10j\nSXrwqnHKzkwNy3IARD4KGID4lpEhTZsW9sVU1zaosKhEDUGn7355gM4b3i3sywQQuTgECQAeuGvB\nCm3ce0jDe2Tqlq8N9zsOAJ9RwAAgzF5Yul3zPtqqVEZOAGhCAQOAMNp24LBunb9MknT7JSM0tLu3\n7zMJIDJRwAAgTBqDTtcXlSpQ06Cvjuimb57R3+9IACIEBQwAwuQ3b5brg437lJ2ZqplTxjJyAsCn\nKGAAEAYfb96vR18vkyQ9cvU4dclg5ASAz1DAAKCNBWrqdV1RqRqDTt8/e6DOzsn2OxKACEMBA4A2\ndudzK7R53yGN7NlBP71omN9xAEQgChgAtKHnSrdpfsk2pSWHRk6kJjFyAsDnUcAAoI1s2XdItz+z\nXJJ059dHaUi38LylEYDoRwEDgDbQ0BjUdcWlCtQ26KJR3VXwpb5+RwIQwShgANAGHn+jXB9t2q8e\nHdL0qysZOQHgi1HAAOAkLd64T4+/USYz6ZH8ceqUnuJ3JAARjgIGACeh8nC9CotKFXTSD88drC8P\n7up3JABRgAIGAK3knNPtzy7XtgOHNbZPlq7/6lC/IwGIEhQwAGil+R9v0/NLtqt9SqJmF+QpJYlN\nKoDmYWsBAK2waW+17nguNHLirstGaWDXdJ8TAYgmFDAAaKH6xqCmF5Wquq5Rl4ztqamn9vE7EoAo\nQwEDgBaa/VqZlmw5oF5Zafrl5WMYOQGgxShgANAC763fq1//vVwJJs3Kz1VW+2S/IwGIQhQwAGim\nykP1ur64VM5JPzpviE4f1MXvSACiFAUMAJrBOadbn1mqHZU1yuvXUdPPz/E7EoAoRgEDgGaYt3ir\nFi7bqYzUJM3Oz1NyIptPAK3HFgQATmB9RZXuXLBCknTP5aPUr0t7nxMBiHa+FDAz62hmT5nZajNb\nZWZn+pEDAE6kriGowqJSHa5v1OTcXroij5ETAE5ekk/LnS3pZefcVWaWIolfJwFEpIf/tkbLtlWq\nT6d2uufy0X7HARAjPC9gZpYl6RxJ35Uk51ydpDqvcwDAibxTvkdz3lqvxATT7IJcdUhj5ASAtuHH\nIciBkiok/cHMSszsCTPjPTwARJT91XWa8WRo5MT0iTk6tX9nvyMBiCF+FLAkSadI+m/nXJ6kakm3\nHP0gM7vWzBab2eKKigqvMwKIY8453fz0Uu06WKvx/TvpR+cN9jsSgBjjRwHbKmmrc+79pq+fUqiQ\n/Qvn3Bzn3Hjn3Pjs7GxPAwKIb3/9YLNeXblLmWlJerQgV0mMnADQxjzfqjjndkraYmbDmm46X9JK\nr3MAwLGU7w7onhdCm6T7rhijPp24RghA2/PrKsifSPpL0xWQ6yV9z6ccAPCp2oZG/WRuqWrqg5py\nSh9dNq6X35EAxChfCphzrlTSeD+WDQDH8+DLa7Rqx0H179Jev5g8yu84AGIYJzYAgKS31lboiUUb\nlJRgml2Qp4xUvw4QAIgHFDAAcW9PVa1mPLlEknT9BUOV27ejz4kAxDoKGIC45pzTTU8t1Z6qWp0+\nsLN+eC4jJwCEHwUMQFz7339u0hurdyurXbJm5ecqMcH8jgQgDlDAAMStNTsDum/hKknS/VeOUa+O\n7XxOBCBeUMAAxKWa+kZNn1uiuoag8sf31aQxPf2OBCCOUMAAxKVfvbRaa3YFNKhruu74+ki/4wCI\nMxQwAHHnjdW79Md3Nyo5MTRyIp2REwA8RgEDEFd2B2p047ylkqSfXjhMY/pk+ZwIQDyigAGIG8Gg\n00/nLdXe6jqdNaSLvn/2IL8jAYhTFDAAceMP727UW2sr1Kl9sh6emqsERk4A8AkFDEBcWLG9UjNf\nWi1JmjllrHpkpfmcCEA8o4ABiHmH6xpVWFSqusagvnF6P104qoffkQDEOQoYgJh374srVb67SkO6\nZej2Sxg5AcB/FDAAMe3VFTv1l/c3KyUxQbMLctUuJdHvSABAAQMQu3YdrNHNT4dGTtx08TCN6sXI\nCQCRgQIGICYFg04znizV/kP1Omdotv7trIF+RwKAT1HAAMSk/3l7vd4p36su6Sl6aOpYRk4AiCgU\nMAAxZ9nWSj306hpJ0oNTx6pbJiMnAEQWChiAmHKorkGFRSWqb3T6zpn9NXF4d78jAcDnUMAAxJS7\nn1+p9XuqNax7pm6dNMLvOABwTBQwADHjpWU7VPThFqUkJeixa/KUlszICQCRiQIGICZsP3BYt8xf\nJkm6bdIIDeuR6XMiADg+ChiAqNcYdLq+uFSVh+s1cXg3ffvM/n5HAoAvRAEDEPV++491en/DPnXN\nSNUDV42VGSMnAES2JL8DAIgzgYBUXCyVlUk5OVJ+vpTZ+sOFpVsOaNbf1kqSHr56nLpmpLZVUgAI\nGwoYAO8sWiRNmiQFg1J1tZSeLs2YIS1cKE2Y0OKnq6oNjZxoCDpNmzBQ5w7NDkNoAGh7HIIE4I1A\nIFS+AoFQ+ZJCHz+5vaqqxU9553MrtGnvIY3o2UE3XTysjQMDQPhQwAB4o7g4tOfrWILB0P0tsGDJ\ndj398ValJSfosYJcpSYxcgJA9KCAAfBGWdlne76OVl0tlZc3+6m27j+k254JjZy4/ZKRyunOyAkA\n0YUCBsAbOTmhc76OJT1dGjKkWU/T0BjUdUWlCtQ06IKR3fWN0/u1YUgA8AYFDIA38vOlhONschIS\nQvc3w6/fXKfFm/arW2aqZk5h5ASA6EQBA+CNzMzQ1Y6ZmZ/tCUtP/+z2jIwTPsVHm/bpsTfKJEmP\nXJ2rzukp4UwMAGHDGAoA3pkwQdq+PXTCfXl56LBjfn6zytfBmnoVFpWqMej0g3MGaUJOVw8CA0B4\nUMAAeCsjQ5o2rcXfdsezy7V1/2GN7t1BN1zIyAkA0Y1DkAAi3jMlW/Vs6Xa1S07U7II8pSSx6QIQ\n3U64FTOzn5hZJy/CAMDRNu89pJ8/u0KSdOfXR2pw9okPVwJApGvOr5HdJX1oZk+a2cXGJUcAPFLf\nGFRhcYmqahv0tdE9lP+lvn5HAoA2ccIC5py7XVKOpN9J+q6kMjP7pZkNDnM2AHHu8dfLVLL5gHpm\npen+K8cwcgJAzGjWiRTOOSdpZ9OfBkmdJD1lZg+EMRuAOPbBhn36rzfLZRYaOdGxPSMnAMSOE14F\naWaFkr4taY+kJyTd6JyrN7MESWWSbgpvRADxpvJQva4rKlHQSf/5lcE6c3AXvyMBQJtqzhiKzpKu\ndM5tOvJG51zQzC4NTywA8co5p589u0zbK2s0rk+Wrr9gqN+RAKDNnbCAOefu/IL7VrVtHADx7qmP\nturFpTuUnhIaOZGcyMgJALGHLRuAiLFhT7XuXBAaOfGLyaM1oOtx3rwbAKIcBQxARKhrCKqwqESH\n6hp16diemnJKb78jAUDYUMAARIRZr63V0q2V6t2xne67gpETAGIbBQyA795dt0e//cc6JZj0aEGu\nstol+x0JAMKKAgbAV/ur6zSjeImck348MUdfGtDZ70gAEHa+FTAzSzSzEjN7wa8MAPzlnNOt85dp\n58EandKvo6ZPHOJ3JADwhJ97wAolMcYCiGNFH27Ryyt2KiM1SbML8pTEyAkAccKXrZ2Z9ZF0iUKT\n9QHEofLdVbr7+ZWSpPuuGK2+ndv7nAgAvOPXr5uPKvQWRsHjPcDMrjWzxWa2uKKiwrtkAMKutqFR\nhUUlOlzfqCvyemtyLiMnAMQXzwtY09sX7XbOffRFj3POzXHOjXfOjc/OzvYoHQAvPPzqWq3YflB9\nO7fT3ZNH+R0HADznxx6wsyRdZmYbJRVJmmhmf/YhBwAfvF1WoTlvrVdigml2QZ4y0xg5ASD+eF7A\nnHO3Ouf6OOcGSCqQ9IZz7pte5wDgvb1VtbrhySWSpOvOz9Ep/Tr5nAgA/MElRwA84ZzTzU8v1e5A\nrU4b0Fn/eR4jJwDEryQ/F+6c+7ukv/uZAYA3/vz+Zr22arcy05I0qyBXiQm81RCA+MUeMABht3ZX\nQPe+EBo5cf+VY9S7YzufEwGAvyhgAMKqpr5R0+eWqLYhqKmn9tGlY3v5HQkAfEcBAxBWM19erdU7\nAxrQpb3uuoyREwAgUcAAhNGba3brD+9sVFLTyIn0VF9POwWAiEEBAxAWFYFa3TgvNHJixoVDNa5v\nR58TAUDkoIABaHPOOd341BLtqarTmYO66AfnDPY7EgBEFAoYgDb3x3c36u9rKpTVLlmP5I9j5AQA\nHIUCBqBNrdpxUPcvXC1JmjlljHpmMXICAI5GAQPQZj4ZOVHXGNQ1p/XVxaN7+h0JACISBQxAm7nv\nxVUq212lQdnp+vmlI/2OAwARiwIGoE28tnKX/u+9TUpOND1WkKf2KYycAIDjoYABOGm7D9bopqeX\nSpJuumi4RvfO8jkRAEQ2ChiAkxIMOt0wb4n2Vdfp7JyumjZhoN+RACDiUcAAnJTfLdqgt8v2qHN6\nih6eOk4JjJwAgBOigAFoteXbKvXAK5+MnBirbh3SfE4EANGBAgagVQ7VNWh6UYnqG52+dUZ/XTCy\nu9+RACBqUMAAtMo9L6zS+opq5XTL0G2XjPA7DgBEFQoYgBZ7eflOzf1gs1KSEvTYNXlKS070OxIA\nRBUKGIAW2VF5WLfMD42cuOXi4RrRs4PPiQAg+lDAADRbY9BpRvESHThUr68My9b3zhrgdyQAiEoU\nMADNNuet9frn+r3qmpGiB68aJzNGTgBAa1DAADTLki0H9PCrayRJD141TtmZqT4nAoDoRQEDcELV\ntQ0qLCpRQ9Dpu18eoPOGd/M7EgBENQoYgBO6a8EKbdx7SMN7ZOqWrw33Ow4ARD0KGIAv9MLS7Zr3\n0ValMnICANoMBQzAcW07cFi3zl8mSbr9khEa2j3T50QAEBsoYACOqTHodH1RqQI1DfrqiG765hn9\n/Y4EADGDAgbgmH7zZrk+2LhP2ZmpmjllLCMnAKANUcAAfM7Hm/fr0dfLJEmPXD1OXTIYOQEAbYkC\nBuBfBGrqVVhUosag0/fPHqizc7L9jgQAMYcCBuBf3PncCm3Zd1gje3bQTy8a5nccAIhJFDAAn3qu\ndJvml2xTWnJo5ERqEiMnACAcKGAAJElb9h3S7c8slyTdcekoDemW4XMiAIhdFDAAamgMqrCoRIHa\nBl00qruuOa2v35EAIKZRwADo8TfK9fHmA+rRIU2/upKREwAQbhQwIM59uHGfHn+jTGahkROd0lP8\njgQAMY8CBsSxysP1uq6oVEEn/eCcwfrykK5+RwKAuEABA+KUc063P7tc2w4c1tg+WZpxwVC/IwFA\n3KCAAXFq/sfb9PyS7WqfkqjZBXlKSWJzAABeYYsLxKGNe6p1x3OhkRN3XTZKA7um+5wIAOILBQyI\nM/WNQRUWl6q6rlGXjO2pqaf28TsSAMQdChgQZx59ba2WbDmgXllp+uXlYxg5AQA+oIABceS99Xv1\nm7+vU4JJjxbkKat9st+RACAuUcCAOFF5qF7XF5fKOelH5w3RaQM7+x0JAOIWBQyIA8453frMUu2o\nrFFev46afn6O35EAIK5RwIA4MG/xVi1ctlMZqUmanZ+n5ER+9AHAT2yFgRi3vqJKdy5YIUm65/JR\n6telvc+JAACeFzAz62tmb5rZSjNbYWaFXmcA4kVdQ1CFRaU6XN+oybm9dEUeIycAIBIk+bDMBkk3\nOOc+NrNMSR+Z2d+ccyt9yALEtIf/tkbLtlWqT6d2uufy0X7HAQA08XwPmHNuh3Pu46bPA5JWSert\ndQ4g1r1Tvkdz3lqvxATT7IJcdUhj5AQARApfzwEzswGS8iS972cOINbsr67TjCdDIyemT8zRqf0Z\nOQEAkcS3AmZmGZKelnSdc+7gMe6/1swWm9niiooK7wMCUco5p5ufXqpdB2s1vn8n/ei8wX5HAgAc\nxZcCZmbJCpWvvzjn5h/rMc65Oc658c658dnZ2d4GBKLYXz/YrFdX7lJmWpIeLchVEiMnACDieH4S\nvoXeeO53klY55x7xevlALCvfHdA9L4SuZ7nvijHq0+k4IycCAam4WCork3JypPx8KTPTw6QAEN/8\nuAryLEnfkrTMzEqbbvuZc26hD1mAmFHb0KifzC1VTX1QU07po8vG9Tr2AxctkiZNkoJBqbpaSk+X\nZsyQFi6UJkzwNjQAxCnPC5hzbpEk83q5QKx78OU1WrXjoPp3aa9fTB517AcFAqHyFQh8dlt1dejj\npEnS9u1SRkb4wwJAnOPkECAGvLW2Qk8s2qCkBNPsgjxlpB7nd6vi4tCer2MJBkP3AwDCjgIGRLk9\nVbWa8eQSSdL1FwxVbt+Ox39wWdlne7yOVl0tlZeHISEA4GgUMCCKOed081NLtaeqVqcP7KwfnnuC\nkRM5OaFzvo4lPV0aMqTtQwIAPocCBkSx/3tvk15fvVtZ7ZI1Kz9XiQknOL0yP19KOM6PfUJC6H4A\nQNhRwIAotWZnQPe+uEqSdP+VY9SrY7sTf1NmZuhqx8zMz/aEpad/djsn4AOAJ/wYQwHgJNXUN2r6\n3BLVNQSVP76vJo3p2fxvnjAhdLVjcXHonK8hQ0J7vihfAOAZChgQhX710mqt2RXQoK7puuPrI1v+\nBBkZ0rRpbR8MANAsHIIEoswbq3fpj+9uVHJiaORE+vFGTgAAIhYFDIgiuwM1unHeUknSTy8cpjF9\nsnxOBABoDQoYECWCQacb5y3V3uo6nTWki75/9iC/IwEAWokCBkSJP7y7Uf9YW6FO7ZP18NRcJZxo\n5AQAIGJRwIAosHL7Qc18abUkaeaUseqRleZzIgDAyaCAARHucF2jpheVqK4xqG+c3k8XjurhdyQA\nwEmigAER7r6FK1W+u0pDumUwZTueAAANnElEQVTo9ktaMXICABBxKGBABHt1xU79+b3NSklM0OyC\nXLVLSfQ7EgCgDVDAgAi162CNbn46NHLipouHaVQvRk4AQKyggAERKBh0mvFkqfYfqtc5Q7P1b2cN\n9DsSAKANUcCACPTEovV6p3yvuqSn6KGpYxk5AQAxhgIGRJjl2yr14CtrJEkPTh2rbpmMnACAWEMB\nAyLIoboGTZ9bovpGp++c2V8Th3f3OxIAIAwoYEAEufv5lVq/p1rDumfq1kkj/I4DAAgTChgQIV5a\ntkNFH25RSlKCHrsmT2nJjJwAgFhFAQMiwPYDh3XL/GWSpNsmjdCwHpk+JwIAhBMFDPBZY9PIicrD\n9Zo4vJu+fWZ/vyMBAMKMAgb47Lf/WKf31u9T14xUPXDVWJkxcgIAYh0FDPBR6ZYDmvW3tZKkh68e\np64ZqT4nAgB4gQIG+KSqtkGFRSVqCDpNmzBQ5w7N9jsSAMAjFDDAJ3ctWKFNew9pRM8OuuniYX7H\nAQB4iAIG+OD5Jdv11EdblZacoMcKcpWaxMgJAIgnFDDAY1v3H9LPngmNnLj9kpHK6c7ICQCINxQw\nwEMNjUFdV1SqQE2DLhjZXd84vZ/fkQAAPqCAAR769ZvrtHjTfnXLTNXMKYycAIB4RQEDPPLRpn16\n7I0ymUmz8nPVOT3F70gAAJ9QwAAPHKypV2FRqRqDTteePUhnDenqdyQAgI8oYIAH7nh2ubbuP6zR\nvTvohgsZOQEA8Y4CBoTZMyVb9WzpdrVLTtTsgjylJPFjBwDxjv8JgDDavPeQfv7sCknSXZeN1ODs\nDJ8TAQAiAQUMCJP6xqAKi0tUVdugr43uoavH9/U7EgAgQlDAgDB5/PUylWw+oJ5Zabr/yjGMnAAA\nfIoCBoTBBxv26b/eLP905ETH9oycAAB8hgIGtLHKQ/W6rqhEQSf9x7mDdcagLn5HAgBEGAoY0Iac\nc/rZs8u0vbJG4/pk6foLhvodCQAQgShgQBt66qOtenHpDqWnhEZOJCfyIwYA+Dz+dwDayIY91bpz\nQWjkxC8mj9aAruk+JwIARCoKGNAG6hqCKiwq0aG6Rl06tqemnNLb70gAgAhGAQPawKzX1mrp1kr1\n7thO913ByAkAwBejgAEn6d11e/Tbf6xTgkmPFuQqq12y35EAABGOAgachP3VdZpRvETOST+emKMv\nDejsdyQAQBRI8mOhZnaxpNmSEiU94Zz7lR85gJPhnNOt85dp58EandKvo6ZPHNKyJwgEpOJiqaxM\nysmR8vOlzMzwhAUARBTPC5iZJUr6taQLJG2V9KGZLXDOrfQ6C3Ayij7copdX7FRGapJmF+QpqSUj\nJxYtkiZNkoJBqbpaSk+XZsyQFi6UJkwIX2gAQETw4xDkaZLKnXPrnXN1kookTfYhB9Bq5burdPfz\nod8Z7r18tPp2bt/8bw4EQuUrEAiVLyn08ZPbq6rCkBgAEEn8KGC9JW054uutTbcBUaG2oVGFRSU6\nXN+oK/J66/K8Fr58i4tDe76OJRgM3Q8AiGkRexK+mV1rZovNbHFFRYXfcYBPPfzqWq3YflB9O7fT\n3ZNHtfwJyso+2/N1tOpqqbz85AICACKeHwVsm6S+R3zdp+m2f+Gcm+OcG++cG5+dne1ZOOCLvF1W\noTlvrVdigunR/DxlprVi5EROTuicr2NJT5eGtPBkfgBA1PGjgH0oKcfMBppZiqQCSQt8yAG0yN6q\nWt3w5BJJUuH5OTq1f6fWPVF+vpRwnB+9hITQ/QCAmOZ5AXPONUj6saRXJK2S9KRzboXXOYCWcM7p\n5qeXanegVqcN6KwfnXcSe6kyM0NXO2ZmfrYnLD39s9szMtomNAAgYvkyB8w5t1DSQj+WDbTGn9/f\nrNdW7VZmWpJmFeQqMeEk32powgRp+/bQCffl5aHDjvn5lC8AiBO+FDAgmqzdFdC9L4RGTtx/5Rj1\n7tiubZ44I0OaNq1tngsAEFUi9ipIIBLU1Ddq+twS1TYEddWpfXTp2F5+RwIAxAAKGPAFZr68Wqt3\nBjSgS3vddVkrRk4AAHAMFDDgON5cs1t/eGejkhJMswvylJHKEXsAQNuggAHHUBGo1Y3zQiMnZlw4\nVOP6dvQ5EQAgllDAgKM453TTU0u0p6pOZwzqrB+cM9jvSACAGEMBA47yp3c36s01Fcpql6xZ+W0w\ncgIAgKNQwIAjrN55UL98abUkaeaUMeqZ1UYjJwAAOAIFDGjyyciJuoagrjmtry4e3dPvSACAGEUB\nA5r8cuEqrd1VpUHZ6fr5pSP9jgMAiGEUMEDS66t26X//uUnJiabHCvLUPoWREwCA8KGAIe7tPlij\nG59aKkm68aJhGt07y+dEAIBYRwFDXAsGnW6Yt0T7qus0YUhX/fuEQX5HAgDEAQoY4trv39mgt8v2\nqFP7ZD189TglMHICAOABChji1vJtlZr5cmjkxANXjVP3Dmk+JwIAxAsKGOLS4bpGFRaVqL7R6Ztn\n9NMFI7v7HQkAEEcoYIhL97y4UusqqpXTLUO3TWLkBADAWxQwxJ2Xl+/UX9/frJTEBD12TZ7apST6\nHQkAEGcoYIgrOytrdMv80MiJW742XCN6dvA5EQAgHlHAEDeCQacZT5bqwKF6nTs0W987a4DfkQAA\ncYoChrgx5+31enfdXnXNSNFDU8fJjJETAAB/UMAQF5ZuPaCHXlkjSXrwqnHKzkz1OREAIJ5RwBDz\nqmsbVFhUqoag03e/PEDnDe/mdyQAQJwz55zfGU7IzAKS1vidI450lbTH7xBxhPXtLda3t1jf3mOd\ne2uYcy6zpd+UFI4kYbDGOTfe7xDxwswWs769w/r2FuvbW6xv77HOvWVmi1vzfRyCBAAA8BgFDAAA\nwGPRUsDm+B0gzrC+vcX69hbr21usb++xzr3VqvUdFSfhAwAAxJJo2QMGAAAQMyKygJnZVDNbYWZB\nMzvulRxmdrGZrTGzcjO7xcuMscTMOpvZ38ysrOljp+M8rtHMSpv+LPA6Z7Q70evVzFLNrLjp/vfN\nbID3KWNHM9b3d82s4ojX9L/7kTNWmNnvzWy3mS0/zv1mZo81/XssNbNTvM4YS5qxvr9iZpVHvL7v\n8DpjLDGzvmb2ppmtbOonhcd4TIte4xFZwCQtl3SlpLeO9wAzS5T0a0lfkzRS0jVmNtKbeDHnFkmv\nO+dyJL3e9PWxHHbO5Tb9ucy7eNGvma/XaZL2O+eGSJolaaa3KWNHC7YPxUe8pp/wNGTs+aOki7/g\n/q9Jymn6c62k//YgUyz7o754fUvS20e8vu/2IFMsa5B0g3NupKQzJP3oGNuUFr3GI7KAOedWOedO\nNHj1NEnlzrn1zrk6SUWSJoc/XUyaLOlPTZ//SdLlPmaJVc15vR757/CUpPONN6xsLbYPHnPOvSVp\n3xc8ZLKk/3Uh70nqaGY9vUkXe5qxvtGGnHM7nHMfN30ekLRKUu+jHtai13hEFrBm6i1pyxFfb9Xn\nVwaap7tzbkfT5zsldT/O49LMbLGZvWdmlLSWac7r9dPHOOcaJFVK6uJJutjT3O3DlKZDBU+ZWV9v\nosUtttneO9PMlpjZS2Y2yu8wsaLp9JA8Se8fdVeLXuO+TcI3s9ck9TjGXbc5557zOk+s+6L1feQX\nzjlnZse7NLa/c26bmQ2S9IaZLXPOrWvrrIBHnpc01zlXa2Y/UGjv40SfMwFt5WOFttlVZjZJ0rMK\nHRrDSTCzDElPS7rOOXfwZJ7LtwLmnPvqST7FNklH/sbap+k2HMMXrW8z22VmPZ1zO5p2l+4+znNs\na/q43sz+rtBvABSw5mnO6/WTx2w1syRJWZL2ehMv5pxwfTvnjly3T0h6wINc8YxttoeOLAfOuYVm\n9hsz6+qc4z0iW8nMkhUqX39xzs0/xkNa9BqP5kOQH0rKMbOBZpYiqUASV+a1zgJJ32n6/DuSPrcH\n0sw6mVlq0+ddJZ0laaVnCaNfc16vR/47XCXpDcegvtY64fo+6tyMyxQ6pwPhs0DSt5uuFDtDUuUR\npz6gjZlZj0/OITWz0xT6/55f6FqpaV3+TtIq59wjx3lYi17jEflm3GZ2haTHJWVLetHMSp1zF5lZ\nL0lPOOcmOecazOzHkl6RlCjp9865FT7Gjma/kvSkmU2TtEnS1ZJkoREgP3TO/bukEZL+n5kFFfpB\n/pVzjgLWTMd7vZrZ3ZIWO+cWKPTD/X9mVq7QybUF/iWObs1c39PN7DKFrm7aJ+m7vgWOAWY2V9JX\nJHU1s62S7pSULEnOud9KWihpkqRySYckfc+fpLGhGev7Kkn/YWYNkg5LKuAXupNylqRvSVpmZqVN\nt/1MUj+pda9xJuEDAAB4LJoPQQIAAEQlChgAAIDHKGAAAAAeo4ABAAB4jAIGAADgMQoYAACAxyhg\nAAAAHqOAAYgLZvalpjfeTjOzdDNbYWaj/c4FID4xiBVA3DCzeyWlSWonaatz7n6fIwGIUxQwAHGj\n6X0hP5RUI+nLzrlGnyMBiFMcggQQT7pIypCUqdCeMADwBXvAAMQNM1sgqUjSQEk9nXM/9jkSgDiV\n5HcAAPCCmX1bUr1z7q9mlijpXTOb6Jx7w+9sAOIPe8AAAAA8xjlgAAAAHqOAAQAAeIwCBgAA4DEK\nGAAAgMcoYAAAAB6jgAEAAHiMAgYAAOAxChgAAIDH/j8H8Dln6OnkcgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data(X1, y, xlabel='x', ylabel='y')\n", + "theta_start = np.matrix([0, 0]).reshape(2, 1)\n", + "theta, _ = gradient_descent(cost, gradient, theta_start, X1, y, eps=0.00001)\n", + "plot_fun(fig, polynomial_regression(theta), X1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Ten model ma duże **obciążenie** (**błąd systematyczny**, _bias_) – zachodzi **niedostateczne dopasowanie** (_underfitting_)." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nAADgsf8PQ5GyUdomDXUAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data(X2, y, xlabel='x', ylabel='y')\n", + "theta_start = np.matrix([0, 0, 0]).reshape(3, 1)\n", + "theta, _ = gradient_descent(cost, gradient, theta_start, X2, y, eps=0.000001)\n", + "plot_fun(fig, polynomial_regression(theta), X1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Ten model jest odpowiednio dopasowany." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data(X5, y, xlabel='x', ylabel='y')\n", + "theta_start = np.matrix([0, 0, 0, 0, 0, 0]).reshape(6, 1)\n", + "theta, _ = gradient_descent(cost, gradient, theta_start, X5, y, alpha=0.5, eps=10**-7)\n", + "plot_fun(fig, polynomial_regression(theta), X1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Ten model ma dużą **wariancję** (_variance_) – zachodzi **nadmierne dopasowanie** (_overfitting_)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Obciążenie (błąd systematyczny, _bias_)\n", + "\n", + "* Wynika z błędnych założeń co do algorytmu uczącego się.\n", + "* Duże obciążenie powoduje niedostateczne dopasowanie." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Wariancja (_variance_)\n", + "\n", + "* Wynika z nadwrażliwości na niewielkie fluktuacje w zbiorze uczącym.\n", + "* Wysoka wariancja może spowodować nadmierne dopasowanie (modelując szum zamiast sygnału)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.7. Metodologia testowania" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Zbiór uczący a zbiór testowy" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Na zbiorze uczącym (treningowym) uczymy algorytmy, a na zbiorze testowym sprawdzamy ich poprawność.\n", + "* Zbiór uczący powinien być kilkukrotnie większy od testowego (np. 4:1, 9:1 itp.).\n", + "* Zbiór testowy często jest nieznany.\n", + "* Należy unikać mieszania danych testowych i treningowych – nie wolno „zanieczyszczać” danych treningowych danymi testowymi!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Czasami potrzebujemy dobrać parametry modelu, np. $\\alpha$ – który zbiór wykorzystać do tego celu?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Zbiór walidacyjny" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Do doboru parametrów najlepiej użyć jeszcze innego zbioru – jest to tzw. **zbiór walidacyjny**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + " * Zbiór walidacyjny powinien mieć wielkość zbliżoną do wielkości zbioru testowego, czyli np. dane można podzielić na te trzy zbiory w proporcjach 3:1:1, 8:1:1 itp." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Walidacja krzyżowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Którą część danych wydzielić jako zbiór walidacyjny tak, żeby było „najlepiej”?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + " * Niech każda partia danych pełni tę rolę naprzemiennie!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "Żródło: https://chrisjmccormick.wordpress.com/2013/07/31/k-fold-cross-validation-with-matlab-code/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Walidacja krzyżowa\n", + "\n", + "* Podziel dane $D = \\left\\{ (x^{(1)}, y^{(1)}), \\ldots, (x^{(m)}, y^{(m)})\\right\\} $ na $N$ rozłącznych zbiorów $T_1,\\ldots,T_N$\n", + "* Dla $i=1,\\ldots,N$, wykonaj:\n", + " * Użyj $T_i$ do walidacji i zbiór $S_i$ do trenowania, gdzie $S_i = D \\smallsetminus T_i$. \n", + " * Zapisz model $\\theta_i$.\n", + "* Akumuluj wyniki dla modeli $\\theta_i$ dla zbiorów $T_i$.\n", + "* Ustalaj parametry uczenia na akumulowanych wynikach." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Walidacja krzyżowa – wskazówki\n", + "\n", + "* Zazwyczaj ustala się $N$ w przedziale od $4$ do $10$, tzw. $N$-krotna walidacja krzyżowa (_$N$-fold cross validation_). \n", + "* Zbiór $D$ warto zrandomizować przed podziałem.\n", + "* W jaki sposób akumulować wyniki dla wszystkich zbiórow $T_i$?\n", + "* Po ustaleniu parametrów dla każdego $T_i$, trenujemy model na całych danych treningowych z ustalonymi parametrami.\n", + "* Testujemy na zbiorze testowym (jeśli nim dysponujemy)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### _Leave-one-out_\n", + "\n", + "Jest to szczególny przypadek walidacji krzyżowej, w której $N = m$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Jaki jest rozmiar pojedynczego zbioru $T_i$?\n", + "* Jakie są zalety i wady tej metody?\n", + "* Kiedy może być przydatna?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Zbiór walidujący a algorytmy optymalizacji\n", + "\n", + "* Gdy błąd rośnie na zbiorze uczącym, mamy źle dobrany parametr $\\alpha$. Należy go wtedy zmniejszyć.\n", + "* Gdy błąd zmniejsza się na zbiorze trenującym, ale rośnie na zbiorze walidującym, mamy do czynienia ze zjawiskiem **nadmiernego dopasowania** (_overfitting_).\n", + "* Należy wtedy przerwać optymalizację. Automatyzacja tego procesu to _early stopping_." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.8. Regularyzacja" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def SGD(h, fJ, fdJ, theta, X, Y, \n", + " alpha=0.001, maxEpochs=1.0, batchSize=100, \n", + " adaGrad=False, logError=False, validate=0.0, valStep=100, lamb=0, trainsetsize=1.0):\n", + " errorsX, errorsY = [], []\n", + " errorsVX, errorsVY = [], []\n", + " \n", + " XT, YT = X, Y\n", + " \n", + " m_end=int(trainsetsize*len(X))\n", + " \n", + " if validate > 0:\n", + " mv = int(X.shape[0] * validate)\n", + " XV, YV = X[:mv], Y[:mv] \n", + " XT, YT = X[mv:m_end], Y[mv:m_end] \n", + " m, n = XT.shape\n", + "\n", + " start, end = 0, batchSize\n", + " maxSteps = (m * float(maxEpochs)) / batchSize\n", + " \n", + " if adaGrad:\n", + " hgrad = np.matrix(np.zeros(n)).reshape(n,1)\n", + " \n", + " for i in range(int(maxSteps)):\n", + " XBatch, YBatch = XT[start:end,:], YT[start:end,:]\n", + "\n", + " grad = fdJ(h, theta, XBatch, YBatch, lamb=lamb)\n", + " if adaGrad:\n", + " hgrad += np.multiply(grad, grad)\n", + " Gt = 1.0 / (10**-7 + np.sqrt(hgrad))\n", + " theta = theta - np.multiply(alpha * Gt, grad)\n", + " else:\n", + " theta = theta - alpha * grad\n", + " \n", + " if logError:\n", + " errorsX.append(float(i*batchSize)/m)\n", + " errorsY.append(fJ(h, theta, XBatch, YBatch).item())\n", + " if validate > 0 and i % valStep == 0:\n", + " errorsVX.append(float(i*batchSize)/m)\n", + " errorsVY.append(fJ(h, theta, XV, YV).item())\n", + " \n", + " if start + batchSize < m:\n", + " start += batchSize\n", + " else:\n", + " start = 0\n", + " end = min(start + batchSize, m)\n", + " return theta, (errorsX, errorsY, errorsVX, errorsVY)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie danych do przykładu regularyzacji\n", + "\n", + "n = 6\n", + "\n", + "data = np.matrix(np.loadtxt(\"ex2data2.txt\", delimiter=\",\"))\n", + "np.random.shuffle(data)\n", + "\n", + "X = powerme(data[:,0], data[:,1], n)\n", + "Y = data[:,2]" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def draw_regularization_example(X, Y, lamb=0, alpha=1, adaGrad=True, maxEpochs=2500, validate=0.25):\n", + " plt.figure(figsize=(16,8))\n", + " plt.subplot(121)\n", + " plt.scatter(X[:, 2].tolist(), X[:, 1].tolist(),\n", + " c=Y.tolist(),\n", + " s=100, cmap=plt.cm.get_cmap('prism'));\n", + "\n", + " theta = np.matrix(np.zeros(X.shape[1])).reshape(X.shape[1],1)\n", + " thetaBest, err = SGD(h, J, dJ, theta, X, Y, alpha=alpha, adaGrad=adaGrad, maxEpochs=maxEpochs, batchSize=100, \n", + " logError=True, validate=validate, valStep=1, lamb=lamb)\n", + "\n", + " xx, yy = np.meshgrid(np.arange(-1.5, 1.5, 0.02),\n", + " np.arange(-1.5, 1.5, 0.02))\n", + " l = len(xx.ravel())\n", + " C = powerme(xx.reshape(l, 1),yy.reshape(l, 1), n)\n", + " z = classifyBi(thetaBest, C).reshape(int(np.sqrt(l)), int(np.sqrt(l)))\n", + "\n", + " plt.contour(xx, yy, z, levels=[0.5], lw=3);\n", + " plt.ylim(-1,1.2);\n", + " plt.xlim(-1,1.2);\n", + " plt.legend();\n", + " plt.subplot(122)\n", + " plt.plot(err[0],err[1], lw=3, label=\"Training error\")\n", + " if validate > 0:\n", + " plt.plot(err[2],err[3], lw=3, label=\"Validation error\");\n", + " plt.legend()\n", + " plt.ylim(0.2,0.8);" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/pawel/.local/lib/python2.7/site-packages/ipykernel_launcher.py:2: RuntimeWarning: overflow encountered in exp\n", + " \n" + ] + }, + { + "data": { + "image/png": "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\nPv19XrtmLStOKhG7KTISfv4ZTlp7Vq+cv8b6bzfR6skm+OTxTnUID7yoSgtq04FSVMPAMefk5iuU\nlw/XvskDnerw2Yuz+GzoLOLi7Kuu7FC//gr//JN4f2tCYWHw7rvWzG1a5M1r/8xuwYJp61tERERE\nJBMpoZX/bNhg7W+dNw8iIqwENDra2jfZsycMHpy+Ja0//mjfDGBcHHz7LQDLp68hOiqG9gNap308\nB/Pw8uC1b4fSafBDLP50Ge93/5SoiKisDeLLL5Oe3b5daChs3562vuvVs44gSo2vL/Tokba+RURE\nREQykRJasVy9Cg8/bCVESc0ChobCjBlWUae0unTJ2kObmqgo+PdfoiKjWTp5JbVaVaNEhaJpHy8T\nuLi48Oy4J+n3QU9+/XYTw1qM4sp5By3HtsfZs/b9MsHFBS5eTFvfNpu1JNw7hZlww4ACBeDBB9PW\nt1irD3bvtn7RcOWKs6MRERERyVWU0Ipl5syUl7OCldS+807a+y5Y0KrGmxp3d7j7bjYv3cHlf6/y\n6AsPpX2sTGQYBl1eas/rC4by585jPH//CE4eOpU1g999t5VUpiYuLn3Lgl991aqW7OOT+J7NBvnz\nW5WU7ZnJFUtICAwbZi3bb9TI2gN9zz3QpQv89ZezoxMRERHJFfTTqVhmzkz52Jab/vrLqrabFu3a\nQUxM6u1cXOCxx1jz9XoK3ONPzZZV0zZOFmnUuR4f//o2keFRDK7/KjvX7sv8QZ9+Oulk83Y+PlC7\ndtr7d3WFJUtg0iSoUME6EsjDA/z84PnnYf9+KF8+7f3eqYKDoU4dmDjRqt59/bq1lzwiAhYvhpo1\nYe9eZ0cpIiIikuMpoRVLcLB97Ww2+9velCcP9OkDXl7Jt/H0hNatueqVl+0rdtO8eyNc7dl36yQV\n6pRj4pb3KVSsACPbjGbFjLWZO2DjxlCypJVoJsfbG954I/2zqC4u0Ls3HDpkLVv+5x9riexHH0GR\nIunr8041YAAcO5b0+cpxcda/oYceSnsBLxERERG5hRJasRQrZl+7qCgoXDjt/Y8bB02aJD3L6OMD\nVarAnDms/fo3YmNiUzyqJ7soXLIQ4ze+Q/VmlRnX9zOmDplJbEwqy7bTyzCsJb9Fiya919XHxzrj\n99lnHTNe3rzWUtls/EuFbOvKFVi4MOlkNqGrV63K3iIiIiKSbkpoxTJwoFXFNjWNGln7KdPKZoOf\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "draw_regularization_example(X, Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Regularyzacja\n", + "\n", + "* Metoda zapobiegania zjawisku nadmiernego dopasowania (*overfitting*)\n", + "* „Kara” za ekstremalne wartości parametrów $\\theta$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Regularyzacja dla regresji liniowej – funkcja kosztu\n", + "\n", + "$$\n", + "J(\\theta) \\, = \\, \\dfrac{1}{2m} \\left( \\displaystyle\\sum_{i=1}^{m} h_\\theta(x^{(i)}) - y^{(i)} \\color{red}{ + \\lambda \\displaystyle\\sum_{j=1}^{n} \\theta^2_j } \\right)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* $\\lambda$ – parametr regularyzacji\n", + "* jeżeli $\\lambda$ jest zbyt mały, skutkuje to nadmiernym dopasowaniem\n", + "* jeżeli $\\lambda$ jest zbyt duży, skutkuje to niedostatecznym dopasowaniem" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Regularyzacja dla regresji liniowej – gradient\n", + "\n", + "$$\\small\n", + "\\begin{array}{llll}\n", + "\\dfrac{\\partial J(\\theta)}{\\partial \\theta_0} &=& \\dfrac{1}{m}\\displaystyle\\sum_{i=1}^m \\left( h_{\\theta}(x^{(i)})-y^{(i)} \\right) x^{(i)}_0 & \\textrm{dla $j = 0$ }\\\\\n", + "\\dfrac{\\partial J(\\theta)}{\\partial \\theta_j} &=& \\dfrac{1}{m}\\displaystyle\\sum_{i=1}^m \\left( h_{\\theta}(x^{(i)})-y^{(i)} \\right) x^{(i)}_j \\color{red}{+ \\dfrac{\\lambda}{m}\\theta_j} & \\textrm{dla $j = 1, 2, \\ldots, n $} \\\\\n", + "\\end{array} \n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Regularyzacja dla regresji logistycznej – funkcja kosztu\n", + "\n", + "$$\n", + "\\begin{array}{rtl}\n", + "J(\\theta) & = & -\\dfrac{1}{m} \\left( \\displaystyle\\sum_{i=1}^{m} y^{(i)} \\log h_\\theta(x^{(i)}) + \\left( 1-y^{(i)} \\right) \\log \\left( 1-h_\\theta(x^{(i)}) \\right) \\right) \\\\\n", + "& & \\color{red}{ + \\dfrac{\\lambda}{2m} \\displaystyle\\sum_{j=1}^{n} \\theta^2_j } \\\\\n", + "\\end{array}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Regularyzacja dla regresji logistycznej – gradient\n", + "\n", + "$$\\small\n", + "\\begin{array}{llll}\n", + "\\dfrac{\\partial J(\\theta)}{\\partial \\theta_0} &=& \\dfrac{1}{m}\\displaystyle\\sum_{i=1}^m \\left( h_{\\theta}(x^{(i)})-y^{(i)} \\right) x^{(i)}_0 & \\textrm{dla $j = 0$ }\\\\\n", + "\\dfrac{\\partial J(\\theta)}{\\partial \\theta_j} &=& \\dfrac{1}{m}\\displaystyle\\sum_{i=1}^m \\left( h_{\\theta}(x^{(i)})-y^{(i)} \\right) x^{(i)}_j \\color{red}{+ \\dfrac{\\lambda}{m}\\theta_j} & \\textrm{dla $j = 1, 2, \\ldots, n $} \\\\\n", + "\\end{array} \n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Implementacja metody regularyzacji" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "def J_(h,theta,X,y,lamb=0):\n", + " m = float(len(y))\n", + " f = h(theta, X, eps=10**-7)\n", + " j = 1.0/m \\\n", + " * -np.sum(np.multiply(y, np.log(f)) + \n", + " np.multiply(1 - y, np.log(1 - f)), axis=0) \\\n", + " + lamb/(2*m) * np.sum(np.power(theta[1:] ,2))\n", + " return j\n", + "\n", + "def dJ_(h,theta,X,y,lamb=0):\n", + " m = float(y.shape[0])\n", + " g = 1.0/y.shape[0]*(X.T*(h(theta,X)-y))\n", + " g[1:] += lamb/m * theta[1:]\n", + " return g" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "slider_lambda = widgets.FloatSlider(min=0.0, max=0.5, step=0.005, value=0.01, description=r'$\\lambda$', width=300)\n", + "\n", + "def slide_regularization_example_2(lamb):\n", + " draw_regularization_example(X, Y, lamb=lamb)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0738c69d0fff4e32ab23d4aa93ca9a71", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(FloatSlider(value=0.01, description=u'$\\\\lambda$', max=0.5, step=0.005), Button(description=u'Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(slide_regularization_example_2, lamb=slider_lambda)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def cost_lambda_fun(lamb):\n", + " theta = np.matrix(np.zeros(X.shape[1])).reshape(X.shape[1],1)\n", + " thetaBest, err = SGD(h, J, dJ, theta, X, Y, alpha=1, adaGrad=True, maxEpochs=2500, batchSize=100, \n", + " logError=True, validate=0.25, valStep=1, lamb=lamb)\n", + " return err[1][-1], err[3][-1]\n", + "\n", + "def plot_cost_lambda():\n", + " plt.figure(figsize=(16,8))\n", + " ax = plt.subplot(111)\n", + " Lambda = np.arange(0.0, 1.0, 0.01)\n", + " Costs = [cost_lambda_fun(lamb) for lamb in Lambda]\n", + " CostTrain = [cost[0] for cost in Costs]\n", + " CostCV = [cost[1] for cost in Costs]\n", + " plt.plot(Lambda, CostTrain, lw=3, label='training error')\n", + " plt.plot(Lambda, CostCV, lw=3, label='validation error')\n", + " ax.set_xlabel(r'$\\lambda$')\n", + " ax.set_ylabel(u'cost')\n", + " plt.legend()\n", + " plt.ylim(0.2,0.8)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7MAAAHmCAYAAAChwtkCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl4XfVh5//PV+vVrqur1ZJsyxuW\nN8CYrWY326SNU5IAYRoeaBuYpMnQ5JnSkHYG0vzaTppmmIRMlpIFOvwSUpbSkJYESgMhECBewA5e\n8L5IsrXv29W99zt/nHMXybItyfdKOtL79Tx6zqJz7/2KVW9/z2KstQIAAAAAwEvSZnoAAAAAAABM\nFjELAAAAAPAcYhYAAAAA4DnELAAAAADAc4hZAAAAAIDnELMAAAAAAM9JacwaY242xrxvjDlgjHlg\nnO8vNMa8Yox5xxiz0xjzgVSOBwAAAAAwN5hUPWfWGJMuaZ+kGyQ1SNoi6Q5r7e6EYx6V9I619tvG\nmFWSXrDWLk7JgAAAAAAAc0YqZ2YvkXTAWnvIWhuU9GNJHxpzjJVU6K4XSWpK4XgAAAAAAHNERgrf\nu1rS8YTtBkmXjjnmi5JeMsb8V0l5kq5P4XgAAAAAAHNEKmN2Iu6Q9Li19n8ZYy6X9IQxZo21NpJ4\nkDHmXkn3SlJeXt5FK1eunIGhAgAAAABSbdu2bW3W2rKzHZfKmG2UVJuwXePuS/THkm6WJGvtm8YY\nn6RSSS2JB1lrH5X0qCRt2LDBbt26NVVjBgAAAADMIGPM0Ykcl8prZrdIWm6MqTPGZEn6mKTnxxxz\nTNImSTLG1EvySWpN4ZgAAAAAAHNAymLWWhuS9BlJL0raI+kpa+0uY8yXjDGb3cP+m6R7jDE7JD0p\n6W6bqtsrAwAAAADmjJReM2utfUHSC2P2PZiwvlvSxlSOAQAAAAAw98z0DaAAAAAAYEpGRkbU0NCg\noaGhmR4KpsDn86mmpkaZmZlTej0xCwAAAMCTGhoaVFBQoMWLF8sYM9PDwSRYa9Xe3q6GhgbV1dVN\n6T1SeQMoAAAAAEiZoaEhBQIBQtaDjDEKBALnNKtOzAIAAADwLELWu8717x0xCwAAAABT0NXVpW99\n61tTeu0HPvABdXV1nfGYBx98UC+//PKU3n8+IGYBAAAAYArOFLOhUOiMr33hhRdUXFx8xmO+9KUv\n6frrr5/y+CYrHA6P2j7bzzDZ45KNmAUAAACAKXjggQd08OBBXXDBBbr//vv16quv6sorr9TmzZu1\natUqSdLv//7v66KLLtLq1av16KOPxl67ePFitbW16ciRI6qvr9c999yj1atX68Ybb9Tg4KAk6e67\n79YzzzwTO/6hhx7S+vXrtXbtWu3du1eS1NraqhtuuEGrV6/WJz7xCS1atEhtbW2njPWll17S5Zdf\nrvXr1+vWW29VX19f7H0///nPa/369Xr66ad1zTXX6LOf/aw2bNigr3/96zpy5Iiuu+46rVu3Tps2\nbdKxY8diY/vkJz+pSy+9VH/+53+eur/IZ8DdjAEAAAB43uIH/i1l733ky7877v4vf/nLeu+99/Tu\nu+9Kkl599VVt375d7733XuwOvT/4wQ9UUlKiwcFBXXzxxfrIRz6iQCAw6n3279+vJ598Ut/97nd1\n22236dlnn9XHP/7xUz6vtLRU27dv17e+9S199atf1fe+9z391V/9la677jp94Qtf0M9//nN9//vf\nP+V1bW1t+uu//mu9/PLLysvL09/93d/p4Ycf1oMPPihJCgQC2r59uyTpO9/5joLBoLZu3SpJ+uAH\nP6i77rpLd911l37wgx/ovvvu07/8y79Icu4m/etf/1rp6elT+ct6zohZAAAAAEiSSy65ZNSjZh55\n5BE999xzkqTjx49r//79p8RsXV2dLrjgAknSRRddpCNHjoz73h/+8Idjx/zzP/+zJOn111+Pvf/N\nN98sv99/yuveeust7d69Wxs3bpQkBYNBXX755bHv33777aOOT9x+8803Y5915513jpqFvfXWW2cs\nZCViFgAAAACSJi8vL7b+6quv6uWXX9abb76p3NxcXXPNNeM+iiY7Ozu2np6eHjvN+HTHpaenT+o6\nVWutbrjhBj355JNnHfN426cz0eNShZgFAAAA4HmnOxU4lQoKCtTb23va73d3d8vv9ys3N1d79+7V\nW2+9lfQxbNy4UU899ZQ+//nP66WXXlJnZ+cpx1x22WX69Kc/rQMHDmjZsmXq7+9XY2OjVqxYcdb3\n/53f+R39+Mc/1p133qkf/vCHuvLKK5P+M0wVN4ACAAAAgCkIBALauHGj1qxZo/vvv/+U7998880K\nhUKqr6/XAw88oMsuuyzpY3jooYf00ksvac2aNXr66adVWVmpgoKCUceUlZXp8ccf1x133KF169bp\n8ssvj91A6my+8Y1v6LHHHtO6dev0xBNP6Otf/3rSf4apMtbamR7DpGzYsMFGL0YGAAAAMH/t2bNH\n9fX1Mz2MGTU8PKz09HRlZGTozTff1Kc+9anYDam8YLy/h8aYbdbaDWd7LacZAwAAAIBHHTt2TLfd\ndpsikYiysrL03e9+d6aHNG2IWQAAAADwqOXLl+udd96Z6WHMCK6ZBQAAAAB4DjELAAAAAPAcYhYA\nAAAA4DnELAAAAADAc4hZAAAAAJgm+fn5kqSmpiZ99KMfHfeYa665Rmd7HOnXvvY1DQwMxLY/8IEP\nqKurK3kD9QBiFgAAAACm2YIFC/TMM89M+fVjY/aFF15QcXFxMoZ2VqFQ6IzbE33duSJmAQAAAGAK\nHnjgAX3zm9+MbX/xi1/UV7/6VfX19WnTpk1av3691q5dq5/85CenvPbIkSNas2aNJGlwcFAf+9jH\nVF9fr1tuuUWDg4Ox4z71qU9pw4YNWr16tR566CFJ0iOPPKKmpiZde+21uvbaayVJixcvVltbmyTp\n4Ycf1po1a7RmzRp97Wtfi31efX297rnnHq1evVo33njjqM+Jam1t1Uc+8hFdfPHFuvjii/XGG2/E\nfrY777xTGzdu1J133qnHH39cmzdv1nXXXadNmzbJWqv7779fa9as0dq1a/VP//RPkqRXX31VV155\npTZv3qxVq1ad81/zRDxnFgAAAID3fbEohe/dPe7u22+/XZ/97Gf16U9/WpL01FNP6cUXX5TP59Nz\nzz2nwsJCtbW16bLLLtPmzZtljBn3fb797W8rNzdXe/bs0c6dO7V+/frY9/7mb/5GJSUlCofD2rRp\nk3bu3Kn77rtPDz/8sF555RWVlpaOeq9t27bpscce09tvvy1rrS699FJdffXV8vv92r9/v5588kl9\n97vf1W233aZnn31WH//4x0e9/k//9E/1uc99TldccYWOHTumm266SXv27JEk7d69W6+//rpycnL0\n+OOPa/v27dq5c6dKSkr07LPP6t1339WOHTvU1tamiy++WFdddZUkafv27XrvvfdUV1c3tb/+p0HM\nAgAAAMAUXHjhhWppaVFTU5NaW1vl9/tVW1urkZER/cVf/IVee+01paWlqbGxUc3NzaqsrBz3fV57\n7TXdd999kqR169Zp3bp1se899dRTevTRRxUKhXTixAnt3r171PfHev3113XLLbcoLy9PkvThD39Y\nv/rVr7R582bV1dXpggsukCRddNFFOnLkyCmvf/nll7V79+7Ydk9Pj/r6+iRJmzdvVk5OTux7N9xw\ng0pKSmKfe8cddyg9PV0VFRW6+uqrtWXLFhUWFuqSSy5JeshKxCwAAAAATNmtt96qZ555RidPntTt\nt98uSfrhD3+o1tZWbdu2TZmZmVq8eLGGhoYm/d6HDx/WV7/6VW3ZskV+v1933333lN4nKjs7O7ae\nnp4+7mnGkUhEb731lnw+3ynfiwby6bZPZ6LHTRYxCwAAAMD7TnMqcKrdfvvtuueee9TW1qZf/vKX\nkqTu7m6Vl5crMzNTr7zyio4ePXrG97jqqqv0ox/9SNddd53ee+897dy5U5IzK5qXl6eioiI1Nzfr\nZz/7ma655hpJUkFBgXp7e085zfjKK6/U3XffrQceeEDWWj333HN64oknJvzz3HjjjfrGN76h+++/\nX5L07rvvxmZzz+TKK6/UP/zDP+iuu+5SR0eHXnvtNf393/+99u7dO+HPnixiFgAAAACmaPXq1ert\n7VV1dbWqqqokSX/wB3+gD37wg1q7dq02bNiglStXnvE9PvWpT+kP//APVV9fr/r6el100UWSpPPP\nP18XXnihVq5cqdraWm3cuDH2mnvvvVc333yzFixYoFdeeSW2f/369br77rt1ySWXSJI+8YlP6MIL\nLxz3lOLxPPLII/r0pz+tdevWKRQK6aqrrtJ3vvOds77ulltu0Ztvvqnzzz9fxhh95StfUWVlZUpj\n1lhrU/bmqbBhwwZ7tmcuAQAAAJj79uzZo/r6+pkeBs7BeH8PjTHbrLUbzvZaHs0DAAAAAPAcYhYA\nAAAA4DnELAAAAADAc4hZAAAAAJ7ltXsAIe5c/94RswAAAAA8yefzqb29naD1IGut2tvbx32e7UTx\naB4AAAAAnlRTU6OGhga1trbO9FAwBT6fTzU1NVN+PTELAAAAwJMyMzNVV1c308PADOE0YwAAAACA\n5xCzAAAAAADPIWYBAAAAAJ5DzAIAAAAAPIeYBQAAAAB4DjELAAAAAPAcYhYAAAAA4DnELAAAAADA\nc4hZAAAAAIDnELMAAAAAAM8hZgEAAAAAnkPMAgAAAAA8h5gFAAAAAHgOMQsAAAAA8BxiFgAAAADg\nOcQsAAAAAMBziFkAAAAAgOcQswAAAAAAzyFmAQAAAACeQ8wCAAAAADyHmAUAAAAAeA4xCwAAAADw\nHGIWAAAAAOA5xCwAAAAAwHOIWQAAAACA5xCzAAAAAADPIWYBAAAAAJ5DzAIAAAAAPIeYBQAAAAB4\nTkpj1hhzszHmfWPMAWPMA+N8/38bY951v/YZY7pSOR4AAAAAwNyQkao3NsakS/qmpBskNUjaYox5\n3lq7O3qMtfZzCcf/V0kXpmo8AAAAAIC5I5Uzs5dIOmCtPWStDUr6saQPneH4OyQ9mcLxAAAAAADm\niFTGbLWk4wnbDe6+UxhjFkmqk/SL03z/XmPMVmPM1tbW1qQPFAAAAADgLbPlBlAfk/SMtTY83jet\ntY9aazdYazeUlZVN89AAAAAAALNNKmO2UVJtwnaNu288HxOnGAMAAAAAJiiVMbtF0nJjTJ0xJktO\nsD4/9iBjzEpJfklvpnAsAAAAAIA5JGUxa60NSfqMpBcl7ZH0lLV2lzHmS8aYzQmHfkzSj621NlVj\nAQAAAADMLSl7NI8kWWtfkPTCmH0Pjtn+YirHAAAAAACYe2bLDaAAAAAAAJgwYhYAAAAA4DnELAAA\nAADAc4hZAAAAAIDnELMAAAAAAM8hZgEAAAAAnkPMAgAAAAA8h5gFAAAAAHgOMQsAAAAA8BxiFgAA\nAADgOcQsAAAAAMBziFkAAAAAgOcQswAAAAAAzyFmAQAAAACeQ8wCAAAAADyHmAUAAAAAeA4xCwAA\nAADwHGIWAAAAAOA5xCwAAAAAwHOIWQAAAACA5xCzAAAAAADPIWYBAAAAAJ5DzAIAAAAAPIeYBQAA\nAAB4DjELAAAAAPAcYhYAAAAA4DnELAAAAADAc4hZAAAAAIDnELMAAAAAAM8hZgEAAAAAnkPMAgAA\nAAA8h5gFAAAAAHgOMQsAAAAA8BxiFgAAAADgOcQsAAAAAMBziFkAAAAAgOcQswAAAAAAzyFmAQAA\nAACeQ8wCAAAAADyHmAUAAAAAeA4xCwAAAADwHGIWAAAAAOA5xCwAAAAAwHOIWQAAAACA5xCzAAAA\nAADPIWYBAAAAAJ5DzAIAAAAAPIeYBQAAAAB4DjELAAAAAPAcYhYAAAAA4DnELAAAAADAc4hZAAAA\nAIDnELMAAAAAAM8hZgEAAAAAnkPMAgAAAAA8h5gFAAAAAHgOMQsAAAAA8BxiFgAAAADgOcQsAAAA\nAMBziFkAAAAAgOcQswAAAAAAzyFmAQAAAACeQ8wCAAAAADwnpTFrjLnZGPO+MeaAMeaB0xxzmzFm\ntzFmlzHmR6kcDwAAAABgbshI1RsbY9IlfVPSDZIaJG0xxjxvrd2dcMxySV+QtNFa22mMKU/VeAAA\nAAAAc0cqZ2YvkXTAWnvIWhuU9GNJHxpzzD2Svmmt7ZQka21LCscDAAAAAJgjUhmz1ZKOJ2w3uPsS\nrZC0whjzhjHmLWPMzSkcDwAAAABgjkjZacaT+Pzlkq6RVCPpNWPMWmttV+JBxph7Jd0rSQsXLpzu\nMQIAAAAAZplUzsw2SqpN2K5x9yVqkPS8tXbEWntY0j45cTuKtfZRa+0Ga+2GsrKylA0YAAAAAOAN\nqYzZLZKWG2PqjDFZkj4m6fkxx/yLnFlZGWNK5Zx2fCiFYwIAAAAAzAEpi1lrbUjSZyS9KGmPpKes\ntbuMMV8yxmx2D3tRUrsxZrekVyTdb61tT9WYAAAAAABzg7HWzvQYJmXDhg1269atMz0MAAAAAEAK\nGGO2WWs3nO24VJ5mDAAAAABAShCzAAAAAADPIWYBAAAAAJ5DzAIAAAAAPIeYBQAAAAB4DjELAAAA\nAPAcYhYAAAAA4DnELAAAAADAc4hZAAAAAIDnELMAAAAAAM8hZgEAAAAAnkPMAgAAAAA8h5gFAAAA\nAHgOMQsAAAAA8BxiFgAAAADgOcQsAAAAAMBziFkAAAAAgOcQswAAAAAAzyFmAQAAAACeQ8wCAAAA\nADyHmAUAAAAAeA4xCwAAAADwHGIWAAAAAOA5xCwAAAAAwHOIWQAAAACA5xCzAAAAAADPIWYBAAAA\nAJ5DzAIAAAAAPIeYBQAAAAB4DjELAAAAAPAcYhYAAAAA4DnELAAAAADAc4hZAAAAAIDnELMAAAAA\nAM8hZgEAAAAAnkPMAgAAAAA8h5gFAAAAAHgOMQsAAAAA8BxiFgAAAADgOcQsAAAAAMBziFkAAAAA\ngOcQswAAAAAAzyFmAQAAAACeQ8wCAAAAADyHmAUAAAAAeA4xCwAAAADwHGIWAAAAAOA5xCwAAAAA\nwHOIWQAAAACA5xCzAAAAAADPIWYBAAAAAJ5DzAIAAAAAPIeYBQAAAAB4DjELAAAAAPAcYhYAAAAA\n4DnELAAAAADAc4hZAAAAAIDnELMAAAAAAM8hZgEAAAAAnjOhmDXG3DqRfQAAAAAATIeJzsx+YYL7\nAAAAAABIuYwzfdMY858kfUBStTHmkYRvFUoKpXJgAAAAAACczhljVlKTpK2SNkvalrC/V9LnUjUo\nAAAAAMDkWWvVHwyre3BEPYMjsWXPUCi2Xlnk0x2XLJzpoZ6zM8astXaHpB3GmB9Za0ckyRjjl1Rr\nre2cjgECAAAAwHwSCkfU68Zn9+CIeoZGYutOkIYSIjVxvxOt4Yg94/tfvNg/92M2wb8bYza7x2+T\n1GKM+bW19oyzs8aYmyV9XVK6pO9Za7885vt3S/p7SY3urv9jrf3eJMYPAAAAALPOSDgSmxntHhxR\nV8JMaffAqYHaPRiKfb9vOLVXdHYPjqT0/afLRGO2yFrbY4z5hKT/a619yBiz80wvMMakS/qmpBsk\nNUjaYox53lq7e8yh/2St/cykRw4AAAAAKRSOWPW4IRqL0oHgqEh19o2eHe0eHFF/MDxj487JTFdh\nToaKcjJV6Mt0ljnu0pehBcU5Mza2ZJpozGYYY6ok3SbpLyf4mkskHbDWHpIkY8yPJX1I0tiYBQAA\nAICUsNZqIBh2gnRgRF2DQXUPxGdLozHqRGtwVJz2Ds3MPW+NkQqyM1SU6wRoYpRGw7TQDdPEfUU5\nmSrwZSg7I31Gxj3dJhqzX5L0oqQ3rLVbjDFLJO0/y2uqJR1P2G6QdOk4x33EGHOVpH2SPmetPT72\nAGPMvZLulaSFC71/bjcAAACAyUmcJe0aCMbiNBqf0UjtSphBjX4vdJZrSFMhzSgWmGOD80xfhTmZ\nKsjOUFqamfYxe82EYtZa+7SkpxO2D0n6SBI+/6eSnrTWDhtj/oukf5R03Tif/6ikRyVpw4YN0/9P\nIgAAAICkCIUj6h4cUefAiLoHg06IDiREasJ6LFQHguodDslOcwlEZ0iLc7NGR2fuqRFanBiruZnK\nzyJIU21CMWuMqZH0DUkb3V2/kvSn1tqGM7ysUVJtwnaN4jd6kiRZa9sTNr8n6SsTGQ8AAACAmRWO\n2NgMaDRMO/vdmVF33+hADaqrf0S9Kb650Xh8mWlucGapKNcJz6KcTBVHozQhVosT9hf4MpVOkM5a\nEz3N+DFJP5J0q7v9cXffDWd4zRZJy40xdXIi9mOS/nPiAcaYKmvtCXdzs6Q9ExwPAAAAgCSIPpe0\ns9+Jzs6BoDrdWdHOfmc7elpv50A8TnuGRqZ9prTQ58ySRmOzODdrVHxG90VDNTpb6sucH9eQzjcT\njdkya+1jCduPG2M+e6YXWGtDxpjPyLnWNl3SD6y1u4wxX5K01Vr7vKT73Ef+hCR1SLp70j8BAAAA\nAEmjT+HtHAiOCdToLKqz3tkfn1EdCU9flRqjhBnQrFh0jl0vStzvRimzpEg00ZhtN8Z8XNKT7vYd\nktrPcLwkyVr7gqQXxux7MGH9C5K+MMExAAAAAPNGMBRR10BQHQPu6bvuetfAiDr6g+6MqbMeP9V3\nep8fGp0p9efGY9SfMDPqd6M0us+f69yVl2tJkQwTjdk/knPN7P+WZCX9WsyiAgAAABMyNkw7B4JO\nkLqzo9HtxGP6pvHaUl9mmvy5WbEwjUdo5qj9xW60+nOzVOjLUEZ62rSNERhrMo/mucta2ylJxpgS\nSV+VE7kAAADAvBGO2Njpuh398VnSaJx2DESX7qm8/cFpu+mRMVKhL1MlefFZ0ujSnxCisfU853tc\nUwovmmjMrouGrCRZazuMMRemaEwAAADAtLDWaiAYVke/E6MdA0F19Dlx2u6GaPuYSO0anJ4bH6Wn\nmdjNjUryohGaJX+eO3vq7ivJi0dqEdeVYh6ZaMymGWP8Y2ZmJ/paAAAAYFpEIlZdgyPq6B9We9/o\nQO1wZ0/Hfg2HIikfV5pRLERL3BnRsYEajdISd1+Bj+eUAmcy0SD9X5LeNMY87W7fKulvUjMkAAAA\nwBEKR9Tp3uSovW9Y7W6AOsthd388TDsHgopMw6xpUU40Rp1lSV5iqCYs3WO46RGQfBOKWWvt/zXG\nbJV0nbvrw9ba3akbFgAAAOaisXHa1h9UR58Tpc560F139nVPwym92RlpCuTF4zM6Yzp2X3wmNZMb\nHwGzwIRPFXbjlYAFAABAjLVWPYMhtbmn9UYDtb3P3Y7ud/dNx/WmBb4MBWIBmh2L0ti+fGfmtCQv\nS4H8LOVmcfUc4EX8mwsAAIBRhkbCakuI0ba+YCxU2/uDo77X3hdUKIXn9RojFbun9AbyshXIdyM0\nFqbZsfVAnvMImawMZk2B+YCYBQAAmOOis6etfcNqc7/a+4Lu+qmRmurnmxbnZirgxml0djSQGKX5\n8XAtzuGUXgDjI2YBAAA8KByx6hxwg7Q3GIvU1oTt9n5nvb1/WCPh1M2e5mdnuAHqRGlp/uhQLc2P\nr/tzs5RJnAJIAmIWAABglghHrHPzo75htfbGZ1Hb+oKxbWfp3Mk3VWf3ZqabWIyWFmSrdMzsqbMv\nWyVuwPoy01MzEAA4A2IWAAAghaLPPW3tHR4TpM6ydZoCNTp7WurOnJbmZyuQn62ycSK1MCdDxvAY\nGQCzGzELAAAwSdZa9QfDsUB1voZiYZoYqam8QVJRTmYsTEsLslWWEKpOrDrrZQXZzJ4CmHOIWQAA\nAFcoHFFHf1AtbpC29A65y3ikRtcHR8IpGYM/NzMWo2UF2W6oulGaH98O5GVz114A8xoxCwAA5rxB\ndxa1pXdILb3DaukZSgjWeKCm6jTfAl+GyqIzp+6yLGEZDdeSPB4rAwATRcwCAABPstaqdziklp74\nDGpzz5C7HQ/X1p5h9abgUTPZGWlOkCbGacJ2aUG2yt1Q5RRfAEg+YhYAAMwq8UgdUrMbqs09w2rp\nGVZz71BsVrWlJzWn+gbyskaFaXmBb1Sklhc66wXZ3CQJAGYSMQsAAKbNQDCkk92JkTrkRmp0VtX5\nXrIjNTPdOLOnhT6VuzOm0UgtL4gHaml+Ns9ABQCPIGYBAMA5C4YisTht7hkes4xHa7JP983OSFNF\nNFALnUCNLRP2FedkKi2NWVQAmEuIWQAAcFrWWnUNjOhkz5BO9gypudtduqF6sntILb1DausLJvVz\nczLTVTEmTisKnTitcPeVFfhU6ONUXwCYr4hZAADmqcTZ1JPdwzrRPeis9wwnROuQhkORpH1mVnqa\nyguzVVnoc2ZUC7NVUeiEqhOpzno+16MCAM6CmAUAYA6KXpt6sntIJ9wwja8P6mT3sNr7h2WT9Bia\nNCOV5merssin8gKfKoucOK0o9KmiKB6rxbmZRCoAICmIWQAAPKZvOKQTXYNOmCYEauJ29+BI0j4v\nPztDFYVOqFYU+lRZ6IutR7dL87OUwY2TAADTiJgFAGAWSQzVE93usmtIJ3qGdKJrUCe7h5J2EyXj\nzqZWjYnUxFitLPIpP5tfFwAAsw//dwIAYJoMjYTV5IZqU0KwNnW54dqVvFDNTDeqKPSpqsinyqIc\nVRZmq7IoJxauVUXOY2l4DA0AwKuIWQAAkiAUjqi5d1gnugbVGA3VrkE1dkWDdVCdA8k59Tc7I82N\nVJ+q3ECNR6tPVcU+leRm8SgaAMCcRswCAHAW1lr1DIbU2OVEaVP3oLvuBGtT16BO9gwpkoSbKWVl\npGmBG6oLinKcYC3OUZUbqVVFOfJzEyUAAIhZAACis6qNnU6YNnYNxsO1a1CNnYPqD4bP+XMy0pxT\nfxe4UVpV7ARrVZFPC4qdZUleFqEKAMAEELMAgDlvMBiOBeqoYO10lid7hhROwrRqaX62FkQDtdin\n6uKcWLRWF+eoND9b6Zz6CwBAUhCzAADP6x0aUUOnE6cNnQOjwrWhc1Dt/cFz/oyczHQtKPap2p+r\nBe5MqvMVPx3Yl5mehJ8GAABMBDELAJj1ugdH1NA5oAY3TqPR2uDOrCbjmaql+dmq9ueoJhqoxTmq\ndoO1ujhHxVynCgDArELMAgA+37aIAAAgAElEQVRmXHRm9XhHPFijsXq8c0C9Q+f2uJqMNBM71be6\nOFfV/hxVF/ti61XMqgIA4DnELAAg5YZGwrEwbegY0HE3Vo93OPu6zvGRNVkZaarxOzOoNf7c2Hq1\nP0c1/hyVF/i4VhUAML+FgtJgp/Nl0qSyFTM9onNGzAIAzlk4YnWyZ0jHOwZ0rCMerNHtlt7hc3p/\nX2aaavy5qi7OUW2JM7ta44ZqtT9HpXnZPFMVADA/hEPSUJcTpQMdbqB2nGG7y9kO9sXfo+5q6a7n\nZ+5nSBJiFgAwIT1DIzrWPqDjHQM63ulE6rGO6KnBAxoJT/1uwFkZaaopzlFNiROptf54rNb4c1Wa\nz+NqAABzjLXScO+pITrQ4exLDNPovsFOaaj73D97sOPc32MWIGYBAJLis6vH2gd0rKNfxzoGdNSN\n16Md53YqcJqRqopytLAkV7UlTqDWljjRWluSq7J8ZlYBAB4WHhknRMcuxwnVyLnfwHDCTJqU43e+\nihdN3+emEDELAPPI0EjYidN2J1CPtfe7S+dmS8FwZMrvHcjLUm2JE6e1/mi45qrWn6uqYp8y09OS\n+JMAAJAiI4NObA60x8NzoN2N0fZxQrVTGk7CbOmEGclXJOWWuHHqLmPb7r5c/+jvZxdKaXPr/8XE\nLADMMb1DI06stg/oSHu/jrb3x7ZP9gxN+X2zM9JUW5Krhe5XjRusCwNOsOZl878UAMAsYq00MhCP\n0bFBGotV93sD7vdCg9M3xszchBiNRmhJwnKcfb4iKY078EvELAB4UvfAiA67oXqkbcBZutHa3h+c\n8vsG8rK0MODE6iJ3ZnVRIE+LApwKDACYYSODo0P0lPX2U2dTQ1P/Q9zJMQmzo+ME6en2Z+ZM0/jm\nJmIWAGaproGgDrc5kRoN1sPtznKq16+mGanan6NFJXlaGHCCdVEgVwvd7XxmVwEA0yE8MiZE204f\np9F9IwPTM7a0TCc2cwPx8EyM0MT9zJbOKH5rAYAZ1Dcc0pG2fh1q69cR9+twu7PsnGKwZqWnqbYk\nR4sDeVoUyNPiUnemNZCn6uIcZWXMretlAAAzzFrnDrtjI7Q/MVDbRn8vGXfknYj0bCc+ozOheaVu\ngAZOH6zZBRJ30PcEYhYAUmw4FNax9oFYsB524/VwW79ap/j81eyMNDdWc1VX6syq1gXytKg0T5WF\nPqVzOjAAYKrCIwkx6kZo/5gZ1P620ZEaCaV+XGmZTozG4jQapYHRcZqbsD8zlzCdw4hZAEiCSMTq\nRM+QDrf263Bbnw62RqO1T42dg4pM4RGs0WBdXJqrxaV5Tqy62xUFPq5fBQBMzMig1N+aMFOaEKr9\nbWO226fnzrwmbXSM5rkzpLFYHRuoASkrnzDFKMQsAExC33BIh1udSD3Y0qeDbf062NKnI+39GhqZ\n/GNtMtONE6iBPNUlROtid4aVYAUAnCLY78RnYpD2t8ZjdKBtdJyO9Kd+TFn5CWE6NkgDp37PVzzn\nHhOD6UfMAsAYkYjVyZ4hHWx1g7W1Xwdb+3SotX9Kj7YxRqouzlFdaZ6WlOaprjRPdWX5qgvkaUGx\nTxk8fxUA5rfggBuerU58xsJ07La7nvJHxxh3RrR0dJjmlTr7ojOpuYH4dqYvxWMCTkXMApi3hkNh\nHW7r18EWJ1ajX4da+zUQDE/6/fy5mVpSlu9Ea5kTrkvK8rWwJFe+TO5wCADzRijonrrbGj+9N7qe\nOJManV1N9cxp7FrTUjdCS8dsj9mXU8ydeeEJxGyyRCLSoV9I7QelrmPSjX/NOf3ALNEzNKIDLc4s\n6wF3tvVAS5+OdQxM+lrW6GnB0VBdUpanpWV5WlKaL39eVmp+AADAzIpEpKGu0VE6NlIT14e6Ujue\n9Oz4jGleqZRXdmqo5pXFv59dyO+lmJOI2WQxRnrqbinY62xv/KyUXzajQwLmm47+oPY39+pAa5/2\nNzvBur+lV809k79jsD83U8vK87U0Fqz5WlKWr1p/DqcFA8BcEBqOx2df65hIHbN/oC21d+tNy3Ti\nMy+QEKZlbpSWJmy7scqjYwBJxGzyGCMFlkgndjjb7QeIWSAFrLVq7w9qX3Ov9jc7sRoN1/b+4KTe\nyxipxp+jZWX5sXBd6i5LmGUFAG+xVgr2SX0tboi2JERpy6mRmso79po0d1a0bEyMJgRqdDs3IPmK\niFNgCojZZAosGx2ziy6f2fEAHtfeN6z3E6J1X3Of9jf3qnNgZFLvk5WeprrSPCdYy51wXebOuHIt\nKwDMYtY6p+z2tUr9LWNCtSVhf2vqb4yUXTg6Qkd9BaS88vj3c/xccwpMA2I2mQLL4uvtB2ZuHIDH\n9AyNaH9zr94/2ad9zb16/2Sv9rf0qq1vcjOtvsw0LSvP1/LyAneZr+UVBZwaDACzibXSYKcbpc2j\nAzUWqQkzqeHJ/b9gwky6G5/lztl040VqdH9uKXfrBWYhYjaZEmO24+DMjQOYpYZDYR1o6dP7J51g\nfd8N1xPdk3vcTW5WeixaV1Tka3mFs15dnMNzWQFgJlgrDffEgzQWqdF1N1yj0RqZ3Bk2E5bhS4jT\nxEgdsx6bPeUPOgEvI2aTqWRpfL2dmMX8FYlYNXQOau/JHu11w3XvyR4daR9QeBK3D/ZlpmlFRQHR\nCgAzZWRwdIxGI3Xssr9FCk3+OdwTkpXvzpKWJywTg7U8PpPKjZGAeYWYTabAkvh6+0HnNu78iR/m\nuJ6hESdWT/Roj7t8/2Sv+ifxnNbMdKOlZflaUVGg8yoLnGVFgWr8RCsAJF0k7DwDta9Z6m0+Q6Q2\nO7OtqZBV4MRofsWYQC0/NVazclMzBgCeR8wmU47fuaZioE0KD0s9DVLxwpkeFZAUkYjVsY4B7TnR\noz0nerT7RK/2nOhRY9fkbraxsCRX51UWaGWlE67nVRRocWmeMrmmFQDOTXAgHqG9J90oPRkP1Oi+\n/lbJTvwPHCcsM3dMlFaMidMKAhVAUhGzyRZY5sSs5MzOErPwoMFgWHtP9mh3NFybJj/b6s/N1MrK\nQp1XWaD6qgKdV1mo5eX5ysvmPzsAMGHRmyXFAjVhGZtZdSM1FbOoaRkJURqdRa0YHarR9ax8TvEF\nMK34rTLZAkul42856+0HpKXXzux4gLNo7xvW7hM92tXkROvuEz061NqniV7amplutKy8QPXuTOvK\nqkLVVxaorCBbhl9qAGB8kYjzh9+9J+JBGlueHH0KcHg4+Z+f408I0sqEKHX3FVQ6675iLpkCMGsR\ns8kW4CZQmJ2stWrqHtJ7jd3a1ditXU09eq+pW809E/8lKZCXpfqqQtVXFai+qlCrFhRqaVk+pwgD\nQFQk7JzGG43U3hNumJ4YE6styT/VNz1rdKAWVCQE6pjZ1Izs5H42AMwAYjbZeNYsZoFIxOpox4B+\n29itXU3d2tXohGvXwMQehWCMtKQ0T6sWFKm+qkCrqgq1qqqQ2VYA89eomdSTCcuT8e3oqb82ktzP\nzipww7QyvkycPY0uc/yc5gtgXiFmky3x8Tw8axbTIBKxOtLer982duu9xm4nYBt71DscmtDrfZlp\nWlnpzLKucmdbV1YWKDeL/zwAmAei16T2nogHas+J0dEajdTIxP67OmE5/tGBWlB5aqAWVEpZecn9\nXACYI/htNdlKEh7P03lUCgWljKyZGw/mFGudOwrvbOjWzoYu7Wzo1u6miYdrgS9DaxYUafWCQq2p\ndpZ1pXnK4DRhAHNRcGBMpDa5gdo0ejvZ16TmBqSCKjdGq8aP1fwKKdOX3M8FgHmGmE22rFypsMZ5\nLI8NS11HpdLlMz0qeJC1Vid7hrTjeLd+29jlBmy3ugcndqpwIC9La6qLtKa6UGsWFGlNdZFq/Dmc\nJgzA+6LXpfY0OaEaXcYC9YQzuzrcndzPzfG7cVo5JlYr48v8Cv4QGwCmCTGbCoGlTsxKznWzxCwm\noHtwRL9t6NaOhi69c6xLOxq61No7sdmC0nwnXNdWF8WWVUU+whWA90RnU3sa3dN9m8Ys3WhN5s2T\nsgqcEC2sSojScbaZSQWAWSWlMWuMuVnS1yWlS/qetfbLpznuI5KekXSxtXZrKsc0LQJLpcO/dNa5\nozHGEQxFtOdEj3Y0dOnd487Xodb+Cb22ODdTa6uLdH5NsdbWFGldTZEqCwlXALNc9NrUniZ39rQp\nvh6bTW2UhpI4m5qW6cRoYXT2dIEbrQsStiuk7ILkfSYAYNqkLGaNMemSvinpBkkNkrYYY5631u4e\nc1yBpD+V9HaqxjLtuKMxxmjqGtQ7x7r0zrFOvXO8S79t7FYwdPa7XeZlpWtNdZHOry2OBWxtCacK\nA5hlIhH3tN/GhEBtHB2pPU1SaCh5n5lT4kZpVcIMalV8X0GVc+0qz0gFgDkrlTOzl0g6YK09JEnG\nmB9L+pCk3WOO+/8k/Z2k+1M4lulFzM5rQyNh7Wrq1rajnW7Adulkz9l/gctIM1pZVaDza4p1fm2x\nLqgt1tKyfKWnEa4AZlAk7NzJNxqo3Y1jotWdZU3WnX5Hzaa6cRqL1oRQ5ZRfAJj3Uhmz1ZKOJ2w3\nSLo08QBjzHpJtdbafzPGzM2Y7Tg0c+PAtGjpGdK2o53O17FO7WrsUTB89lnX2pIcXVDr1wW1xbqg\ntkirFxTJl5k+DSMGAFckLPW1uJHaEI/U7obRp/8m6/rUrAI3TqukwupxYrWa2VQAwITN2A2gjDFp\nkh6WdPcEjr1X0r2StHDhwtQOLBmKF0om3fmff0+jFOznGXFzRCRita+lV1uOdGrrkQ5tO9qphs7B\ns74uNytd59cU68KFxbpwoROwZQXZ0zBiAPOWtVJ/m3NDwuhsajRYo9u9J5I3o5pT4sRoLFZr3OWC\neLj6CpPzWQAAKLUx2yipNmG7xt0XVSBpjaRX3ev/KiU9b4zZPPYmUNbaRyU9KkkbNmywKRxzcqRn\nSv7FUod786eOQ1Ll2hkdEqZmOBTWzoZubTnSoa1uwPYMnf0Xv7rSPK1f6Nf6RcVav9CvFRUFnC4M\nILmGup047W6MB2ssVt2Z1WQ9PzW31InSopr4TGph4voCKTMnOZ8FAMAEpTJmt0haboypkxOxH5P0\nn6PftNZ2SyqNbhtjXpX0Z3PibsaSc6pxNGbbDxCzHtE/HNLWo536zeF2/eZwh3Y0nP1GTdkZaTq/\npljrF/l10SK/1i8sViCfWVcA5yAUHDOTetwN14Z4wAZ7k/NZuYF4nBZVx2dSC6ud7YIFXJ8KAJiV\nUhaz1tqQMeYzkl6U82ieH1hrdxljviRpq7X2+VR99qwQWCbtf9FZ5/E8s1b34Ii2HunQ24edr/ca\nuxWOnHnyvzQ/SxsWlWjDYr82LC7RqqpCZWVwfReACbJWGugYE6hjYrWvWVISTkTKLnID1Q3TWLBW\nx2dZmVEFAHhUSq+Ztda+IOmFMfsePM2x16RyLNMusCS+TszOGj1DI/rNoQ79+mC73j7crt0nemTP\n8vtiXWmeNizy6+LFTsDWlebxaBwApxceic+qdkUj9djoWB0ZOPfPycgZHaZFNadGK89PBQDMYTN2\nA6g5j8fzzAr9wyFtOdKhNw+1682D7XqvsVtnmng1RjqvokCXLQnokjonXssLOL0OQILh3oRQPZaw\nftxZ9p7QOc+qmrT43X2joVpUmxCvtVJuifMfLQAA5iliNlWI2RkRDEW0/Vin3jjQpl8fbNeO410K\nnaFe04y0prpIlywu0aVLArp4sV/FuVnTOGIAs4q10mCn1HV0dKB2H4/vG+o698/Jynfj1A3V4tr4\ndvSOwOmZ5/45AADMYcRsqhQscE4BCw1Kgx3O9VG5JTM9qjnHWqt9zX361f5WvX6gTW8f6tDgyOmf\nh2iMtGZBkS5fGtDlSwLasNivAh+/MALzhrVSf6sTpV1Hpa5jbqgec/cdk0b6z/FDjFRQmTCbWuM8\nsi02w1oj+YqZVQUA4BwRs6mSliaVLJFadjnbHYeI2SRp6R3Sa/va9MaBNr1+oE2tvWd+9MTKyoJY\nvF5aF1BRLvEKzFmxWD0Wj9VRX8edP2Q8F+lZCWG6MD6rGl0WVksZnOEBAECqEbOpFFgaj9n2A1LN\nhpkdj0eNhCPafrRTv9zXql/ua9Wupp4zHr+wJFcbl5XqimWlumxJCY/JAeYSa6WB9niodo4TrOca\nq9FTgMdGavEiZz2v3PkDSwAAMKOI2VTiutkpa+oadOL1/Va9caBNvcOh0x5blJOpjcsCumJZma5Y\nVqqFgdxpHCmApBvqdiM1MViPxsP1XE8D9hW5M6rRr1r3NGB3mePnFGAAADyAmE2lwNL4Oo/nOaNw\nxOrd4136xd5m/ceeFu092XvaYzPSjDYs9uvK5WW6cnmpVi8oUnoav3gCnjEy5Fyn2nlU6jriLDuP\nxIP1XG+w5CtyI3VRQrAujAdrTnEyfgoAADDDiNlUYmb2jHqHRvSr/W36jz0tevX9FrX3B097bHVx\njq4+r0xXryjT7ywNcNMmYDaLRKS+ZidQo19dR+PrvSfO7f2zCiR/YqiOiVZiFQCAeYGYTaVRMXvQ\nudZrnp+6dqJ7UC/tata/727W24fbNRIe/7E5WelpunRJia45r1xXryjT0rI8mXn+1w6YVYL97ozq\n4dHR2nnE2R8+843ZzijDNzpS/Yuc9eiS04ABAICI2dTKDTinuw11O9d49Z6UCqtmelTT7lBrn17c\n1ayf7zqpHcdPf/pgaX62Nq0s13X15bpiWanysvnHE5gx1jr/zeo84gRrx5ho7W+Z+nubNKmwJiFS\nF48OVm6wBAAAJoBaSCVjpJKlUtN2Z7vj4LyIWWutdjX16MVdJ/XirpPa19x32mNXLyjUpvoKbVpZ\nrrXVRUrj2ldg+oSGnRsqdRyOz7DG1o+e212Bc/xupC4eHaz+xc51q+lcKgAAAM4NMZtqgWXxmG0/\nIC2+YmbHkyLWWu092auf7mjSv+48oWMdA+Mel5FmdNmSgG5aXaHrV1WoqihnmkcKzDNDPfGZ1Y5D\no2dZuxskjX+q/1mlZbqnAC9O+Fok+eucpa8oaT8CAADAeIjZVJvjN4E61Nqnn+44oZ/ubNKBlvFn\nYLMz0nT1ijLdtLpSm+rLVZybNc2jBOYwa6XBTidUY1+H4+sDbVN/b1+xVFLnBupi56vEXS+sltLS\nk/RDAAAATB4xm2pz8PE8DZ0D+tedJ/TTHU3a1dQz7jEF2RnaVF+um1ZX6urzypSbxT9qwJRZK/W1\njAnWhHAd7p7iGxupqGZ0pPrr4us5/uT9DAAAAElGYaTaHInZ/uGQfvbeST27rUFvHmof95iczHRd\nv6pCH1xXpatWlMmXyawNMGGxYD3oRGq7u+w46ARr8PTXnp9RetaYSE1Y+hdJGdlJ/TEAAACmCzGb\naiUJMdtxSIqEPXNqXiRi9ZsjHXpmW4Ne+O0JDQTDpxyTlZGma88r0++tW6BN9eXMwAJnYq3U3+YE\navvB0ctzCdbMPCdQS5bEl353WbjAM//NAQAAmAzKI9V8hVJ+hdTXLEVGnDuHltTN9KjO6Fj7gJ7d\n3qBntzeoofPUu5mmGemK5WX60PkLdMPqChX6uCspMMpgVzxU2w8618t3HJTaD039lODsQjdWx/nK\nL+e5qwAAYN4hZqdDYJkTs5Lzi+0sjNlwxOoXe1v0xFtH9dq+1nGPWVaer49eVKNbLqxWRaFvmkcI\nzDIjg+7pwAfcr4Px5VRvuhQN1sBSN1SXxrdzAwQrAABAAmJ2OpQskY6+4ax3HJR0/YwOJ1Fr77Ce\n2npcP3r7mBq7Tp2FLfRl6EMXVOujF9VoXU2RDL9MYz6JhKWuowmhmhCu3cen9p5Z+QnBunT0kmAF\nAACYMGJ2Osyyx/NYa7XtaKeeeOuoXvjtCY2ERz9n0hjp6hVluvWiWm2qL+dGTpjbrJUG2p1/N9v2\nS+37nVht2+88kzUcnPx7ZvjipwAHliUE6zJOCQYAAEgSYnY6zJKYHQlH9JN3m/T91w9rz4lTH6nj\nz83U7Rcv1B9culC1JbkzMEIghUJB97Tg/U6oRsO1bb801DX59zPpzt2AA8vdYHXDtWSp+wzWtOT/\nDAAAAIghZqfDqJid/sfzDAbD+qctx/TdXx0e91TiCxcW687LFukDa6uYhYW3RWdZ2/a5wbovHq2d\nRyQbmfx75lc6/w6XLnOj1f0qXiRlZCX9RwAAAMDEELPTwb9YkpFknbsZh4an5dmO3QMjeuKtI3rs\njSNq7x99qqQvM00fOr9ad16+SGuqi1I+FiCpwiEnTtv2jQ7X9v3SYOfk3y8zNx6ppcvd2Vb3tGBf\nYdKHDwAAgHNHzE6HTJ9UXOuErKzzPMnylSn7uJaeIX3/9cP64dvH1DccGvW9krws/dHGxfr4ZYtU\nnMusEma54d6EGdaEcG0/6DzqalKMVFTrzrAud6I1Gq6FC7iOFQAAwGOI2ekSWObGrJzrZlMQsx39\nQT3yH/v1o98cUzA0+nTK6uIc3XvVEt22oVY5WZxKjFnEWqm/VWp9X2p734nV1vedcO1pnPz7ZeY5\nwVq6wvmKzbYukzJzkj9+AAAAzAhidrqULJUO/sJZ70judbNDI2E9/usj+uYvDqh3zEzs8vJ8ffLq\npdp8wQJlpnNDGsygSETqaXBCNRqu0fWp3ICpYIETqWXnJcy0rmCWFQAAYJ4gZqdLCu5oHIlY/XRn\nk77y8/dPubHTBbXF+pNrlur6+gqlpfGLPaZROOQ8m7V1r/v1vrNs2y+NDEzuvdIynD8IikZr6Yp4\ntGYXpGb8AAAA8ARidrok+Y7Gvzncob/5t93a0dA9av+S0jx94QP1ur6+XIbZKaRSeMR51E1isLa6\npwmHhyf3Xln5bqSeJ5WtcJalK6SSOik9MzXjBwAAgKcRs9MlsDS+fg4zs0fa+vU/f7ZHL+5qHrW/\nJC9Ln71+ue64ZCGnEyO5QkHn1PjWvVLL3viMa/sBKRI6++sT5QbcYD0vPtNadp7zXFb+8AUAAACT\nQMxOl6JaKS3TuQNrX7Nzl9ZJnCYZiVj945tH9OWf7dVwws2dsjLS9Ecb6/Qn1y5VoY8ZLJyD8Ihz\n1kDrHjda3WXHwclHa0GVG6wr3WBd6WznlaZm7AAAAJh3iNnpkp7hnDLZts/Zbj8oLbhgQi890T2o\n+5/eqdcPtI3a//sXLNCf3XSeavy5yR4t5rJwSOo8LLXscb6i0dp+YPKPuymqdWK1vH50vOYUp2bs\nAAAAgIuYnU6BZfGY3fXchGL2+R1N+u/P/VY9Q/GZsfqqQn35w2t1fi3BgDOIRJwbMcWC1Y3Wtn2T\nv6a1aKETq+Ur3VnWeufaVm7CBAAAgBlCzE6nlb8nvf+Cs/7rb0irbzlt0HYPjOh//OQ9Pb+jKbbP\nGOmTVy/V565foawMrouFy1qp96TUsjs+29qy27mudbJ3Dy6siQdreT3RCgAAgFmLmJ1O598hvfsj\n6ejrkg1LP/mMdO8rp9yt9Y0Dbfqzp3foRPdQbF+NP0cP33aBLqkrme5RYzYZ7HRitXnX6HCd7HNa\nCxa40VofX5adJ/kKUzNuAAAAIMmI2emUliZtfkT69kYpNCg1/1Z6/WvS1fdLkkbCEX35Z3v1/dcP\nj3rZrRfV6MEPrlIBN3iaP0YG3bsHjwnX3qazvzZRbqkzw1q+yonW8lVOtOb4UzNuAAAAYJoQs9Mt\nsFS67i+ll/67s/3aV6T631Ow5Dzd9+Q7+vmuk7FDS/Ky9Le3rNXNaypnaLBIuUhY6jgsteySmnfH\nl52HJRs5++ujsgvdaI2Gq3uKcH5Z6sYOAAAAzCBidiZc9ifODaAat0nhoCI/+Yw+k/W3emlP/G7F\n155Xpr/76DqVF/hmcKBIGmulvhY3VhPCtfV9KTR09tdHpWc717CWr46Ha8UqntMKAACAeYeYnQlp\n6dKHvil950opMqK0xq2qHflHSb8rSfrEFXX6y9+tlyFOvGm4zzlFuHmXcz1rdDnQPok3MVLJEidY\nK1a7s62rnH3p/GsLAAAA8FvxTCmv18gVf6bM1/6nJOnPMp7Wy5GLdPNVv6MHbl5JyHpBOCR1HEo4\nRdgN184jkuzE3ye/wp1hXR2faS09T8ri+cEAAADA6RCzM2RoJKxPHrpSfx75kValHVWOCeqJsv9f\ntTfdTcjONtZKfc0JM61TPEU4Kz/h1OCE2da8QOrGDgAAAMxRxOwMGAyG9cf/uEW/PtilVnOvfpL1\nP5RhIlrYs13a9rh08R/P9BDnr2ScImzSpcAyZ4a1fLUTrhWrpKKFzh2tAQAAAJwzYnaa9Q+H9Mf/\nuEVvHeqQJO2ydXpn4V26+PhjzgH//pC0/EapuHYGRzkPhENSx8FTZ1s7j0zufQqq4qcGR8O1dIWU\nyY27AAAAgFQiZqdR/3BIf/jYFv3mSEds3/03naeLr9gk/cMbUts+Kdgr/etnpT94hrvTJoO1UneD\n+5zW3fGv1n1SeHji7zPeKcIVq6XcktSNHQAAAMBpEbPT6Gsv7xsVsl/4Tyv1X65e6mxs/j/SD26S\nZKUDL0vP/JF0099KhVUzM1gv6muVWve44RqN1z3ScM/E3+OUU4TdaOUUYQAAAGBWIWanSThi9dw7\nTbHtUSErSQsvlS79pPT2t53tXf8s7f936dq/kC65l8exJPp/7d17zF91fQfw94e2tNBSbq0ItIWq\nXAUGG3EadCwTDRcDy2YMGOIlbMRtLM5bhtE55/6ZGN2yjG26zDg3HVP/MA2gbEOdwwiRBFYucmlA\nuShCoVxsKS3td3+cn+1DKfC09vye5zzP65Wc/M45v9Pz+zT59Pc8757v+Z4Nj3WTLz0nuP4w2bD2\npf/sRPsdNgqtE662Lj0mmTu/n7oBAIA9RkIakxvufTRrf94Na12yaH5+7w2veP5BZ3w8eXpdsvqK\nbnvTU8k1H05u/lJyzqeTFa8dW71TrrVk/dpuMqZH7hiF19Hr+od37VwL9t9+lfVlx3XrLzs22efA\nfmoHAAB6J8yOyVWrf56BdrAAAA2lSURBVLpt/ewTX545e+3kfth5C5Lf+Wxy8tuTqz/Y3UObJD+7\ntRuCfPKFyZv+Ilm4ZExVj8GWzd2kS2vvStbe3S2P3t1tP71u1841b99k6bGjwHpcsvS4LsDud6j7\njwEAYIYRZsfg2S1b881bH9q2/ZaTDnvxP/CK05P3fC+5/vLkfy5LNm/o9t/8b8kdVyZv/LPkxLcl\nCxb3WPUetHVL8sT9yWP3Jo/ds31Ze3ey7t5k67O7dr65C7oZgycG15cd575WAACYRYTZMbj+nsfy\n6PpNSZJDFs/PqUdMYnjr3L2T178vOeGtyTcv7UJskmx8PLnqA8nVH0oO/ZXkiNOSI1+frHhdss8B\nPf4tXsTWrcn6R7pZg598oHtd9+MuqD52T7e+dfOun3fvRd09rEuP3R5elx6THLAi2WvOnv97AAAA\ngyHMjsGVq7dP/HT2iYdmr50NMX4hByxPzv9Sctd/Jt/40PbnoLatyU9u6pbv/12SSl5+QnLE65Mj\nXpcsXpbse2B3X+j8/XfviuXmp7v7VjesTdY/OnodbT/1UBdan3ggefLBZMumXT//Lyxelix5VRdY\nDz4qWTJaFh9ueDAAALBTwmzPNm/Zmm/eNnGI8W4+aufoNycr35B8//Lk9q8nD92apE04oCUP3dIt\nv5gReZvqrtruc1AXbvc5oJtgacum7p7Vba/PdOvPbko2PpFsXr97te7MokOSg16RHLiyez1oZRdY\nD35VsvfCPfc5AADArCDM9ux7a9bm8Q3dENvD9l+QU5b/EjPoztsn+Y0PdsvT65L7rk9+dF23PLS6\nu1q7U607flcnVNoV+xyY7L8s2X/56HXZ9uB64JHJ/EX9fTYAADDrCLM9e+4sxrs4xPjF7HNgcsxZ\n3ZJ0V1LvuyH58XXJT1cnTz82CrCPJ888uXufsde8bubkfQ/uloVLkn2XdK8Ll3ZDoPdf3g0HFlYB\nAIAxEmZ7tOnZrblmwhDjc3Z3iPFkLNi/G4p89Juf/96WzV2ofXrdKOQ+ntRe3SRTc3Zc5nWvCxYn\n8xe7ZxUAAJiWhNkeXbfmkTy5sXvszOEH7JOTl0/RbMNz5iWLlnYLAADADOChnD26csIQ47ecdGjK\nVU4AAIA9QpjtycbNW/Jft/1s2/ZbTjpsCqsBAACYWYTZnvzv3Wvz1DPdEOMVB+2bEw5fPMUVAQAA\nzBzCbE+uXP2TbevnGGIMAACwRwmzPdi4eUv++/aJQ4x7nMUYAABgFhJme/CdOx/J+k1bkiQrlyzM\n8YcaYgwAALAnCbM9mDjE2CzGAAAAe54wu4c9vWlLrv3hw9u2zzHEGAAAYI8TZvewb93xcJ7e3A0x\nfuXShTnmkP2muCIAAICZp9cwW1VnVtWdVbWmqi7dyfvvqapbqurmqrquqo7vs55xuOqWiUOMDzPE\nGAAAoAe9hdmqmpPk8iRnJTk+yQU7Catfbq2d2Fo7OcllST7TVz3jsP6ZZ/OtO7YPMTaLMQAAQD/6\nvDL7miRrWmv3tNY2JbkiyXkTD2itPTlhc2GS1mM9vbv2joezcfPWJMkxh+yXowwxBgAA6MXcHs99\neJL7J2w/kOTXdzyoqv4oyfuT7J3kt3Z2oqq6OMnFSbJixYo9XuiecuX/bR9ibOInAACA/kz5BFCt\ntctba69M8qdJPvoCx3yutXZqa+3UpUuXjrfASXpq4+Z8565Htm0LswAAAP3pM8w+mGT5hO1lo30v\n5Iokv91jPb2qqnz4rGPza0ccmOMPXZxXLl001SUBAADMWH0OM/5BkqOqamW6EHt+krdPPKCqjmqt\n3T3aPCfJ3RmoRfPn5t2nrcy7T1uZjaNH8wAAANCP3sJsa+3ZqrokyTVJ5iT5fGvttqr6RJIbW2ur\nklxSVWck2ZxkXZJ39lXPOC2YN2eqSwAAAJjR+rwym9ba1Umu3mHfxyasv7fPzwcAAGBmmvIJoAAA\nAGBXCbMAAAAMjjALAADA4AizAAAADI4wCwAAwOAIswAAAAyOMAsAAMDgCLMAAAAMjjALAADA4Aiz\nAAAADI4wCwAAwOAIswAAAAyOMAsAAMDgCLMAAAAMjjALAADA4AizAAAADI4wCwAAwOAIswAAAAyO\nMAsAAMDgCLMAAAAMjjALAADA4AizAAAADI4wCwAAwOAIswAAAAyOMAsAAMDgCLMAAAAMjjALAADA\n4AizAAAADI4wCwAAwOAIswAAAAyOMAsAAMDgCLMAAAAMjjALAADA4AizAAAADI4wCwAAwOAIswAA\nAAyOMAsAAMDgCLMAAAAMjjALAADA4AizAAAADI4wCwAAwOAIswAAAAyOMAsAAMDgCLMAAAAMjjAL\nAADA4AizAAAADI4wCwAAwOAIswAAAAyOMAsAAMDgCLMAAAAMjjALAADA4AizAAAADI4wCwAAwOAI\nswAAAAyOMAsAAMDgCLMAAAAMjjALAADA4AizAAAADI4wCwAAwOAIswAAAAyOMAsAAMDgCLMAAAAM\njjALAADA4PQaZqvqzKq6s6rWVNWlO3n//VV1e1Wtrqprq+qIPusBAABgZugtzFbVnCSXJzkryfFJ\nLqiq43c47KYkp7bWTkrytSSX9VUPAAAAM0efV2Zfk2RNa+2e1tqmJFckOW/iAa21b7fWNow2r0+y\nrMd6AAAAmCH6DLOHJ7l/wvYDo30v5KIk3+ixHgAAAGaIuVNdQJJU1YVJTk1y+gu8f3GSi0ebP6+q\nO8dV225akmTtVBcBI/qR6UQ/Mp3oR6YT/ch0MR16cVJzKfUZZh9MsnzC9rLRvueoqjOSfCTJ6a21\nZ3Z2otba55J8ro8i+1BVN7bWTp3qOiDRj0wv+pHpRD8ynehHposh9WKfw4x/kOSoqlpZVXsnOT/J\nqokHVNUpST6b5NzW2sM91gIAAMAM0luYba09m+SSJNck+WGSr7TWbquqT1TVuaPDPpVkUZKvVtXN\nVbXqBU4HAAAA2/R6z2xr7eokV++w72MT1s/o8/On0GCGRDMr6EemE/3IdKIfmU70I9PFYHqxWmtT\nXQMAAADskj7vmQUAAIBeCLO7qarOrKo7q2pNVV26k/fnV9V/jN6/oaqOHH+VzBaT6Mf3V9XtVbW6\nqq6tqklNdw6746X6ccJxv1tVraoGMWMiwzSZfqyqt42+I2+rqi+Pu0Zmj0n8vF5RVd+uqptGP7PP\nnoo6mR2q6vNV9XBV3foC71dV/e2oX1dX1a+Ou8aXIszuhqqak+TyJGclOT7JBVV1/A6HXZRkXWvt\nVUn+Osknx1sls8Uk+/GmJKe21k5K8rUkl423SmaLSfZjqmq/JO9NcsN4K2Q2mUw/VtVRST6c5LTW\n2quT/MnYC2VWmOT340fTTZp6Srongfz9eKtklvlCkjNf5P2zkhw1Wi5O8g9jqGmXCLO75zVJ1rTW\n7mmtbUpyRZLzdjjmvCT/Mlr/WpI3VlWNsUZmj5fsx9bat1trG0ab16d77jP0YTLfj0nyl+n+k2/j\nOItj1plMP/5+kstba+uSxKMC6dFk+rElWTxa3z/JT8ZYH7NMa+27SR57kUPOS/LF1rk+yQFVdeh4\nqpscYXb3HJ7k/gnbD4z27fSY0WOKnkhy8FiqY7aZTD9OdFGSb/RaEbPZS/bjaJjS8tbaVeMsjFlp\nMt+PRyc5uqq+V1XXV9WLXaWAX8Zk+vHjSS6sqgfSPRHkj8dTGuzUrv6OOXa9PpoHmF6q6sIkpyY5\nfaprYXaqqr2SfCbJu6a4FPiFuemG0P1mulEr362qE1trj09pVcxWFyT5Qmvt01X1uiT/WlUntNa2\nTnVhMB25Mrt7HkyyfML2stG+nR5TVXPTDRV5dCzVMdtMph9TVWck+UiSc1trz4ypNmafl+rH/ZKc\nkOQ7VfWjJK9NssokUPRkMt+PDyRZ1Vrb3Fq7N8ld6cIt7GmT6ceLknwlSVpr30+yIMmSsVQHzzep\n3zGnkjC7e36Q5KiqWllVe6e7QX/VDsesSvLO0fpbk3yreagv/XjJfqyqU5J8Nl2QdT8YfXrRfmyt\nPdFaW9JaO7K1dmS6e7jPba3dODXlMsNN5uf119NdlU1VLUk37PiecRbJrDGZfrwvyRuTpKqOSxdm\nHxlrlbDdqiTvGM1q/NokT7TWfjrVRU1kmPFuaK09W1WXJLkmyZwkn2+t3VZVn0hyY2ttVZJ/Tjc0\nZE26G6vPn7qKmckm2Y+fSrIoyVdH85Dd11o7d8qKZsaaZD/CWEyyH69J8uaquj3JliQfaq0ZScUe\nN8l+/ECSf6qq96WbDOpdLobQl6r693T/mbdkdJ/2nyeZlySttX9Md9/22UnWJNmQ5N1TU+kLK/8+\nAAAAGBrDjAEAABgcYRYAAIDBEWYBAAAYHGEWAACAwRFmAQAAGBxhFgAAgMERZgEAABgcYRYApqmq\nOrGqflxVfzDVtQDAdCPMAsA01Vq7Jcn5Sd4x1bUAwHQjzALA9PZwkldPdREAMN0IswAwvf1VkvlV\ndcRUFwIA04kwCwDTVFWdlWRhkqvi6iwAPIcwCwDTUFUtSPLJJH+Y5JYkJ0xtRQAwvQizADA9fTTJ\nF1trP4owCwDPI8wCwDRTVcckeVOSvxntEmYBYAfVWpvqGgAAAGCXuDILAADA4AizAAAADI4wCwAA\nwOAIswAAAAyOMAsAAMDgCLMAAAAMjjALAADA4AizAAAADM7/AxBrDK/5i9NhAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_cost_lambda()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.9. Krzywa uczenia się" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Krzywa uczenia pozwala sprawdzić, czy uczenie przebiega poprawnie.\n", + "* Krzywa uczenia to wykres zależności między wielkością zbioru treningowego a wartością funkcji kosztu.\n", + "* Wraz ze wzrostem wielkości zbioru treningowego wartość funkcji kosztu na zbiorze treningowym rośnie.\n", + "* Wraz ze wzrostem wielkości zbioru treningowego wartość funkcji kosztu na zbiorze walidacyjnym maleje." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def cost_trainsetsize_fun(m):\n", + " theta = np.matrix(np.zeros(X.shape[1])).reshape(X.shape[1],1)\n", + " thetaBest, err = SGD(h, J, dJ, theta, X, Y, alpha=1, adaGrad=True, maxEpochs=2500, batchSize=100, \n", + " logError=True, validate=0.25, valStep=1, lamb=0.01, trainsetsize=m)\n", + " return err[1][-1], err[3][-1]\n", + "\n", + "def plot_learning_curve():\n", + " plt.figure(figsize=(16,8))\n", + " ax = plt.subplot(111)\n", + " M = np.arange(0.3, 1.0, 0.05)\n", + " Costs = [cost_trainsetsize_fun(m) for m in M]\n", + " CostTrain = [cost[0] for cost in Costs]\n", + " CostCV = [cost[1] for cost in Costs]\n", + " plt.plot(M, CostTrain, lw=3, label='training error')\n", + " plt.plot(M, CostCV, lw=3, label='validation error')\n", + " ax.set_xlabel(u'trainset size')\n", + " ax.set_ylabel(u'cost')\n", + " plt.legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Krzywa uczenia a obciążenie i wariancja\n", + "\n", + "\n", + "\n", + "Źródło: http://www.ritchieng.com/machinelearning-learning-curve" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7MAAAHjCAYAAADxD0ixAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl8VfWd//HXSQhhh7ArqKCAgIIo\nCCIoiCKordYNqq2tba2jY2vbabVaq9aF7nVaHVunTtXqjFbUWvVXK4uAqIASUFBAEwSEgKyyr1nO\n748TuAkECJCbk3vv6/l43Ee/n7vljQvl7Vm+QRiGSJIkSZKUSrLiDiBJkiRJ0qGyzEqSJEmSUo5l\nVpIkSZKUciyzkiRJkqSUY5mVJEmSJKUcy6wkSZIkKeVYZiVJkiRJKccyK0mSJElKOZZZSZIkSVLK\nqRd3gEPVunXrsFOnTnHHkCRJkiQlwaxZs9aGYdjmYO9LuTLbqVMn8vPz444hSZIkSUqCIAg+rc77\nPM1YkiRJkpRyLLOSJEmSpJRjmZUkSZIkpZyUu2ZWkiRJkgCKi4spKipix44dcUfRYWjQoAEdO3Yk\nJyfnsD5vmZUkSZKUkoqKimjatCmdOnUiCIK44+gQhGHIunXrKCoqonPnzof1HZ5mLEmSJCkl7dix\ng1atWllkU1AQBLRq1eqIjqpbZiVJkiSlLIts6jrSv3eWWUmSJElSyrHMSpIkSdJh2LBhA3/84x8P\n67MXXnghGzZsOOB77rrrLiZOnHhY358JLLOSJEmSdBgOVGZLSkoO+NlXX32VFi1aHPA99957L+ed\nd95h5ztUpaWlleaD/RoO9X01zbsZS5IkSUp5nW77Z9K+e8kvL6ry+dtuu41PPvmEPn36MHz4cC66\n6CLuvPNO8vLy+OijjygoKOBLX/oSy5YtY8eOHXzve9/j+uuvj/J26kR+fj5btmzhggsuYPDgwUyb\nNo0OHTrw0ksv0bBhQ6699lq+8IUvcMUVV9CpUye+/vWv88orr1BcXMxzzz1H9+7dWbNmDVdffTUr\nVqxg4MCBTJgwgVmzZtG6detKWcePH8/dd9/Nzp07OeGEE3j88cdp0qQJnTp1YvTo0UyYMIFbb72V\nRx55hD59+vDWW29x1VVXcfnll/PNb36TtWvX0qZNGx5//HGOPfZYrr32Who0aMB7773HoEGDeOCB\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_learning_curve()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 2.10. Obserwacje odstające" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Funkcja regresji liniowej\n", + "\n", + "def h_linear(Theta, x):\n", + " return x * Theta\n", + "\n", + "def linear_regression(theta):\n", + " return lambda x: h_linear(theta, x)\n", + "\n", + "# Wykres krzywej regresji (wersja macierzowa)\n", + "def plot_regression(fig, fun, theta, X):\n", + " ax = fig.axes[0]\n", + " x0 = np.min(X[:, 1]) - 1.0\n", + " x1 = np.max(X[:, 1]) + 1.0\n", + " L = [x0, x1]\n", + " LX = np.matrix([1, x0, 1, x1]).reshape(2, 2)\n", + " ax.plot(L, fun(theta, LX), linewidth='2',\n", + " label=(r'$y={theta0:.2}{op}{theta1:.2}x$'.format(\n", + " theta0=float(theta[0][0]),\n", + " theta1=(float(theta[1][0]) if theta[1][0] >= 0 else float(-theta[1][0])),\n", + " op='+' if theta[1][0] >= 0 else '-')))" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych (mieszkania) przy pomocy biblioteki pandas\n", + "\n", + "alldata = pandas.read_csv('data_flats_with_outliers.tsv', sep='\\t',\n", + " names=['price', 'isNew', 'rooms', 'floor', 'location', 'sqrMetres'])\n", + "data = np.matrix(alldata[['price', 'sqrMetres']])\n", + "\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 0:n]\n", + "\n", + "Xo = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n + 1)\n", + "yo = np.matrix(data[:, -1]).reshape(m, 1)\n", + "\n", + "Xo /= np.amax(Xo, axis=0)\n", + "yo /= np.amax(yo, axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n8iTnDp+fm+SvD2xQVQ+oqmOHz49P8oQk102tQgCATswqsF2Y5EeqakeSHx5Op6o2V9UlwzbfnWR7\nVX0iyfuTXNhaE9gAgCPOqp0SPZjW2leS/NCI+duTPGv4/ENJ/sOUSwMA6I6RDgAAOiewAQB0TmAD\nAOicwAYA0DmBDQCgcwIbAEDnBDYAgM4JbAAAnRPYAAA6J7ABAHROYAMA6JzABgDQOYENAKBzAhsA\nQOcENgCAzglsAACdE9gAADonsAEAdE5gAwDonMAGANA5gQ0AoHMCGwBA5wQ2AIDOCWwAAJ0T2AAA\nOiewAQB0TmADAOicwAYA0DmBDQCgcwIbAEDnBDYAgM4JbAAAnRPYAAA6J7ABAHROYAMA6JzABgDQ\nOYENAKBzAhsAQOcENgCAzglsAACdE9gAADonsAEAdG4mga2qfrKqrq2qvVW1+SDtnlxVN1TVzqq6\nYJo1AgD0YlZH2D6d5MeTfHCpBlV1VJKLkjwlySOT/FRVPXI65QEA9OPoWWy0tXZ9klTVwZo9NsnO\n1tqNw7Z/nuTsJNeteoEAAB3p+Rq2k5J8ftH0TcN5AABHlFU7wlZV/5DkxBEvvby19tcT3tb5Sc4f\nTt5VVZ+e5Po5pOOTfHnWRRxB7O/psr+ny/6eLvt7uh6x3AVXLbC11n54hau4OcnJi6YfNpw3alsX\nJ7k4Sapqe2ttyRsZmDz7fLrs7+myv6fL/p4u+3u6qmr7cpft+ZTox5JsqqrvrKpvSXJOkstnXBMA\nwNTNqluPH6uqm5I8PsnfVdW7h/MfWlVXJElrbU+S5yd5d5Lrk7yttXbtLOoFAJilWd0l+ldJ/mrE\n/FuSbFk0fUWSKw5z9RevrDqWwT6fLvt7uuzv6bK/p8v+nq5l7+9qrU2yEAAAJqzna9gAAMgcBDbD\nXE1fVT2wqt5TVTuGjw9Yot09VXXN8McNI4fpUO/Zqjq2qrYNX/9IVT18+lXOjzH29zOq6tZF7+ln\nzaLOeVBVb6qqLy3VBVMN/OHwb/HJqnrMtGucJ2Ps7ydW1W2L3tu/Pu0a50lVnVxV76+q64b55IUj\n2hz2e3zNB7YY5moWLkjy3tbapiTvHU6Pckdr7fThz1nTK2/tG/M9e16Sr7XWTk3ymiS/M90q58dh\nfEdsW/SevmSqRc6XS5M8+SCvPyXJpuHP+Un+aAo1zbNLc/D9nST/tOi9/aop1DTP9iR5cWvtkUke\nl+R5I75PDvs9vuYDW2vt+tbaDYdo9s1hrlprdyfZN8wVy3N2krcMn78lydNmWMu8Guc9u/jv8PYk\nP1SHGO+NJfmOmKLW2geTfPUgTc5OclkbuCrJ/avqIdOpbv6Msb+ZoNbartbax4fPFzLo6eLAkZoO\n+z2+5gPbmAxzNVkPbq3tGj7/QpIHL9HuuKraXlVXVZVQd3jGec9+s82wG5zbkjxoKtXNn3G/I35i\nePri7VV18ojXmQzf2dP3+Kr6RFW9s6q+Z9bFzIvhpSqPTvKRA1467Pf4TLr1OFzTHOaKgYPt88UT\nrbVWVUvdavwdrbWbq+q7kryvqj7VWvuXSdcKU/I3Sd7aWrurqp6dwdHNJ824JpiEj2fwfX17VW1J\n8o4MTtWxAlW1IclfJPml1tq/rXR9ayKwTXOYKwYOts+r6otV9ZDW2q7hIdwvLbGOm4ePN1bVBzL4\nX4bANp5x3rP72txUVUcnuV+Sr0ynvLlzyP3dWlu8by9J8rtTqOtI5Tt7ihaHidbaFVX1hqo6vrVm\njNFlqqpjMghrf9Za+8sRTQ77PX6knBI1zNVkXZ7k3OHzc5Pc5yhnVT2gqo4dPj8+yROSXDe1Cte+\ncd6zi/8OT0/yvqZjxeU65P4+4PqSszK4LoXVcXmSnx3eSfe4JLctugyDCauqE/dd/1pVj80gG/jP\n3zIN9+WfJLm+tfb7SzQ77Pf4mjjCdjBV9WNJXpfkhAyGubqmtfajVfXQJJe01ra01vZU1b5hro5K\n8ibDXK3IhUneVlXnJflskv+WJDXoVuU5rbVnJfnuJH9cVXsz+PBf2FoT2Ma01Hu2ql6VZHtr7fIM\nvhD+tKp2ZnBB8Tmzq3htG3N//2JVnZXBHWBfTfKMmRW8xlXVW5M8McnxNRim8BVJjkmS1tobMxjh\nZkuSnUm+nuSZs6l0Poyxv5+e5Beqak+SO5Kc4z9/K/KEJD+T5FNVdc1w3q8mOSVZ/nvcSAcAAJ07\nUk6JAgCsWQIbAEDnBDYAgM4JbAAAnRPYAAA6J7ABjFBVpw97fV/u8h+aZD3AkU1gAxjt9Az6SbqP\n4cgSB9Va+4GJVwQcsfTDBsyt4cDL70pyVZIfyGBEgzcn+Y0k357kp5Ncm0Hn29+bQWeir0zyzgw6\ntPzWDIaL+e0MOoP+d0m+K8nnkrwsyZ8mWT/c3PNbax8adrZ71nDeA5Nc3Vr7sdX7LYEjgcAGzK1h\nYNuZwTi212YQ2D6R5LwMQtUzMxgy7brW2v+uqvsn+eiw/U8m2dxae/5wXa9M8l+TnNlau6Oqvi3J\n3tbanVW1KYOB4Tcv2vb6JB9M8suttQ9O4dcF5tiaH5oK4BD+tbX2qSSpqmuTvLe11qrqU0kensGg\ny2dV1UuG7Y/LcAiZES5vrd0xfH5MktdX1elJ7kny7w9oe2mSS4U1YBIENmDe3bXo+d5F03sz+A68\nJ8lPtNZuWLxQVZ0xYl27Fz3/5SRfTPKoDK4HvnPRsi9Psru19roVVw8QNx0AvDvJC6qqkqSqHj2c\nv5Bk40GWu1+SXa21vRkM9HzUcPktGZxufc6qVQwccQQ24Ej3mxmc3vzk8JTpbw7nvz/JI6vqmqra\nOmK5NyQ5t6o+keS07D/69tIkJya5arjsa1a3fOBI4KYDAIDOOcIGANA5gQ0AoHMCGwBA5wQ2AIDO\nCWwAAJ0T2AAAOiewAQB0TmADAOjc/webGB3oYUOQxAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data(Xo, yo, xlabel=u'metraż', ylabel=u'cena')\n", + "theta_start = np.matrix([0.0, 0.0]).reshape(2, 1)\n", + "theta, logs = gradient_descent(cost, gradient, theta_start, Xo, yo, alpha=0.01)\n", + "plot_regression(fig, h_linear, theta, Xo)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Odrzućmy obserwacje odstające\n", + "alldata_no_outliers = [\n", + " (index, item) for index, item in alldata.iterrows() \n", + " if item.price > 100 and item.sqrMetres > 10]\n", + "\n", + "alldata_no_outliers = alldata.loc[(alldata['price'] > 100) & (alldata['sqrMetres'] > 100)]" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "data = np.matrix(alldata_no_outliers[['price', 'sqrMetres']])\n", + "\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 0:n]\n", + "\n", + "Xo = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n + 1)\n", + "yo = np.matrix(data[:, -1]).reshape(m, 1)\n", + "\n", + "Xo /= np.amax(Xo, axis=0)\n", + "yo /= np.amax(yo, axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data(Xo, yo, xlabel=u'metraż', ylabel=u'cena')\n", + "theta_start = np.matrix([0.0, 0.0]).reshape(2, 1)\n", + "theta, logs = gradient_descent(cost, gradient, theta_start, Xo, yo, alpha=0.01)\n", + "plot_regression(fig, h_linear, theta, Xo)" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.14" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w2/zumz182b.pdf b/w2/zumz182b.pdf new file mode 100644 index 0000000..b9c68e8 Binary files /dev/null and b/w2/zumz182b.pdf differ diff --git a/w3/bayes_nasty.tsv b/w3/bayes_nasty.tsv new file mode 100644 index 0000000..00fd011 --- /dev/null +++ b/w3/bayes_nasty.tsv @@ -0,0 +1,100 @@ +0 0.7544830909519196 -0.7557810097698512 +0 -0.401040192413354 0.05087719368515575 +0 -0.14557860894357444 -0.9167657103778997 +0 0.15606723792840116 0.7049866105111644 +0 0.595321005153232 -0.3993704503800295 +0 -0.21608773803320203 -0.9473358133826528 +1 -0.9991678089071083 -0.8203462932941652 +0 -0.29270128006691776 0.8999761729296656 +0 -0.3744408488491382 0.5298017577688894 +0 -0.13262908466039347 0.016485142896286442 +1 -0.45382240999178936 -0.6292411536948919 +1 0.8466491727357144 0.7677619536810258 +0 0.5640604742334225 -0.6415301955014154 +1 0.7652661495157325 0.9042394673218532 +0 0.027488607545269383 -0.8561480245619784 +0 0.8937874814271918 -0.568262764805403 +1 0.05865567400417637 0.1271824506485506 +0 0.1350578652393759 -0.8468795247716823 +0 -0.03351382194744046 0.7225677368658248 +0 0.031698854294282874 -0.1745522030261808 +0 0.9764007293531329 0.0407596854507819 +1 0.8575290920021019 0.5995196615047915 +1 -0.5942919380814724 -0.9173657127389143 +0 0.019297633607670894 0.7171922933333184 +0 0.23496958271638224 -0.4505947779446391 +0 -0.15627176851413638 -0.6255991840738957 +0 -0.5436468155122751 0.7321778365594638 +0 -0.0016772778866704918 0.9953499312779903 +0 -0.49022669174509304 0.7643365578090109 +0 0.9274390975500406 -0.16941260003761904 +0 0.517483672350449 -0.9259720728025793 +0 0.4993683788149732 -0.8086741166111076 +1 -0.8954705171891042 -0.8352780222016363 +1 -0.35723728886723927 -0.6472670626320902 +0 -0.45030919789416135 -0.014680291690282399 +1 -0.3149222964035554 -0.2363491678998142 +0 -0.21632030129179247 0.9937719759687991 +0 -0.3479296178713067 0.7754592480508431 +1 -0.39993029073188713 -0.4021302940990339 +0 0.22575455897529628 0.914503661895917 +0 0.7221094132486976 -0.07187829685579739 +1 0.8767936705571608 0.9516806200255943 +1 0.2252335689492453 0.7031994893573623 +0 0.742017840295591 -0.19165119600215896 +1 -0.18782565699518372 -0.1408083939313467 +0 -0.8222264182672563 0.17050362212981707 +0 -0.1701252998869296 0.3450076829291753 +0 -0.7342893613133503 0.40778605218980135 +0 0.042695758461734235 -0.1484132507659468 +1 0.3863429870565578 0.1571106834539837 +0 -0.015388135282204507 -0.3364073902228679 +0 -0.8487467820993619 0.1089427832313854 +1 -0.6329015029648661 -0.7736052613400564 +1 -0.858908407978868 -0.7378977770454969 +1 0.6990672273176652 0.9222225234574595 +0 -0.256431985135285 0.5758502205935434 +0 -0.17330338780141252 0.30560812863161035 +1 0.3523362003038917 0.4815180921326969 +0 -0.10269592106863401 -0.7847042700361848 +1 0.2559692323662084 0.048849842553034595 +0 -0.8044820701681799 0.504663314011591 +0 0.07877786671385811 0.9947392835524949 +0 -0.8828875946641657 0.39461445063748224 +0 -0.5143275957869704 0.09502394806995929 +1 -0.5268239422759475 -0.11354182377636213 +0 0.2946171361928087 -0.3186572090869646 +0 0.7198334843462129 -0.6141975273104947 +1 0.48428859765324495 0.8946857548947542 +0 0.4621095070919994 -0.8924571872043978 +0 0.4528371532815365 -0.5807667653397828 +0 -0.09742500656072872 0.4945581379995849 +1 0.777026015997778 0.3617742992147488 +0 0.7791679792171657 -0.9220886356412603 +0 -0.38876810387659977 0.6679551419391372 +0 -0.08472697987697475 0.275319596881203 +0 0.7822926875136844 0.17122659901899606 +1 -0.2657068543666481 -0.06008893404720328 +0 -0.6907681316607532 -0.14224587305734304 +0 0.8066439746610798 -0.4207539780920342 +1 0.8552075324891362 0.08669568026253027 +0 0.5491129985925067 -0.6071624569600662 +0 -0.9629615870383108 0.5418486267009242 +1 0.718585449653875 0.2289040416265995 +0 0.7097096024915686 0.15142630204453789 +0 0.001183772922738191 -0.21331149786657155 +0 -0.740163182486073 0.7856137973272908 +0 -0.4102935448809477 0.32577864184797 +0 0.2838108153224279 0.6955863026175773 +1 0.5260171668336517 0.31947619877005207 +1 0.39165592038557273 0.5903048315964989 +1 -0.5287850882839857 -0.709598294851151 +0 0.8801802111481849 0.1257963822980257 +0 0.7860399993656908 0.2917387997774099 +0 -0.31357941345778184 0.8173465016744779 +0 -0.24706729772892544 -0.5017567368968896 +0 -0.5077834677535535 0.734692375238988 +1 0.9180554343925105 0.7402607565839483 +0 0.7347556198277827 -0.8922440369193774 +0 0.05178553367177474 0.024867950728887367 +0 0.6123243631772981 -0.9310030202911994 diff --git a/w3/create_bayes_nasty.py b/w3/create_bayes_nasty.py new file mode 100644 index 0000000..99a421f --- /dev/null +++ b/w3/create_bayes_nasty.py @@ -0,0 +1,26 @@ +#!/usr/bin/python3 +# -*- coding:utf-8 -*- + + +import csv +import math +import random +import sys + + +def create_bayes_nasty_data(filename): + with open(filename, 'w') as f: + writer = csv.writer( + f, delimiter=('\t' if filename.endswith('.tsv') else ',')) + for i in range(100): + x = random.uniform(-1.0, 1.0) + y = random.uniform(-1.0, 1.0) + p = abs(x-y) / abs(x+y) + # for i in range(2): + # p = -2 * p**3 + 3 * p**2 + v = 1 if random.random() > p else 0 + writer.writerow([v, x, y]) + + +if __name__ == '__main__': + create_bayes_nasty_data(sys.argv[1]) diff --git a/w3/iris.csv b/w3/iris.csv new file mode 100644 index 0000000..2ee7967 --- /dev/null +++ b/w3/iris.csv @@ -0,0 +1,151 @@ +łod.dł.,łod.sz.,pł.dł.,pł.sz.,Gatunek +5.2,3.4,1.4,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +6.7,3.1,5.6,2.4,Iris-virginica +6.5,3.2,5.1,2.0,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +6.0,2.7,5.1,1.6,Iris-versicolor +5.7,2.6,3.5,1.0,Iris-versicolor +5.0,2.0,3.5,1.0,Iris-versicolor +5.2,3.5,1.5,0.2,Iris-setosa +4.8,3.0,1.4,0.1,Iris-setosa +6.7,3.3,5.7,2.5,Iris-virginica +6.1,3.0,4.9,1.8,Iris-virginica +4.8,3.4,1.9,0.2,Iris-setosa +5.8,2.8,5.1,2.4,Iris-virginica +4.4,2.9,1.4,0.2,Iris-setosa +7.2,3.0,5.8,1.6,Iris-virginica +4.4,3.2,1.3,0.2,Iris-setosa +5.0,3.5,1.3,0.3,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +7.7,2.8,6.7,2.0,Iris-virginica +5.0,3.6,1.4,0.2,Iris-setosa +6.2,2.8,4.8,1.8,Iris-virginica +6.0,2.2,5.0,1.5,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +5.0,3.2,1.2,0.2,Iris-setosa +6.7,3.1,4.4,1.4,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +5.1,3.4,1.5,0.2,Iris-setosa +6.0,2.9,4.5,1.5,Iris-versicolor +5.3,3.7,1.5,0.2,Iris-setosa +5.6,2.9,3.6,1.3,Iris-versicolor +5.5,2.5,4.0,1.3,Iris-versicolor +5.5,2.4,3.7,1.0,Iris-versicolor +4.4,3.0,1.3,0.2,Iris-setosa +6.6,3.0,4.4,1.4,Iris-versicolor +7.9,3.8,6.4,2.0,Iris-virginica +5.7,2.8,4.1,1.3,Iris-versicolor +5.8,2.7,4.1,1.0,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +5.1,3.8,1.9,0.4,Iris-setosa +5.0,3.4,1.6,0.4,Iris-setosa +5.5,2.6,4.4,1.2,Iris-versicolor +5.0,3.4,1.5,0.2,Iris-setosa +6.8,2.8,4.8,1.4,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.1,3.8,1.6,0.2,Iris-setosa +6.4,3.2,5.3,2.3,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +5.7,2.8,4.5,1.3,Iris-versicolor +5.8,2.6,4.0,1.2,Iris-versicolor +4.7,3.2,1.6,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +6.3,3.4,5.6,2.4,Iris-virginica +5.1,3.8,1.5,0.3,Iris-setosa +7.0,3.2,4.7,1.4,Iris-versicolor +5.4,3.0,4.5,1.5,Iris-versicolor +6.0,2.2,4.0,1.0,Iris-versicolor +6.0,3.0,4.8,1.8,Iris-virginica +6.2,2.9,4.3,1.3,Iris-versicolor +5.6,3.0,4.1,1.3,Iris-versicolor +4.9,3.0,1.4,0.2,Iris-setosa +5.0,2.3,3.3,1.0,Iris-versicolor +6.3,2.5,5.0,1.9,Iris-virginica +4.8,3.4,1.6,0.2,Iris-setosa +5.9,3.0,4.2,1.5,Iris-versicolor +4.6,3.6,1.0,0.2,Iris-setosa +5.0,3.5,1.6,0.6,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.0,3.0,1.6,0.2,Iris-setosa +5.6,3.0,4.5,1.5,Iris-versicolor +6.3,2.8,5.1,1.5,Iris-virginica +5.2,2.7,3.9,1.4,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +7.7,3.0,6.1,2.3,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +6.4,2.9,4.3,1.3,Iris-versicolor +6.5,3.0,5.5,1.8,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +4.7,3.2,1.3,0.2,Iris-setosa +5.5,2.4,3.8,1.1,Iris-versicolor +5.4,3.4,1.5,0.4,Iris-setosa +7.2,3.6,6.1,2.5,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +6.1,3.0,4.6,1.4,Iris-versicolor +6.0,3.4,4.5,1.6,Iris-versicolor +6.3,2.7,4.9,1.8,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.5,3.5,1.3,0.2,Iris-setosa +6.7,3.0,5.2,2.3,Iris-virginica +4.6,3.1,1.5,0.2,Iris-setosa +5.8,2.7,5.1,1.9,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +4.8,3.0,1.4,0.3,Iris-setosa +7.1,3.0,5.9,2.1,Iris-virginica +5.9,3.0,5.1,1.8,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +5.4,3.9,1.7,0.4,Iris-setosa +6.4,3.2,4.5,1.5,Iris-versicolor +5.1,2.5,3.0,1.1,Iris-versicolor +6.3,2.9,5.6,1.8,Iris-virginica +7.2,3.2,6.0,1.8,Iris-virginica +5.4,3.4,1.7,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +6.1,2.8,4.0,1.3,Iris-versicolor +7.7,3.8,6.7,2.2,Iris-virginica +5.7,2.9,4.2,1.3,Iris-versicolor +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +6.5,3.0,5.2,2.0,Iris-virginica +4.9,3.1,1.5,0.1,Iris-setosa +6.3,2.3,4.4,1.3,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.7,3.8,1.7,0.3,Iris-setosa +6.4,2.8,5.6,2.1,Iris-virginica +4.9,2.4,3.3,1.0,Iris-versicolor +5.7,2.5,5.0,2.0,Iris-virginica +5.5,4.2,1.4,0.2,Iris-setosa +6.7,3.0,5.0,1.7,Iris-versicolor +5.0,3.3,1.4,0.2,Iris-setosa +6.3,2.5,4.9,1.5,Iris-versicolor +5.4,3.7,1.5,0.2,Iris-setosa +7.7,2.6,6.9,2.3,Iris-virginica +5.7,3.0,4.2,1.2,Iris-versicolor +7.6,3.0,6.6,2.1,Iris-virginica +4.8,3.1,1.6,0.2,Iris-setosa +5.6,2.8,4.9,2.0,Iris-virginica +4.5,2.3,1.3,0.3,Iris-setosa +6.8,3.2,5.9,2.3,Iris-virginica +6.3,3.3,6.0,2.5,Iris-virginica +4.6,3.4,1.4,0.3,Iris-setosa +5.8,2.7,3.9,1.2,Iris-versicolor +5.5,2.3,4.0,1.3,Iris-versicolor +5.2,4.1,1.5,0.1,Iris-setosa +6.6,2.9,4.6,1.3,Iris-versicolor +4.3,3.0,1.1,0.1,Iris-setosa +6.8,3.0,5.5,2.1,Iris-virginica +5.8,4.0,1.2,0.2,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +6.5,3.0,5.8,2.2,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica diff --git a/w3/tennis.tsv b/w3/tennis.tsv new file mode 100644 index 0000000..6aa9fa6 --- /dev/null +++ b/w3/tennis.tsv @@ -0,0 +1,15 @@ +Day Outlook Humidity Wind Play +1 Sunny High Weak No +2 Sunny High Strong No +3 Overcast High Weak Yes +4 Rain High Weak Yes +5 Rain Normal Weak Yes +6 Rain Normal Strong No +7 Overcast Normal Strong Yes +8 Sunny High Weak No +9 Sunny Normal Weak Yes +10 Rain Normal Weak Yes +11 Sunny Normal Strong Yes +12 Overcast High Strong Yes +13 Overcast Normal Weak Yes +14 Rain High Strong No diff --git a/w3/zumz183.zip b/w3/zumz183.zip new file mode 100644 index 0000000..80deb88 Binary files /dev/null and b/w3/zumz183.zip differ diff --git a/w3/zumz3a.ipynb b/w3/zumz3a.ipynb new file mode 100644 index 0000000..4a8294e --- /dev/null +++ b/w3/zumz3a.ipynb @@ -0,0 +1,1204 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe UMZ 2017/2018\n", + "# 3. Naiwny klasyfikator bayesowski, drzewa decyzyjne\n", + "### Część 1" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 3.1. Naiwny klasyfikator bayesowski" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Naiwny klasyfikator bayesowski jest algorytmem dla problemu klasyfikacji wieloklasowej.\n", + "* Naszym celem jest znalezienie funkcji uczącej $f \\colon x \\mapsto y$, gdzie $y$ oznacza jedną ze zdefiniowanych wcześniej klas.\n", + "* Klasyfikacja probabilistyczna polega na wskazaniu klasy o najwyższym prawdopodobieństwie:\n", + "$$ \\hat{y} = \\mathop{\\arg \\max}_y P( y \\,|\\, x ) $$\n", + "* Klasyfikatory probabilistyczne → klasyfikatory bayesowskie → naiwny klasyfikator bayesowski" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Twierdzenie Bayesa\n", + "\n", + "$$ P( y_k \\,|\\, x ) = \\frac{ P( x \\,|\\, y_k ) \\cdot P( y_k ) }{ \\sum_{i} P( x \\,|\\, y_i ) \\, P( y_i ) } $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Twierdzenie Bayesa\n", + "\n", + "$$ \\underbrace{P( y_k \\,|\\, x )}_\\textrm{ prawd. a posteriori } = \\frac{ \\overbrace{ P( x \\,|\\, y_k )}^\\textrm{ model klasy } \\cdot \\overbrace{P( y_k )}^\\textrm{ prawd. a priori } }{ \\underbrace{\\sum_{i} P( x \\,|\\, y_i ) \\, P( y_i )}_\\textrm{wyrażenie normalizacyjne} } $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Rola wyrażenia normalizacyjnego w twierdzeniu Bayesa\n", + "\n", + "_Przykład_: obserwacja nietypowa ma małe prawdopodobieństwo względem dowolnej klasy, wyrażenie normalizacyjne sprawia, że to prawdopodobieństwo staje się porównywalne z prawdopodobieństwami typowych obserwacji, ale nie wpływa na klasyfikację!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Klasyfikatory dyskryminatywne a generatywne\n", + "\n", + "* Klasyfikatory generatywne tworzą model rozkładu prawdopodobieństwa dla każdej z klas.\n", + "* Klasyfikatory dyskryminatywne wyznaczają granicę klas (_decision boundary_) bezpośrednio.\n", + "* Naiwny klasyfikator baywsowski jest klasyfikatorem generatywnym (ponieważ wyznacza $P( x \\,|\\, y )$).\n", + "* Wszystkie klasyfikatory generatywne są probabilistyczne, ale nie na odwrót.\n", + "* Regresja logistyczna jest przykładem klasyfikatora dyskryminatywnego." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Założenie niezależności dla naiwnego klasyfikatora bayesowskiego\n", + "\n", + "* Naiwny klasyfikator bayesowski jest _naiwny_, ponieważ zakłada, że poszczególne cechy są niezależne od siebie:\n", + "$$ P( x_1, \\ldots, x_n \\,|\\, y ) \\,=\\, \\prod_{i=1}^n P( x_i \\,|\\, x_1, \\ldots, x_{i-1}, y ) \\,=\\, \\prod_{i=1}^n P( x_i \\,|\\, y ) $$\n", + "* To założenie jest bardzo przydatne ze względów obliczeniowych, ponieważ bardzo często mamy do czynienia z ogromną liczbą cech (bitmapy, słowniki itp.)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Naiwny klasyfikator bayesowski – przykład" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przydtne importy\n", + "\n", + "import ipywidgets as widgets\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych (gatunki kosaćców)\n", + "\n", + "data_iris_setosa = (\n", + " pandas.read_csv('iris.csv', usecols=['pł.dł.', 'pł.sz.', 'Gatunek'])\n", + " .apply(lambda x: [x[0], x[1], 1 if x[2] == 'Iris-setosa' else 0], axis=1))\n", + "data_iris_setosa.columns = ['dł. płatka', 'szer. płatka', 'Iris setosa?']\n", + "\n", + "m, n_plus_1 = data_iris_setosa.values.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data_iris_setosa.values[:, 0:n].reshape(m, n)\n", + "\n", + "X = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "Y = np.matrix(data_iris_setosa.values[:, 2]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "count: {0: 100, 1: 50}\n", + "prior prob.: {0: 0.6666666666666666, 1: 0.3333333333333333}\n" + ] + } + ], + "source": [ + "classes = [0, 1]\n", + "count = [sum(1 if y == c else 0 for y in Y.T.tolist()[0]) for c in classes]\n", + "prior_prob = [float(count[c]) / float(Y.shape[0]) for c in classes]\n", + "\n", + "print 'count: ', {c: count[c] for c in classes}\n", + "print 'prior prob.:', {c: prior_prob[c] for c in classes}" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres danych (wersja macierzowa)\n", + "def plot_data_for_classification(X, Y, xlabel, ylabel): \n", + " fig = plt.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " X = X.tolist()\n", + " Y = Y.tolist()\n", + " X1n = [x[1] for x, y in zip(X, Y) if y[0] == 0]\n", + " X1p = [x[1] for x, y in zip(X, Y) if y[0] == 1]\n", + " X2n = [x[2] for x, y in zip(X, Y) if y[0] == 0]\n", + " X2p = [x[2] for x, y in zip(X, Y) if y[0] == 1]\n", + " ax.scatter(X1n, X2n, c='r', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1p, X2p, c='g', marker='o', s=50, label='Dane')\n", + " \n", + " ax.set_xlabel(xlabel)\n", + " ax.set_ylabel(ylabel)\n", + " ax.margins(.05, .05)\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[matrix([[ 1. , 4.906, 1.676]]), matrix([[ 1. , 1.464, 0.244]])]\n", + "[matrix([[ 0. , 0.8214402 , 0.42263933]]), matrix([[ 0. , 0.17176728, 0.10613199]])]\n" + ] + } + ], + "source": [ + "XY = np.column_stack((X, Y))\n", + "XY_split = [XY[np.where(XY[:,3] == c)[0]] for c in classes]\n", + "X_split = [XY_split[c][:,0:3] for c in classes]\n", + "Y_split = [XY_split[c][:,3] for c in classes]\n", + "\n", + "X_mean = [np.mean(X_split[c], axis=0) for c in classes]\n", + "X_std = [np.std(X_split[c], axis=0) for c in classes]\n", + "print X_mean \n", + "print X_std" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Rysowanie średnich\n", + "def draw_means(fig, means, xmin=0.0, xmax=7.0, ymin=0.0, ymax=7.0):\n", + " class_color = {0: 'r', 1: 'g'}\n", + " classes = range(len(means))\n", + " ax = fig.axes[0]\n", + " mean_x1 = [means[c].item(0, 1) for c in classes]\n", + " mean_x2 = [means[c].item(0, 2) for c in classes]\n", + " for c in classes:\n", + " ax.plot([mean_x1[c], mean_x1[c]], [xmin, xmax],\n", + " color=class_color.get(c, 'c'), linestyle='dashed')\n", + " ax.plot([ymin, ymax], [mean_x2[c], mean_x2[c]],\n", + " color=class_color.get(c, 'c'), linestyle='dashed') " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from scipy.stats import norm\n", + "\n", + "# Prawdopodobieństwo klasy dla pojedynczej cechy\n", + "def prob(x, c, feature, mean, std):\n", + " return norm(mean[c].item(0, feature), std[c].item(0, feature)).pdf(x)\n", + "\n", + "# Prawdopodobieństwo klasy\n", + "def class_prob(x, c, mean, std):\n", + " return prob(x[1], c, 1, mean, std) * prob(x[2], c, 2, mean, std)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres prawdopodobieństw klas\n", + "def plot_prob(fig, X_mean, X_std, classes, xmin=0.0, xmax=7.0, ymin=0.0, ymax=7.0):\n", + " class_color = {0: 'r', 1: 'g'}\n", + " ax = fig.axes[0]\n", + " x1, x2 = np.meshgrid(np.arange(xmin, xmax, 0.02),\n", + " np.arange(xmin, xmax, 0.02))\n", + " for c in classes:\n", + " fun1 = lambda x: prob(x, c, 1, X_mean, X_std)\n", + " fun2 = lambda x: prob(x, c, 2, X_mean, X_std)\n", + " p = fun1(x1) * fun2(x2)\n", + " plt.contour(x1, x2, p, levels=np.arange(0.0, 1.0, 0.1),\n", + " colors=class_color.get(c, 'c'), lw=3)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/pawel/.local/lib/python2.7/site-packages/matplotlib/contour.py:967: UserWarning: The following kwargs were not used by contour: 'lw'\n", + " s)\n" + ] + }, + { + "data": { + "image/png": "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\nEyszMzOzGvkvUXZIP7e5YcEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "draw_means(fig, X_mean)\n", + "plot_prob(fig, X_mean, X_std, classes)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Prawdopodobieństwo a posteriori\n", + "def posterior_prob(x, c):\n", + " normalizer = sum(class_prob(x, c, X_mean, X_std)\n", + " * prior_prob[c]\n", + " for c in classes)\n", + " return (class_prob(x, c, X_mean, X_std) \n", + " * prior_prob[c]\n", + " / normalizer)\n", + "\n", + "# Wykres granicy klas dla naiwnego Bayesa\n", + "def plot_decision_boundary_bayes(fig, X_mean, X_std, xmin=0.0, xmax=7.0, ymin=0.0, ymax=7.0):\n", + " ax = fig.axes[0]\n", + " x1, x2 = np.meshgrid(np.arange(xmin, xmax, 0.02),\n", + " np.arange(ymin, ymax, 0.02))\n", + " p = [posterior_prob([1, x1, x2], c) for c in classes]\n", + " p_diff = p[1] - p[0]\n", + " plt.contour(x1, x2, p_diff, levels=[0.0], colors='c', lw=3);" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFnCAYAAABkaweKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XucXHV9//H3Z2/ZZHeTzZKYTQK5\nQCApUhLDVqkCLeAFsU1SQLBVf2JpafujJBAFjdWf1tbSYksMSi801lupUknCRVDESkVaIyYYESFA\nhEQg9/tukr3MzOf3x8yws5udmZOZc+a2r+fjMY/dc86cc75zkgd58z2f+RxzdwEAAKB4deUeAAAA\nQK0gWAEAAISEYAUAABASghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABASAhWAAAAIWko9wAy\nTZo0yWfNmlXuYQAAAAyxcePGve4+Od/7KipYzZo1Sxs2bCj3MAAAAIYws21B3setQAAAgJAQrAAA\nAEJCsAIAAAgJwQoAACAkBCsAAICQEKwAAABCQrACAAAICcEKAAAgJAQrAACAkBCsAAAAQkKwAgAA\nCAnBCgAAICQEKwAAgJAQrAAAAEJCsAIAAAgJwQoAACAkBCsAAICQEKwAAABCQrACAAAICcEKAAAg\nJAQrAACAkBCsAAAAQkKwAgAACAnBCgAAICQEKwAAgJAQrAAAAEJCsAIAAAgJwQoAACAkBCsAAICQ\nEKwAAABCQrACAAAICcEKAAAgJAQrAACAkBCsAAAAQkKwAgAACAnBCgAAICQEKwAAgJAQrAAAAEIS\nabAys3Yzu8fMNpvZs2b2m1GeDwAAoJwaIj7+KknfcfcrzKxJ0riIzwcAAFA2kQUrM5sg6QJJV0uS\nu/dL6o/qfAAAAOUW5a3A2ZL2SPqSmf3UzFabWcvwN5nZtWa2wcw27NmzJ8LhAAAARCvKYNUgaaGk\nf3L3N0g6Iumjw9/k7ne6e5e7d02ePDnC4QAAAEQrymD1iqRX3P3HqeV7lAxaAAAANSmyYOXuOyW9\nbGZzU6sulvRMVOcDAAAot6i/FXi9pLtS3wh8UdIHIz4fAABA2UQarNx9k6SuKM8BAABQKei8DgAA\nEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABASghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABA\nSAhWAAAAISFYAQAAhIRgBQAAEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABASghUAAEBICFYAAAAh\nIVgBAACEhGAFAAAQEoIVAABASAhWAAAAISFYAQAAhIRgBQAAEBKCFQAAQEgIVgAAACEhWAEAAISE\nYAUAABASghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABASAhWAAAAISFYAQAAhKQhyoOb2VZJ\n3ZLikmLu3hXl+QAAAMop0mCVcqG77y3BeQAAAMqKW4EAAAAhiTpYuaTvmtlGM7t2pDeY2bVmtsHM\nNuzZsyfi4QAAAEQn6mB1nrsvlPROSdeZ2QXD3+Dud7p7l7t3TZ48OeLhAAAARCfSYOXur6Z+7pa0\nTtIbozwfAABAOUUWrMysxcza0r9Lerukp6M6HwAAQLlF+a3AKZLWmVn6PP/h7t+J8HwAAABlFVmw\ncvcXJc2P6vgAAACVhnYLAAAAISFYAQAAhIRgBQAAEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABAS\nghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABASAhWAAAAISFYAQAAhIRgBQAAEBKCFQAAQEgI\nVgAAACEhWAEAAISEYAUAABASghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABASAhWAAAAISFY\nAQAAhIRgBQAAEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABASghUAAEBICFYAAAAhIVgBAACEpCHo\nG83sdZKa08vu/qtIRgQAAFCl8s5YmdkiM3tB0kuSfiBpq6RvBz2BmdWb2U/N7FsFjxIAAKAKBLkV\n+FeSzpX0vLvPlnSxpPUncI5lkp4tYGwAAABVJUiwGnD3fZLqzKzO3R+V1BXk4GZ2sqR3SVpdxBgB\nAACqQpAaq4Nm1irpMUl3mdluSUcCHv9zkm6W1Fbg+AAAAKpGkBmrxZKOSrpR0nck/VLS7+Tbycx+\nR9Jud9+Y533XmtkGM9uwZ8+eAMMBAACoTEGC1QXunnD3mLt/xd1vl3RlgP3eImmRmW2V9A1JF5nZ\nvw9/k7vf6e5d7t41efLkExo8AABAJQkSrD5hZhelF8zsJiVnsXJy9xXufrK7z5L0Hknfd/f3FTxS\nAACAChekxmqRpG+lAtUlkuYpQLACAAAYbfIGK3ffa2aLJH1P0kZJV7i7n8hJ3P2/Jf13IQMEAACo\nFlmDlZl1S3JJlvrZJOlUSVeYmbv7+NIMEQAAoDpkDVbuTosEAACAExDkkTb/FWQdAADAaJfrVmCz\npBZJk8xsopK3BCVpvKTpJRgbAABAVclVvP4nkm6QNE3JovV0sDos6QsRjwsAAKDq5KqxWiVplZld\n7+6fL+GYAAAAqlKQdgufN7OzJJ0pqTlj/VejHBgAAEC1yRuszOyTkn5byWD1kKR3SnpcEsEKAAAg\nQ5BH2lwh6WJJO939g5LmS5oQ6agAAACqUJBgdczdE5JiZjZe0m5Jp0Q7LAAAgOoT5FmBG8ysXdK/\nKvntwB5JP4p0VAAAAFUoSPH6/zWzRnf/ZzP7jqTx7v5UCcYGAABQVXI1CF2Y+vVUSe8xs88o1cvK\nzBa6+5MlGB8AAEDVyDVj9Q8Zv4+V9B1Jz6SWXdJFUQ0KAACgGuVqEHph5rKZLXX326MfEgAAQHUK\n8hDmZjNbLulCM1tjZjekniMIAACADEG+FfhVSd2S0rNVfyDpa5LeHdWgAAAAqlGQYHWWu5+Zsfyo\nmT2T9d0AAACjVJAGoU+a2bnpBTN7k6QN0Q0JAACgOgWZsTpH0v+a2a9SyzMkPWdmP5fk7n52ZKMD\nAACoIkGC1SWRjwIAAKAGBOm8vq0UAwEAAKh2QWqsAAAAEADBCgAAICQEKwAAgJAUFKzM7M6wBwIA\nAFDtCp2x+pdQRwEAAFADcgYrM6s3s78fvt7dN0Y3JAAAgOqUM1i5e1zSeSUaCwAAQFUL0iD0p2Z2\nv6RvSjqSXunuayMbFQAAQBUKEqyaJe2TdFHGOpdEsAIAAMgQpPP6B0sxEAAAgGqX91uBZnaGmf2X\nmT2dWj7bzD4e/dAAAACqS5B2C/8qaYWkAUly96ckvSfKQQEAAFSjIMFqnLs/MWxdLIrBAAAAVLMg\nwWqvmZ2mZMG6zOwKSTsiHRUAAEAVCvKtwOsk3Slpnpm9KuklSe/Lt5OZNUt6TNKY1HnucfdPFjFW\nAACAihbkW4EvSnqrmbVIqnP37oDH7pN0kbv3mFmjpMfN7Nvuvr6I8QIAAFSsIN8KjJvZ30o6mg5V\nZvZkvv08qSe12Jh6eTGDBQAAqGRBaqx+kXrfd82sI7XOghw89azBTZJ2S3rE3X88wnuuNbMNZrZh\nz549QccNAABQcYIEq5i73yxptaQfmtk5Cjjz5O5xd18g6WRJbzSzs0Z4z53u3uXuXZMnTz6RsQMA\nAFSUIMXrJknufreZ/ULSf0iacSIncfeDZvaopEskPX3CowQAAKgCQWas/ij9i7s/Lel8SUvz7WRm\nk82sPfX7WElvk7S5wHECAABUvCDB6lQza5Ok1KNsvqRgs05TJT1qZk9J+omSNVbfKnikAAAAFS7I\nrcBPuPs3zew8SW+V9FlJ/yTpTbl2Sj365g3FDxEAAKA6BJmxiqd+vkvSne7+oKSm6IYEAABQnYIE\nq1fN7F8kXSXpITMbE3A/AACAUSVIQLpS0sOS3uHuByV1SLop0lEBAABUoSCPtDkqaW3G8g7xEGYA\nAIDjcEsPAAAgJAQrAACAkBCsAAAAQkKwAgAACAnBCgAAICQEKwAAgJAQrAAAAEJCsAIAAAgJwQoA\ngHJyl9atS/4Msj7s4ycS0Z5/lCFYAQBQTvfeK112mXTjjYMhxj25fNllye1RHn/FimjPP8rkfaQN\nAACI0JIl0rJl0qpVyeWVK5OhZtWq5PolS6I9/i23SH190Z1/lDGvoCm+rq4u37BhQ7mHAQBAaaVn\niNLhRkqGmpUrJbPojx/1+WuAmW1096687yNYAQBQAdyluowKnUQi3FCT7/hRn7/KBQ1W1FgBAKpf\n1AXgxUgkpI98JPkz2/r0jFGmzJqnYuU7ftTnH0UIVgCA6hd1AXgxVqyQbr1VOuecwXCVSCSXb701\nuT2zpimRGKyJCiPcZN7mG+n4iUS05x9t3L1iXuecc44DAHDCEgn3ZcvcpeTPkZbLJR53X7AgOZYF\nC45fvuee48eZOf61a4s7/9q1uY9/883Rnr9GSNrgAbIMNVYAgNpQyQXY6RmqTZsG1y1YIG3cmBzb\nvfcmv303vOZppPUnKttx0usXL5buuy+689cIaqwAAKNHOgTcdtvQ9bfdllyfqwnm2rXJV5QNNOvq\nkiEq08aNQ4vFC5WvvkySfu/3jg9HZiOvH02iqM0LMq1Vqhe3AgEABUnf7krfYku/0sv5bndFfass\n8/Zf5tji8fy36vIdv9z7V7MT+OwKeCuw7GEq80WwAgAUJF8dUyyWvQZr6dLkK1t9VjxeXP1WMWML\ncvxi68squT4taifw2QlWAIDRI9+M1dq1x89QZf7jmWube/7tuaRnvNKhyn1ouLr55uKOX+z4wti/\nmgX87EGDFcXrAIDq5xmF2PX1g+vj8aGF2Z6jCWaubUG2Z5NIJFsq3HLL8ftnri/0+MWOL6z9q1mA\nz07xOgBg9DBLhqfly4euX758aKjK1gQz1zapuAaaZtK5545cPJ5en29s+QqsixlfsZ+vnIJcmyDH\nCPOzB5nWKtWLW4EAgILkq5XJVScVdY1VvgLpNWtyH3/NmuL2r+Uaq2IL76mxAgBgBMU2wYzyW4H5\n/vEuNjjl27+WvxVYbCjkW4EAAIwgkRgsUB9pfbqtwUjb16xJvgrZd6T12caXq3A+3/GL3T/f2Ir9\nfOVUTOH9CXz2oMGKGisAQPXL1uwyvb6uLvv2yy5LvgptoOl56nwSidzNS4fvl+3zrVw5dF1YHeXz\nXbtyFrDnu7buxV2bCD47wQoAgFzyPeB5xYpg2885Z+hxzzkn2P7p8JWtwLqSH0BdrCCfLde1KYcg\n01qlenErEABQcYopjF+2LNkAtJgGofmOX2xxfSUr9tqH+NlFjRUAACEppoFosc1LgxRY13KDz2Kv\nTUiCBisahAIAEIR7YQ1E3YtrXpreP/2+zPNlrs83vmpW7LUJAQ1CAQDVwwMUgEe5Pd8kg+ep48m1\nvdjmpUEKrPONr5zy/dkWe+0rTZBprUJekk6R9KikZyT9QtKyfPtwKxAARqli+1AVuz3XLaNi63yi\nrpGq9AafxdyuK7YHWBluBUYZrKZKWpj6vU3S85LOzLUPwQoARqlKDi+VHPqCjK/cDT6LCX7Fdq2v\n5eJ1SfdJeluu9xCsAGAUK6ZAPIztucZVaPPRMLbXQoPPqK59vuapIQoarEpSvG5msyQ9Juksdz88\nbNu1kq6VpBkzZpyzbdu2yMcDAKhQXmAB+KJF0sc+Jv3N30gNDYPbY7Hk+ltuSR53pONLJSuArkjZ\nPmfYnz/bn20Yojx2SsUUr5tZq6Q1km4YHqokyd3vdPcud++aPHly1MMBAFQqz1GknG4Uma3J5hVX\nSLfeKnV2Dt3e2Zlcv2JF9uOvW1e7DTaDKEWD0Vx/tpV87MLGE+ntv0ZJD0taHuT93AoEgFEqXx1O\nviab/f3ukyYllydNSr4/c3lgIPvxly5Nviq1+DtqURe/R3n8Ehbuq9w1VpJM0lclfS7oPgQrABil\nghaIZ2uymd6eDlPpV3o5X4F4ZhF0hHU6FSvKOqUoi+tHU4NQMztP0g8l/VxS6ia2PubuD2Xbhwah\nADBKeZ46n8WLk7VU2Wqs0tsXLTq+xur++we356ojkmq3wWYQHlGdUr4/22JquKI89jBlr7Fy98fd\n3dz9bHdfkHplDVUAgBoWjyebWcbjI6+PxaT164+vi3FPrpfyN9lMJEauwUoHhFxNNqXC63QSCekj\nHxkshB++Ph4vvkFm1Pt7EXVK+Y4v5W9wWqggzVNLLci0Vqle3AoEgBq1ZMngrblYLLkusw5qzpzB\nW3vxeHJ7Zh3VzTfnrqW5557BW1jz5yf3nT9/cN0992QfW7F1Opm3KUcae/qzl6tPVdS9oCq9j1ZI\nVO4aq0JeBCsAqFHDi8mHL/f35y5OTwenbP94L148GKKWLk1uSxekS+433ZR9bMUGg+FjHb4ci5W3\ns3rU3csrvfN7SAhWAIDKkhmmMovL0zNYmYEkszg9Hs/fKDIWS4anzDCVDlk33TQ4kzSSMBps5hp7\n+ljFFIdHuX8Yn79ETTrLKWiwKkmD0KAoXgeAMvESFQHH48cXl2cWoycSxxenpxt7BhmfR1SAHUS2\nsWeOtZixlXv/ch+/zMpevA4AqCKlaBIZj4/cwDNd0J6r+DzI+NLLmUrVKDLX2DPHWujYyr1/uY9f\nTYJMa5Xqxa1AACiTqOtkiq2xylenVMxDlotV7TVWldwAtIKIGisAwAmJsk4mjG8F5hpfOb+ZVu3f\nCiz22vCtQIIVACCLRGJocAlrtiEWSwaMdKgavr6/PxlQhheZx+ND12cbXxgF2IUaPsbh62Ox4sZW\n7GeL+tqU89qXUNBgRY0VACAZU9aulW64Yej6G25Irvc8tTLuuZtE1tUlf2YWd0vJ5XXrpMZG6e/+\nbmjxs5RcTq/3Cq3jyRzjSOvr68vbxDLqJpqV2KSzjAhWAIBkuLn8cun226WlS5NF10uXJpcvv3yw\ng3Y2URe/p4+1apW0bFlyfMuWJZdvvDE5vqiL78ulFF8sQGga8r8FAIA8liwZDDqStHLl0CCUfhZf\noe69d/BYK1cmZ0FWrkxuW7VKuuCCaM9fTlFfW4SKPlYAgMFbdj/4QXKWKm3pUum3fivYLZ3MWaW0\nzCBU7Pjy9bGSojt/uUV5bREIfawAoJbkq2Eq9n+SY7HkA4M/+9mh6z/72eT6gYHc50/3mrrttqHb\nb7ttsMdULvkeZDx8/XDpgFXo+Std5gxdGqGqIhGsAKAaRF1nc+aZ0pYtUnPz0PXNzcn1M2fmPv+K\nFcmfIzXJDDK+FSukW28d2lQz3XTz1lulK66I9vyVrlIL93G8IF8dLNWLdgsAkEXUTRj7+tzNkscz\nO365tzf3+WOx3E0ycz2rz734JpvFnr+SjZIGnJVO9LECgBoTZQPPdJPHdJhKv9LL6X5E+Rp0jvQg\n4qBNIot5kHEY569Uo6QBZ6UjWAFAqZWiUWKhDTyDNrHs6xt6/L6+5Pp4fPBn5vb0+oGBZKPPgYGh\n2zPXB7k2Ix0/yOdPHyfb+Mo5q1PpDT4RCMEKAEot6pmFYmas8j125eabk93P6+uHHr++Prk+34xQ\n5iNrMrenl4M81qWYGatir0+UmHGqCQQrACi1KGthij12vhqm3t7BUJUOU5nLvb259+/vz/2Q5YGB\n4mqkKvkhzPlQI1UTCFYAUA5RzZqEMeuRa0Yo/RDkdKhyHxquOjsH3z/SjFV6RizbjFW+Gq1iH2Sc\n3r9SZ4UqdTYNgRGsAKBconiQcVh1NtlqmPr7k+EqHarS0usza61GqmFK/4zFhm4f/gDibNem2AcZ\nZ6ulqqQ6pKgecI2SCBqs6GMFYPRwj7bJZvpYI/UbisWS3cvj8aHb4vHk+oGB3A0y43Fp/fqRx75+\nfXJ7vv3XrJEWLhy6feHC5Pr6+mS/qIZhTzpraBhcn+2zuScbVS5eLHUNa0zd1ZVcb5Z7/2IfZFxX\nV9kPAs712VFbgqSvUr2YsQIQqVIWlw+vpTn1VB9Sf+Q+tA4pfSsu262wN76xuO2LFw/OlMyfn9w2\nf/7guptuyn1t0rfaJPelS5Pbli4dXHfPPcXVSNXy7A01VjVB3AoEgGGi/gcuX3BraxsarjKLu/v7\ncweTgYHitn/oQ7mD0Yc/nPva3HNP7v3Twa3QGqly10BFiW8F1gSCFQCMJMoi4nx1UAMDIxd3p2ew\n8rUbKGZ7PJ6clcoMQ+mQdNNNye25rk0i4b5mzcj7r1mT/AzF1EjV8qwNfahqQtBgZcn3Voauri7f\nsGFDuYcBoNa5D63lSSTCqcFxTz6TbsmSocfzVA2XJC1aJDU2Dm4bGJAeeGBwn0QiWU+UFo8nx5o+\n9qJFQ+ugYjHp/vuD77948fHb77tvcP981ybb9lyffaT1QJUxs43u3pXvfRSvAxhdPMIi4lwPSr78\n8uSrrW3oPm1tgw8JTj90OFP6ocTpY3d2Dt3e2Xli++d6SHG+a5Nre9QPiQaqRZBprVK9uBUIIFJR\n11jlOv7117s3Nyd/b25O3hbMXO7rK64BZ7E1WsU24KzkBp1ACESNFQAMU4oi4mx1Suni7nSYSr/S\ny0G/FZitAWe+bwWmi8fzNfgspgEnTTBRwwhWADBcqYqIR2oEGYvlfkhxf3/u4u+BgcEi8Mz900Xj\n6e35isfzNfgstgEnTTBRowhWAMI32r/dlO/zx+O5vzmXebuskBmdYmeEop5RYsYKNYxgBSB8o70f\nT77Pn26ymQ5Tw3s9XXrp0P1PpAap2PqwctaXEa5QAwhWAMI32v/xzPf58zXRLCaUFhtqow7Foz10\no+YFDVb0sQJwYjz1FfpVqwbXLVsmrVw5OvoU5fr8UrJf1Q9+IN1+++D2pUulCy4Y+bl17sH6PGV7\nX6n2zyfq4wNlRh8rANEwGwwRaWGFqvQDg7M9SHj4+rD3d8//kOZcn98s2bPpc58buv1zn0uuzxd8\ncp1bKu4hw9neF9ZDiqM+PlAlIgtWZvZvZrbbzJ6O6hwAyiA9Y5MprAabK1ZIt9462NRSGmx6eeut\nye1R7h+kyWW+z59t+7p1uY+9YgUNNoFaEOR+YSEvSRdIWijp6aD7UGMFVLioa6yGN60caTnK/fN9\nvmKaZC5dOlhvRYNNoOqoEorXJc0iWAE1pBQFyvkeNBz1/rlaBuT7/PmaaK5Zk7sdAe0KgIoVNFhF\nWrxuZrMkfcvdz8rxnmslXStJM2bMOGfbtm2RjQdAkbxEBcrZHiRcqv3dC3vQ8OLFQx9oPHz7kiXJ\n5UIecgygrKqmeN3d73T3Lnfvmjx5crmHAyCXUhQo53qQcCn29xw1VPk+f11d7u3pY4107HznBlAV\nyh6sAOA16VC0aZO0YEFypmnBguRykHBU7P7pYLNqVbKFQiKR/LlqVfEBJ9+xE4nozg2gdILcLyz0\nJWqsAJyIdI1StgcJ33xztPtHWUNWbH0WDTaBslK5i9clfV3SDkkDkl6RdE2+fQhWwCiXfmBwtgcJ\nB/lWYDH7R/ksxCDPGRzNz2EEKlzQYEXndQAAgDyqpngdAACgVhCsAAAAQtJQ7gGgdHrjcR2MxdQd\nj6sn9ToSj+toIqHe1KsvkVC/u2Luiqde6ZvFJqnOTPWSGszUVFenMXV1GmOmsfX1GldXp3H19Wqp\nq1NbQ4Pa6us1oaFB4+rqZPThAQCMAgSrKubuOhSL6ZW+Pr3a368dfX3a2d//2mvXwID29PdrXyym\nAwMD6itTPV2DmToaGnRSY6MmNTbqdY2N6mxqeu01dcwYTWtq0sljxmhSYyMhDABQtQhWFS6WSGhr\nb69eOHZMvzx2TC/29r72c2tvr3ri8eP2aauv15SmJk1pbNQZ48bppMZGdTQ0qL2hQRMaGjS+vl6t\n9fVqS80mja2r09j6ejWnZp8a6+rUaKb61OyUmckkJdyVkBRPzWj1u6s/kdCx1GzX0dTs15F4XN3x\nuA7HYjocj+tALKb9AwPaH4tpT3+/njl6VN8/eFAHYrHjxt5cV6eZY8Zo9tixOrW5WaeNHavTxo7V\n6amfY06kezYAACVGsKoQ7q4Xe3v1VE+Pnj5yRM8cPapfHDmi544eVX/GTNO4ujrNTgWOi9rbNaO5\nWSePGaPpqZmfzqYmtWQ+yqOC9SUS2tXfr+19fdre369X+vr0q1RgfKm3Vz86dEiHMoJjvaTTxo7V\nmS0tev24cXp9S4vmt7bqjLFj1UDgAgBUAIJVGbi7tvb26onubv3k8GE92dOjJ7u7h4SIWc3Nev24\ncbqko0Pzxo3T3HHjdFpzs6Y0NdXMrbIxdXWa0dysGc3NI253dx2IxbTl2DFtOXZMzx49qmdSofOB\nvXuVvlpj6+o0v7VVC1tb1dXWpjeNH69548aprkauEwCgetDHqgTi7trU06MfHDyo/zl0SP97+LB2\n9vdLksaYaX5rq97Q2qqFbW1a0Nqq17e0VM2sU7n0JRLafPSoftbTo009PdrY3a0ne3peuzXa3tCg\nc8eP11vGj9f57e06d/x4biMCAAoWtI8VM1YReeHoUT28f78eOXBAjx06pIOpeqLZzc26uL1db54w\nQeeOH69fb2lR4yj9B7+7r1t3/+JuvbDvBZ1+0um66vVXqW1MW6B9x6Rmqea3tur/pNYl3PX80aNa\nf/iwfnT4sP7n0CF9Yv9+SclZrbdMmKCL2tt1SUeHFrS21szMHwCgcjBjFZKBREKPHTqk+/bu1YP7\n9unF3l5J0qnNzbpo4kT9dnu7Lmxv17QxY8o80srw+K8e16V3XaqEJ3Rk4IhaGltUZ3V66L0P6bwZ\n54V2ngMDA3rs0CF9/8ABPXrwoH5+5IgkqbOpSe+YOFGLJk3SOzo6mCEEAOQUdMaKYFWE/kRCjxw4\noLt379YD+/bpYCymsXV1unjiRL2zo0Pv6OjQaWPHlnuYFae7r1vTb5uu7v7u47a1NbVp+4e2q7Wp\nNZJz7+rv13f279e39+3Tdw8c0IHUn9nbJ07Uu1/3Oi066SS1NTCRCwAYiluBEXF3rT98WF/ZuVPf\n3LNH+2MxtTc0aPFJJ2nJpEl6e0eHxjH7kdPdv7hbCU+MuC3hCd399N26ZuE1kZx7SlOTPtDZqQ90\ndiqWmmVct3ev1u3Zo/v27dPYujotnjRJH5gyRW/r6FA9twsBACeAYBXQgYEBfWXnTt25Y4eePXpU\n4+rqtGTSJP3+616nt3d0qGmJHGJ8AAAQmUlEQVSU1kkV4oV9L+jIwJERtx0ZOKIt+7eUZBwNdXW6\naOJEXTRxolbNmaP/PXRIX9+9W99IvaY1NekPp07VtVOn6pQs31wEACATwSqPZ48c0edeeUVf27VL\nxxIJvamtTavnztWVkydzy6hAp590uloaW0YMVy2NLZrTMUdSccXtJ6rOTOe1t+u89nbdNmeOHty3\nT1/csUOf2bZNf7Ntm35v0iQtP+UUvXnChEjODwCoDdRYZfGTw4f1mW3bdN++fRpjpvd3duq6adO0\noC2af9hHkyA1Vpt2bipJcXs+W48d0z9v3647d+zQgVhMbx4/Xh+fOVOXdHTwrUIAGEUoXi/QUz09\n+tiLL+rB/fs1saFBS6dP13XTp2tyU1NZx1Vrcn0rcP6U+WUrbs/mSDyuf9uxQ3//8sv6VV+f3tTW\nps+ceqounjixpOMAAJQHxesnaFd/vz724ov60s6dmtDQoM/Mnq3rp0/ndl9EzptxnrZ/aLvufvpu\nbdm/RXM65uiqs65Sa1OrVj+5umzF7dm01Nfr+pNP1p9Mm6av7typT2/bprf+7Ge6tKND/3DaaZrX\n0lLS8QAAKtOoTw0Jd/3L9u1a8eKLOppI6MaTT9bHZ87UxMbGcg+tIhRT5/T83ud19b1X66WDL2l2\n+2x9ecmXdcakM17b7u5yuRKekMuVnj0Nq7g9ihqtpro6/dG0aXp/Z6c+/8or+qtt23T2hg26+ZRT\n9PGZM9XMN0IBYFQb1bcCt/X26urNm/XfBw/q4vZ23XHGGZo7blzJzl/pimniufzh5Vq5fuVx6288\n90bd9o7bch57897Nuv6h69Ub7z1u/+b6Zn3h0i/knbEqVQPS3f39+vAvf6mv7dqlXxs3Tl/7tV/T\nOdThAUDNocYqj/v27tXVmzcr7q6Vc+boDzs7KUbOUEwTz+f3Pq+5d8zNeuxN127S+V8+P+uxN167\nUWd84YwR9kza8aEd6mztjGTshfrOvn36o+ee0+6BAX32tNO0dPp0/j4BQA0JGqxGXfMld9ent27V\nkqef1pyxY/XTri5dM3Uq/wgOE6SJZzZX33t1zmNf9s3Lch77rx/7azU3jNw3qrmhWQ8+/2DO4xcz\n9kJdctJJeuo3fkPv7OjQDVu26P3PPqu+xMhjAADUrlEVrOLu+uPnntMnt27VB6ZM0Q8XLOCRM1kE\nqXN6fu/zevPqN2vq30/Vm1e/Wc/vfV6S9NLBl3Iee1fPrpzHfm7fc+qNHX8bUJJ6Y715a6zK1YC0\no7FR9551lv569mzdtXu3LnnqKXWnHr4NABgdRk2wSrjrms2b9cWdO/WJmTP1pXnzKDTO4fSTTldT\n/cgtJprqm7Rx+0bNvWOufvTqj7TzyE796NUfae4dc7X84eWa3T4757GntE5RS+PI36JraWzR3JPm\nqrk+y4xVffNrDURzjT3X8fPtXwwz01/MnKmvzZunHx48qEt//nMdjccjOx8AoLKMmmC14sUX9ZVd\nu/SXs2bp07Nnc+svjwtmXKD+eP+I2/rj/XrkpUdG3LZy/Up95C0fyXnsf1/y76qzkf/q1VmdPn7B\nx0csXJek3niv3nXGu3Ie/6rXX5Xz+FeddVXO/cPwvs5Off3MM/W/hw7pqmeeUbyCahkBANEZFcHq\nnt27devLL+tPp03TJ2bOLPdwqsJnfviZgvdd/shyNdSN3Mmjoa5Bz+x9Rg+99yG1NbW9NrPU0tii\ntqY2PfTeh/SDbT8oqsaqbUxbzuOXqrnou1/3Ot1++un61r59+utt20pyTgBAedV8H6vd/f269vnn\n9ca2Nq2aM4eZqoA2791c8L67enYplhi5tiiWiGnL/i26ZuE1WRuEPvDcA0XVWEm5G5CW0nXTp+vH\nhw/r01u36l0dHeoaP76k5wcAlFbNB6tPvPSSeuJxfXnePDXV1d4EXbFNMLcf3q4V/7VCm/du1rxJ\n83TLxbdo2vhpmjdpnp7Y/kRBY5rSOiVrgXpmjdNPt/9UH/3eR3Ww96Dam9t1RscZOn/W+YEf0pxP\ntgakpXb7nDl65MABLduyRY+/4Q2EewCoYTXdx+rl3l6d+uMf60+nTdPnTz89tONWimKbYP7jT/5R\n1z103XHr77j0Di2Zu0TTV04vaFybrt2khXcuVELHtxuoU50OrTikRV9fpEe3Pnrc9gtnXaj73nOf\nOv+hU0cHjh63fVzjOO368K68M0+lahAa1D+/+qr+7IUX9P3583UhzxcEgKpDHytJX9m5UzF3LT/5\n5HIPJXTdfd269K5L1d3f/drMzpGBI+ruT67v6e/Juf/2w9tHDFWSdN1D1+np3U8XPLa7n7p7xFAl\nSQkltHrj6hFDlSQ9uvVRPfHKE1lnl4L8j0Cx1yYKV3d2qqOhQXfu2FHycwMASqemg9WD+/fr3PHj\nNbsGe1UV2wRzxX+tyLn98m9eXvDYbll/S87tN373xpzbl/znkpzf6sv32crRIDSf5vp6XTZ5sh7a\nt08xGocCQM2q2WAVd9dPu7v1lhotFg7aBLO7r1urn1ytjzzyEa1+crW6+5KPeclXnH6kf+Rjl8KR\n/iNFNfgsV4PQfM6fMEGH43FtOXasLOcHAESvZovX9w4MqM9ds5pH/tp+tQtS4D1SndHyh5frofc+\nlLc4vaWppSy3zNLndveCi9fDKn4PW/rv4st9fZrXMnIDUwBAdavZGauB1O2WWvwmoJS/Cealp1+a\ns87o4xd8POfx17x7TcFje++Z7825/cNv/HDO7fdeeW9RDT4roUHoSJpS3wYcqKAvjAAAwlWbqUPS\nxMZGScmZq1qUrwnmgy88mLPO6LFtj+mOS+8Ycfsdl96ht895u64888oRt3dNzf2liIdfejjn9nUv\nrNOFsy4ccduFsy7UxaddXFSDz0ppEDrcntTfxY6Gmp0oBoBRr2b/C99SX68ZY8ZoU095bmeVQq4m\nmA8890DeOqNb3nqLLvu1y/TR731Uz+19TnMnzdXfvvVv1dnaKUm6+9136y92/oUu+8/LtLNnpzpb\nO7X2yrW66+d3acOO7G0xDvYezDnunT07tWXpFq1/eb0WfWORDhw7oIljJ+r+99yvc085N+9nK/ba\nlMvPUn8X540bV7YxAACiVbPBSpIubG/Xffv2qT+RqNlbgq1Nrbpm4TXHrQ9aZ9TZ2qkvL/ly1uOf\n3Xm2tiwdWuz9xPYnch57bMNY7T22N+sx08Ht3FPO1e6bdmd9X7bPFlSx+4ftgX37tLC1Ve2p2VQA\nQO2JNG2Y2SVm9pyZbTGzj0Z5rpH8/pQpOhiL6T93Z//Hu1ZFWWeU79jrrlqXc/+1V64t+NzV6snu\nbj3R3a33TZlS7qEAACIUWbAys3pJd0h6p6QzJf2+mZ0Z1flG8raJE3VWS4s+vW2b+kdZ76Ao64zy\nHfu8medlrc+68swrdXbn2QWfu1p9cutWTaiv1wc7O8s9FABAhCJ7pI2Z/aakT7n7O1LLKyTJ3bN2\njwz7kTaS9O19+3T15s363vz5+vXW8tXXlEtPf09kdUb5jv3UzqeOq88ajaHqwMCAfvPJJ3XN1Km6\nacaMcg8HAFCAoI+0iTJYXSHpEnf/o9Ty+yW9yd3/fNj7rpV0bWrxLEmFP0tldJskKXthE3Lh2hWO\na1c4rl1xuH6F49oVZqa7T873prIXr7v7nZLulCQz2xAkDeJ4XLvCce0Kx7UrHNeuOFy/wnHtohVl\n8fqrkk7JWD45tQ4AAKAmRRmsfiLpdDObbWZNkt4j6f4IzwcAAFBWkd0KdPeYmf25pIcl1Uv6N3f/\nRZ7d7oxqPKMA165wXLvCce0Kx7UrDtevcFy7CEVWvA4AADDa1GY7cgAAgDIgWAEAAISkIoJVuR99\nU83M7N/MbLeZ0f/rBJnZKWb2qJk9Y2a/MLNl5R5TtTCzZjN7wsx+lrp2f1nuMVUbM6s3s5+a2bfK\nPZZqYmZbzeznZrbJzMLtKF3jzKzdzO4xs81m9myqkTdCVvYaq9Sjb56X9DZJryj5bcLfd/dnyjqw\nKmFmF0jqkfRVdz+r3OOpJmY2VdJUd3/SzNokbZS0hL97+ZmZSWpx9x4za5T0uKRl7r6+zEOrGma2\nXFKXpPHu/jvlHk+1MLOtkrrcnQaXJ8jMviLph+6+OvVt/XHufrDc46o1lTBj9UZJW9z9RXfvl/QN\nSYvLPKaq4e6PSdpf7nFUI3ff4e5Ppn7vlvSspOnlHVV18KSe1GJj6sU3YQIys5MlvUvS6nKPBaOD\nmU2QdIGkL0qSu/cTqqJRCcFquqSXM5ZfEf+4ocTMbJakN0j6cXlHUj1St7I2Sdot6RF359oF9zlJ\nN0saXU+HD4dL+q6ZbUw9Eg3BzJa0R9KXUregV5tZS7kHVYsqIVgBZWVmrZLWSLrB3Q+XezzVwt3j\n7r5AyacqvNHMuBUdgJn9jqTd7r6x3GOpUue5+0JJ75R0XaocAvk1SFoo6Z/c/Q2SjkiipjkClRCs\nePQNyiZVH7RG0l3uvrbc46lGqdsJj0q6pNxjqRJvkbQoVSv0DUkXmdm/l3dI1cPdX0393C1pnZLl\nJMjvFUmvZMws36Nk0ELIKiFY8egblEWqAPuLkp5199vKPZ5qYmaTzaw99ftYJb98srm8o6oO7r7C\n3U9291lK/vfu++7+vjIPqyqYWUvqiyZK3cZ6uyS+ER2Au++U9LKZzU2tulgSX9SJQGSPtAmqwEff\nIMXMvi7ptyVNMrNXJH3S3b9Y3lFVjbdIer+kn6dqhSTpY+7+UBnHVC2mSvpK6lu9dZL+091pG4Co\nTZG0Lvn/RGqQ9B/u/p3yDqmqXC/prtQkxouSPljm8dSksrdbAAAAqBWVcCsQAACgJhCsAAAAQkKw\nAgAACAnBCgAAICQEKwAAgJAQrABUDDP7lJl9OPX7l83sigKPM8vMcvY3Sr3nDzKWrzazLxRyPgBI\nI1gBGK1mSfqDfG8CgBNBsAJQVmb2F2b2vJk9LmnusM0np5oZZtv3U2b2NTP7kZm9YGZ/PGz7qamZ\nqR+a2ZOp15tTm/9W0vlmtsnMbhy237tSx5xkZr9rZj9OPbj2e2Y2JYzPDaA2EawAlI2ZnaPkY10W\nSLpU0m9kbB4r6TJJbXkOc7akiyT9pqT/Z2bTUvueJuk8SbslvS314N6rJN2e2u+jkn7o7gvcfWXG\nmH4vte1Sd98r6XFJ56YeXPsNSTcX/okB1LqyP9IGwKh2vqR17n5Ukszs/tTPdysZipa5+748x7jP\n3Y9JOmZmj0o6V9IfS/qlu3/VzCZI+oKZLZAUl3RGjmNdJKlL0tvd/XBq3cmS7jazqZKaJL1UyAcF\nMDowYwWg4rj7NyU9EvTtw5bjkv4sY/lGSbskzVcyNGW9tSjpl0rOkGWGr89L+oK7/7qkP5HUHHBc\nAEYhghWAcnpM0hIzG2tmbZJ+t4BjLDazZjM7SckHkv9k2PYJkna4e0LJh27Xp9Z36/jbjNskXS7p\nq2b2+oz9X039/oECxgdgFCFYASgbd39S0t2Sfibp2zo+FEmSzOzTZrYoy2GekvSopPWS/srdtw/b\n/o+SPmBmP5M0T9KRjP3iZvazzOJ1d98s6b2Svmlmp0n6VOr3jZL2nvinBDCamPvwWXQAqA5m9ilJ\nPe7+9+UeCwBIzFgBAACEhhkrAACAkDBjBQAAEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABCS/w+4\niUBRYMN/KAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_decision_boundary_bayes(fig, X_mean, X_std)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Dla porównania: regresja logistyczna na tych samych danych" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def powerme(x1,x2,n):\n", + " X = []\n", + " for m in range(n+1):\n", + " for i in range(m+1):\n", + " X.append(np.multiply(np.power(x1,i),np.power(x2,(m-i))))\n", + " return np.hstack(X)\n", + "\n", + "# Funkcja logistyczna\n", + "def safeSigmoid(x, eps=0):\n", + " y = 1.0/(1.0 + np.exp(-x))\n", + " if eps > 0:\n", + " y[y < eps] = eps\n", + " y[y > 1 - eps] = 1 - eps\n", + " return y\n", + "\n", + "# Funkcja hipotezy dla regresji logistycznej\n", + "def h(theta, X, eps=0.0):\n", + " return safeSigmoid(X*theta, eps)\n", + "\n", + "# Funkcja kosztu dla regresji logistycznej\n", + "def J(h,theta,X,y, lamb=0):\n", + " m = len(y)\n", + " f = h(theta, X, eps=10**-7)\n", + " j = -np.sum(np.multiply(y, np.log(f)) + \n", + " np.multiply(1 - y, np.log(1 - f)), axis=0)/m\n", + " if lamb > 0:\n", + " j += lamb/(2*m) * np.sum(np.power(theta[1:],2))\n", + " return j\n", + "\n", + "# Gradient funkcji kosztu\n", + "def dJ(h,theta,X,y,lamb=0):\n", + " g = 1.0/y.shape[0]*(X.T*(h(theta,X)-y))\n", + " if lamb > 0:\n", + " g[1:] += lamb/float(y.shape[0]) * theta[1:] \n", + " return g\n", + "\n", + "# Funkcja klasyfikująca\n", + "def classifyBi(theta, X):\n", + " prob = h(theta, X)\n", + " return prob" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie danych dla wielomianowej regresji logistycznej\n", + "\n", + "data = np.matrix(data_iris_setosa)\n", + "\n", + "Xpl = powerme(data[:, 1], data[:, 0], n)\n", + "Ypl = np.matrix(data[:, 2]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Metoda gradientu prostego dla regresji logistycznej\n", + "def GD(h, fJ, fdJ, theta, X, y, alpha=0.01, eps=10**-3, maxSteps=10000):\n", + " errorCurr = fJ(h, theta, X, y)\n", + " errors = [[errorCurr, theta]]\n", + " while True:\n", + " # oblicz nowe theta\n", + " theta = theta - alpha * fdJ(h, theta, X, y)\n", + " # raportuj poziom błędu\n", + " errorCurr, errorPrev = fJ(h, theta, X, y), errorCurr\n", + " # kryteria stopu\n", + " if abs(errorPrev - errorCurr) <= eps:\n", + " break\n", + " if len(errors) > maxSteps:\n", + " break\n", + " errors.append([errorCurr, theta]) \n", + " return theta, errors" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "theta = [[ 4.01960795]\n", + " [ 3.89499137]\n", + " [ 0.18747599]\n", + " [-1.3524039 ]\n", + " [-2.00123783]\n", + " [-0.87625505]]\n" + ] + } + ], + "source": [ + "# Uruchomienie metody gradientu prostego dla regresji logistycznej\n", + "theta_start = np.matrix(np.zeros(Xpl.shape[1])).reshape(Xpl.shape[1], 1)\n", + "theta, errors = GD(h, J, dJ, theta_start, Xpl, Ypl, \n", + " alpha=0.1, eps=10**-7, maxSteps=100000)\n", + "print(r'theta = {}'.format(theta))" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres granicy klas\n", + "def plot_decision_boundary(fig, theta, Xpl, xmin=0.0, xmax=7.0):\n", + " ax = fig.axes[0]\n", + " xx, yy = np.meshgrid(np.arange(xmin, xmax, 0.02),\n", + " np.arange(xmin, xmax, 0.02))\n", + " l = len(xx.ravel())\n", + " C = powerme(yy.reshape(l, 1), xx.reshape(l, 1), n)\n", + " z = classifyBi(theta, C).reshape(int(np.sqrt(l)), int(np.sqrt(l)))\n", + "\n", + " plt.contour(xx, yy, z, levels=[0.5], colors='m', lw=3);" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nQED+P0U9BeCg6WQZAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xpl, Ypl, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_decision_boundary(fig, theta, Xpl)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFnCAYAAABkaweKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8VOX1P/DPySQhOyQECIRVVpUK\nQqqI1lZtXdAvIK3a1vanrS1tv1ZQKiqtXb7dbK2VYrWLpXtta2XTVqu1bUQUghBAdsIaSELIRvZl\nMnPP74+ZMQvJzDBzb+4sn/frNa8w98597pkrmuPznHuuqCqIiIiIKHwJdgdAREREFCuYWBERERGZ\nhIkVERERkUmYWBERERGZhIkVERERkUmYWBERERGZhIkVERERkUmYWBERERGZhIkVERERkUkS7Q6g\nu9zcXB0/frzdYRARERH1UFxcXKOqwwJ9LqISq/Hjx2P79u12h0FERETUg4iUBvM5LgUSERERmYSJ\nFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERER\nmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgR\nERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJ\nmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFRER\nEZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJLE2sRGSIiKwR\nkYMickBErrDyfERERER2SrR4/FUAXlXVj4lIMoA0i89HREREZBvLEisRGQzgagB3A4CqOgE4rTof\nERERkd2sXAqcAKAawG9FZKeIrBaR9N4fEpHFIrJdRLZXV1dbGA4RERGRtaxMrBIBzALwc1W9FEAL\ngEd6f0hVn1XVAlUtGDZsmIXhEBEREVnLysSqDECZqm71vl8DT6JFREREFJMsS6xUtRLAKRGZ6t10\nHYD9Vp2PiIiIyG5W3xV4H4DnvHcEHgPwGYvPR0RERGQbSxMrVd0FoMDKcxARERFFCnZeJyIiIjIJ\nEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIi\nIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCx\nIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIi\nkzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysi\nIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikyRaObiInADQBMANwKWqBVaej4iIiMhO\nliZWXteoas0AnIeIiIjIVlwKJCIiIjKJ1YmVAviXiBSLyOK+PiAii0Vku4hsr66utjgcIiIiIutY\nnVhdpaqzANwE4F4Rubr3B1T1WVUtUNWCYcOGWRwOERERkXUsTaxUtdz7swrAegCXWXk+IiIiIjtZ\nlliJSLqIZPr+DOB6AHutOh8RERGR3ay8K3AEgPUi4jvPn1X1VQvPR0RERGQryxIrVT0GYIZV4xMR\nERFFGrZbICIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJ\nEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIi\nIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCx\nIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIi\nkzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikyQG+0ERGQ4gxfdeVU9aEhERERFRlAo4YyUi\n80XkMIDjADYCOAHgn8GeQEQcIrJTRP4RcpREREREUSCYpcDvAJgDoERVJwC4DkDReZxjKYADIcRG\nREREFFWCSaw6VbUWQIKIJKhqIYCCYAYXkdEAbgawOowYiYiIiKJCMDVW9SKSAeBNAM+JSBWAliDH\n/wmAhwBkhhgfERERUdQIZsZqAYBWAA8AeBXAUQC3BDpIRG4BUKWqxQE+t1hEtovI9urq6iDCISIi\n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\nFfeCm3z4QmoAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xpl, Ypl, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_decision_boundary(fig, theta, Xpl)\n", + "plot_decision_boundary_bayes(fig, X_mean, X_std)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Inny przykład" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych (gatunki kosaćców)\n", + "\n", + "data_iris_versicolor = (\n", + " pandas.read_csv('iris.csv', usecols=['pł.dł.', 'pł.sz.', 'Gatunek'])\n", + " .apply(lambda x: [x[0], x[1], 1 if x[2] == 'Iris-versicolor' else 0], axis=1))\n", + "data_iris_versicolor.columns = ['dł. płatka', 'szer. płatka', 'Iris versicolor?']\n", + "\n", + "m, n_plus_1 = data_iris_versicolor.values.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data_iris_versicolor.values[:, 0:n].reshape(m, n)\n", + "\n", + "X = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "Y = np.matrix(data_iris_versicolor.values[:, 2]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "count: {0: 100, 1: 50}\n", + "prior prob.: {0: 0.6666666666666666, 1: 0.3333333333333333}\n" + ] + } + ], + "source": [ + "classes = [0, 1]\n", + "count = [sum(1 if y == c else 0 for y in Y.T.tolist()[0]) for c in classes]\n", + "prior_prob = [float(count[c]) / float(Y.shape[0]) for c in classes]\n", + "\n", + "print 'count: ', {c: count[c] for c in classes}\n", + "print 'prior prob.:', {c: prior_prob[c] for c in classes}" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[matrix([[ 1. , 3.508, 1.135]]), matrix([[ 1. , 4.26 , 1.326]])]\n", + "[matrix([[ 0. , 2.08373127, 0.91459007]]), matrix([[ 0. , 0.46518813, 0.19576517]])]\n" + ] + } + ], + "source": [ + "XY = np.column_stack((X, Y))\n", + "XY_split = [XY[np.where(XY[:,3] == c)[0]] for c in classes]\n", + "X_split = [XY_split[c][:,0:3] for c in classes]\n", + "Y_split = [XY_split[c][:,3] for c in classes]\n", + "\n", + "X_mean = [np.mean(X_split[c], axis=0) for c in classes]\n", + "X_std = [np.std(X_split[c], axis=0) for c in classes]\n", + "print X_mean\n", + "print X_std" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/pawel/.local/lib/python2.7/site-packages/matplotlib/contour.py:1180: UserWarning: No contour levels were found within the data range.\n", + " warnings.warn(\"No contour levels were found\"\n" + ] + }, + { + "data": { + "image/png": "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\nzcbHx1d1GCIiIiJFVOY8ViIiIiLiASVWIlK9jRzpbD5s5OyRjJzt220UqS1UYyUi1duuXVUdgdft\nSvH9NorUFuqxEhEREakkSqxEREREKokSKxEREZFKohorEaneevas6gi8rmcz32+jSG2heaxERERE\nyqF5rERERCqLtfDZZ86rJ/sr696zZzubN54rXqHESkSqt6FDnc2HDZ0xlKEzfLuNNd7nn8M118C9\n9x5PZqx13l9zjXPcG/fO//33xnPFK1RjJSLVW3JyVUfgdcnpvt/GGu+qq2DsWJg82Xn/8stOcjN5\nsrP/qqu8c+977nH2eeO54hVKrERERMpjjJPUgJPU5Cc6Y8c6+43x3r3zz6ns54pXaChQREROL2/W\nK50KtxvGj3deS9pv7fFEJ19lJTeFk6sT713WMal2lFiJiMjp5c16pVMxYQJMnAhdux5Prtxu5/3E\nic7xe+8tek3hNpyK/PaXdO+yjkm1o8RKRKq3AQOczYcNaDmAAS19u41FFK4pyk8QqkPd0HPPQVwc\nJCQcT666dnXex8VBRsbxGN3u4m2oqBPbX/je48Y5mzeeK95hra02W9euXa2IiNQCbre1Y8fm98c4\n29ixzv6qlJdnbVxc0bji4qydObN4jIXbMHt2xZ85e3bZ9/bWc+WkAPHWg1ymypOpwpsSKxGRWsDt\ndhKCvLyiCUxe3vH9s2cXT7LcbmtnzXK2ko6Vd21J+0tSUlx5edY+9JDzeuK5Je335NmexDxzprUP\nPlix59ZU5X1eVZR8K7ESEd8waJCz+bBBHwyygz7w7TYWkd9DU1LPEDgJQ0V7cMq7trweHm/0WJXX\nI+Wta2uqatpmJVYi4hv69nU2H9b33b6277t9qzqM06dw8hIXV/x9bu7xP6L5f1zz399zj7OVdGzs\nWOdepV1b3lBjWXF16lT2c8u6b0nnno5ra6pq2mYlViLiG5RY+Z7yeqzyh3tKq8Eqrz6rovVb+b1d\n+UmVtUWTqwcfrHhd2KnUlFXXejRvqoZt9jSx0iLMIlK99evnvC5cWJVReFW/qf0AWDhqYZXGcdpY\n60ypcOWV4Od3fH9eHnzxhfOtQGOc81yFvrzudh+fu6msY54cL4nb7Uyp8Nxzxa/N32/Myd/3VGKq\njGtrqmrWZi3CLCIi1ZMxTvJ0331F9993X9GkqqLzOpV3vKy4evQo/sc7f3/+fUqLqaxJT93uis9F\n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\nSik1Tv4/EcuC10H+HqAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "draw_means(fig, X_mean)\n", + "plot_prob(fig, X_mean, X_std, classes)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nwQoAsoi76/WuLr3c3q4tHR3a0tGhVzs79Vpnp7Z2dupQNNrn8ybp2IoKTauq0tTKSp1SW6splZU6\ntrJSk9Ou8ExMXvUZX16uspHwh2f2bOnhh6WPfUxaujTxB/G666Rbbz0y75JaYzEdjEZ1oKdH+6NR\nNfX0aF93t/b29Ghvd7f29PRod3e3ftvcrF1dXWmB8njpzT+W4t1S5x6pc3di6tihWOtOnT5zsTrP\nPlvV69dL8+cnAsnChdL69dLChWr53//R4rsXq6W75ciQ23raJEmL716sndfvUP2yL/YZ75HxS+H+\ngU+Fqgxj19q10uc+N/SxpUJLsbbPJez9lxhuBQKAEgHqtc5OvdDWdmTa0Namlzs61JH2GH11JKLZ\n1dWaXV2tWdXVekN1tWZWVen46modX1WlaZWVqshyS2xES/8DmZL6QzmEP4zurv09PXq9q0vb77hD\nj774hL59/lTF649TrLJRqjlOqhh/5PMWj2vWwYOad9JJOqW+XqfW1Oi0T39ab3rkEf347y7QtfVP\nHAlT6eoq6nTrlI/pk5+6ve9407/P6tW9bRWCtmxZ4rU5qVAVifQNW0uWJHoqDXVsqVfuFGv7XMLe\n/wiR761AghWAMSfurk3t7XqmpUVrW1r0bEuLnmtrU2us90bXrOpqnVxbq3m1tZpbW6s31tRoTk2N\njquqUmQ0/993WHUy8bi0YoVa/+ELWvXSPdpyYItOmniS/uSNl2r3rd/R5r/8S738859r41vfqg3t\n7drY3n7kaldZPK4J1qb9e5+UWjYlptYtUrzzyO6Xn7tMK1vOLs6LlJPf7ciLnvsv/9rXEk1Khzq2\nTJ8bru1zCXv/IwTBCgCS2mIxPdncrCcOH9ZvDx/WU83Nak6GqNpIRGfW1+vMhgadXlen0+vrdUpt\nrerLx2ClhLtarrtaqx7/jjZPlOYckK5422fUcMttef9hzFlcnqdoPK5XOjv1fGur/tDWpgd3vKTn\n2zrkVY3Jscak1lel5hdU1bpZX1n4Id2w6OOBHX9EGSPBZaQjWAEYs3ricT3V3KxfHTyoXx08qKda\nWhR1l0k6ra5Obx0/Xmc3NOisceM0t7Z2ZNQ4FZu7nvi7D2lx1b2KV5arzaKq83JFuqN6qOtynfeN\n/8j5x3uw4vKIRXqLywvQ0tWi6TdPV4sqpIa5UsM8adwp0rg3SWU1kqQZ5dKeHQ8rcuj36mr6neos\n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\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_decision_boundary_bayes(fig, X_mean, X_std)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie danych dla wielomianowej regresji logistycznej\n", + "\n", + "data = np.matrix(data_iris_versicolor)\n", + "\n", + "Xpl = powerme(data[:, 1], data[:, 0], n)\n", + "Ypl = np.matrix(data[:, 2]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "theta = [[-22.4168027 ]\n", + " [ 12.03703048]\n", + " [ 11.13804517]\n", + " [ -1.75684025]\n", + " [ 1.01230657]\n", + " [ -7.61403096]]\n" + ] + } + ], + "source": [ + "# Uruchomienie metody gradientu prostego dla regresji logistycznej\n", + "theta_start = np.matrix(np.zeros(Xpl.shape[1])).reshape(Xpl.shape[1], 1)\n", + "theta, errors = GD(h, J, dJ, theta_start, Xpl, Ypl, \n", + " alpha=0.05, eps=10**-7, maxSteps=100000)\n", + "print(r'theta = {}'.format(theta))" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFnCAYAAABkaweKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XmcFOWdP/DPt++5h2EGZuQQEASF\nyBnEiBo1bgwawCMha7LZuGbdjSbikYi46y9m3RXXRAkadWPMxpBLohwaY4zG9VbA4UYOuQWGa4CZ\nnrPP7++P6mZ6jj6Yrprunvm8X6969XRVV9XTJTIfnudbT4mqgoiIiIjSZ8t0A4iIiIh6CwYrIiIi\nIpMwWBERERGZhMGKiIiIyCQMVkREREQmYbAiIiIiMgmDFREREZFJGKyIiIiITMJgRURERGQSR6Yb\nEKu8vFyHDRuW6WYQERERtbNmzZpaVa1I9rmsClbDhg1DdXV1pptBRERE1I6I7EvlcxwKJCIiIjIJ\ngxURERGRSRisiIiIiEzCYEVERERkEgYrIiIiIpMwWBERERGZhMGKiIiIyCQMVkREREQmYbAiIiIi\nMgmDFREREZFJGKyIiIiITMJgRURERGQSBisiIiIikzBYEREREZmEwYqIiIjIJAxWRERERCZhsCIi\nIiIyCYMVERERkUkYrIiIiIhMwmBFREREZBIGKyIiIiKTMFgRERERmYTBioiIiMgkDFZEREREJmGw\nIiIiIjIJgxURERGRSRisiIiIiEzCYEVERERkEgYrIiIiIpMwWBERERGZhMGKiIiIyCQMVkREREQm\nYbAiIiIiMgmDFREREZFJGKyIiIiITMJgRURERGQSBisiIiIikzBYEREREZnE0mAlIqUi8oKIbBOR\nrSJygZXnIyIiIsokh8XHXwTgVVW9XkRcAPItPh8RERFRxlgWrESkBMDFAL4FAKrqB+C36nxERERE\nmWblUOBwAMcA/EpE1onIMyJS0PFDInKziFSLSPWxY8csbA4RERGRtawMVg4AkwA8paoTATQBuKfj\nh1T1aVWdoqpTKioqLGwOERERkbWsDFYHABxQ1VWR9y/ACFpEREREvZJlwUpVDwPYLyKjI6suB7DF\nqvMRERERZZrVdwV+D8DvIncE7gZwo8XnIyIiIsoYS4OVqq4HMMXKcxARERFlC868TkRERGQSBisi\nIiIikzBYEREREZmEwYqIiIjIJAxWRERERCZhsCIiIiIyCYMVERERkUkYrIiIiIhMwmBFREREZBIG\nKyIiIiKTMFgRERERmYTBioiIiMgkDFZEREREJmGwIiIiIjIJgxURERGRSRisiIiIiEzCYEVERERk\nEgYrIiIiIpMwWBERERGZhMGKiIiIyCQMVkREREQmYbAiIiIiMgmDFREREZFJGKyIiIiITMJgRURE\nRGQSBisiIiIikzBYEREREZmEwYqIiIjIJAxWRERERCZhsCIiIiIyCYMVERERkUkYrIiIiIhMwmBF\nREREZBIGKyIiIiKTMFgRERERmYTBioiIiMgkDisPLiJ7ATQACAEIquoUK89HRERElEmWBquIS1W1\ntgfOQ0RERJRRHAokIiIiMonVwUoBvCYia0Tk5q4+ICI3i0i1iFQfO3bM4uYQERERWcfqYDVdVScB\n+BKAW0Xk4o4fUNWnVXWKqk6pqKiwuDlERERE1rE0WKnqwcjrUQDLAUy18nxEREREmWRZsBKRAhEp\niv4M4O8AbLbqfERERESZZuVdgQMBLBeR6Hl+r6qvWng+IiIiooyyLFip6m4A4606PhEREVG24XQL\nRERERCZhsCIiIiIyCYMVERERkUkYrIiIiIhMwmBFREREZBIGKyIiIiKTMFgRERERmYTBioiIiMgk\nDFZEREREJmGwIiIiIjIJgxURERGRSRisiIiIiEzCYEVERERkEgYrIiIiIpMwWBERERGZhMGKiIiI\nyCQMVkREREQmYbAiIiIiMgmDFREREZFJGKyIiIiITMJgRURERGQSBisiIiIikzBYEREREZmEwYqI\niIjIJAxWRERERCZhsCIiIiIyCYMVERERkUkYrIiIiIhMwmBFREREZBIGKyIiIiKTMFgRERERmYTB\nioiIiMgkDFZEREREJmGwIiIiIjKJI9UPisgAAJ7oe1X91JIWEREREeWopD1WIjJTRHYA2APgbQB7\nAfwl1ROIiF1E1onIy91uJREREVEOSGUo8AEA0wB8oqrDAVwOYOVpnGMugK3daBsRERFRTkklWAVU\n9TgAm4jYVPVNAFNSObiIDAZwFYBn0mgjERERUU5IpcaqTkQKAbwD4HcichRAU4rH/ymAuwEUdbN9\nRERERDkjlR6rWQCaAdwB4FUAuwBcnWwnEbkawFFVXZPkczeLSLWIVB87diyF5hARERFlp1SC1cWq\n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\niIiIyCT/H+AGYmKcYPyGAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xpl, Ypl, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_decision_boundary(fig, theta, Xpl)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFnCAYAAABkaweKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl4W+Wd9vHvI8mSLK9x7DjORhIS\nEkggawktFAYoUxpaCEuhQzt9u8wwLcywdcrSGd62L9OGblDK0E4pM9PSlZYlUEqhhQJlDWSFEBIS\nshDixI4T2/Km9TzvH8eKncSWlEjyEt+f6zqXonN0znkkTHznOT/9jrHWIiIiIiK58wz2AERERESO\nFgpWIiIiInmiYCUiIiKSJwpWIiIiInmiYCUiIiKSJwpWIiIiInmiYCUiIiKSJwpWIiIiInmiYCUi\nIiKSJ77BHkBv1dXVdvLkyYM9DBEREZEDrFy5sslaW5PpdUMqWE2ePJkVK1YM9jBEREREDmCM2Z7N\n63QpUERERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxE\nRERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRP\nFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRE\nRCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTB\nSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE\n8qSgwcoYU2mMecAYs8EY85Yx5v2FPJ+IiIjIYPIV+Ph3Ak9Yay8xxviBUIHPJyIiIjJoChasjDEV\nwOnAZwCstTEgVqjziYiIiAy2Ql4KnALsAf7XGLPaGHOvMabk4BcZY64wxqwwxqzYs2dPAYcjIiIi\nUliFDFY+YD7wI2vtPKADuOngF1lr77HWLrTWLqypqSngcEREREQKq5DB6j3gPWvt8u7nD+AGLRER\nEZGjUsGClbV2N7DDGDOje9XZwPpCnU9ERERksBX6W4H/Avyy+xuBW4DPFvh8IiIiIoOmoMHKWrsG\nWFjIc4iIiIgMFeq8LiIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJg\nJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIi\neaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYi\nIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpIn\nClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieeIr5MGN\nMduANiAJJKy1Cwt5PhEREZHBVNBg1e1Ma23TAJxHREREZFDpUqCIiIhInhQ6WFngT8aYlcaYK/p6\ngTHmCmPMCmPMij179hR4OCIiIiKFU+hgdZq1dj7wEeAqY8zpB7/AWnuPtXahtXZhTU1NgYcjIiIi\nUjgFDVbW2p3dj43Aw8DJhTyfiIiIyGAqWLAyxpQYY8pSfwb+FlhXqPOJiIiIDLZCfiuwFnjYGJM6\nz6+stU8U8HwiIiIig6pgwcpauwWYU6jji4iIiAw1arcgIiIikicKViIiIiJ5omAlIiIikicKViIi\nIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicK\nViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIi\nkicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAl\nIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5\n4sv2hcaYMUAw9dxa+25BRiQiIiIyTGWcsTLGnG+M2QRsBZ4DtgF/zPYExhivMWa1MeaxIx6liIiI\nyDCQzaXAW4FTgLettVOAs4FXDuMc1wBvHcHYRERERIaVbIJV3Fq7F/AYYzzW2meAhdkc3BgzATgP\nuDeHMYqIiIgMC9nUWLUYY0qBvwK/NMY0Ah1ZHv/7wA1A2RGOT0RERGTYyGbG6gKgE7gOeAJ4B/ho\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xpl, Ypl, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_decision_boundary(fig, theta, Xpl)\n", + "plot_decision_boundary_bayes(fig, X_mean, X_std)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Kiedy naiwny Bayes nie działa?" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych\n", + "import pandas\n", + "import numpy as np\n", + "\n", + "alldata = pandas.read_csv('bayes_nasty.tsv', sep='\\t')\n", + "data = np.matrix(alldata)\n", + "\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 1:]\n", + "\n", + "Xbn = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "Xbnp = powerme(data[:, 1], data[:, 2], n)\n", + "Ybn = np.matrix(data[:, 0]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nd+MrZjYW25a7973Z9ze2fX34Ps6E7+t1sW1vDcsfM7NXJVnvtWrhuPeZ2dfC9/hhM3tBbFvDz35e\ntHDsbzSzZ2LH+AexbXeG349pM7sz2ZqvXQvHfjh23N8wsx/EtuX9fX+fmX3PzM422W5mdn/42nzF\nzG6KbUvmfXd3Lh24SPolSf9G0qclDTXZ5ypJ35T0Qkn9kr4s6cXhto9Iuj28/peS/kPax9TGsd8r\n6WB4/aCkP19h/42SLkj6mfD2+yW9Lu3j6OaxS7rYpLzQ77ukfy1pMLz+C5KelvScPL7vy31/Y/v8\nR0l/GV6/XVIlvP7icP/1kq4PH+eqtI+pg8f9m7Hv83+Ijju83fCzn4dLi8f+Rkl/0eC+GyU9Hv69\nOrx+ddrH1Mljr9v/P0l6XxHe97D+vyHpJklnm2wfkfT3kkzSr0n6YtLvOy1wHeLuX3f3x1bY7WZJ\nM+7+uLsvSPqwpNvMzCS9XNKD4X4fkDTavdp23G0K6iy1VvfXSfp7d/+XrtYqGe0e+yW98L67+zfc\nfTq8Pivpe5JWnGE8oxp+f+v2ib8mD0r6rfB9vk3Sh9193t2/JWkmfLw8WPG43f1Tse/zFyQ9L+E6\ndksr73kzr5J02t0vuPv3JZ2WtLNL9eyGdo/99ZI+lEjNEuDun1XQ0NDMbZI+6IEvSHqOmV2rBN93\nArhkDUj6Tuz2k2HZJkk/cPef1JXnxXPd/enw+j9Jeu4K+9+upV/0d4bN0IfNbH3Ha9g9rR77s81s\nysy+EHUdq8fedzO7WcEv+W/GivP0vjf7/jbcJ3xf/1nB+9zKfbOq3brvVtAyEWn02c+LVo/9teHn\n+EEze36b982qlusfdplfL+mTseI8v++taPb6JPa+P6sbD1pUZvYJST/fYNPb3P1jSdcnScsde/yG\nu7uZNZ2bJvyF8suSTsWK36ogAOhXMKfOAUnvWGudO6VDx/4Cd3/KzF4o6ZNm9lUFJ/dM6/D7/t8k\n3enutbA40+872mdmb5A0JGk4Vrzks+/u32z8CLn0t5I+5O7zZvZ/KmiBfXnKdUra7ZIedPefxsqK\n/r6njgCuDe5+yxof4ilJz4/dfl5Ydl5B8+uzwl/tUXlmLHfsZvZdM7vW3Z8OT9TfW+ahflvSMXdf\njD121Iozb2Z/I+mPOlLpDunEsbv7U+Hfx83s05JeIumj6oH33cx+VtLHFfzQ+ULssTP9vjfQ7Pvb\naJ8nzexZkn5Owfe7lftmVUt1N7NbFAT2w+4+H5U3+ezn5US+4rG7+/nYzXEFuaHRfV9Wd99Pd7yG\n3dPOZ/Z2SX8YL8j5+96KZq9PYu87XajJ+pKkQQtGHvYr+NCf8CDz8VMKcsMk6U5JeWrRO6GgztLK\ndV+SJxGe/KOcsFFJDUf9ZNSKx25mV0fdg2Z2jaSXSvpaL7zv4ef8mIJckQfrtuXtfW/4/a3bJ/6a\nvE7SJ8P3+YSk2y0YpXq9pEFJ/zOheq/VisdtZi+R9FeSbnX378XKG372E6v52rVy7NfGbt4q6evh\n9VOSXhm+BldLeqWu7HnIulY+7zKzFylI1v/HWFne3/dWnJD0u+Fo1F+T9M/hj9Lk3vdujIzoxYuk\n1yjo656X9F1Jp8LyX5B0MrbfiKRvKPgl8rZY+QsV/EOfkfTfJa1P+5jaOPZNkh6WNC3pE5I2huVD\nksZj+12n4NdJX939PynpqwpO4P+fpA1pH1Mnj13SvwuP78vh39298r5LeoOkRUmPxi435vV9b/T9\nVdDte2t4/dnh+zgTvq8vjN33beH9HpP06rSPpcPH/Ynw/170Hp8Iy5t+9vNyaeHY3yXpXHiMn5L0\noth9fz/8LMxI+r20j6XTxx7efrukd9fdrwjv+4cUjJpfVHBu3y3pTZLeFG43Se8JX5uvKjb7RFLv\nO0tpAQAA5AxdqAAAADlDAAcAAJAzBHAAAAA5QwAHAACQMwRwAAAAOUMABwAAkDMEcAAAADlDAAcA\nbTCzT5nZK8Lrf2pm/2/adQLQe1gLFQDa8yeS3mFm/0rB+o63plwfAD2IlRgAoE1m9hlJGyS9zN2r\nZvZCBUtl/Zy7v275ewPA2tGFCgBtMLNflnStpAV3r0qSuz/u7rvTrRmAXkIABwAtMrNrJR2VdJuk\ni2a2M+UqAehRBHAA0AIz+xlJE5L2u/vXJf0XBflwAJA4cuAAYI3MbJOkd0p6haRxd39XylUCUHAE\ncAAAADlDFyoAAEDOEMABAADkDAEcAABAzhDAAQAA5AwBHAAAQM4QwAEAAOQMARwAAEDOEMABAADk\nzP8Pwi7E6dNciUEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xbn, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "count: {0: 69, 1: 30}\n", + "prior prob.: {0: 0.696969696969697, 1: 0.30303030303030304}\n" + ] + } + ], + "source": [ + "classes = [0, 1]\n", + "count = [sum(1 if y == c else 0 for y in Ybn.T.tolist()[0]) for c in classes]\n", + "prior_prob = [float(count[c]) / float(Ybn.shape[0]) for c in classes]\n", + "\n", + "print 'count: ', {c: count[c] for c in classes}\n", + "print 'prior prob.:', {c: prior_prob[c] for c in classes}" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[matrix([[ 1. , 0.03949835, 0.02825019]]), matrix([[ 1. , 0.09929617, 0.06206227]])]\n", + "[matrix([[ 0. , 0.52318432, 0.60106092]]), matrix([[ 0. , 0.61370281, 0.6081128 ]])]\n" + ] + } + ], + "source": [ + "XY = np.column_stack((Xbn, Ybn))\n", + "XY_split = [XY[np.where(XY[:,3] == c)[0]] for c in classes]\n", + "X_split = [XY_split[c][:,0:3] for c in classes]\n", + "Y_split = [XY_split[c][:,3] for c in classes]\n", + "\n", + "X_mean = [np.mean(X_split[c], axis=0) for c in classes]\n", + "X_std = [np.std(X_split[c], axis=0) for c in classes]\n", + "print X_mean\n", + "print X_std" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xbn, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')\n", + "draw_means(fig, X_mean, xmin=-1.0, xmax=1.0, ymin=-1.0, ymax=1.0)\n", + "plot_prob(fig, X_mean, X_std, classes, xmin=-1.0, xmax=1.0, ymin=-1.0, ymax=1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xbn, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')\n", + "plot_decision_boundary_bayes(fig, X_mean, X_std, xmin=-4.0, xmax=4.0, ymin=-4.0, ymax=4.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "theta = [[ -0.31582268]\n", + " [ 0.43496774]\n", + " [ -0.21840373]\n", + " [ -7.88802319]\n", + " [ 22.73897346]\n", + " [ -4.43682364]]\n" + ] + } + ], + "source": [ + "# Uruchomienie metody gradientu prostego dla regresji logistycznej\n", + "theta_start = np.matrix(np.zeros(Xbnp.shape[1])).reshape(Xbnp.shape[1], 1)\n", + "theta, errors = GD(h, J, dJ, theta_start, Xbnp, Ybn, \n", + " alpha=0.05, eps=10**-7, maxSteps=100000)\n", + "print(r'theta = {}'.format(theta))" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xbnp, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')\n", + "plot_decision_boundary(fig, theta, Xbnp, xmin=-4.0, xmax=4.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmAAAAFpCAYAAAA7jJSFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl8lNW9P/DPmT2zZd8I+6JsQoQA\nLghWq1Wo4oLSSq21Lvd6qyJ4i9zb9na1td57ceutv1baWpVWrIBKxaVaBNwgBFlElgRkTTLZM/v6\nnN8fzzyZSTJrMpNnZvJ9v155kcxy5kxIMp85y/cwzjkIIYQQQsjQUcjdAUIIIYSQ4YYCGCGEEELI\nEKMARgghhBAyxCiAEUIIIYQMMQpghBBCCCFDjAIYIYQQQsgQowBGCCGEEDLEKIARQgghhAwxCmCE\nEEIIIUNMJXcHBqKkpISPHTtW7m4QMqxxACfdbnT4fDhPr4dJqZS7S1knwDkOOhxQM4bz9HqoGUvb\nY/mtfrjqXdCfp4fSRP9XhKRLXV1dG+e8NN7tsjKAjR07Fnv27JG7G4QMWz5BwG2HD2NvayseGz8e\nj4weLXeXstaOri4sPngQTo0GH1RXo0qrTcvjfH7T5+ju7MbFBy6GQkuTH4SkC2PsVCK3o99CQkhS\n/IKAbx0+jFdbW/G/EyZQ+BqkBQUFeHfGDFi8Xnxl3z40ejwpfwxvmxftW9pR8Z0KCl+EZAj6TSSE\nJEzgHHcdPYpXWlvx3+PHY9WoUXJ3KSdcnJ+Pt2fMQJPXi6v270er15vS9ltfbQX3c5QtL0tpu4SQ\ngaMARghJCOccKxoa8ILFgp+NHYt/p5GvlLokPx9bpk/HCbcb1xw4AKvfn7K2LS9YoJ+ih3GmMWVt\nEkIGhwIYISQhPz91Cr85dw4PjxyJH44ZI3d3ctLlhYXYOG0a9tvtuOHzz+ERhEG3aT9oh/UTKyrv\nrgRL4yJ/QkhyKIARQuL6Q1MTfnzyJL5dXo7/njCBXsjTaFFxMf40eTK2dXXhO0eOQOB8UO1ZXrSA\nqRjKv12eoh4SQlIhK3dBEkKGzrsdHfiXo0dxdWEh1p1/PoWvIXB7RQUavV6sOXECY3U6/Gr8+AG1\nwwWOlpdbUPi1QmhKNCnuJSFkMCiAEUKiOuRw4JZDhzDNYMCr06ZBraBB86GyetQonHS78djp05iY\nl4e7KiuTbqPz/U54zngw/tcDC3CEkPShv6aEkIjavF5cd/Ag9Eol/n7BBTCp6P3aUGKM4ZmJE3F1\nYSHuO3YMO7q6km6j6fdNUJeoUXpT3JqQhJAhRgGMENKPXxBw6xdfoNHjwWvTp2OUTid3l4YllUKB\nDVOnYpxOh5sPHcIptzvh+/qtfrRtaUPZN8uo9hchGYh+Kwkh/aw+cQLburrw+/PPxzyzWe7uDGsF\najXeuOACeAUBN33+OVyBQEL3a93YCu7hKPsm1f4iJBNRACOE9LKhpQVPnD2L+6uq8O2KCrm7QwCc\nr9fjpSlTsNdux/319Qndp2ldE/LOy4P5IgrQhGQiCmCEkB5HnU7cffQoLjGbsXbCBLm7Q8JcV1KC\nH4wejT82N+NPTU0xb+s86oT1Yysq76HaX4RkKgpghBAAgCsQwNJDh6ALrjuiHY+Z56fjxuGKggL8\nW309Prfbo97O8hcLwIDy5VT7i5BMRX9hCSEAgJUNDfjc4cCLkydjJC26z0hKxvCXqVORr1Ri2Rdf\nwBlhPRgXOCzrLSj4SgG0lVoZekkISQQFMEIINrW24ndNTfj+qFG4prhY7u6QGMo1Grw4ZQq+cDqx\nqqGh3/Vd27rgPu5G5XeTrxtGCBk6FMAIGeYaPR7cc/Qoakwm/GLcOLm7QxJwVVERvj9qFH7X1IQ3\n2tp6Xdf8fDNUBSqU3FwiU+8IIYmgAEbIMMY5x51HjsAtCHhpyhRoaN1X1vj5uHGoNhpx19GjaPF6\nAQABZwBtr7Wh5OYSKHVKmXtICImF/toSMow929iIdzs78T8TJuB8vV7u7pAkaBUKrJ8yBTa/H/ce\nPQrOOdo2tyFgD6D8W7T4npBMRwGMkGHqhMuF7x8/jqsLC/GvI0bI3R0yAFMNBjw6fjxeb2/HSxYL\nGn/fiLyJeShYUCB31wghcVAAI2QYEjjH3UePQsUY1p1/PtWKymIPjRyJS8xm/GJnPbp3dKPiOxVg\nCvr/JCTTUQAjZBh6rqkJ27q68D8TJtA5j1lOyRj+OHkyLvqHAAAou42OHiIkG1AAI2SYafR4sPr4\ncVxRUIC7K6lUQS44Ly8P33hfhQMXAG8ZoxdoJYRkDgpghAwzD9TXw8s5fnfeeTT1mCO6d3Yj74QP\nB2/W4v76elj9frm7RAiJgwIYIcPIm+3t2NTWhv8aMwYTaddjzrCst0ChV+Ceeyej2evFD7/8Uu4u\nEULioABGyDDhDARwf309pur1eHjUKLm7Q1JE8Aho/VsrSm4owdzKQvzbiBH4v3PnUGezyd01QkgM\nFMAIGSYeO30aJ91u/Pa886jgag5p3dQKf6cfFd+pAAD8Ytw4lKjV+N6xYxA4l7l3hJBo6K8wIcPA\ncZcLj58+jdvKyrCwgGpE5ZLmPzVDN1aHwisLAQAFajUenzABu2w2/Lm5WebeEUKioQBGyDDwcEMD\n1AoFHp8wQe6ukBTyNHvQ+X4nypaX9ar9dXt5OS4xm7HmxAlakE9IhqIARkiOe7+zE6+3t+MHo0ej\nSquVuzskhVr+0gIIQPny3kcPKRjDUxMnotXnw6OnTsnUO0JILBTACMlhAc6xsqEB43Q6PDRypNzd\nISnEOUfTuiaYLzLDMMXQ7/oasxl3VFTgybNncdzlkqGHhJBYKIARksP+1NSEgw4Hfj1+PHRKpdzd\nISlk22OD87ATFd+tiHqbR8eNg4oxrDlxYgh7RghJBAUwQnKUIxDAj06exMVmM5aWlsrdHZJilvUW\nMA1D6S3R/29HaLX4/qhReLW1FZ90dw9h7wgh8VAAIyRHPXHmDJq9XvzPhAlU8T7HCF4BLX9pQfHX\ni6EuUMe87b+PGoUKjQarT5wAp7IUhGQM2QMYY0zHGNvNGNvPGDvEGPup3H0iJNu1eb14/MwZ3FBS\ngkvy8+XuDkmx9i3t8LX6UHl3/LM8jSoVfjxmDD7s7sab7e1D0DtCSCJkD2AAPACu4JzPBFAN4BrG\n2EUy94mQrPbL06fhCATw6LhxcneFpEHzi83QVGpQdHVRQre/q7ISk/Ly8J9ffknFWQnJELIHMC6y\nB79UBz/oLwQhA3TO48Fvz53DtysqMNXQf3ccyW6+Dh863upA2TfKwJSJTS2rFQr8bOxYHHQ4sKGl\nJc09JIQkQvYABgCMMSVjbB+AFgD/4JzvinCbexljexhje1pbW4e+k4RkiUdPnYIA4L/GjJG7KyQN\nLOst4F6O8m+Xx79xmFvLynCBwYCfnDwJvyCkqXeEkERlRADjnAc459UARgKYyxibHuE2v+ec13DO\na0ppRxchEZ1yu7GuqQl3VVZiXF6e3N0hadD8x2YYZxthqjYldT8FY/jZ2LE45nJhPY2CESK7jAhg\nEs55F4BtAK6Ruy+EZKNfnjoFBuA/R4+WuyskDRyHHLDvs6Pi29Frf8WypKQEFxqN+DmNghEiO9kD\nGGOslDFWEPw8D8BVAI7I2ytCss9ptxt/am7GXZWVGKXTyd0dkgaWlyyAEihbVjag+zPG8OOxY3Hc\n7aZRMEJkJnsAA1AJYBtj7ACAWohrwP4uc58IyTq/Pn0aALCGRr9ykuAX0Px8M4qvLYamXDPgdq4v\nLsZMgwG/PHUKAdoRSYhsZA9gnPMDnPMLOeczOOfTOec/k7tPhGSbJo8Hf2hqwh0VFRhNo185qfPd\nTnibvai4a2DTjxLGGH4wZgyOuVzYSBuaCJGN7AGMEDJ4T5w9Cx/neGTUKLm7QtLEst4CVaEKxYuK\nB93WTaWlmKzX45enTlF1fEJkQgGMkCzX5fPh2cZGLCsrw0S9Xu7ukDTwW/1o29yGsmVlUGgG/2db\nyRgeGTUK+x0OvN3RkYIeEkKSRQGMkCz3bGMj7IEAVtPoV85qebkFgktAxZ2Dm34Md1t5OUZqtT1r\nBwkhQ4sCGCFZzB0I4KmzZ3F1YSGqTcnVhSLZo/nPzdBP08M0J3X/xxqFAitHjsT27m7stlpT1i4h\nJDEUwAjJYn9paYHF58P3afQrZ7m+dMH6sRXly8vBWGJHDyXqnspK5CuV+N8zZ1LaLiEkPgpghGQp\nzjnWnjmDmQYDriwslLs7JE2a/9wMMKB8eXJHDyXCpFLh3hEjsLG1Fafc7pS3TwiJjgIYIVnqH52d\nOOR0YuWoUSkfGSGZgQsczc83o/CrhdCNTk95kQeqqgAAT589m5b2CSGRUQAjJEs9dfYsytVqfKNs\nYFXRSebr3tkNzykPKr6TusX3fY3S6XBLWRn+0NQEu9+ftschhPRGAYyQLFTvdGJrRwfuq6qCVkG/\nxrnK8pIFCoMCJUtK0vo4K6qq0B0I4AWLJa2PQwgJob/chGSh35w7BzVj+JfKSrm7QtIk4AigZUML\nSpeWQmlQpvWx5pnNqDGZ8Jtz56gwKyFDhAIYIVnG7vfj+eZm3FJaigqtVu7ukDRp3dSKgC2Ayu+m\nP2QzxvBAVRUOO534Z1dX2h+PEEIBjJCss76lBdZAAPcHF0+T3GR5yQLdWB3yL8sfkse7tbQUxSoV\nfnvu3JA8HiHDHQUwQrII5xzPnjuHmQYDLjKb5e4OSRNPowed73WibHnZkO1w1SmVuKuyEq+3teGc\nxzMkj0nIcEYBjJAssstqxX6HA/86YgSVnshhzS80AwJQ8e307X6M5F9GjEAAwLqmpiF9XEKGIwpg\nhGSR3zU1wahUYnl56otykszAOYflzxbkz8+H/ryhPVx9fF4eri4sxB+amhCgxfiEpBUFMEKyRLff\njw0tLfhmWRlMKpXc3SFpYt9rh/OIE+W3yxOy76msxBmPB+90dMjy+IQMFxTACMkSf7VY4BIE3EOl\nJ3Ja8wvNYBqG0ltKZXn860tKUKZW4zmahiQkrSiAEZIl1jU1YYbBgBqTSe6ukDQRPAIsL1lQsqQE\n6kK1LH3QKBS4o6ICW9raYPF6ZekDIcMBBTBCssBBux11djvuqqykxfc5rP2tdvg7/Ki4c2gX3/f1\n3YoKBAC82Nwsaz8IyWUUwAjJAn9qboaaMdxG5z7mNMtLFqjL1Ci8qlDWfkwOljl5vrmZKuMTkiYU\nwAjJcD5BwEsWC75eXIwSjUbu7pA08bX70L6lHWXfLINCJf+f5jsrKnDI6cQem03urhCSk+T/LSeE\nxPR2RwdafT7cWSHvtBRJL8tfLOBejso7M2OTxa2lpdApFHRANyFpQgGMkAz3osWCErUa1xQVyd0V\nkkaWFy0wzDTAONMod1cAAAVqNa4vLsbLLS3wCYLc3SEk51AAIySDdfv9eKOtDd8oK4NaQb+uucp5\nzAlbrQ3l38qsAru3l5ejzefD21QTjJCUo7/ohGSwja2t8HCOb1Hl+5zW/HwzoADKb8us/+evFRWh\nRK3GSzQNSUjKUQAjJIP9xWLBxLw8zKXaXzmLBziaX2hG0TVF0I7Qyt2dXtQKBW4tLcUb7e2w+f1y\nd4eQnEIBjJAM1ezxYFtXF75ZVka1v3JY1/YueM95h/zg7UR9s6wMbkHA621tcneFkJxCAYyQDPVK\naysEiC+AJHdZXrRAaVKi+LpiubsS0SX5+Rit1eLllha5u0JITqEARkiG2tDSghkGA6YYDHJ3haSJ\n3+5Hy99aUHprKZR6pdzdiUjBGG4tK8M7nZ3o8Pnk7g4hOYMCGCEZ6IzbjY+tViyj0a+c1rapDYJD\nQMV3MnP6UbKstBR+zvEaTUMSkjKyBzDG2CjG2DbG2BeMsUOMsRVy94kQuW1sbQUA3FJaKnNPSDpZ\nXrJAN06H/Evz5e5KTLNNJozT6fC34M8lIWTwZA9gAPwAHuacTwVwEYDvMcamytwnQmT1t9ZWzDQY\nMEmvl7srJE085zzofL8T5cvLM36TBWMMS0tL8V5nJzppGpKQlJA9gHHOmzjne4Of2wAcBlAlb68I\nkc85jwcfW61YSqNfOa35xWZAAMrvyKzaX9EsDU5D0m5IQlJD9gAWjjE2FsCFAHZFuO5extgextie\nVhoGJzlMWmdDASx3cc5hecEC86Vm6CdmxyjnHJMJo7RabKIARkhKZEwAY4wZAWwE8BDn3Nr3es75\n7znnNZzzmlJ6YSI5bHNrKybr9ZhMux9zln2vHc7DTlTcntmL78MxxnBjSQne7eiAnYqyEjJoGRHA\nGGNqiOFrPed8k9z9IUQuHT4fPujqwo0lJXJ3haRR84vNYBqG0luy683kjSUl8HCOdzo75e4KIVlP\n9gDGxNWnfwBwmHO+Vu7+ECKnN9vbEQCwhAJYzhK8AlrWt6BkSQnURWq5u5OU+fn5KFKpsJmWgRAy\naLIHMACXArgdwBWMsX3Bj0Vyd4oQObze1oYRGg3m0NmPOavjnQ742nwo/3Z2LL4Pp1IocF1xMd7s\n6IBPEOTuDiFZTfYAxjn/kHPOOOczOOfVwY+tcveLkKHmEQS809mJrxcXQ5HhZQnIwFleskBdokbR\n14rk7sqAXF9Sgi6/Hx91d8vdFUKymuwBjBAi2t7VBXsggOtp+jFn+Tp9aHu9DWXfKINCnZ1/fq8u\nLISGMWxpb5e7K4Rktez8C0BIDtrS3o48hQJXFBTI3RWSJq1/awX38Kyp/RWJUaXCVwoK8HcKYIQM\nCgUwQjIA5xxvtrfjysJC5Ckz81BmMniWFy3QT9HDNDu71/gtLi7GMZcL9U6n3F0hJGtRACMkAxxx\nOvGl243FRdm5LojE5/rShe4Pu1H+rcw/eiierxcXAwC2dnTI3BNCshcFMEIywNvBF7Jrgy9sJPdY\nXrQAAMqXZ+/0o2RcXh7Oz8vDWzQNSciAUQAjJAO81dGBKXo9xuh0cneFpAHnHJYXLSj4SgF0Y3Lj\n//ja4mJ80NUFZyAgd1cIyUoUwAiRmSMQwI6uLlxD0485y7rLCleDC+W3Z//ol+SaoiJ4OMf2ri65\nu0JIVqIARojMtnd1wcM5BbAcZnnRAoVOgdKbs+vooVgW5OdDp1D0TJ8TQpJDAYwQmb3b0QGdQoEF\n+flyd4WkgeAR0PJyC0puKIHKrJK7OymTp1RiYX4+3qVzIQkZEApghMjsH52duCw/HzoqP5GT2t9q\nh7/Dn5VHD8VzVVERjjidOOt2y90VQrIOBTBCZNTo8eALpxNXFRbK3RWSJpaXLFCXqVF4Ve79H0s/\nt+/RKBghSaMARoiMpBcuCmC5ydfpQ/uWdvHoIVXu/bmdbjCgTK3GPyiAEZK03PuLQEgWeb+zE8Uq\nFWYYjXJ3haRB6yut4F6Oim9XyN2VtFAwhisLC/HPri5wzuXuDiFZhQIYITLhnOOfXV24orAQiiyv\njE4is7wkHj1knJW7AfvKwkI0e704TMcSkWGOcw6/3Z/w7XNnSw4hWabB5cJZj4cO385RrpPi0UPj\nHh2X9UcPxfKV4M/vPzs7MdVgkLk3hAwdT7MH9jo7rLutsH5qhW2PDfmXJb6bnQIYITL5IFjA8nIK\nYDmpZX0LAKDstjKZe5Je43Q6jNZq8UFXF+4fOVLu7hCSFn6rH7Y6m/hRa4P1Yys8Zz3ilQrAcIEB\npTeXouArBcDribVJAYwQmXzQ1YUKjQbn6/Vyd4WkGOcczS80I39BPvLG5sndnbRijOHyggJs7egA\n5zynR/vI8CD4BDgOOGDdJY5q2epscHzuAATxeu0YLcyXmGG+yAzTbBOMs4xQGcPi1G2JPQ4FMEJk\nwDnHB11duLyggF6wcpBtjw2uYy6M+v4oubsyJC4vKMALFgu+cDoxjaYhSRbhAoerwQVbrQ3dn3TD\ntscGx34HBLeYttSlahhnGVFyYwnyL86HcZYRmlJNSh6bAhghMjjucqHR68VCqn6fkyzrLWAallNH\nD8WyMDiN/kFXFwUwktE85zziqNaeYOCqtSFgFQ+UVxgUMNWYMOK+ETDPM8M0zwTdGF3a3iRTACNE\nBju7uwEAC2j9V84R/OLRQ8WLi6EuVMvdnSExTqdDlUaDnV1d+F5VldzdIQSAuG7LutvaE7isn1rh\nPecVr1QAxplGlN9WDuNsI8xzzNBP0w9pvT4KYITIYGd3N4pVKkym9V85p/O9TvgsPpTfnntHD0XD\nGMNlBQXYGawHRtPqZKgJHgH2A3ZYP7HCVisGLudRJxAsT6cbr0PBggJx3dYcE4wzjVDq5T3+jQIY\nITL4sLsbl+bnU/2vHNSyvgWqAhWKFxXL3ZUhdVl+Pl5uacFJtxvj8nJ74wGRFw9wOI85xd2In1ph\n3W2F44AD3CemLU2lBqYaE8puKxOnEueYMnI0mgIYIUPM4vWi3uXCPZWVcneFpFjAEUDr5laU31YO\nhXZ41bm+NLie8cPubgpgJGU45/CcDq3bsu4SR7gCdnHdltKkhGmOCSNXjoSpxgTzRWboRulk7nVi\nKIARMsQ+Dq7/upQW4OecttfbIDgElC8fPtOPkukGA8xKJT7q7sbtFbl59BJJP1+HT1y3FZxGtNXa\n4G0S120xNYNhhgHld5TDPMcM42wjDFMMYMrsnEmgAEbIEPvYaoWWMcw2meTuCkkxy3oLtKO0SVXD\nzhVKxnCR2YyPrVa5u0KyRMAVgH2fXRzV2iUGLleDS7ySAXnn5aHwykKYLxanEQ0XGKDUybtuK5Uo\ngBEyxD7p7sZskwlaxfCaosp13jYvOt/txMiHR4IpsvMd+WBdkp+Pn548CavfD7OKXl5IiOAX4PzC\n2TONaP3UCschByDOJEI7UgvTXBMq7qwQF8rXmKAy5/bPUG4/O0IyjFcQsMdmw/20VT/ntL7SCu7n\nKP/m8Jt+lFxsNoMD2G214qtFRXJ3h8iEcw73Cbc4lVhng223OLoluMTipsp8JczzzCi+rlhctzXX\nDO0Ircy9HnoUwAgZQvvtdng4xzyzWe6ukBSzrLdAP00Pw4zhW4h0bnBa/VMKYMOKt9UL225b6Oie\nWht8bT4AANMyGKuNqLy3Eua54tE9eZPyhu0ocTgKYIQMoU+D62MuogCWU1wnXbB+bMW4X44b1jWw\nCtRqTNbrsctmk7srJE38Nj/sn9nF0a1dNlh3W+E5HXYo9TQDiq8rFss/zDXBMN0AhZqWW0RCAYyQ\nIbTbZkOlRoOR2uE33J5ynAOvvQbccAMQHnqiXR7vvpwDmzeLn994Y+/L47TX8nILAKDsG2WpeGZZ\nbZ7JRAdz5wjBKxY3te2x9YxwOQ+HFTcdpxPXaz1ggnmOuG5LacidRfLpJnsAY4z9EcDXAbRwzqfL\n3R9C0mm31Yq5JhO9MKXCa68BN90ErFgBPPGEGI44B1auBJ56Cti0SQxSid5382bg5pvF6zduFK9P\nsL2Wv7bAfLEZeeOo/tU8sxl/tlhwyu3GWKoHljU453Adc4WmEffYYNtrA/eIaUtdooZprgllt5bB\nNMcEU40JmrLUHEo9XMkewAA8D+A3AF6QuR+EpFWXz4djLhfuoBpJqXHDDWKAeuop8esnngiFpRUr\nxOuTue/27aHrt28Xw1YC7TkOOeA44MDEpyem6Imll81jw4ZDG1DfXo9JxZOwbNoymLSpK4kyNzi9\nXmuzUQDLYJ5GT2gasdYKe50d/i4/gOCh1LNMqPpeVc/RPek8lHq4kj2Acc53MMbGyt0PQtKtzm4H\nANRQ/a/UYEwMToAYkqQwFT6qlex9H3xQ/Pfpp8WPaO2FTUta/moBFEDZrWWJTX+mULJh6sPTH2LR\n+kUQuACHzwGD2oBV76zC1uVbMX/0/JT06QKDARrGUGuz4ZYympLNBL5OX8/ieOsuK2y7bfA2B4ub\nqsTipqXLSsVpxHmmrC5umk0Y51zuPiAYwP4eawqSMXYvgHsBYPTo0bNPnTo1NJ0jJEV+ffo01pw4\ngbZLL0WxOvPOJctosdZ7hU8dAoAgJB5+OAfC67EJ4jb5fpf1bW/zZuCmm8AfXIFdb34DeePyMPPd\nGYlNf/Yx0BGpSGFKwRR49ZZXcdp6ul97No8NVWurYPP2XyBv0pjQ+HAjjBpjQn2OZ05dHUxKJf5Z\nXZ2S9kjipOKmUukH6y4rXPWunuvzJuWJC+RrTDDNNcF4oTGniptmAsZYHee8Jt7tZB8BSxTn/PcA\nfg8ANTU18qdGQpJUZ7NhnE5H4Wsgoq33euih0EiVZOXK+CNgQGh9V7iHHup/u0jtBacwbU+9BTdu\nwJg1oxOf/gwz0BEpm8eGResX9QpTDp8DAPC19V+DXqWH0+/s1d6RtiMQuBCxPYEL2PD5Btw1666E\n+h1PjcmEv1ostBA/zXiAw/GFo+d8RFutDY6DDnB/8FDqERqY5ojFTU014rqtTDyUerjKmgBGSLar\ns9no+KGBirRmKzx8Pfgg8OSToRAk3SbWLsjwwJRse8EpzJad08D2+lByz/kA7IlNfwbFClGL1i+K\nOSK14dCGqGEKAJx+Z7/27p51d8/XfTl8DjR0NMTtc6JmGY34f42NOO5yYaJen7J2hzPOOdwn3b2m\nEW17bRCc4s+BqkAF42wjRq0eBdOc4VvcNJtQACNkCHT5fDjhduPuykq5u5JdwqceI63ZAkJhqe+6\nroULY++CDA9fjIm3lwLYwoVx2+McaG2ZjiJsgxri+r5EwxcQO0TFG5Gqb6+PGqaitdfubIdBbYh4\nP4PagIlFqdtEIL3R2Gu3UwAbIK/FC2ttcEdicKG8v11cJM+0DKZZJlTeXdkTtvIm5dFoY5aRPYAx\nxv4K4HIAJYyxswB+zDn/g7y9IiS1PgsuwL/QmJo1NrIYTN2tgeo79fjEE73D1+rVwGOP9RuZwsKF\n8XdBbtrUu8833iiWn5A+j9Oe9ZNueM56MA7bQhcmOv2J2CEq3ojUpOJJUcNUtPaK84qhYJELYiqY\nAsumL0uorURMMxigZgyf2e24lRbix+W3+Xtqbdn2iGHLcypY3JSJxU1LbijpqbVlmEHFTXOB7AGM\nc/5NuftASLpJAWxWNk9BDqbuliTRECd9vWRJaOqRc/EjnNvd/zEYi9+PSLdhTHx+idyWc7TcvxEM\no1DyrzOB376b+PRnUKwQFW+sgzG1AAAgAElEQVREatm0ZVj1zqqY7fdtb0LRBNxXcx+e/PRJMMbg\nCXh6Fu5vXb41ZQvwAUCrUGCqXo/PqCJ+P4InWNx0t1hF3lZrg/NIn+Km88wwP2DuWSSvMsr+Uk3S\ngP5XCRkC++12VGg0KNNkceHCwdTdAsTwtGYN8PjjvUOcIADXXw+8+WYoxIWHvbVrxfuGL7ZfvBiY\nMEG8TBqlGsLpF77pNbTuM6NofDtUv/3v5KY/g2KFqHgjUiatCVuXb+21gF+v1sPpc0buLzjWvLcG\nHBxewQuNUgO1Qo17Zt2DCUUTsOXoFhxpO5LSmmDVRiPe7uhISVvZigc4nEed4rqt3eK6Lft+O7gv\nWNy0XA1TjQlly8pgmidWk1cX0yL54SIjylAkq6amhu/Zs0fubhCSsJm1tRih1eKtGTPk7srghI94\nSWItPA8f2ZJCVXU1sG+fGKJefx2oqQl9vWVL/5G1FSuAyy4Dli4NtRsIiLdLtuxDeH+A+J9HCXXd\nH3bhs8v2YcpLk1G+PKywbpLTsdFKSSRal8vutWPD5xvQ0NGAiUUTMSp/FJa+srRXe4wxBIQAXH5X\nxDakUbhkHzueJ86cwarjx9F8ySUoz+Y3HgninMN9yt2zG9FWK04nBuwBAIDSpBR3IgaryJvnmaEd\npaV1Wzko0TIUFMAISTOvIMC4cydWjRyJxyZMkLs7gxepdla0F5FgvayekaxVq8TAVFICtLWFbldd\nDdTV9W43UtiTSKEPSG79WXh/FiwQ64eFF1/duBHYsaN3qIsQqhpWNeDc/53DzOca8eo0O+o7GjDp\nlA3LvvUYTLqwg9YTCGR9Q9Sy6csGNR3Ytz2X34U1761JeL1YqmqCbevsxBX79+OdGTNwdVHRoNrK\nRN5Wb0/QstaKU4m+Fh8AgGkYjDONMM0NnpE4xwT9+XoqbjpM5FwdMEKy1VGnEz7OMSObF+BLItXO\nirXwvO+05dq14jE/+/b1vl1dXeg8RimsMCbePjyABQKhEAeIj5tgwdN+/eFcDF/hpSe2bxe/Dp9S\n7bP2jQNo3dgKjDyB0Ue+C+GkFg7ugcEDrHpsHbbe+T7mj7ks4fVxRo0xZfW3IrX3yD8eSXrHZCpq\ngl1gMAAADtjtWR/A/HY/7HV2MWjtEke23CeD6w8ZoJ+iR9G1RTDPNcM8zwzDBQYoNLRInsRGAYyQ\nNDvgEF/8ZgRfkLJWpNpZ8RaeRzvyp69Vq0IjUuGjW9df3/92a9eG2ktgrVXM/oSLdvRQnxBpu+2n\n8Jz24MnFG2DTAuDibjWHFgB8WPSnK9H4H+0wPvKjpAuzpsNAdkymoiZYiUaDSo2m5+c/W/QskpdG\nt3Zb4Tzce5G8aY4JI/5tBMxzzTDOMkJlopdSkjz6qSEkzQ7a7VAzhvOzvR5SpNpZiSw8l24XLXxV\nV/cekZI+B8SF+QDwwANiO+EjafFKTUQTrz99g2Sf59n2lAMc38Cn03ZHvLvg9WHDxWbc9RmSKsya\nLgPZMZmqmmAzDAZ8nsEBjAc4nEecPVOIttrgInlvcJF8qRqmOSaU3Vomrt2aY4KmNPfXs5GhQQGM\nkDQ76HBgsl4PtSLLpyQi1c5KpO5WpGnLkhKguRl4+GExCFVXh9ZghQctIFRoVXq8gYx8xetPuEhT\nqmGhrQ3z0V64HxZ9Z8S7O7RAgzTjFtbOQM98HCxpx+S1L10Lr+CFN+CFWqGGT/BFvH0qa4JNNxjw\nm3PnEOAcSpkXm4dXkpdGtux77b0Xyc82YeRDI2GeK9bb0o6mRfIkfSiAEZJmhxwOXJyfL3c3Bi9a\nfa1YdbfCpy0XLxZHtMaOBU6eFMNX+HTi6tViOzfe2DuASVXuAfH2Wq1YH6zv4ySyGD+8P+GL74HQ\n15GmVIP3c6IKTowBN7wOA1fBwfz9HsLgASZK1ReCYe7DMx8N6MzHlGIAg/h8FEyBPJVYOZ2B9dsF\nmaqaYNMNBng4R4PLNeQjwJ5mj1jctDZU4NTXFlwkr2UwVhtR8Z2KnpEt/fl6MAWFLTJ0KIARkkZ2\nvx+nPB7ckwnrv+SqZC9NW65dK5adWLIktJB+4cLeI2ic91/3tXJl6L6ci3XEPJ6BFYMN70+0XZB9\nR9nC2m+/7BlgJ/CVq8ZD4fUDEY7aU2jUWPZJOxBcA2aDF4vKXxrQmY+pIJ05affaey7zBMR1a0a1\nEY9d9RjOdp9NyQ7MvqYFf+4PORxpDWC+Lp8YtsICl+dssJK8QqwkX3x9cU8ZCOMMIy2SJ7KjAEZI\nGh12ioUxp2bC+q9kKtmnKqz1nbaU2g8PXdLlUvh6881QWQopqEk7JzduHFwx2PD+AL0/v/xy8fMb\nb+w9pRoW2tr2XQrDDD9K/vDf2Prvp7AIr0LQhXZBKjRqbL3zfRi1pp51Yxt2PgVhSeRDkVO14zCW\nWGdOcnDolDr86qu/SstjTwn+3H/hcOCm0tKUtBlwBmD/zB46J7HWBtexUI0z3QQd8ufnwzQ3GLaq\nqZI8yUz0U0lIGn0hBbBMGAFLppJ9Ko4dApKbtnzttVD42rcvtONRCl+LF4emKIHeuyojLXaPFBYZ\nCxWFlcKWJNrnwdDmu/zr6C79CKNXjwYYw/z/eQWNG/+KDeOdYs2tYB0wo7SuizHYHvsZXv2/7XDY\n+5TdCErVjsNYBnPm5GAZVSqM1mp73ogkS/AKcHzu6FVry3HIAYjLtqCp0sA8x4yKb1f0FDhVF1El\neZIdKIARkkaHHQ6oGcMEnU7urkQvCREpvAz22KGBkEanwqcopcdfvBh4441QH/vuYoy00zDFIbJr\nUysQAIquLeq53Lj0NkQbu5Kq3EvTfZGkcsdhNIM5czIVphoMPW9EYul1bE8wbNn328E94o5EVZEK\npjkmlFxf0jOVqB0ReWSRkGxAlfAJSaMbDh5EvcuFQ3Pnyt2VkEQr2Sd77NBQ9THRfsWqWzaA53H0\nX4+i5S8tuLT9UijUsdcP2Tw2VK2t6rXuK5JUVZ0faF+G4vFXNjTgd42NsF92GRTB7zfnHO4T7tA0\n4h4b7HWhHYkKgwKm2WLIkirJ68bpaEciyQpUCZ+QDHDE6exZiJwRkqlkH6le1oIFkdtM5SL+WH2U\nPk+kGGwyI34J6HyvEwWXF8QNX0DsdVcAoFVqoVFqUrrjMJpIB3enY8djNFPy8mCwCDi8oRF5Bz09\ngcvfIe4glXYklt9RLoatGhP0k+nYHpL7KIARkiY+QcBxtxs3p2jx8aDFGhFqaBCn+PqOOvXdkSjt\nGpRKQwxkSm+gfQTEAJhMMdhIIXIA4ct9xg33cTeq7q9K6Pax1l0BwBXjrsArt7yS9vAjmT96Phof\nbkzpmZPReC1e2OpCh1GfV9uNv1mAVtQDSsAw3YCSG0vEsDXXBMN0Q0KhlpBcQwGMkDQ54XbDz3nm\nVMCPVsm+oUFc/H799cCWLeLlggDMnh1a/L5lC/DQQ2KpBqlu1pNPpn5dWLxq+wsWJFcMNtmzK6Po\n/qgbAFCwoCCh28dbd3XzlJvTPu0Yqehrqndb+jrCyj8EPzxngmveGKCfrIf5q4X4RVErFn11JO68\nahyUecqU9oGQbEUBjJA0ORZceHxeXp7MPQmKVsn+jTdC5R+kcHL99WL4qq4OLX6XqtFLISza2YnJ\nCp/C7FsmQjqcu2/ZikTblUKjNGoX7+zKKGy7bFDkKWCYkdh0cqzjf1JZaT4SafF/qou++rv9sO0N\njWzZ6mxwn3D3XK+boEP+pfniAvkaU88ZiZxzvP/hhxhRLlD4IiQMLcInJE3+98wZ/Pvx42i/9FIU\nqTN8a3ykhe3SzsPwaUnOxVB0882hy6It4k/U5s2D3624aVP/6VHpMgB49VXx8wFOmX628DNwH8es\nj2cl/LQiBSFp3VW0IDTY44pSteDeb/XD/pldnEoMjmy56kO1trRjtDDViAvkjbONMM02QV0Y/We8\nZs8eFKvVeGfmzISfCyHZihbhEyKzBpcLRSpV5ocvIPJaKWk6sq8dO3p/PYApvV5SWfIifHr0gw/6\nXy89zwULxDDGeUL9dnzuQOnS5NbyJbvuKhUjVxs+fxmCzxvxOsHnxYbPX8Zds+7udbnfFha2goHL\ndcwFBN+ba0dpYZptQsUdFWLYqjFBU5LcgdST9HrsslqTug8huY4CGCFpUu90YmKmTD/Gk8haqXgL\n5AcawlKxW/HGG8XRr77To5IdO8RRNqmtHTsSHgXzdfng7/Ajb1Ly/5dGjTGhdVfScUGDPa6oftdW\nOHjkumMO7sGX295Dl21pKGzV9Q5bmioNTDUmlC8vF8tAzDZBU55c2IpkUl4eXmlpgVcQoMn2Q+kJ\nSREKYISkSYPLhUuz4RDuRINVvAXyfXcgJmOwuxX7rlGTPPCAeN3TT4ceI8nRNW+zOKKUzqKfscpW\nJHJckTR1ud/sgqZFAS8TYHKaMKlpEiY1T8J5jefh/KbzUNUxEvsgVuXXjtTCOMuI8tvKe9ZsaSvS\n8xwn5OVBAHDS7cZ5mbIphRCZUQAjJA28goAzHk92jIAlGqyiLeKPtgMxGSnardiP1D/pgO0BjK4J\nTjEYKQ3pW0A+mOOCdp7aidufvR3jGsdh5NmR+EHTjzGpeRIquyp7btOc34wvq77EnBVzUTynWBzZ\nKhv8yFaipN+DBpeLAhghQRTACEmDk243BIjv/DNe32Al7UpcuzaxYBXtvMdEpWJqM3zHYzjp60GM\nril04pRZwBlI6PYDkehxQTzA4WpwwfaZDfZ9dnTv7Ub7x+143vF8z+3PFJ3BkaojeKPmDdRX1uNc\nUT0c5RxbR63Becsnpf8Ugwiko7iOu1xxbknI8EEBjJA0OBF8oRmfCWdAxtM3QKXqDMVEpWJqc/Pm\nUNiSdkKG1y07frz37ZMYXdON1QEKcSH+YMTa4RipbIXBZcD4lvGY1jYN847PQ92hOjgOOCC4xBE5\npmZwV3Sg9vw9OFx+GPUV9ThecRwurfizp/UDV5wA7tsBLFNcAGPdDwDDlNT+3yWoXKOBXqHACbc7\n/o0JGSYogBGSBtILzfhsGAHra6gP4k7l1GZ4GYonnxSD4zPPiDXOEhhdixiS9CYULCiA5SULxvxo\nDJS65KciY+1wvLjkYuAo8Pe8v+OVt1/BaMtojG4ejYruip77dxV1wTjTiBH/MgKGmQYYq40wHHsP\n//HcTXg8ygZJjwqY+Z1HcNfqd4C6YE03Qei/8zPVR0lFwBjD+Ly8njcmhBCqA0ZIWnz/+HE8c/Ys\nnAsW9BxAnPHCX4iB/nXBwsPNYNpOx4t/tHYi1QeLMpoXq27XtIZp2H/lfhR+rRCT/zQZ2srEF6vb\nPDaM/J+R0LXpUNVRhZEdIzGyfSRGt43GmPYxqOys7NmFyNQM7jFutI9uh3aqFvOunIeSmhJoq7T9\nD6LmHOseuQoPqd6HI0J3DB7gqbeBuz6DGL72iYvvh2xks4/rDx7ESbcbB+bMSdtjEJIJEq0DRgGM\nkDS45dAhHLDbcXTePLm7kri+BVGB3kVYN24Ur09F20P14p9g8EukgKn1BSvqv1cPACi8shCmGhO0\no7VQ5avAVAzcyxFwBODv9MPb6oW3yQvPWQ9a6lvAGhnUgVA9OI/Kg7PFZ3Gu7BymXzId8786H4ap\nBuRNykvqXESb24qqx0pgY77+/fYAjf8LGL0AAgHYNv4VG2r/iPrP/olJF16JZT/bBNOa/+o//Zsm\nD9bX4/nmZnTPn98/TBKSQ6gQKyEyOul2Y2w2rP8KFz71GOmN2fbtYkgayItnvGnNJUtCxw6lcoQs\n2gaBPpcnVAbi7rtQcHkBGn/biI63O9DxTgcQ+S5gagZNpQbaEVq0j2/HB6M/QGNhIxqLGnG26Cxa\nza3gCvF7vObSNbjpqwMLtiadGVvvfB+LfrcAAgCHVly0r/B6sXW9TwxfAD78/jIsKnkHQoEAx3zA\n4Hkfq36Wj62bgflDEL4AYIxOB1sggE6/PzuKExOSZhTACEmDU243ZpWUyN2N5EjrrjjvvZvwwQfF\nf8NraSX7Yh2v2GoqF/4PYLozfhkIceRLP1GPiWsnAmsBwSPAa/Gi9kgt7t9yP7xKLzpZJwSTALfO\nja3f2opZo2dh7969WP/2+rg7HAeEc8x/YiManwU2TAMaioCJxiIse+sMjPeJ30vbyu9hkfZZ2MIK\n5EtTlouWA40//jmMQHoCcBjpDckpt5sCGCEAqCQxISnmDATQ6vNhdLaNgAHii+zChb0ve/JJ8UMa\nwXrttYG3LYUwiRS2wkfIVq7sX5oimYX4UpiT2gFC7d10U8T+TzplgyFyAXkYPMDEU/2nJhVaBXzl\nPiyuW4wDJQdwpPAILAUWtCpbYfOJle3tXjuWTVsGBYv8p3ZQB3OHfY+M963AXXUCfqVbjLtePwPj\n1GqxjAhj2HD7hRA0kd9rCwA2/OjG0BRxEt+zZI3RiqnvFO2EJARAEgGMMXYVY+w5xlh18Ot7U9UJ\nxtg1jLGjjLEGxtiaVLVLiBzOeMRX8tHa9FVOTxvOxanGcFKB1CeeCO1WHGjbfYutXndd6DDvJ54I\nhTCFYuBrkwYQ5pZ96zEoNJFHZRQaNZZ967GI1yUydWnSmrB1+VaYNCYY1AYA4siXSSNensgRQxFF\nKt/xxhviIer79gGvvw4AqO9ogIP5Izbh0AINe98X/88ffDA1ATgK6Q2J9PtByHCXzBTkdwHcB+CH\njLEiANWp6ABjTAng/wBcBeAsgFrG2Buc8y9S0T4hQ+1M8B1+1o2ASS+6Tz8dvWTDQBfKRyq2et11\nYnmI2bOBujoxdK1dm1DB1Fg1tQZytmTPWqo/XQnB6xPXUnnE8LX1zvdhlNruI9EK9skezJ2QSOU7\nFArxEPWw3axxi7zOugj476fFTRaDODEgnlK1GjqFAqcpgBECIIldkIyx33PO7w1+/hiAKznng95P\nzBi7GMBPOOdfC379HwDAOf9VtPvQLkiSyf7Y1IS7jh7FiXnzMC6b6oClc6dipLYFQQxf+/aJozZv\nvBH6WhIhAMQqFzF/dFhRLM577+KURtpisHts2HCxWVxL1QEs+8QaNXwBwLq96/DQ2w9FDTdPXfNU\nQodxD1gC691sXnvsHZ6rzsG49b3QKFeS37NkTNq1C7ONRrw8bVrK2iQk0yS6CzKZNWBvSp9wztcA\neGEgHYugCsCZsK/PBi/rhTF2L2NsD2NsT2tra4oempDUOxt8hz8i26YgpRGV8MAjjSYNZuoxWtsK\nhTjytXixOBKmVIrhq7oaCAT6TyNCHPlatH4RbF5bT+hx+ByweUNrrgBEP1sy1htOzmF85Ee46zPg\nV++L9bOMj/wo5n3Str4rUQmsd4s7Bao1hYJ1st+zJI3SamkKkpCguAGMMfYUY4xxzl8Pv5xz/kz6\nutUf5/z3nPMaznlNaWnpUD40IUk54/GgTK2GVpFle1yk0gx9RzyiXZ5k27ZFX8W6z/6AR/7xCNbt\nXQebxxaaMgsnTUeGrwkLLgJPZM1Vv+lOQYgY5noZyH2A9K3vSlSC692kKdCnrnkKay5dg6eueQqN\nDzeGRgwH+PyTNVKr7XmDQsiwxzmP+QHgFwC2ANAHv/4agI/i3S/RDwAXA3gn7Ov/APAfse4ze/Zs\nTkimunb/fj6rtlbubqSXIHC+aZP4bwKX7zy1k5t+aeKGRw0cPwE3PGrgpl+a+M6TOzhfsYJz8SVe\n/FixInT/Pu2tfnc1x08Q9eOaF6/hq//vBv7cLHDrivt6tyM9zqZN/fu8enX/xw4EOF+8OPJ9+rB5\nbHxd3Tq+5h9r+Lq6ddzmsQ3o2zog4c8t0vcwEZs2Rf7eR/ueDdCa48e56oMPeCCZvhGSZQDs4Ynk\nn4RuBNwGoBbARwDeAXBZIvdLsG0VgBMAxgHQANgPYFqs+1AAI5lsxu7d/LoDB+TuRnol8YJtdVu5\n6ZemiIHJ9GM1t2nC2pHuHyVAPFf3XE+Ii/Sh+blGDHg/1YoB79TO0J0jhcPw8LV4sRi6OO8dvlav\nTi7MyEEQegeweP3t+72Qvg4EIl+eouf/zJkzHNu28WaPJyXtEZKJEg1giUxBXgngHgAOACUAHuSc\n70zF6BsAcM79AO4PBrvDAF7hnB9KVfuEDLVGrxcjNBq5u5FeSZR6iDlt6PVhw4orQ2vDIkw7hou1\n5goAvAGx2qiDe/qvCwufSuVc3BiweTPw+OPiurM33xSfw8aNwKxZ4teLFwOPPZb2KvGDIgjijtJw\nK1eKl2/eHHn6sO/aMakW26pVvet+pWL6OUxVcF3kOZqGJCShRfg/APAjzvnlAJYC2MAYuyKVneCc\nb+Wcn8c5n8A5fzSVbRMylLyCgDafL/sW4CcribpdMUs1aIGGq2viLvq3eWxYt3cdfrHjF7iv5j4Y\nNcaeNVdaZfTvdc+6sL6kACLVv9q3D5g5UyzBsXQpsH+/GMreeCOzwxfnwPXXi2Gx7+aF2bOjF1FN\nZeHbJFQG35g0eb1xbklI7otbB4xzfkXY5wcZY9cC2AjgknR2jJBs1Bx8YanM9REwIBSW4tTtiluH\nqmhS/3bDyl3s/HIn7vh/d6C0sxTGDiMqnZW4w3EH5hnnQeVSwWqzotnRDI/ag3ZTO06XnEbd+Dq0\n5rf2qsXVS3gAefBB8SP8+CUgtBkgk732Wih87dsnjmCtXSsGS6m8R6QwNYBaaakgvTFppBEwQpI/\nC5Jz3hScliSE9CG9s68YDgFMGjUJt3JlvxfwZdOWYdU7qyI2IZVq4JzDc84D5xEnnEeccB1zwXnM\nCWeDE54vPfij8Mde9/MpfLDr7agor4AVVuhsOmg9WhTZi6AJiN/72vG1eG7Jc5HPWuwbQCJZtWpI\nDqkeFKm8x5IlYn/Dw5RUWy1a/xMM0KlUTiNghPQY0GHcnHNXqjtCSC4YNiNgfaesIlXND76QS6Ua\npOKpmk4NprRPwbiWcbjHeA+OLTwGxyEHArZAT/NKoxJ5k/LQNq4Nb418C6fNp9GS34IWcwvaTe2w\n6+wwaMRCp7dOu7Wn0KhCUGB022hccvQSfPPDb+LJ3z6JOd+OUi86UgCRVFdHfC4ZJ3y0sO9z2bIl\ndr8TDNCppFUoUKRSwUIBjJCBBTBCSGSW4TICFukcwvARpYULISxaAsdhBxz7Hag4UIFtn21D174u\nKDuVPc2oSlRQTFeg/PZyGKYaoJ+ih36yHppKDRhjeOQfj+DZj5+N2AVperFvwDtZdhKtVa34dNan\n+MPzf8CZ+86g5OMSMClU8GCV+CVL+geQxYuB8eOBZ54JhbCFC+OfACC1GaMifVpDXLJhKokAnWrl\nGk3PGxVChjMKYISkkBTAynI9gPU5h9DX5YN9nx32MQ/Dfvm1sP+kCM5bd4L7xR14Cp0ChukGVN1Q\nBeNMIwzTDTBcYICmLPb3Kf76MXF6MdpZi10ju9CwogHOw04YpoqL9nsW4EvrpgDg2muBpqbQzkdp\nTdjq1YktSJfaTMcxTvEMJEwlEKDT1d9yjYZGwAgBBTBCUsri9aJApYIm0xdvD4Kn2QP7Xjtshy6E\n/cVDsO+zw/2lu+d6TYUJxmotihcVwzDTAGO1EfpJejBl8iMqiawfkxg1xn7nLiq+Jv4/2PbYQgHs\nhhtCxx9VVwM//CGwYwfw1luhchQbNwKXX574yFX4on6gdwhK465CAAMLU5EO8pbut3BhWvtbrlaj\nzm5PW/uEZAsKYISkUIvPh3K1Wu5upATnHJ7THtj22sTAFfzX2xwavciblAfTHBMq762E6UITjNVG\naMoHPvpn89iw4dAG1LfXY1LxJCybtqzX9GLfw7fjHfWjqRD74mvzhS5kTFycLpVvWLpUvHzFCnEH\n4euvJz9lmI5dhYlOa0YKUwCwYIH4ER6mwu8baYSrzw7UdCjTaNBKI2CEgPFIRfoyXE1NDd+zZ4/c\n3SCkn6/s2wc/59h54YVydyUpnHO4T7phq7PBXmeHrc4G214b/O1+8QZKwDDVAOOFRhgvNMI0Wwxb\nKlPq3sN9ePrDqEGruqK63/RiIucs+rp8+KjwI0xYOwGjVo7q+6R7l5kQhMGve0plm5s3D3xaczD3\nTbOfnzyJ/zp5Ep4FC3J6pJgMX4yxOs55Tbzb0QgYISnU6vXiPL1e7m7EFB62bHtCgcvfKYYtpmYw\nTDOgZEmJGLRmGWGcaYQyTxmn5YGzecSq9Tavrecyad3XovWL0PhwY7/pxURIAVJV2OdP3WB3AEYa\nneIceOihgbfZ12CmNeWcEo1DWh/Z6vP1VMYnZDiiAEZICrX6fLg0g6Yge6YR94hhy1Ynfvg7gmFL\nxWCYYUDp0lIYZxlhqjHBeIERCu3QjkzEPK4oWM1+IAHMfVJcm6YbowtdmIodgH0X3QNi+JKKuW7c\nKK4rG8yuwsFMa8pUaDURJcHfj1avlwIYGdYogBGSIpxztPt8PS8wcjy+55wH9jo7rLXWntEtaf0T\nUzEYLjCg9KZSGGfLF7YiiXlcUd9q9kmUfHB8Ibapnxw2KpmKHYB9R5gWLAiFrwcfFO8vtTGYXYWD\nKZYqQ6HVREi/H+1+v6z9IERuFMAISZFuvx8BAMVDFMC8Fm9oZGuPDdZaK3yW4GJzJWCYZkDx9cUw\n1Zhgmm2CYYYBSl36phEHI9FyEwCSKvlg/8wOdYm6ZzE+gNTsAIw2wvTgg8CTT4baHeyuwsFMlcpQ\naDURUgBr8/ni3JKQ3EYBjJAUkd7RpyOA+Tp8vcKWbY8NnjPB8/QYoJ+iR9HVRWLYqhEXyCv1mRm2\nIkmm3EQy65usu6wwzTWFirAC0Xf6JbsDMNIIU3j4Gkib4QYzVRrrvg0N4i7Q8AXwQ1UwFkCxSnzZ\n6aAARoY5CmCEpIj0glKkGtyvld/mh31vcBqxVgxb7hOhOlt5E/OQPz9fDFtzUr8bUQ59q9nHLDeR\n4PomX4cPzi+cKL+tPD2dHugIU6JTqIOZKo1234YGsfTG9deHjioa4t2RRdIUJAUwMtxxzrPuY/bs\n2ZyQTPN2ezvHtm38w7MJfr0AACAASURBVK6uhO/jd/p51ydd/MzTZ/gXt3/Bd03exbexbXwbxI9P\nxn7CD958kJ/81Une8V4H93Z60/gM5Gfz2Pi6unV8zT/W8HV167jNY4t+Y0HgXIwP4kcgwPmmTeLl\nnPPW11v5Nmzjnds7el2eEoLA+YoV4uOuWBH562g2bep/u/D7r14tfi0IoX4n8nm4QEBsJxDof/ni\nxQPrdwoZtm/nK+vrh+SxCBlqAPbwBLKM7GFqIB8UwEgm+mtzM8e2bfwLuz3i9QFvgFv3Wvm535/j\nR+45wmura/kHqg96wtZHFR/xA9cd4F/+9Eve9mYb91g8Q/wMhp7VbeXP1T3HV7+7mj9X9xy3uq0J\nXdcrOEgffYLFsQeO8e1523ngeyvFyzdtSl3H44WoWI8VK7xJz2Hx4lB4ihTOBtOPSN+7IQxfnHM+\n6uOP+XcOHx6yxyNkKFEAI2SI/fbsWY5t23iT282FgMDth+286c9N/NgDx3jdRXV8u257T9jaWbiT\n7/vqPn78P4/zlk0t3HXGxYUhfAHMBDtP7eSmX5q44VEDx0/ADY8auOmXJr7z1M6Y18UMMNXVPZd/\nev6nfP+Yl9MTMKKNPEW7PNL9I4Wg8BGq6mrx677PLTxUDXQkru/o4RD/7F2wezdfcuDAkD4mIUMl\n0QBGlfAJGSTOOdyn3Hhh65f4bEcL7mnOh3OvHQFbAACgMChgmiWu1zLNMcE8xwzdeF3vheHDjM1j\nQ9Xaql6FVyVGtRFggN3b/7xAk8aExkn/D8ZblkffBbl4MVxv1mEX/oqJ+A1Grhgp+86/iHiUqvmC\nAMyeHTooHAgdHB6pjlf4c5fEqveV7O3TYMFnn0EB4IMsOzGCkERQJXxC0sRr8YYWyAc/fG0+nA9g\nnBpAtYDy28t7FskbphgGdBB1rgk/57HZ3oyAEIh4O6/gBUPk75fABWwY78RdscpILFmCDuVNAIAi\n7AKe+Ftmhq9oC/gVCqCuDlCG7WKNFr6A5Op9hYevgRahTYEClQqn3e74NyQkh1EAIyQGf7e/V50t\nW60NntPB8g8KsfxD8XXFMM0x4TelHXi+pBtNl8+Wt9ODEOkwbJPWNOh2+57zqFao4RMi74LzBqIf\n1CwWZT0O3Hh3/yulg6lXrkQ7LkIezkKPsxlR+6qXeCFo7VpgVYSSHGvXxg5V4aI951QUoU2BfJUK\n3YHIAZyQ4YICGCFBAVcA9v122Hbbeso/OI84e67XjdfBfLEZ5gfNMM01wXihESpj6Ffo5BfdMNoy\n5xiiZEU6DHvVO6uwdflWzB89P6E2IgU4AP3OeYwWvgBAo9SAgcET8PS7rl9R1nDBIOJ/6nfoVP4d\nVfePBrBiyEd34ooXgqRSEdK0o2T2bHFkrG/9rmRGtFJRhDYFzEolrFQJnwxzFMDIsCT4BTgPOUNT\nibttcHzuAPeLayI1lRqY5phQdlsZzHPNMM0xQV0UO1xZ/X6YldlT/DRcIodh96rFFUG0AHffnPui\nnvMYiUahARgiBrB+RVnDBYNN56Jfg29VonhJCdC5QAwp4aM7fOiKjkYUKwRptcDjj/de87V2bWhN\nWHj9rrDnnPCIVqqK0A5SvkqFbr9fXIicCaGYEBlQACM5j3MO13GXOLK1xwbrbivse+0QXGIoUBWo\nYKoxYdT3R8E0V1wkr61K/pBgayAA8yCLsKZTrOnFwR6GHSvAPfHJEzFHvFRMBT/39yq8CiCxoqzh\ngsGmdeP5UBV3IL/9A+CWm8XjgTZuFK8PHzEagqKjEfUNO+GB8LHHxMsef1zs94IF4u3r6sTw9eab\n4m2l+2fIiFayzEolAgDcgoC8LH3TQshgZe6rBSED5GnywLorVEXeVmuDv1Oc7lDoFDBeaMSIfxnR\nsysxb0IemGLw78Jtfj/G6HSDbicd4k0vHmo5lPhh2BHECnCMMWiV2qhTikunLkWlsRITiyZi2fRl\nPQGr8eFGbPh8Axo6GvpdF+WBICxegvY7P0LpjaVQ3Hxp6MgiKfT0PbIo2mgY58DmzeLnN94Y99Dv\nQel7tuVjjwHz5gHbtwM33xwKilu2hB437DlnwohWskzBNyq2QIACGBm2KICRrObr9MFWJ04hWndb\nYdtjg/ecuIibqRj00/QoXVoqln+Ya4Z+mh4KlSJOqwNjDwRgzMAXk3jTi6/e+iqe3fNs1PvHXHcV\nVN9eHzXAeQNeaJSaiNcpmAK/WfSbiMHKqDHGHHWLpGtbFwLdAZTcWJLYkUWbN8c+2Lvv7dMxghbp\nbMsdO4Cnn+59tmWGh6pkSL8ntkAAZTL3hRC5UAAjWSPgCsC+zw5bbTBs7bbBVe/quT7vvDwULCzo\nqbVlnGWEMm/oAlGmBrBYo1MBIYAlLy+JODolibnuKmhS8SQY1IaIIcygNuD+Offjt3t+m9yU4gC0\nvtoKpUmJwqsLxQvilWiIdbD3gw+KlyVw6HfS+o6iJXC2ZcJtxbs8A5iCvyd22glJhjEKYCQjCX4B\nzi+cYtAKLpK3H7QDwb/XmkoNzPPMqPhORU+9LXWhvDsQ7YEADBkYwGKNTjn9TqgV0b9vOpUuoZC0\nbNoyrHonQukEAL6ADyPzR+Lo/UextX5r4lOKSRL8Alo3t6K42gWlNjjKGa9EQ7zwA4i3GUgwiqXv\ntCMAXHZZ/6DIObBmDfCrX/Xf/SiFq/C21q4FXn8dWLJELGUhjdRJt8uQMGagAEYIBTAiP8453Cfc\nPaNa1lor7J/ZITh7L5If/chocUdijWlAi+TTiXMOpyBkZACLNTqlYqqYC+T/rebfEipBYdKasHX5\n1l7rzCRewYs1763Bf77/n9i6fGvS04pR9Rnh6drWBX+7H6U7fwFc97QYRB5+WAwh0q7CxYv7l2iI\nN0qWaJHTZPQdebvsMmDp0t63eegh4PhxceH9oUOh3Y99p0HD2+pbwmLFCjGMyb3xoA9DMEw6KICR\nYYwCGBlynmZPTwV56y5x3Za/I7hIPk8BY7URlXdXimFrXnCRfAa8a4/FLQjgCL2wZJJYo1NKhRJa\nhTbq1OHU0qkJP8780fPR+HAj/rzvz1j5zspewS7ZkhYJ6TOK1Pq3VigMChRNcANv7hQXstfV9S/p\nII0MhZeliDZKJn0e6brB/ExGG3kDgAceEK9/+mnx6+pqMVRJj9t3GrRvW4D4fKurez/fwU6bppD0\nRsVJAYwMYxTASFr1qyS/ywbP2VAlecN0A0pvKhWnEeeaYJhugEKdeSEmHqcgjtbpM3AELNLolLQG\n69VbX8XSV5ZGvF8ia7/6MmqM0Kq00Cg1EUfWEilpkbCwkR8hwNC66WaUVJ2C8kCtGD7q6sTb9T3G\nJ7xEQ6xCptI5udJi+FQf2xNp5O2BB4Bnnul9ux/+ENi5M/Y0aKS29u0LHWc0xGc9xiP9nki/N4QM\nR7IGMMbYLQB+AmAKgLmcczphO4sJHgH2/fZeJSCcR5xA8HVMN16H/Pn5MM0NHkx9oQlKQ+YFloGQ\n3snrM3AEDAiNTkUq6xAtnA10gXysNWeJlLRIWNjIT9dTH8GPJSht/11opCs8DPcNK9I03ObNsQuZ\nAuk7tifSyFvfgLRxo/gYN90Uexo0UlvhMih8AaHfExcFMDKMyT0C9jmAmwD8TuZ+kCTxAIfziLNn\nVMtaa4XjgAPcF6wkX6GBqSasknxN/Ery2Ux6IcnkmkbRyjrECmcDEW9HZLySFkkJhqKWpx6BEg4U\nYTewdkf/sxSjTRvGKmS6YIH4dXgdsFQVOY008vbQQ6FpR8mOHeLjxHo+fdsKr5wf7/nLJE8KYDQF\nSYYxWQMY5/ww/n979x7kZnnfC/z7011aSd5dr1br9SW2g4E4NmC8YJJOpiGEhjZtHMjlhAKBpidM\nO03TnOacnlLPNNOmTNPJTNpM22mHaTIBbEKaCZ4kUFqgufVwAr4QGwwmCZiLgV1pvetdXVZ3/fqH\nXmlt79XrV3okvd/PjGdY747984uk5/s+z/P+HqDt9/c4naoi/1q+0dQ09XQKmcMZVDK1D0931I3I\nSATr/te6xr4t/1q/o/6/5usBrE1nwJaykp5bC1lsz9lKljUXpYrqH34ep3AtBvAk3CjNho/lLBsu\n1sj0ppvm/zvt6Md17hFC5/rOd2rh66tfrTVkXezfc+afVd/zVd8DttCDB4YFOANGZHwGbNlE5E4A\ndwLAhg0bDFfT3UoTpcbm+PqTiaXx2n4e8QrCO8IY+p0hRHbWlhJDl4Zs6STfyeoBLNChAcxOi+05\ns7XvlzXzM/mPB1HGhzD48B8D//Ts7FOAX/mK/cuGdjl35m3//trs12c/O1vjjTfOPtX4wQ8uvAx6\n5p91bhg7tyVFm/z76zPFeQYwcjDR+kbTZv0FIk8AGJrnW3tU9bvWz/wIwP9e7h6wkZERPXSI28Xs\nUMlWkP5ZGqmnUo0ZrvyJfO2bAoQuDdXOR9xVW0YMXxaGy8+Qca6fTE3hV48cwROXX47r+vpMl9MW\nMsWMbcua87K62L9w8X2YPLUJ7x57N1xuzJ6ZeGbLhTZuSgpg4fqqVeCuuxbvA7ac5qtt+O93/+hH\n+NMNG3D35s2mSyGylYgcVtWRpX6u6TNgqvr+Zv8dtDzVUhXZY9nZ9g8H0si+kAWsm9DAxgDCO8MY\nvnMYkV0RRHZG4Il0zCSpUQXrTt7fJoNbO7BzWXNeH/4wKg88hFP/czXit8Zmn549nzMT28VC9blc\nwN/8zfJ/voPOhgy4XI33DZETcXTtUlpV5H6Zm23/cDCN9OE0tFCb8fT0exDdFcXAjQOIjNRmuHzx\n+c/ro6XVBxIflyBbRwSn5N2ozhzH4M2DZ/1+u4UNmsvncqHQ5BUYonZmug3FjQD+HkAMwCMickRV\nP2Cypk5VGCvUlhGt9g/pg2mUT5/R3PTKMNb+wdrGE4mBzQFHbZJvtqI1kPgZwFoq+UASvmEfet/T\na7oUOk8+EZQ4A0YOZvopyP0A9pusoROVU+XZDfJP1wJXo7mpGwhvDyP2kRii10QRuTqC0DtCcHkY\nDJqpZAUwL0Nty5QmS5j890ms/exaiJvXvdP4XK7GjQuRE3EJss1V8hVkj2YbgSv1VAq5X+Qa3w9u\nCWLVe1YhclVtGTG8Iwx3sH17UXWr+p08A1jrjD80Di0p4jfHTZdCK+AVady4EDkRA1gb0arV3PTp\nFNKH00gfSCNzJNNobuod9CJ6TRRDnxyqHd0zEoF3dfc2N+0kZWsg8TCAtUxyXxLBi4MIX2njk5XU\nMh6RxvuGyIkYwAxRVRTeLNS6yD9lBa5DaVTSVnPTsBvhnWGs+2OruelVEfjXOau5aSdhAGut/Mk8\npn48hY1f2Mj3RIdiACOnYwBrkdJECelnamGr3uS0lLCam/oE4cvDiN8Wr4WtqyMIXcLmpp2EAay1\nkg8mAQUGbxlc+oepLTGAkdMxgDVBvblp5nCmtm/r6RTyL+cb3w+9I4T+D/TX9m1dVdu35fJxk3wn\nq59o52YAa4nkA0lEdkUQuihkuhRaIbcIKgxg5GAMYBdIK4rs89nGrFb6UBqZo5nGiOxb60P06iiG\nPz1c6yS/MwxvL/dtdZv6QMIA1nzZ57PIHMngoq/aeKg3tZwLQJUBjByMAew8qCryr+aRPlDrJJ86\nkELmSAbVbO0JOE+vB5GRCDb83w21FhA7I/AP+w1XTa1QH0YYv5ovsTcBuIHB/8Hlx07mEgG7gJGT\nMYAtopgo1jbHH0xj+qfTteamk1Zz00CtuemaT62pnZV4TRTBtwe5Idih6nfyXEhuLq0qEg8k0H99\nP09u6HCC2RsXIidiALOUM+XZJcTDGUz/dBqF16zmpgKEtoYQuymG8M4woldH0bO9Z/bsOXK8xgwY\nA3hTTT85jcLrBWy6e5PpUugCCWqrCkRO5cgAVi1Va/u2nqodSJ0+lEb2+dlDqf3r/YjuiiL62dqx\nPeEdYR5KTcvC+NVcifsTcIVcGPjwgOlS6AJxBoycrutThVYVuZdzSB9OI/XT2hOJ2aNZVPNW5/KY\nF5GdEQzcOIDorlq/LV+MSxu0MhxQmqdaqGL82+OI3RSDJ9z1H12OwBsWcrKu+xQrvFWoHUh9ON04\nnLo8Ze3bCrkQGYlg+PdrTyRGr4kisImHUtOFq7+CuKTSPBOPTKA8VUb8Vh491A34TiGn6+gAVk6X\na08kHkzVem4dTM3u23IBPdt7EPt4DNGrowhfGUbPNu7bouZoBDCjVXS3xL4EvHEveq/rNV0K2aAK\n7pkkZ+vIAJZ/NY8D7zyAmRdnGvu2ApsDtX1bn4vWAtflYbh7eCg1tUZ9IGEAa47SZAkTD09g+PeH\n4fLwJqobqCqfGiZH68gAVp4uI/iuIGIfjSH6riiiu6Lw9rG5KZlTj/rs7N0c498ehxYVQ58cMl0K\n2aSKWi8wIqfqyAAWvjyM7d/fbroMoob6QMLGks2R2JtAaGsI4R1h06WQTSqq4BoFORlngIlsUD+C\niDNg9su9ksP0/5tG/JY49wx1kYoqZ8DI0RjAiGzgsQaSMgOY7RJ7EwCA+C18+rGbVDD7viFyIgYw\nIhswgDWHqiJxXwK97+1F4G0B0+WQjcqqDGDkaAxgRDbwWgNJiQHMVumDaeReyrH3VxcqVauN9w2R\nEzGAEdmgEcCq3IZvp8T9CYhfEPtozHQpZLOiKgMYORoDGJENOANmv2qxisQ3ExjYPQDPqo58YJsW\nUVKFz8UhiJyLr34iG/itgaTAGTDbTD46ifJEGUO3s/dXNypWq/BxBowcjAGMyAb1O/kiZ8Bsk9ib\ngDfmRd/1faZLoSYoVKuNGxciJ+Krn8gGfutOPs8ZMFuUTpdw6vunMHjzIM9v7UKqioIqAxg5Gl/9\nRDYIcAnSVslvJaEFHj3UreozxQxg5GR89RPZoB7AcgxgtmgcPXQljx7qRvWZ4iADGDkYX/1ENgi6\na6facQnywuVO5JB6MoX4rTx6qFsxgBExgBHZIsgZMNsk7k8AwqOHutlMpQKAAYycja9+IhuErIGk\nPrDQyqgqxu4dQ+/7ehHYwKOHulX9RqU+c0zkREYDmIh8WUReFJFnRWS/iPSarIdopULWQJJlALsg\nqf+fQv6VPIZu4+b7blZ/n4Q4A0YOZvrV/ziAbap6GYBfALjLcD1EK+JzueARwQyXIC9IYm8CrqAL\nAzcNmC6FmqgewHo4A0YOZjSAqepjqlq2vnwKwDqT9RBdiB6XizNgF6CSryD5YBIDNw3AE+HRQ90s\na92oMICRk5meATvTpwA8utA3ReROETkkIofGx8dbWBbR8oTdbmQYwFZs4nsTKE+VMXQHlx+7Xf1G\nJcwARg7W9NtMEXkCwHyfqHtU9bvWz+wBUAawb6E/R1XvAXAPAIyMjPC8F2o7DGAXJrE3Ad+wD33X\n8uihbpe23icRBjBysKYHMFV9/2LfF5E7APwmgOtUeZAeda6Ix9MYWOj8FMeLmHx0Eus+tw7iZu+v\nbpcu13aeMICRkxndaCEiNwD4EwC/qqozJmshulARtxupcnnpH6Q5kg8koWVF/Hb2/nKCNJcgiYzv\nAfsHABEAj4vIERH5Z8P1EK1Y1O1GijNgKzJ27xjCO8MIb+PRQ06QqlQQcLngZRsKcjCjM2CqepHJ\nv5/ITlGPhzNgK5B9IYvMzzK46O/4ceAUqXIZqzj7RQ7H2w8im6zyeDgDtgKJ+xOAGxj8xKDpUqhF\npstlrPKw1Qg5GwMYkU1Wud2YLpfBZ0mWr1quYuzeMaz+jdXwxX2my6EWma5UGMDI8RjAiGzS6/Gg\nCvBJyPMw9YMpFEeLGLqdvb+c5HSphF4GMHI4BjAim9QHlCnuA1u2xN4E3Kvc6P9gv+lSqIWmymUG\nMHI8BjAim/R5vQCA0wxgy1JOlzH+nXEMfnwQ7gA3ZDvJ6XIZfQxg5HAMYEQ26bcGlMlSyXAlnWH8\n2+OozlQx9DtcfnQSVWUAIwIDGJFt+q0ZsEnOgC1L4v4EgluCiF4TNV0KtVC2UkFJtfF+IXIqBjAi\nm3AGbPnyr+cx9eMpxG+NQ4RHDznJhHWDspoBjByOAYzIJvUB5RQD2JLG7hsDFIjfyqOHnGbCen+s\n5hIkORwDGJFNQm43gi4XA9gSVBWJexPovbYXwc1B0+VQi9UD2ABnwMjhGMCIbDTg9TYGGJpf+kAa\nuZdyiN/G2S8nGq/PgDGAkcMxgBHZKOb1NgYYmt/YfWNwBVyIfSRmuhQyoP7+iDGAkcMxgBHZaNDn\nYwBbRCVfQfKBJAZuGoAnyj1ATjReLMIF8ClIcjwGMCIbxbxeJItF02W0rYnvTaA8VWbvLwcbL5Uw\n4PXCxadfyeEYwIhsNOj1Ilkq8UDuBST2JuAb9qHv2j7TpZAhiWIRcR8PXidiACOyUdznQ65aRYYH\ncs9RTBYx+egk4r8dh7g5++FUyVIJg1x+JGIAI7JT/c5+jMuQcyT2JqBl5fKjw41xBowIAAMYka2G\nrIElwQA2x9h9Y4hcHUHP1h7TpZAhqoqxYrHxPiFyMgYwIhvVB5ZRBrCzZI5lkD2aRfwW9v5ysnSl\ngly1ygBGBAYwIlutYQCb19g3xiAeweAnBk2XQgbV3xdrGMCIGMCI7LTa64VHhAHsDNVSFYn7E1j9\nW6vhG+TA62SjhQIAYI3fb7gSIvMYwIhs5BLBGp8Pb1kDDQGnHz+NUrKEodu5+d7p3rJuTIY5A0bE\nAEZkt7V+P95kAGtI3J+Ap8+D/l/vN10KGVZ/X6zlDBgRAxiR3db6fHiTS5AAgNLpEsb3j2Pw5kG4\nfPy4cbo3CgWE3W5EPTyGioifiEQ2W+f34w3OgAEAkt9KQguKNb+7xnQp1AbeLBSwjrNfRAAYwIhs\nt87vR6ZSwXS5bLoU4xJ7EwhtDSG8I2y6FGoDbzCAETUwgBHZbH0gAAA4mc8brsSs3Ms5pJ5MIX5r\nHMKDlwnAyUIB6xnAiAAwgBHZrj7AnHT4MuTo10cBFxC/jc1XCShVqxgtFhnAiCwMYEQ2qw8wrzs4\ngGlVkbg/gf4P9COwLmC6HGoDbxYKUAAbAnw9EAEMYES2G/b74RHBaw5egpz+r2kUThYQv5WzX1Tz\nmnVDsoEzYEQADAcwEfmiiDwrIkdE5DERGTZZD5Ed3CJY5/fjdQcHsLF7x+AOuzGwe8B0KdQm6jck\nb+MMGBEA8zNgX1bVy1T1CgAPA/hzw/UQ2eJtfj9edWgAK6fLSH4ricFPDMLd4zZdDrWJ+vuBM2BE\nNUYDmKqmzviyB4CaqoXIThsDAccGsFP7T6E6U8XQHTx6iGa9ls9jyOdDwM1QTgQAxtsRi8jdAD4J\nYBrAtYv83J0A7gSADRs2tKY4ohXaGAjgrWIRhWoVfpfpiebWSuxNILAxgOi7o6ZLoTbySj6PTVx+\nJGpo+sggIk+IyLF5fu0GAFXdo6rrAewD8JmF/hxVvUdVR1R1JBaLNbtsoguyKRiEAo7biJ9/PY/T\nT5xG/Db2/qKzMYARna3pM2Cq+v5l/ug+AP8G4AtNLIeoJd5uDTQncjlcHAoZrqZ1xu4dAxQY+hSX\nH2lWqVrFyXwem+N8KpaozvRTkFvO+HI3gBdN1UJkp83BIADghINmwFQVib0J9L63F8GNQdPlUBt5\nLZ9HBbM3JkRkfg/Yl0TkEgBVAK8B+D3D9RDZYo3Ph6DLhZdyOdOltEz6YBq5X+Sw/v+sN10KtZmX\nrRuR+o0JERkOYKr6EZN/P1GziAg2BwJ42UEBbPRro3AFXRj82KDpUqjN1G9ELmIAI2pw1uNZRC10\nUTCIXzokgFVyFSQfTCL2sRg8q0xPrFO7eSmXQ8jlwhqfz3QpRG2DAYyoSbaEQjiRy6Gi3d/ebuKR\nCVRSFR68TfP65cwMLgoG+WQs0RkYwIiaZEswiIIqTjpgI37ivgR8a3zou7bPdCnUhn6Zy2ELlx+J\nzsIARtQkF1sDTrcvQxbeKmDikQkM3T4EcXOGg85WqlZxIp/HFge1YyFaDgYwoiap9//6+cyM4Uqa\nK7EvAVTZ+4vm92o+j7IqLuEMGNFZGMCImmSNz4eI242fd/kMWPKBJCJXRRDawhkOmutF6wbESQ2J\niZaDAYyoSUQEl4RCjQGoG2WOZpA5kuHme1pQfQb4UgYworMwgBE10aWhEI5ns6bLaJrRfxmF+AXx\nWxjAaH7HZ2Yw6PWi3+s1XQpRW2EAI2qid4RCeLNYRLpcNl2K7aqlKhLfTGBg9wC8/RxcaX7HZ2Y4\n+0U0DwYwoibaag08x7twGfL0Y6dRnihz9osWpKo4PjODrT09pkshajsMYERNVB94XujCZcjRr43C\nO+BF/w39pkuhNjVWLGKqXG7ciBDRLAYwoibaHAjAJ4Lnu2wGrJgsYuL7Exi6YwguHz9GaH7PWzce\nnAEjmoufnERN5HG5cGko1BiIusX4t8ehZUX8di4/0sLqNx7v5AwY0RwMYERNtq2nB8e6LIAl9ibQ\ns70H4W1h06VQGzuWzWK1x4M4D+EmmoMBjKjJtvf04GShgOkueRIy81wGqadSGLqDne9pcc9lMtge\nDvMQbqJ5MIARNdn2cG2WqFtmwca+MQbxCoZuZwCjhVVVcSybxXbu/yKaFwMYUZPVB6CjmYzhSi6c\nVhTJB5Pov6Ef3tXs/UULeyWfR7ZaxWUMYETzYgAjarL1fj/6PB482wUB7PQPTqP4VhHxW7n5nhZX\nv+G4PMx9gkTzYQAjajIRwWU9PTjSBQFs9J5RePo9GNg9YLoUanNHMxm4ALyTM2BE82IAI2qBy8Nh\nPJfNoqJqupQVK02VcOp7pxC/LQ6Xnx8dtLijmQy2BIMIud2mSyFqS/wUJWqBK8JhzFSreCmXM13K\nip166BS0qIj/NpcfaWk/y2SwIxIxXQZR22IAI2qBHdY+mGfSacOVrNzo10cRvDiIyFUcVGlxk6US\nXi8UcAX3fxEtiAGMqAW29vTAJ4Kfdeg+sOzxLFJPprDm02vY04mWVL/RuJIBjGhBDGBELeBzubC9\npweHO3QGLLEv6zLAbgAABsBJREFUAbiAodvY+4uWdti60biSS5BEC2IAI2qRkUgEz2Qy0A7biK+q\nSD6QRN91ffDFeaQMLe2ZdBobAwGs9rJXHNFCGMCIWmRnJIKpchkvd9hG/KkfTCH/Sh7xT3LzPS3P\noXQaO7n8SLQoBjCiFhmxlmMOddgy5OjXRuHp8yD20ZjpUqgDTJZKOJHPN17vRDQ/BjCiFtnW0wO/\nSEcFsEq2glPfPYXYx2NwB9jPiZZWf31fFY0aroSovTGAEbWI1+XCjkgET3dQABvfP47qTBXxm7n8\nSMtzIJWCAJwBI1oCAxhRC+2KRPBMOo1ytWq6lGUZvWcUgbcHsOo9q0yXQh3i6XQal4RCWOXxmC6F\nqK21RQATkc+LiIoID5ijrrYrGsVMtYpj2azpUpaUezmH6f+axvCnhyEu9v6ipakqnk6lsIuzX0RL\nMh7ARGQ9gF8D8LrpWoiabZe1L+apVMpwJUtLPpgEAAzePGi4EuoUr+TzGC+VGq9zIlqY8QAG4G8B\n/AmAzmqORLQCmwIBxLxeHJ+ZMV3Kkk7/52mses8qBDYETJdCHeKFbBYC4BoGMKIlicmmkCKyG8D7\nVPWPRORVACOqemqBn70TwJ3Wl9sAHGtNlR1jAMC8187BeE3mx+syF6/JXLwm8+N1mYvX5GxvU9Ul\n+/Y0PYCJyBMA5ju/ZA+APwPwa6o6vVQAO+fPPKSqI/ZW2tl4TebiNZkfr8tcvCZz8ZrMj9dlLl6T\nlWn6Yyqq+v75fl9EtgPYBOCodbjvOgDPiMjVqjrW7LqIiIiITDH2nLCqPgegsbv3fGbAiIiIiDpZ\nO2zCX4l7TBfQhnhN5uI1mR+vy1y8JnPxmsyP12UuXpMVMLoJn4iIiMiJOnUGjIiIiKhjMYARERER\ntVjHBzAeYzRLRL4oIs+KyBEReUxEhk3XZJqIfFlEXrSuy34R6TVdk2ki8jEReV5EqiLi6EfHReQG\nEfm5iLwkIn9qup52ICJfF5GkiLDXokVE1ovID0XkBeu980emazJNRAIickBEjlrX5C9M19RpOjqA\n8RijOb6sqpep6hUAHgbw56YLagOPA9imqpcB+AWAuwzX0w6OAbgJwE9MF2KSiLgB/COAXwewFcDN\nIrLVbFVt4RsAbjBdRJspA/i8qm4FcA2AP+BrBQXUGqlfDuAKADeIyDWGa+ooHR3AwGOMzqKqZx4w\n2ANeF6jqY6patr58CrV+c46mqsdV9eem62gDVwN4SVVPqGoRwIMAdhuuyThV/QmASdN1tBNVHVXV\nZ6z/TgM4DmCt2arM0pqM9aXX+uX4Med8dGwAs44xelNVj5qupZ2IyN0ichLALeAM2Lk+BeBR00VQ\n21gL4OQZX78Bhw+qtDQR2QhgB4CnzVZinoi4ReQIgCSAx1XV8dfkfBhrxLocyznGqLUVmbfYNVHV\n76rqHgB7ROQuAJ8B8IWWFmjAUtfE+pk9qC0j7GtlbaYs55oQ0fkRkTCA7wD43DkrDo6kqhUAV1h7\na/eLyDZV5d7BZWrrAMZjjOZa6JrMYx+Af4MDAthS10RE7gDwmwCuU4c0vjuP14mTvQlg/Rlfr7N+\nj2gOEfGiFr72qepDputpJ6o6JSI/RG3vIAPYMnXkEqSqPqeqg6q6UVU3orZ0cGW3h6+liMiWM77c\nDeBFU7W0CxG5AbV9gh9S1RnT9VBbOQhgi4hsEhEfgE8A+J7hmqgNSe1O/2sAjqvqV0zX0w5EJFZ/\nqlxEggCuB8ec89KRAYwW9CUROSYiz6K2POv4R6UB/AOACIDHrfYc/2y6INNE5EYReQPAuwA8IiL/\nYbomE6yHMz4D4D9Q21T9r6r6vNmqzBORbwL4KYBLROQNEfld0zW1gV8BcBuA91mfI0dE5DdMF2XY\nGgA/tMabg6jtAXvYcE0dhUcREREREbUYZ8CIiIiIWowBjIiIiKjFGMCIiIiIWowBjIiIiKjFGMCI\niIiIWowBjIiIiKjFGMCIiIiIWowBjIgcRUR+KCLXW//9VyLy96ZrIiLnaeuzIImImuALAP5SRAYB\n7ADwIcP1EJEDsRM+ETmOiPwYQBjAe1U1LSKbAewBsEpVP2q2OiJyAi5BEpGjiMh21M6xK6pqGgBU\n9YSq8sxDImoZBjAicgwRWQNgH4DdADIicoPhkojIoRjAiMgRRCQE4CEAn1fV4wC+iNp+MCKiluMe\nMCJyPBFZDeBuANcD+BdV/WvDJRFRl2MAIyIiImoxLkESERERtRgDGBEREVGLMYARERERtRgDGBER\nEVGLMYARERERtRgDGBEREVGLMYARERERtRgDGBEREVGL/TeAw/mRSUG8QQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(Xbn, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')\n", + "plot_decision_boundary_bayes(fig, X_mean, X_std, xmin=-4.0, xmax=4.0, ymin=-4.0, ymax=4.0)\n", + "plot_decision_boundary(fig, theta, Xbnp, xmin=-4.0, xmax=4.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Naiwny klasyfikator Bayesa nie działa, jeżeli dane nie różnią się średnią i odchyleniem standardowym" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w3/zumz3a.pdf b/w3/zumz3a.pdf new file mode 100644 index 0000000..56d6154 Binary files /dev/null and b/w3/zumz3a.pdf differ diff --git a/w3/zumz3b.ipynb b/w3/zumz3b.ipynb new file mode 100644 index 0000000..85b1abc --- /dev/null +++ b/w3/zumz3b.ipynb @@ -0,0 +1,847 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe UMZ 2017/2018\n", + "# 3. Naiwny klasyfikator bayesowski, drzewa decyzyjne\n", + "### Część 2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 3.2. Drzewa decyzyjne" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Drzewa decyzyjne – przykład" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przydatne importy\n", + "\n", + "import ipywidgets as widgets\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DayOutlookHumidityWindPlay
01SunnyHighWeakNo
12SunnyHighStrongNo
23OvercastHighWeakYes
34RainHighWeakYes
45RainNormalWeakYes
56RainNormalStrongNo
67OvercastNormalStrongYes
78SunnyHighWeakNo
89SunnyNormalWeakYes
910RainNormalWeakYes
1011SunnyNormalStrongYes
1112OvercastHighStrongYes
1213OvercastNormalWeakYes
1314RainHighStrongNo
\n", + "
" + ], + "text/plain": [ + " Day Outlook Humidity Wind Play\n", + "0 1 Sunny High Weak No\n", + "1 2 Sunny High Strong No\n", + "2 3 Overcast High Weak Yes\n", + "3 4 Rain High Weak Yes\n", + "4 5 Rain Normal Weak Yes\n", + "5 6 Rain Normal Strong No\n", + "6 7 Overcast Normal Strong Yes\n", + "7 8 Sunny High Weak No\n", + "8 9 Sunny Normal Weak Yes\n", + "9 10 Rain Normal Weak Yes\n", + "10 11 Sunny Normal Strong Yes\n", + "11 12 Overcast High Strong Yes\n", + "12 13 Overcast Normal Weak Yes\n", + "13 14 Rain High Strong No" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alldata = pandas.read_csv('tennis.tsv', sep='\\t')\n", + "alldata" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Humidity': {'High', 'Normal'},\n", + " 'Outlook': {'Overcast', 'Rain', 'Sunny'},\n", + " 'Wind': {'Strong', 'Weak'}}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Dane jako lista słowników\n", + "data = alldata.T.to_dict().values()\n", + "features = ['Outlook', 'Humidity', 'Wind']\n", + "\n", + "# Możliwe wartości w poszczególnych kolumnach\n", + "values = {feature: set(row[feature] for row in data)\n", + " for feature in features}\n", + "values" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Czy John zagra w tenisa, jeżeli będzie padać, przy wysokiej wilgotności i silnym wietrze?\n", + "* Algorytm drzew decyzyjnych spróbuje _zrozumieć_ „taktykę” Johna.\n", + "* Wykorzystamy metodę „dziel i zwyciężaj”." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Podziel dane\n", + "def split(features, data):\n", + " values = {feature: list(set(row[feature]\n", + " for row in data))\n", + " for feature in features}\n", + " if not features:\n", + " return data\n", + " return {val: split(features[1:],\n", + " [row for row in data\n", + " if row[features[0]] == val])\n", + " for val in values[features[0]]}" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\tOutlook\tHumid\tWind\tPlay\n", + "Day 3:\tOvercast\tHigh\tWeak\tYes\n", + "Day 7:\tOvercast\tNormal\tStrong\tYes\n", + "Day 12:\tOvercast\tHigh\tStrong\tYes\n", + "Day 13:\tOvercast\tNormal\tWeak\tYes\n", + "\n", + "\tOutlook\tHumid\tWind\tPlay\n", + "Day 1:\tSunny\tHigh\tWeak\tNo\n", + "Day 2:\tSunny\tHigh\tStrong\tNo\n", + "Day 8:\tSunny\tHigh\tWeak\tNo\n", + "Day 9:\tSunny\tNormal\tWeak\tYes\n", + "Day 11:\tSunny\tNormal\tStrong\tYes\n", + "\n", + "\tOutlook\tHumid\tWind\tPlay\n", + "Day 4:\tRain\tHigh\tWeak\tYes\n", + "Day 5:\tRain\tNormal\tWeak\tYes\n", + "Day 6:\tRain\tNormal\tStrong\tNo\n", + "Day 10:\tRain\tNormal\tWeak\tYes\n", + "Day 14:\tRain\tHigh\tStrong\tNo\n" + ] + } + ], + "source": [ + "split_data = split(['Outlook'], data)\n", + "\n", + "for outlook in values['Outlook']:\n", + " print('\\n\\tOutlook\\tHumid\\tWind\\tPlay')\n", + " for row in split_data[outlook]:\n", + " print('Day {Day}:\\t{Outlook}\\t{Humidity}\\t{Wind}\\t{Play}'\n", + " .format(**row))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Obserwacja: John lubi grać, gdy jest pochmurnie.\n", + "\n", + "W pozostałych przypadkach podzielmy dane ponownie:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\tOutlook\tHumid\tWind\tPlay\n", + "Day 1:\tSunny\tHigh\tWeak\tNo\n", + "Day 2:\tSunny\tHigh\tStrong\tNo\n", + "Day 8:\tSunny\tHigh\tWeak\tNo\n", + "\n", + "\tOutlook\tHumid\tWind\tPlay\n", + "Day 9:\tSunny\tNormal\tWeak\tYes\n", + "Day 11:\tSunny\tNormal\tStrong\tYes\n" + ] + } + ], + "source": [ + "split_data_sunny = split(['Outlook', 'Humidity'], data)\n", + "\n", + "for humidity in values['Humidity']:\n", + " print('\\n\\tOutlook\\tHumid\\tWind\\tPlay')\n", + " for row in split_data_sunny['Sunny'][humidity]:\n", + " print('Day {Day}:\\t{Outlook}\\t{Humidity}\\t{Wind}\\t{Play}'\n", + " .format(**row))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\tOutlook\tHumid\tWind\tPlay\n", + "Day 6:\tRain\tNormal\tStrong\tNo\n", + "Day 14:\tRain\tHigh\tStrong\tNo\n", + "\n", + "\tOutlook\tHumid\tWind\tPlay\n", + "Day 4:\tRain\tHigh\tWeak\tYes\n", + "Day 5:\tRain\tNormal\tWeak\tYes\n", + "Day 10:\tRain\tNormal\tWeak\tYes\n" + ] + } + ], + "source": [ + "split_data_rain = split(['Outlook', 'Wind'], data)\n", + "\n", + "for wind in values['Wind']:\n", + " print('\\n\\tOutlook\\tHumid\\tWind\\tPlay')\n", + " for row in split_data_rain['Rain'][wind]:\n", + " print('Day {Day}:\\t{Outlook}\\t{Humidity}\\t{Wind}\\t{Play}'\n", + " .format(**row))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Outlook=\n", + " * Overcast\n", + " * → Playing\n", + " * Sunny\n", + " * Humidity=\n", + " * High\n", + " * → Not playing\n", + " * Normal\n", + " * → Playing\n", + " * Rain\n", + " * Wind=\n", + " * Weak\n", + " * → Playing\n", + " * Strong\n", + " * → Not playing" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* (9/5)\n", + " * Outlook=Overcast (4/0)\n", + " * YES\n", + " * Outlook=Sunny (2/3)\n", + " * Humidity=High (0/3)\n", + " * NO\n", + " * Humidity=Normal (2/0)\n", + " * YES\n", + " * Outlook=Rain (3/2)\n", + " * Wind=Weak (3/0)\n", + " * YES\n", + " * Wind=Strong (0/2)\n", + " * NO" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Algorytm ID3\n", + "\n", + "* podziel(węzeł, zbiór przykładów):\n", + " 1. A ← najlepszy atrybut do podziału zbioru przykładów\n", + " 1. Dla każdej wartości atrybutu A, utwórz nowy węzeł potomny\n", + " 1. Podziel zbiór przykładów na podzbiory według węzłów potomnych\n", + " 1. Dla każdego węzła potomnego i podzbioru:\n", + " * jeżeli podzbiór jest jednolity: zakończ\n", + " * w przeciwnym przypadku: podziel(węzeł potomny, podzbiór)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Jak wybrać „najlepszy atrybut”?\n", + "* powinien zawierać jednolity podzbiór\n", + "* albo przynajmniej „w miarę jednolity”\n", + "\n", + "Skąd wziąć miarę „jednolitości” podzbioru?\n", + "* miara powinna być symetryczna (4/0 vs. 0/4)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Entropia\n", + "\n", + "$$ H(S) = - p_{(+)} \\log p_{(+)} - p_{(-)} \\log p_{(-)} $$\n", + "\n", + "* $S$ – podzbiór przykładów\n", + "* $p_{(+)}$, $p_{(-)}$ – procent pozytywnych/negatywnych przykładów w $S$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Entropię można traktować jako „liczbę bitów” potrzebną do sprawdzenia, czy losowo wybrany $x \\in S$ jest pozytywnym, czy negatywnym przykładem." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Entropia – przykład\n", + "\n", + "* (3 TAK / 3 NIE):\n", + "$$ H(S) = -\\frac{3}{6} \\log\\frac{3}{6} - \\frac{3}{6} \\log\\frac{3}{6} = 1 \\mbox{ bit} $$\n", + "* (4 TAK / 0 NIE):\n", + "$$ H(S) = -\\frac{4}{4} \\log\\frac{4}{4} - \\frac{0}{4} \\log\\frac{0}{4} = 0 \\mbox{ bitów} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### _Information gain_\n", + "\n", + "_Information gain_ – różnica między entropią przed podziałem a entropią po podziale (podczas podziału entropia zmienia się):\n", + "\n", + "$$ \\mathop{\\rm Gain}(S,A) = H(S) - \\sum_{V \\in \\mathop{\\rm Values(A)}} \\frac{|S_V|}{|S|} H(S_V) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### _Information gain_ – przykład\n", + "\n", + "$$ \\mathop{\\rm Gain}(S, Wind) = H(S) - \\frac{8}{14} H(S_{Wind={\\rm Weak}}) - \\frac{6}{14} H(S_{Wind={\\rm Strong}}) = \\\\\n", + "= 0.94 - \\frac{8}{14} \\cdot 0.81 - \\frac{6}{14} \\cdot 1.0 = 0.049 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* _Information gain_ jest całkiem sensowną heurystyką wskazującą, który atrybut jest najlepszy do dokonania podziału.\n", + "* **Ale**: _information gain_ przeszacowuje użyteczność atrybutów, które mają dużo różnych wartości.\n", + "* **Przykład**: gdybyśmy wybrali jako atrybut _datę_, otrzymalibyśmy bardzo duży _information gain_, ponieważ każdy podzbiór byłby jednolity, a nie byłoby to ani trochę użyteczne!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### _Information gain ratio_\n", + "\n", + "$$ \\mathop{\\rm GainRatio}(S, A) = \\frac{ \\mathop{\\rm Gain}(S, A) }{ -\\sum_{V \\in \\mathop{\\rm Values}(A)} \\frac{|S_V|}{|S|} \\log\\frac{|S_V|}{|S|} } $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* _Information gain ratio_ może być lepszym wyborem heurystyki wskazującej najużyteczniejszy atrybut, jeżeli atrybuty mają wiele różnych wartości." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Drzewa decyzyjne a formuły logiczne\n", + "\n", + "Drzewo decyzyjne można pzekształcić na formułę logiczną w postaci normalnej (DNF):\n", + "\n", + "$$ Play={\\rm True} \\Leftrightarrow \\left( Outlook={\\rm Overcast} \\vee \\\\\n", + "( Outlook={\\rm Rain} \\wedge Wind={\\rm Weak} ) \\vee \\\\\n", + "( Outlook={\\rm Sunny} \\wedge Humidity={\\rm Normal} ) \\right) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Klasyfikacja wieloklasowa przy użyciu drzew decyzyjnych\n", + "\n", + "Algorytm przebiega analogicznie, zmienia się jedynie wzór na entropię:\n", + "\n", + "$$ H(S) = -\\sum_{y \\in Y} p_{(y)} \\log p_{(y)} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Skuteczność algorytmu ID3\n", + "\n", + "* Przyjmujemy, że wśród danych uczących nie ma duplikatów (tj. przykładów, które mają jednakowe cechy $x$, a mimo to należą do różnych klas $y$).\n", + "* Wówczas algorytm drzew decyzyjnych zawsze znajdzie rozwiązanie, ponieważ w ostateczności będziemy mieli węzły 1-elementowe na liściach drzewa." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Nadmierne dopasowanie drzew decyzyjnych\n", + "\n", + "* Zauważmy, że w miarę postępowania algorytmu dokładność przewidywań drzewa (_accuracy_) liczona na zbiorze uczącym dąży do 100% (i w ostateczności osiąga 100%, nawet kosztem jednoelementowych liści).\n", + "* Takie rozwiązanie niekoniecznie jest optymalne. Dokładność na zbiorze testowym może być dużo niższa, a to oznacza nadmierne dopasowanie." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Jak zapobiec nadmiernemu dopasowaniu?\n", + "\n", + "Aby zapobiegać nadmiernemu dopasowaniu drzew decyzyjnych, należy je przycinać (_pruning_)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Można tego dokonywać na kilka sposobów:\n", + "* Można zatrzymywać procedurę podziału w pewnym momencie (np. kiedy podzbiory staja się zbyt małe).\n", + "* Można najpierw wykonać algorytm ID3 w całości, a następnie przyciąć drzewo, np. kierując się wynikami uzyskanymi na zbiorze walidacyjnym.\n", + "* Algorytm _sub-tree replacement pruning_ (algorytm zachłanny)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### _Sub-tree replacement pruning_\n", + "\n", + "1. Dla każdego węzła:\n", + " 1. Udaj, że usuwasz węzeł wraz z całym zaczepionym w nim poddrzewem.\n", + " 1. Dokonaj ewaluacji na zbiorze walidacyjnym.\n", + "1. Usuń węzeł, którego usunięcie daje największą poprawę wyniku.\n", + "1. Powtarzaj, dopóki usuwanie węzłów poprawia wynik." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Zalety drzew decyzyjnych\n", + "\n", + "* Zasadę działania drzew decyzyjnych łatwo zrozumieć człowiekowi.\n", + "* Atrybuty, które nie wpływają na wynik, mają _gain_ równy 0, zatem są od razu pomijane przez algorytm.\n", + "* Po zbudowaniu, drzewo decyzyjne jest bardzo szybkim klasyfikatorem (złożoność $O(d)$, gdzie $d$ jest głębokościa dzewa)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Wady drzew decyzyjnych\n", + "\n", + "* ID3 jest algorytmem zachłannym – może nie wskazać najlepszego drzewa.\n", + "* Nie da się otrzymać granic klas (_decision boundaries_), które nie są równoległe do osi wykresu." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 3.3. Lasy losowe" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm lasów losowych – idea\n", + "\n", + "* Algorytm lasów losowych jest rozwinięciem algorytmu ID3.\n", + "* Jest to bardzo wydajny algorytm klasyfikacji.\n", + "* Zamiast jednego, będziemy budować $k$ drzew." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm lasów losowych – budowa lasu\n", + "\n", + "1. Weź losowy podzbiór $S_r$ zbioru uczącego.\n", + "1. Zbuduj pełne (tj. bez przycinania) drzewo decyzyjne dla $S_r$, używając algorytmu ID3 z następującymi modyfikacjami:\n", + " * podczas podziału używaj losowego $d$-elementowego podzbioru atrybutów,\n", + " * obliczaj _gain_ względem $S_r$.\n", + "1. Powyższą procedurę powtórz $k$-krotnie, otrzymując $k$ drzew ($T_1, T_2, \\ldots, T_k$)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm lasów losowych – predykcja\n", + "\n", + "1. Sklasyfikuj $x$ według każdego z drzew $T_1, T_2, \\ldots, T_k$ z osobna.\n", + "1. Użyj głosowania większościowego: przypisz klasę przewidzianą przez najwięcej drzew." + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w3/zumz3b.pdf b/w3/zumz3b.pdf new file mode 100644 index 0000000..0789320 Binary files /dev/null and b/w3/zumz3b.pdf differ diff --git a/w4/classification.tsv b/w4/classification.tsv new file mode 100644 index 0000000..7c7d768 --- /dev/null +++ b/w4/classification.tsv @@ -0,0 +1,20 @@ +0 -0.8014509894297421 -0.5994635333915026 +0 -0.7706966545879539 0.6368117894533625 +0 -0.27709533263047414 0.8256752096021349 +0 0.9930555307918127 0.36630467592076577 +1 -0.16225248935963799 0.4956311492381327 +0 0.934855703919385 0.8549023876664064 +0 -0.5145933151394193 -0.804772931556422 +1 0.10024139618609662 0.018730576213300765 +0 0.9713755569949907 0.16659909394686068 +1 -0.07322231752678521 -0.18763566969904533 +0 -0.5702785062714137 0.3522449667057965 +1 0.1848842019744028 0.4173729058647151 +0 0.24479522096847361 -0.7089634989586504 +0 0.6236644548417194 -0.1156611626471038 +0 -0.10592913601169007 -0.9980825893807068 +0 -0.23607206404847436 -0.7428335400803034 +0 -0.11951845657345062 -0.8219825834866892 +0 0.04590771234351232 -0.7564447785519108 +1 0.7967711966832445 -0.4352501064041614 +1 0.8053812216632301 0.1203107620499666 diff --git a/w4/create_polynomial_logistic.py b/w4/create_polynomial_logistic.py new file mode 100644 index 0000000..ab27d19 --- /dev/null +++ b/w4/create_polynomial_logistic.py @@ -0,0 +1,26 @@ +#!/usr/bin/python3 +# -*- coding:utf-8 -*- + + +import csv +import math +import random +import sys + + +def create_polynomial_logistic_data(filename): + with open(filename, 'w') as f: + writer = csv.writer( + f, delimiter=('\t' if filename.endswith('.tsv') else ',')) + for i in range(50): + x = random.uniform(-1.0, 1.0) + y = random.uniform(-1.0, 1.0) + p = math.sqrt(x*x + y*y) + for i in range(1): + p = -2 * p**3 + 3 * p**2 + v = 1 if random.random() > p else 0 + writer.writerow([v, x, y]) + + +if __name__ == '__main__': + create_polynomial_logistic_data(sys.argv[1]) diff --git a/w4/data.tsv b/w4/data.tsv new file mode 100644 index 0000000..c50b5e7 --- /dev/null +++ b/w4/data.tsv @@ -0,0 +1,50 @@ +0 -0.9410633308036449 0.46518252113944425 +1 0.4700636553691919 -0.3970321538875541 +1 -0.01609299859794966 0.23161453968628254 +0 -0.9966154155058933 0.06419313152355421 +0 0.8000009607150127 0.44133107977776875 +0 0.389227379480078 -0.8415416694237676 +0 -0.7786281038890375 0.2833716839963434 +1 -0.10150562150521569 -0.02968754639839366 +1 -0.14995353486391494 0.30921523116923866 +0 0.3150219624148183 0.4186143523577863 +0 -0.5542734031872467 0.9291684810885719 +0 -0.44750469543445215 -0.8240387195698262 +0 -0.7875312310670415 0.27475695030524894 +0 0.20470154428730747 -0.8122722630746713 +0 0.07472783793361693 0.8936381678688297 +0 -0.6016285994197443 -0.9783927694535444 +0 0.4235345463350013 -0.23977977886239832 +0 0.256790496684171 -0.5587059709121811 +0 -0.2172656054288027 0.8015306542483966 +0 0.2009238354275602 0.9376873763906164 +0 -0.8760038215191506 0.015194717659306356 +0 -0.1512141038160364 -0.9575528046526418 +0 -0.6378974241766098 0.35900665963616696 +0 -0.6219617077011876 0.04019896541474166 +0 -0.2533778634666939 -0.8576798720089458 +0 -0.9398823073223508 0.806594859009744 +0 -0.24161324930138606 -0.6982896600554984 +0 -0.967724402993285 0.15651783268628372 +0 0.9587968810951801 -0.3382309645563397 +1 0.18040441263417084 -0.026706542719935777 +0 -0.2403226372749332 -0.2694487472698215 +0 -0.49494412803453747 -0.6833825934742561 +0 -0.32266963833818574 0.6299706350061482 +0 -0.716450532167108 0.7792499086149187 +1 -0.5661825812948427 -0.3045016769669948 +0 -0.9014952263862088 0.19697267011506714 +1 0.3192734822128551 -0.3145295901019187 +1 -0.4386590899062277 0.6119229005694005 +0 -0.6306933372350818 0.4721301354446683 +0 0.3302936606411402 -0.3047093070118343 +1 -0.38049655790356285 -0.609474130471132 +1 0.32069301644263426 0.17266197471996692 +1 0.8349752241994568 0.4408717276862013 +0 -0.26741723386938343 -0.4919294757003996 +0 -0.7786699335922747 -0.47305795528791905 +0 0.723410510517891 -0.010095862311693793 +0 0.0902826080483603 -0.6805262097228113 +0 -0.9286972617786873 0.7200430642275493 +0 -0.0623197964184079 0.8187639325432745 +0 -0.20572090815735944 -0.6655000969777327 diff --git a/w4/iris.csv b/w4/iris.csv new file mode 100644 index 0000000..2ee7967 --- /dev/null +++ b/w4/iris.csv @@ -0,0 +1,151 @@ +łod.dł.,łod.sz.,pł.dł.,pł.sz.,Gatunek +5.2,3.4,1.4,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +6.7,3.1,5.6,2.4,Iris-virginica +6.5,3.2,5.1,2.0,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +6.0,2.7,5.1,1.6,Iris-versicolor +5.7,2.6,3.5,1.0,Iris-versicolor +5.0,2.0,3.5,1.0,Iris-versicolor +5.2,3.5,1.5,0.2,Iris-setosa +4.8,3.0,1.4,0.1,Iris-setosa +6.7,3.3,5.7,2.5,Iris-virginica +6.1,3.0,4.9,1.8,Iris-virginica +4.8,3.4,1.9,0.2,Iris-setosa +5.8,2.8,5.1,2.4,Iris-virginica +4.4,2.9,1.4,0.2,Iris-setosa +7.2,3.0,5.8,1.6,Iris-virginica +4.4,3.2,1.3,0.2,Iris-setosa +5.0,3.5,1.3,0.3,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +7.7,2.8,6.7,2.0,Iris-virginica +5.0,3.6,1.4,0.2,Iris-setosa +6.2,2.8,4.8,1.8,Iris-virginica +6.0,2.2,5.0,1.5,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +5.0,3.2,1.2,0.2,Iris-setosa +6.7,3.1,4.4,1.4,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +5.1,3.4,1.5,0.2,Iris-setosa +6.0,2.9,4.5,1.5,Iris-versicolor +5.3,3.7,1.5,0.2,Iris-setosa +5.6,2.9,3.6,1.3,Iris-versicolor +5.5,2.5,4.0,1.3,Iris-versicolor +5.5,2.4,3.7,1.0,Iris-versicolor +4.4,3.0,1.3,0.2,Iris-setosa +6.6,3.0,4.4,1.4,Iris-versicolor +7.9,3.8,6.4,2.0,Iris-virginica +5.7,2.8,4.1,1.3,Iris-versicolor +5.8,2.7,4.1,1.0,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +5.1,3.8,1.9,0.4,Iris-setosa +5.0,3.4,1.6,0.4,Iris-setosa +5.5,2.6,4.4,1.2,Iris-versicolor +5.0,3.4,1.5,0.2,Iris-setosa +6.8,2.8,4.8,1.4,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.1,3.8,1.6,0.2,Iris-setosa +6.4,3.2,5.3,2.3,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +5.7,2.8,4.5,1.3,Iris-versicolor +5.8,2.6,4.0,1.2,Iris-versicolor +4.7,3.2,1.6,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +6.3,3.4,5.6,2.4,Iris-virginica +5.1,3.8,1.5,0.3,Iris-setosa +7.0,3.2,4.7,1.4,Iris-versicolor +5.4,3.0,4.5,1.5,Iris-versicolor +6.0,2.2,4.0,1.0,Iris-versicolor +6.0,3.0,4.8,1.8,Iris-virginica +6.2,2.9,4.3,1.3,Iris-versicolor +5.6,3.0,4.1,1.3,Iris-versicolor +4.9,3.0,1.4,0.2,Iris-setosa +5.0,2.3,3.3,1.0,Iris-versicolor +6.3,2.5,5.0,1.9,Iris-virginica +4.8,3.4,1.6,0.2,Iris-setosa +5.9,3.0,4.2,1.5,Iris-versicolor +4.6,3.6,1.0,0.2,Iris-setosa +5.0,3.5,1.6,0.6,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.0,3.0,1.6,0.2,Iris-setosa +5.6,3.0,4.5,1.5,Iris-versicolor +6.3,2.8,5.1,1.5,Iris-virginica +5.2,2.7,3.9,1.4,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +7.7,3.0,6.1,2.3,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +6.4,2.9,4.3,1.3,Iris-versicolor +6.5,3.0,5.5,1.8,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +4.7,3.2,1.3,0.2,Iris-setosa +5.5,2.4,3.8,1.1,Iris-versicolor +5.4,3.4,1.5,0.4,Iris-setosa +7.2,3.6,6.1,2.5,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +6.1,3.0,4.6,1.4,Iris-versicolor +6.0,3.4,4.5,1.6,Iris-versicolor +6.3,2.7,4.9,1.8,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.5,3.5,1.3,0.2,Iris-setosa +6.7,3.0,5.2,2.3,Iris-virginica +4.6,3.1,1.5,0.2,Iris-setosa +5.8,2.7,5.1,1.9,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +4.8,3.0,1.4,0.3,Iris-setosa +7.1,3.0,5.9,2.1,Iris-virginica +5.9,3.0,5.1,1.8,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +5.4,3.9,1.7,0.4,Iris-setosa +6.4,3.2,4.5,1.5,Iris-versicolor +5.1,2.5,3.0,1.1,Iris-versicolor +6.3,2.9,5.6,1.8,Iris-virginica +7.2,3.2,6.0,1.8,Iris-virginica +5.4,3.4,1.7,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +6.1,2.8,4.0,1.3,Iris-versicolor +7.7,3.8,6.7,2.2,Iris-virginica +5.7,2.9,4.2,1.3,Iris-versicolor +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +6.5,3.0,5.2,2.0,Iris-virginica +4.9,3.1,1.5,0.1,Iris-setosa +6.3,2.3,4.4,1.3,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.7,3.8,1.7,0.3,Iris-setosa +6.4,2.8,5.6,2.1,Iris-virginica +4.9,2.4,3.3,1.0,Iris-versicolor +5.7,2.5,5.0,2.0,Iris-virginica +5.5,4.2,1.4,0.2,Iris-setosa +6.7,3.0,5.0,1.7,Iris-versicolor +5.0,3.3,1.4,0.2,Iris-setosa +6.3,2.5,4.9,1.5,Iris-versicolor +5.4,3.7,1.5,0.2,Iris-setosa +7.7,2.6,6.9,2.3,Iris-virginica +5.7,3.0,4.2,1.2,Iris-versicolor +7.6,3.0,6.6,2.1,Iris-virginica +4.8,3.1,1.6,0.2,Iris-setosa +5.6,2.8,4.9,2.0,Iris-virginica +4.5,2.3,1.3,0.3,Iris-setosa +6.8,3.2,5.9,2.3,Iris-virginica +6.3,3.3,6.0,2.5,Iris-virginica +4.6,3.4,1.4,0.3,Iris-setosa +5.8,2.7,3.9,1.2,Iris-versicolor +5.5,2.3,4.0,1.3,Iris-versicolor +5.2,4.1,1.5,0.1,Iris-setosa +6.6,2.9,4.6,1.3,Iris-versicolor +4.3,3.0,1.1,0.1,Iris-setosa +6.8,3.0,5.5,2.1,Iris-virginica +5.8,4.0,1.2,0.2,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +6.5,3.0,5.8,2.2,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica diff --git a/w4/zumz184.zip b/w4/zumz184.zip new file mode 100644 index 0000000..15712c5 Binary files /dev/null and b/w4/zumz184.zip differ diff --git a/w4/zumz4a.ipynb b/w4/zumz4a.ipynb new file mode 100644 index 0000000..fa5fc28 --- /dev/null +++ b/w4/zumz4a.ipynb @@ -0,0 +1,816 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe UMZ 2017/2018\n", + "# 4. Algorytm KNN, uczenie nienadzorowane\n", + "### Część 1" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 4.1. Algorytm $k$ najbliższych sąsiadów" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### KNN – intuicja" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Do której kategorii powinien należeć punkt oznaczony gwiazdką?" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przydatne importy\n", + "\n", + "import ipywidgets as widgets\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych (gatunki kosaćców)\n", + "\n", + "data_iris_setosa = (\n", + " pandas.read_csv('iris.csv', usecols=['pł.dł.', 'pł.sz.', 'Gatunek'])\n", + " .apply(lambda x: [x[0], x[1], 1 if x[2] == 'Iris-setosa' else 0], axis=1))\n", + "data_iris_setosa.columns = ['dł. płatka', 'szer. płatka', 'Iris setosa?']\n", + "\n", + "m, n_plus_1 = data_iris_setosa.values.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data_iris_setosa.values[:, 0:n].reshape(m, n)\n", + "\n", + "X = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "Y = np.matrix(data_iris_setosa.values[:, 2]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres danych (wersja macierzowa)\n", + "def plot_data_for_classification(X, Y, xlabel, ylabel): \n", + " fig = plt.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " X = X.tolist()\n", + " Y = Y.tolist()\n", + " X1n = [x[1] for x, y in zip(X, Y) if y[0] == 0]\n", + " X1p = [x[1] for x, y in zip(X, Y) if y[0] == 1]\n", + " X2n = [x[2] for x, y in zip(X, Y) if y[0] == 0]\n", + " X2p = [x[2] for x, y in zip(X, Y) if y[0] == 1]\n", + " ax.scatter(X1n, X2n, c='r', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1p, X2p, c='g', marker='o', s=50, label='Dane')\n", + " \n", + " ax.set_xlabel(xlabel)\n", + " ax.set_ylabel(ylabel)\n", + " ax.margins(.05, .05)\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def plot_new_example(fig, x, y):\n", + " ax = fig.axes[0]\n", + " ax.scatter([x], [y], c='k', marker='*', s=100, label='?')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_new_example(fig, 2.8, 0.9)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Wydaje się sensownym przyjąć, że punkt oznaczony gwiazdką powinien być czerwony, ponieważ sąsiednie punkty są czerwone. Najbliższe czerwone punkty są położone bliżej niż najbliższe zielone." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Algorytm oparty na tej intuicji nazywamy algorytmem **$k$ najbliższych sąsiadów** (_$k$ nearest neighbors_, KNN)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Idea (KNN dla $k = 1$):\n", + " 1. Dla nowego przykładu $x'$ znajdź najbliższy przykład $x$ ze zbioru uczącego.\n", + " 1. Jego klasa $y$ to szukana klasa $y'$." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "from scipy.spatial import Voronoi, voronoi_plot_2d\n", + "\n", + "def plot_voronoi(fig, points):\n", + " ax = fig.axes[0]\n", + " vor = Voronoi(points)\n", + " ax.scatter(vor.vertices[:, 0], vor.vertices[:, 1], s=1)\n", + " \n", + " for simplex in vor.ridge_vertices:\n", + " simplex = np.asarray(simplex)\n", + " if np.all(simplex >= 0):\n", + " ax.plot(vor.vertices[simplex, 0], vor.vertices[simplex, 1],\n", + " color='orange', linewidth=1)\n", + " \n", + " xmin, ymin = points.min(axis=0).tolist()[0]\n", + " xmax, ymax = points.max(axis=0).tolist()[0]\n", + " pad = 0.1\n", + " ax.set_xlim(xmin - pad, xmax + pad)\n", + " ax.set_ylim(ymin - pad, ymax + pad)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAl8AAAFnCAYAAACYfixAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsnXd4VGX2x783jYQQSiCFEnrvJfQW\nFBRQAVEsWFFX1NW1Lv5wXdsWVtey1hUruoLSQgfpHSkJBAg9JJBQQnpIT2bm/P44jJkkU+69c+fe\nGXg/zzNPMnPf+77nvZnJPfO+55yvREQQCAQCgUAgEOiDn9EGCAQCgUAgENxICOdLIBAIBAKBQEeE\n8yUQCAQCgUCgI8L5EggEAoFAINAR4XwJBAKBQCAQ6IhwvgQCgUAgEAh0RDhfAoFAIBAIBDoinC+B\nQCAQCAQCHRHOl0AgEAgEAoGOBBhtgFKaNWtGbdu2NdoM76PgKBDWEfAPMdoSgSMKjgJhnQD/YKMt\nkU/pBUDyB0Ka6ztuZT5QkQtIEhDQAAiO0nd8JZRdBsylQIMONi8SUH4FKMsEQloAwZGGmSewoewS\nQCagfmt+npcIhLYGqoqABu1dn08W4OoJIDgaqNfUs7YKmKIzQFBToF644zaWKqDwGNC4NyAZu6aU\nmJiYQ0QRrtr5nPPVtm1bJCQkGG2G97F/JtCwK9D1RaMtETjit0eBZoOBTk8bbYl8LqwCTn0M3LxJ\n33HLrgCruwA3bQK23w5M2gEE1NfXBrmYyoDVXYFhHwKRo2oeKzwB7H0M8K8HDP4WCOtgvw+B5yEL\nsLIDMHI1EN6fX1sgAXcfBla0BSatl+dQFRwDNscBN68CGvf0pMWC0gvA2t7AlGTXn/+tE4C2DwDt\nHtTHNgdIknReTjux7Xi9ED0OuLzRaCsEzogaA1zZZrQVyogcCeTuA8wV+o4bEgXUbwmAgIhhwJn/\n6ju+EgJCgL7vAokv8g3elkbdgHG7gJaTgA2DgZP/ASxmY+y80cnaDgQ2BJr0q/l6UGOgxUTg3AJ5\n/TTuAfR7H9h1N1BVrL2dgmrSfgRi7pb3xav9DCD1e8/bpBHC+bpeiLoJyN6l/01SIJ+oOCBrG+BL\nYvZBjYGGXYDc/fqPHRkHXNkK9HoLOPFvwFSivw1yaXMvr26l/Vj3mJ8/0O0lYNxvQEY8sGkUcPWU\n/jbe6Jz9nm/QklT3mNIbd/tHgIgRvOPgS59nX4Ko+m8mh1aTgILDQPE5j5qlFcL5ul6oF87fsnP2\nGG2JwBGhbQD/UKDwuNGWKCNqDDtBRo3buBdv553+XH8b5CJJQP+PgMN/cbwa0rATMHYb0OY+YONw\n4Pi/xSqYXlRdBS6u5G0pe0TdBFTkAPmH5fc54FOgMBlI+UobGwU1yd7NX1yaDZHX3j8YaH0fkPaD\nZ+3SCOF8XU+IrUfvJ2oMr375EpEG2Rw5GsjZDVhMQM83gZMfePc2T7PB/Pc9/q7jNpIf0OU54Nb9\nwOV1wMZhvueM+yLnF7GDFewgDtrPH2j3iLLVr4AQYMRi4MjrQN5BbewUVJPqZKXSER1mAKnz6m7/\neyHC+bqeiB4HZArny6uJijNmFckdIkfwtqO5XN9xgyM4Ky0vkeNsom4CTn+mrw1K6TMHOPMFUJLu\nvF2D9pxM0H4GsGk0cOyfnLEl8AypMrav2j/KcV/mSvn9NuwMxH4G7LoHqCx0y0SBDaYS3qJv+5Cy\n85r0BwLDOL7PyxHO1/VEs6FA0WlO0Rd4J9aVLx/4ZvY7gQ2BRj2AnL36j2275dnzDeDkh7yF5K2E\nxgCdnwWS/s91W8kP6PQUMD4RuLIdWD8EyD/ieRtvNK6eAopTgRYTnLcL68ChG5dWK+u/zb1A8/HA\nvsdE/JdWpC/hRJv6LZSdJ0nsZJ/1/sB74XxdT/gHAREjgczNRlsicET9VkBgE65J40sYlalpu03b\nqBuv7p76VH87lNB9FpC1A8j+TV770NbAmF+Bzn8EttwMHHlL2eqLwDmp87j8gJ+Mykpqb9z9PwBK\nzgOnPnHchghYtqyug+bodXeRM57eNslFzkqlI9o+yPF93vwlDR50viRJipEkaaskScclSTomSdLz\ndtrESZJUKElS0rXHG56y54ZBbD16Pz659RgHZBlgc+QoIHtP9ZZcrzeAU//x7i2egFCgzz+Bg3ZK\nTzhCkoAOjwETkoC8BGD9QBFHpAUWM2egyr2Rx9zNWeNlmcrG8a/H8V/H/uF4hXj5cmDqVODFF6ud\nGiJ+PnUqH9cSOePpbZMcilP5y2nLO9SdHxzBX9rOL9LWLq0hIo88ADQH0P/a72EATgPoXqtNHIDV\nSvodMGAACZxQcJxoeRsii8VoSwSOSJtPtH2K0VYoo7KIaGEoUVWp/mOv6UOUtbv6+e6HiI68rb8d\nSrCYidbF8t9a8bkWotQfiZZEECW9RmQq196+G4WLa4l+HeT4+HzUfe23GUTH3lM3XsZy/v9bnlP3\nmMVC9PzzvN70/PP2n2uJnPH0tkkOh/9KdOA59/rIWEG0fpg29igEQALJ8ZHkNNLiAWAFgHG1XhPO\nl9ZYLETxLYkKTxlticARJReJFofzDdqXWD+U6PJm/cdNeIEo+R/VzwtPEy1pSlSRr78tSriyk2hZ\nDFFVibrzSy+xk766O1H2Pm1tu1HYOY3o9H8dH7fnfF3ZQbSqm3rHI/Floq0T7X++bZ0b68OTTo6c\n8fS2yam9ZqJlrYlyD7rXj7mSaGkUUeFJbexSgFznS5eYL0mS2gLoB2CfncNDJUk6LEnSOkmSejg4\n/0lJkhIkSUrIzs72oKXXAZIENBdbj15N/RZAvWZAgY8FV1uLnupN7W3ahp14S+Lkf/S3RQmRIzgJ\n5sQH6s4PaQ6MjAd6/BXYMQk4NIuljATyqMgDLm/gumpKiBjB29xqCwv3ncPapCf+XfeYJAEffVTz\ntY8+UlZOQQlyxtPbJmdc2QIENQHC+7lu6wy/QI79Sp2niVmewOPOlyRJDQAsBfACEdWOgDsIoA0R\n9QHwKQC7G8xE9BURxRJRbESES71KgYj78n6MKlzqDlFjjIv7ytlbU72hx+vAmc/4JufN9H2XY9RK\nL6o7X5KAtvcBE48AJeeAdX05Bk7gmnMLWDYoqLGy8ySJy06olarxCwSGLwROfsSJF7ZY46lssY23\n0ho54+ltkzOUVLR3RfsZHO/npYWMPep8SZIUCHa85hNRfO3jRHSViIqv/b4WQKAkSc08adMNQfRY\nzkwTdYO8F1/UeYwYBuQn6S/zE9QECOsM5B6ofi2sA9ByMnDiQ31tUUqDtkDHmVz53h2CI4ERiziQ\nf9fdrCPpzXJL3oA7GXPtHgbSF6lfaQyNAYbMA3ZPB8qz+DWrk/Pxx8DzzwMWC//8+GPPODtyxtPb\nJmdUFnCZD0cqBEpp3AMIaQlkbtCmP62Rszep5gFAAvAjgP84aRMNQLr2+yAA6dbnjh4i5ksma/sS\nZe0y2gqBI0ovEy1qTGQ2GW2JMjYMJ7q0Qf9xE18iOvJOzdeKUjl2zl5wszdReZUovjlRzgFt+ivP\nIdr9ANGKDkSZ27Tp83oj7zDH27n6fNmL+bKy+RZ1CRO2JP2FaPNYtiM+vm48lW28VXy8e2PVRs54\netvkjNNfEu2YqnGfX3Dcn47AC2K+hgN4CMBNNqUkJkqS9JQkSU9da3M3gGRJkg4D+ATAfdeMF7iL\nkBrybkKiOaanIMloS5QRaaDOY+0tzwbtgJi71MdU6UVgGND7b9dKT2jw761eU2DYT0D/D4E9DwAH\n/ujdsktGkPo9ywX5+avvQ6nYtj16vcXyWMf+DkyZAsTH14ynssZbxcfzcS2RM57eNjnDnZVKR7S5\nj+P+KvK07VcDPOZ8EdEuIpKIqDcR9b32WEtEXxLRl9fafEZEPYioDxENISIRzKAVIu7L+/HFrUej\ntCkjRtqXOOr5FyBlLlCeo79NSmj3KGAqBjKWaNdnq0nAbUcBcymwtheQuUm7vn2Zssug059jcdYg\n5JW4Uaw2ZgrXWnMlFeUMvwBg+AJ+j17ZDNx5Z91Adkmy/7odqtYNwdn48ci7WuR6bEf92r4up40e\nFJ7gIrXNx2vbb1ATVjY4t0DbfjVAVLi/XokYwdl03lyM8kbHF4utNhvK7yu9V1qCGgENuwE5tRKm\nQ9sAre8BTr6vrz1K8fPnlapDs7TVyAxqAgz5Hhj4BbD3MWDfk15f2dujkAXY+zhOB9+OadmTsDgh\nQ31f/sEsHZT6g3s2hTQHhs0H9jwElF5S30/6UlRcTUf6lRzg1wE1YyB9ndTvgXYPyVMhUIoWK5ge\nQDhf1ysBIXyj9LWb+41EZBxX07aYjLZEPgEhQPgAtltvHGWI9ngNSPmqOrDZW4kaAzTp65kSGS0m\nABOP8u9regKXftV+DF/g+HtAVQEixv4PADAtNsa9/trPANLmua/FGjWG5aN236fu816UAhx4Cubh\nS3C62y8I6vM6sP121hDVW/BeaywmIO1/2m85Wom6GajI8jrdVOF8Xc+IrUfvJjgCqB8D5B8y2hJl\nRBq09ehoyzM0Bmhzv/26St5Gv3/zKp1S+Ro5BDUCBn8FDPkOOPA0sHeG95fisAep1BvM2sFlPYYv\nRHhYKAAgPDTIPVvCYwH/ECBrp/N2Fgvw6qv809HrPV4DAuoDR/6qzAZzObBrGtDzTTRqNQwz4zqi\nQZeHgQlH2Clb10++jqg3cvlXXsFu1M0z/fv5c/yfl61+Cefreqb5LcL58nZ8cevRKJsjRrDuob30\n/x6zgbPfAmVX9LdLCWEdOf5L6Q1YCdFjuS6YfyiwphdwYZXnxvIEavQGy7O4rMOQeeyMa4Ukydu2\nmj0beO89YMCAagfMYuHn773HxyU/YOj/gHM/ARfXyLch8QUgrBOvnNkSEgWMXAL0fgfYORU4+DJg\nKlU2P2/AE4H2tWn/KHBuvlcJ1gvn63qmcS+gqhAoPme0JQJH+GKx1WZDWPhW79iiwDCgUU8gx863\n/PqtuKL18Xf1tUkNPV8HLq7immmeIjAMGPgZxxodfBHY8yBQkeu58bRkypS6taZsa1HVzsCzmDnr\ns/2jQAuNA7YBfl9dWA5UOQlynzMH6NsXSEqqdsAGDODnffvycYBXu4f/Aux7TN7/5bT5QOZmYPA3\njoPfW09jZ7vsEhfhdbVKZ8UbCguU53CiiFIVAqWEdQQadgUuKXB6PYxwvq5nJD8gaqxY/fJmIkcD\n2bt9qyCufzDQdBCQZVDcl6Mtz+7/x/E5ZZf1tEg5QY2BXm8CB1/y/A0wajQw8TBQL4IzIjPq1Lr2\nPqylDqwOmJ9fteNlT/bm2N85bqjXW56xJySKP6fpix238fMDEhOrHTB//2rHKzGRj1uJGI6y5tNQ\nvqov8oocx2vl56SibN9zKIz9GQhs6NzG4Ahg+M9A3/c4rizhT46L8JpKUL73Oexf84p72aAaULH3\nGWSjNfKqQjw/mJcF3ku+VlYrNjaWEhISjDbDd0idB1xay9WxBd7J2j7AoLm8ouQrHH0HMBVxDJOe\nXFrPN9txDr7dJ77APwd4ue6jxcSrFH3+AbSarM+Y2bs5I7JJXyD2M75hezNENZ0Wi6Wu45W5Cfjt\nYWB8ImcV2rJAAqa7uL/JaQMAGcuBkx84ft/Z2uhvU1vMbK45BwCozMfV+N5oaLngelwAc1umYObo\nDrLaAuCaVokvcFLMkG/5C4uVK9uBfY/jjLkHOpWtlN+nh1E8RzVUFQPLY4DbT3CdRQ8hSVIiEcW6\naueBvE6BVxE9jmMBLGb3Cg4KPId169GXnK+oMbydpTcRwzlBwVTKwcu16f5/wJruQLc/A/Vb6m+f\nXPwCuPTEgT8CzScA/m4GhsshYjgwIQk4+iavgg34mMt0GCGg7ApHeoO2K1+ll7h8w/AFdR0vrWl5\nG3BgJnD1DAu728O61WjLgAE1V76IgL0zENR2MuZWvIhpsTEOkwLySioRvqKe8ozNeuHAsB85ruy3\nh4EWtwO93gCS/w5cWAEM/AJNm4zH3IQMp+PrQfnKPpiXfxfGdY/y/GCBDbh227mfgG6veH48F4ht\nx+ud+i3Zy88/aLQlAkf4YrHVpoOAq6dYj01PAhsAjfsAOQ7qMYdE8/bC8X/pa5camt8CNOwCnP5M\nvzEDQoB+7wGjVgDJ7wA77/JM5qU7yNEbtJh4e63zH2uu7HgKv0CgzQO8rW2P2jFeZnPdGDCAxbbL\nLiN44IeYObqDU8fHeky1c9TyNi4/Yi4DLW+N0xcuID8uEWg1CeGhQS7H9zhECCpORkzJemw6rlOi\njHXr0Qt2/ITzdSMgSk54N5GjOIjcizJxXOJfD2g6WH5wr5a4yrbsNoszm0rlbesYSr/3geNzgPJs\nfcdtNhgYf5DT+9f14TpLXnBDAsDZjLVjvGxjwJYv52zRgPpcvkEvOszggqsWc91js2fXjfGyjQGb\nPRvI3gOceBcYvlCflU6A4wuHzsPaJnPRuWwlFh3xIhmq/CRQ/dYYHX4W01sd1WfMiJGAucIrCtQK\n5+tGIPoWofPozQQ14WycPOP/ISjCqExNV+OGRAEdngCO/VM/m9TSqCvQZjpw9C39x/avxzFnceuA\nE+8D2ycBJV7gsLrSGxwYyFtHQ//HSUV60bgXr6zak3GaMweYNavmFqPVAZs1C3jrZV6pG/wt0KCt\nfjZfY+jIBwFoUHRWSy6uhH/rqWhw81KEHZ7J8kKeRpI4K9YLAu+F83UjEDWa6yMJ8V3vxRe3Ho3S\neWw2DMg/7Pz93O3PwPmF7uny6UWvNzmTruCYMeOH9wduPQCEDwCtbI9ta+cYmwXnRG8wf8xwlO6a\ngav9/2dMwoCjjDk/P+Ddd+sG1/v5Af+aA+x9hAsBt7xdHztr4fYWpie4uApoeQfHInb7M7DrXn1W\n/9s9AqQvsl8vUEdEwP2NQEAoS8Jk7QBaTjTaGoE9IuOAUx+zULSvEB7LFbYr8jjIVy8C6rPDkL0b\naHGr/TbBEUDHP/Dq16Av9bNNDfXCufbXwZeAMb8aEwDvHwT0fgsbLzbFLfl/AlbouJ2ngCbXfs5N\ni8HM1gYY0OZ+4PBfWDkgqInr9gDHH5qKgT5/96xtvkTpRaA4jR0vAOj6Mt+fkl4FBnzk2bFDY/h+\neGE50PZ+z47lBOF83ShY476E8+WdRI4C9kzneAT/ekZbIw//INYPzdrBWUR6Yl11c+R8AUDXV4DV\nXTgD0oCtHkV0eho48wVwaZ2hn9HYUTPxy2/dMK1kJvzbPQD0etursiFVZwBqRb1woPmtwLmfgc7P\nuG5/ZRtw6lNgfAIH7QuYi6uB5uOrr4kkAUN/ANb1ByJHAjFTPTu+dQXTQOdLbDveKAipIe8mqBFX\nYM7db7QlyjBq61FOvFlwM6DTU8Cxf+hjkzv4BQL9PgAOvWxowd3w0CDcN3Ys/G/9jcW5987QPxHE\nibZj+AauUB5eP1Ce/qNWbWyRW6yzLJMr7w/9gbPO1WpW1karfrTuSwkXVwKtJtV8LagJ16Pc/xRQ\ndNYz41ppNQXIS3QdluDB6yOcrxuFJv258nfpRaMtEThC6DzKp+kQoDDZueQLwNsZGfFAcao+drlD\ni4kstH5mrtGWAMGRwNitQGUesP02faWkXGk7ymlj1X/Uqo0t0eP4f2lBsuM5WMy8kt3hcf7iq8Rm\nd6+P3H607ksuphLOkm5uRwqq6UCg5xssJG52XP3fbQJCuMZd2o/O23ny+hCRTz0GDBhAApXsuJvo\n7DyjrRA44sIaoo1xRluhDHMl0aKGRGXZ+o+9cTTRxbWu2x3+K9FvMzxujibkHyVaGklUkWe0JYy5\nimj/00RrehOVXNBnTIuF6PnniQD+Wfv5fLhuY7FwOy3a2OPQbKLElxzPIel1ok1jiMwm+fOyN9Z8\nKL8+jmzWsi93SF9GtOlmx8ctFqKd04j2PaX92LZk7yNa0cH5HFVcHwAJJMOXMdyZUvoQzpcbnJlL\ntPsBo60QOKKykGhhKJGpzGhLlLFlAlH6Uv3HPfIW0cE/u25XkUe0pCnR1TOet0kL9j1FlPCC0VZU\nY7EQJc8hWtaanUO9xrTe5KwPW4fJVRuiuk6a2jZ2KMjYTeb5/pRbUFjnWNHxb6hqfhDlZZ1VNq9a\nFKauJZoPys3Pcquf37HnfKntyx1+m0F08mPnbSoLiVZ0JEpb4BkbiHh+q7sTXdnuup2C6yPX+RLa\njjcSxWnAhiHAnZf1rY8jkM/6wUDfd3k7z1c4/h5QmgHEfqrvuFe2A4deAcbLqI925C2g5BwwdJ6H\njdKA8myWSBq3iyvgewvnFrBm4IiF+lSVJwfajrZ6jI7aANXt3G1jh51r3sHIwjedmn+wwdPoP+kL\n+fOypaoI+cv6ookpFSkht6PjlJV12yi02amOpdK+1GIxA8taALfuBRq0c942/zCwZSwwdifXw/ME\nJ94HCo8BQ1zE8Cm4PnK1HcUd+EaiQTsgoCFQoFM1YYFyjCpc6g5G2dxsCHD1BFBZ6Lpt1xeAS6uB\nq6c9b5e7BEcA3V8FDv3ZaEtq0nY6O16772NHzJOQA21H28UCPdvUYqi0Cmubfou8yRXs0Ng88iZX\n4IfofehjWsXZq2rmtf9JhLSMwzctktE2MB1Imau8H7lo2ZcLSve/DEtFLvIkGbqrTfoAfeZw/Jep\nVHNbAABtH2TRdGc1Az11feQsj3nTQ2w7usn+p4mO/9toKwSOuPgr0cZRRluhDHMV0aJGRGVX9B97\n001EF1bJa3vkHaLdD3rWHq0wlXM8yuWNRltSl/yjvAWZPMczW1PeHvOVn0wU36JmPJc9ruwkWhpF\nVJwub17WsU7/l2Psqkr5eeFpoiURRLmJyvqpjdExXyUXqHh+Uyr6MZh+2rRN3jkWC39mPRmzue0O\nopTvHI8vYr6E86UJ6cuINt9itBUCR1QWcdyX9R+vr7D1NqLzi/Qf98g7zgOfbaksJFrSjKjwpGdt\n0or0eKLVPdm59TZKLrCDsP9p7e2Lj697c7O96c2H6zbx8dxOiza1SXyZ6ND/yZvLsXeJfh1CZKqQ\nZ3Nu4rX36Kma/ZxbSLSiPVFFvrx+7GHP+VLbl1LMlUQbRlBJ4tt0dPmDVJLwV/nnVhYRrerm2EFy\nl/R4og0j7R9TcX2E8yWwT0UB0cIGvhfUfSOxfijR5U1GW6GM4+/zjVhvruwkWttffvvkfxDtmu45\ne7TEYuHs19NfGm2JfSoLiTaP45WDqmLt+rVY+KZWe1XB+rp15ctZG+uqlhZtbDFX8mpWbefI4VzM\nRFtv5y8Irmwuz2MH69xC+30deJZo+51EZrMym604WvlS05dSDs4i2nIrX4/cBKLlbfl3uRQcY6c0\n/4g29thiquCVRXsJOSquj3C+BI5ZP9Q7tzMETNJrnKruS+Qm8rdTvTFV8JcJuaUZKq/yP9qCY561\nSyvyDvHNvqLAaEvsY64k2vMI0bqB+m07O8raU9NObl9WMlYQrR+m7JzyXKLlbXiFxREWCztWB551\n3MZUTrQulujER8rGt6J0rlqRsZJoWUx1ORqLhWhNL6LMLcr6Sf2RaFUX/gxrTcILREl/0aQruc6X\nCLi/EYkeB1wW1e69lsg4IMvHgu4b9+HCk2WZ+o7rH8SB91k75LUPDAO6vgQcfcezdmlFk74sxuyt\nVfr9AjlTrMUEYMNQ30hocIfUeVzhXgn1woHhC4H9Mx0X+z31MWcM93vfcT/+9bgC/PE5QM5eZTYY\nRfE5YP8TwPBfWHEC4CzB9jOAsy4yDGvT7iEgYiSw/0ntkwHazwDSfuBsTJ0QzteNiJAa8m4ihgP5\nSVwJ2lfw82d9yivb9B87aoyycTs/y86tswrl3kTvvwOp33leckUtkgT0fhvo8RqwaRSQvcdoizxD\neTZwZQvQ5h7l5zYbzOLpO+1Ubs/Zyw7ViEWudV0btAMGfQ3suheoyFVuh56YK4Fd9wDdZgERw2oe\na/sgSwwpVU4Y8AlQeLxu9qe7NOkN1IsErmzWtl8nCOfrRqTpIP4GVp5ltCUCewTUB5r0872bmFE6\nj5EKS10ENmDR7aNve84mLQmJZpmkpFlGW+KcDo/zKtiOKUDGMqOt0Z7UH4GWk4DAhnWPEbnWAOz8\nHDtPB1+uPl6Ry47UoK/5mJx+Wk1iB/C3hwGyaD9PrTj0Z6B+C15prk1wBP+/OL9IWZ8BIcCIxcCR\nvwJ5Bx23k3MdayNXs1MjhPN1I+IXCESOBjL18/IFComM88F6X3EG6TzG8pcJJSsBnZ8BsncC+Uc8\nZ5eWdH2RhYCvbDfaEue0mACM+RVIeBY49YnR1mhH9h5Q0iwkZIchr8SO0LgcDUBJAgZ/C1xeD5z7\nhR2n3x5mR8oqMi1XS7DPP4HKAi5w7I2kLwEurmJn3FGxVrXOTsPOQOznXP+rssB+GzWajG2nc122\nynzlNqlBTmCYNz1EwL1GnPrMd/TubkQub+YUdV/CYiZaHE5UclH/sbfc6jyg2R7HPyDaMdUz9niC\ncwuJ1vZzXV/KGyhK4wSMxJeUZbXJQauAe4vZdZuqEp7D0mg6svxBuvh9U5q3eZ+dvhTUg8o9yJl7\nB/7EwfvmSnX9lGRwMsblza6vhdmkX8D91TM8v5wDLmyyZo6qLP1izf60l5Gptn7ZzmlEp79QZ881\nILIdBU4pPEUU39Jz+l0C96gq5XpflUVGW6KM7XcSpc3Xf9xj/yI68Jyyc6pKiOKbc0ahL2CxEG0Y\n7rl6R1pTkccFg3dO07a0jRbO18VfybSiM2snFlfYb2OxUNXaQXQm/nbKy71AucUVdHDFTKrcMNa+\nQ6lAA7B882SyzAflXbJTOkFBP0XJX5BpfiDlFuQ6nmtVCVWt7OF8rlpRVUq0ti9/uZeDkppptXGV\n/alGs/LiWs7cdQO5zpfQdrxRIQJWtOUtgkbdjLZGYI9No4Hus4EW4422RD6nPmH5qsFf6ztuzj5g\n3xPAbQqls07+h+PURtnZhvBGcg9wTNXtJzlz09sxlwO/PQKUXQJGLqvOeHMHZxqFrtpVFnDM1ZXN\nWBP8Fm7LlZe5OLdlCmaO7gBYTMDmmzhpqefrdRuSDA3AsisoWdEbZ4oaIjiiL7pOWayuH1MpcuP7\noalJfobp1y2O4w9xHvx/v3/4l4vGAAAgAElEQVQmX+Phv8jThiw4Bmy9BZiczkk7SrHqFY9awVnP\ntZFzHW2xmIEVrYExG4DGPZTbA6HtKHCFJAHNx4msR28m0qAAdncwSucxfABQms4ZaUroOJMdmrxE\nz9ilNU0HAlE3A8ffNdoSefgHA8N/RnlIR5jiW6Lk8AdAVZExtlxcDazpyRmFE49i6IjpmNsyxa4+\no61OIwBMi43hPvwC2LE48wWQuaVm/yRDA9BiBvZMh1/HJ5DYcSk6+R2tW3JBTj8AkPAsGkQPwNwW\nZ5zOAdMJeZPKkRY8Fg8Ff67y4skgbT5/9gd/LV+Uu3EPIKQlkLlB3ZjOsj/lXkdb/PyBdg/rE3gv\nZ3nMmx5i21FDzi3k6ssC7yRzG9Gvg4y2QhkWM8d7WPXs9GTrRKLzi5Wfd/IT3/oclGRwbF3xOaMt\nkc2XW88QzQelLB3Ptie+xHFhalC67VieS7T7Ia4er7Swp6PxLm/kLevSS/xcbozR4TeINo2pjtvL\nT65ZuV1uPynfEa3qqiwsoSKPaHk7dZ8RVxQc53nkJSk/9/QXvDXtDgdf4c+/dTvYHc3KwlMci2Yb\ni6cAiJgvgUvKc4gWNeQq4QLvw1R2Le6r0GhLlLHjLq5GrTfH3iPa/4zy80xlHP+Ys197mzzFkbeI\ndt1ntBWyyS2uqI45KkrjWJ/F4UQ77ibK2qUs9lSJ85W+jEWwD/xJvQSSo/GOvEW0cTRrW8rRALy0\nnm0pvVyzn7Pzqiu3y+kn/8g1hy1Z+VxyDjiW0lFLVTHR6h5EKd+oO78ij2hRI3aS1WKu5OSF5Dn8\n3F3NyvXDWM1ABcL5Eshj3QCiK9uNtkLgiE1jiC6sMdoKZRiVSZtzgGh1d3XnnvqMvzn7ClXFRMta\nEWXtNtoS+dR2Yiqv8qrjig4c5Jw2X95qgxznqyyL263sxPqf7uBoPLOJaPNYlqVxpQFYnEG0NJoo\nc6v9vvY+zs60K93GikJ21M7OUz+fU59zUHxVqfo+bO3a8zA/3Ene2nUf0clP3bPFmv2Zuc19zcoz\nXxNtn6LKDLnOl4j5utERUkPeTeQY35MaUlpxXiua9ANKLwJlV5Sf2+EJThTwFdmWgFCgzxzg4Ive\nXWjTGYFhQJfngNtPAT3/gqrTXyFvSQ/kFZc7PMVaY8turS0rlVdBy1pwu1H7gcgRmpr9O37+wLD5\nsJydh8Wb1yDvltvqxjpJEnDnnajc/xz2B01HXoNh9vsa8ClXbj/7FXDnnfb7mTIFOPAUEDECaP+I\ners7PQ2EdQEOvqC+Dyup3wN5CcDAL+THedlDiwKn9VsBQ+YBex7gAuKOrqO912vT5h6OX1MaQ6qA\nAI/1LPANmt8CJP0f0OdvRlsisEdUHN9gfYmG3QBzCVByHghto9+4fv6s/Za1DWhzr7Jz/euxPM7R\ntzgD2BdoO52zS88tANo9aLQ16vHzB1pNxndne2KmqSOwMsRh03DrzxXOZXist9bFSbmYObqxNnba\nIzgSPzVeioczhwArHDcLAjAIwNyEZzhrsjbWyu0bh7MCSXj/um1SvgIKjwG3uPkFQZI4KP7XWCDt\nJ/XvnfwjQNKrwNgd/GXAHaJuBiqyuM8mvdX302I8O3J7HgDGrFeXQQmwikHLScC5+UBXDZxUe8hZ\nHvOmh9h21BhTOdHCMN53F3gfpnKihQ2IKvKNtkQZO+8hOvu9/uMe/4Bo31PqzjVVEC1r7VtbeVm7\neftRbTyTnrjYLqwRF+ZGGyKiqynLKHNRX23qWuloN537hbdhKwpqdZDIcV6Fp+Ra7Zq8w9xnwTHl\n51YWEq3sTJT6P+3sSfoLUcIL7vdjNnG4xuE33esncwvRmt6Kt1Mhth0FsvCvx0LOtdOmBd6Bfz2g\n6WAga6fRlijDqK3HKDe2af2DuHbT0Te1tcmTRAwDmg0HTrxvtCVuEx4aVOOn2jYAENbudkQFXEG4\nyYUYOcnUAHTSJrx+INu0YY1bbUDEK7bNxwP7HqtuV1nIAtWxn7G0jlybXdGkN9D3XZbpMZXIO8c6\nzr4neVVeyxXX9o/ySpPZyZaydXxn85f8gGELgLNfuxdSEzmahb/zD6nvwwnC+RLw1qOo9+W9GFU7\nyx2s2pRybwRa0bg3x3uUXlJ3fvtHgaIUIGuXpmZ5lH7v8vZj6QWjLfEe/AKAtg8BqfOct5OrAahn\nm/4f8Jb9qU+uOTqPsUNm3UpXo1voiPYzgPCBwP6n5X9Wz/wXKDoFDPhY/jhyCOsINOwKXFrjvJ2c\n+YdEA8N+Yu3M0ovq7JH8+P+Bp2p+yVke86aH2Hb0APlHuf6LwDvJ2s2afr6ExcLZXUVn9R97+2Si\ntAXqz0/5hmjTTdrZowdJr3EtK29GTpaiVm2IiApOcC0uc5XjNnLqQc2Hfm2sFKVySYiEFzgj3VSu\nzGYlWEtFnP7Sddvs/dqXqrAl5TuibXc4b6Nk/kf/zmUjTOpqdlFRGtGSpjWvvwsgSk0IZGOx8D+p\nqylGWyKwh6mC4/LcqYNjBLvuJ0r5Vv9xT/yHaO8f1J9vrrxWkHObdjZ5msqr/Bn25lplejtfRCxO\nf2G18zauNADnQ782NhQd+5LM8/0pP/O4cpuVkrmdLAv86eeNvzrVurT8HEI7V7/hOY3IyiKiRY3r\n1kKzY4us+VvMZFrags4snaja5sr1cbRu3X9lny/X+RLajgJmz8McP9LpKaMtEdhjy62cIh4zxWhL\n5JPyFceqDfufvuPmH+Y4ljvka97VIXUeP8Zu08goHTj7HZD6HTB2p3tp/55CjiajVm2spHwFXN4A\njFzivB050QC0jqdHGxvmbj+LmRc7VutKKrFZCRYzsGUskko6oG/Jt7JOcWiTFux9DGjUHej2ivN2\ncuaf+gMKDryFxuZzbpsld85C21GgDBH35d1E+aDOY+QYg+K+egGVeepjPQCg7YN8vi/F2rV7BDCV\nAul2hJpvVFrfC2RuAspzHLchGRqAera5hlVP8nddSaU2y+XoW4Dkh9Y3f+pS67Kk739xJmSSfZu0\nwlrzy9lc5My/IBk49AqkUUtdzsupLubkCsxtmaL9nOUsj3nTQ2w7eojSy7zc6yw+QmAc2b9x2rMv\nYbGwbI+n4kOcsWOq+2nwqT8SbRjhXuVuvcncRrS8DUsmeRtGbDsSEe1+gOjkx/aPeWvMl7O5ahnz\ndXHdNcmjTHntr6Zwe09+JiwWohUdibL3OT7uav6VRax9aUC5G4iYL4Fi1vTim7zA+zBXsg5nWbbR\nlihj9wNEZ77Sf9yTn7BkizuYq7iW0eWN2tikFzumEiX/02gr6mKU83V5E8vp2EOOBuB86NdGzlzd\n1S20UpxeLccjF4uF68ppWW/MHkf/7rhen6v5L13K/3eMkDgj4XwJ1JD4MtGRd4y2QuCILROI0pca\nbYUyUr7hwHu9yT/KQfPukvoTZ0v50urX1RQWrS7OMNqSmhjlfFnMvBqYd8jOMRkagPOhXxs5c3VX\nt5DIRohahZO++yGiM3OVn6eE4nR+D9vTn3Q1/9NziVb3JKoq8ayNDpDrfImYL0E10eOAzA1GWyFw\nRFScb8UgAdWxaqRz3FejHkBVEVCS7l4/be7j+LHLPvS5COsAU1AUKld2QcGV40ZbYzySH8fDnbVT\nr8mR1l/t1/Vs43I+Mm12xuHXgKDGQPdX5Y1pix51B0NjgPBY4IKdmmXO5h/XDjjyF06wCKjvWRvd\nRDhfgmoiRwL5SXzTEngfvlhsNbQdIAUARW5kHqpBkrhCtbtV9v38gZ5vctV7vR1IN1gT9BoKKoNQ\nb+sI4ORHnNF2I9P+UeD8AtfV028ELqwAzi8Chv7IjqlSrF8CPf15UCq2XVkI7JwGDPgEaNjFc3Zp\nhHC+BNUE1GdRVyNkYQSuadKPq5iXZxltiXwkyTin0R2pIVtaTwNMRcBlHxHcBjBy+FQ0CjKhcvgK\nIGMZsGkUcPWU0WYZR4N2QKOewMVVRltiLMVpwP4ngRELgXpN1fXRoB3gH+z591PMFCAvUd7qNRGw\n7wmg+Tig7f2etUsjPOZ8SZIUI0nSVkmSjkuSdEySpOfttJEkSfpEkqQUSZKOSJJkR8pdoCui5IT3\n4hcARIwAsrYbbYkyjNR51MLp8/MHer0FHHnDZ1a/wsPqo17zUWhEV7hWWZv7gY3DgePvARaTZwYl\ncq65p2cbe3+n9jOAlK/Vze16wFzBGpHdZwPNhrjXl5ovNkr/Zv7BLKmU9qPrvk9/BhSnAv0/VDeW\nAXhy5csE4GUi6g5gCIA/SpLUvVabCQA6XXs8CeC/HrRHIAcR9+Xd+OLWY2ScMXFfDbsC5nKg+Jz7\nfcXcBVgqXOvOeRPW94rkB3R5Frj1AHB5PbBhGFBwTPvxXGnu6dnGnr5hk/6gzPVIXPk08orLtJ+/\nt3PoFaB+DNClzjqIcqzarUpQ8zdrP4OLHTv735GzH0j+GzByMTtsasfSGzlR+Vo8AKwAMK7Wa3MB\n3G/z/BSA5s76EdmOHsZiJlrSjLNNBN5HbiLRqm5GW6Gc5W2JCuzIpHianfeyXpwWnF9CtLa/72Q+\n5hyo+16xWFjDb0kzTuc3q9S8s4er+ku15XU82ab238hcSbR+KB1Z/iDtnduTLi/ux9qPcjAqS1Pt\nOfY4t5Czfyvytemv+DxrPCr5LKipT2axsO7kle32+yzP5UzW9FrlNbTWv1QAvKnUBIC2ANIBNKz1\n+moAI2yebwYQ66wv4XzpwM57jdHkE7jGbJKnfeZt/DaD6NTn+o97+kvtBKctZi50m7Fcm/48ze/v\nFTsFNIvPE22+hQXb85K0G9OZ5p7VkdCjTW0SXybaMoFyi8roy62nqfjIRyyYfOxd14Wlfd35KjzF\nznZuovt92bKiPVF+srJz1GhSHn+f6LdH7fRlJtp6O1HCi9qNpQFe43wBaAAgEcBUO8dkOV/gLckE\nAAmtW7f20CUT/E7Kt+yACbyTbZOI0n422gplnP2BaMfd+o9beJJoWYx2/3DTl3HBTl9Z/dp2B9G5\nX+wfs1j4s76kGdHhN1nAXQsslpo3PFthab3a2JKxnGhZa6LynJqvF6USbbqJaN1ArgvnCF92vqpK\n+QvD6f+61489fnuM6OSnys+T8zezpTSTv0RUFtV8/dh7LJzu7H2rdCwNkOt8eTTbUZKkQABLAcwn\nong7TS4CsBVManXttRoQ0VdEFEtEsREREZ4xVlBN9DjgymaALEZbIrCHL+o8Ro3hRAHSOe4rrDNA\nJg7G1YJWkwFI9usPeSPOYnMkCejwGDAhCchLANYP5OwydyDyLp3E4lRg3x+A4b/Uze5r0A64aRPQ\n8Qlg8xgg+e+ApUrePH2FxD9xzbuOM7XvW83/ITl/s9qERAGRo2pqlmbtAk5+wFmb/kHajaUncjw0\nNQ8AEoAfAfzHSZvbAKy71nYIgP2u+hXbjjqxqov2y9QCbcg7xLI3vsaKDs5XGDzFrulEZ77Wrr+M\nFSzFZTFr16enyD3In2VXWCyshbk0kujQbCJTufKxvC3my1ROtG4A0YkPXdtefJ5oy632t2F9deXr\n7A/8t6+8qr4PZ5Rk8Nat3M+BO3FY6cuINozk38uyWOLowhrPjOUmMHrbEcAIAATgCICka4+JAJ4C\n8BRVO2ifAzgL4ChcxHuRcL7048BzRMf+ZbQVAntYzCy9UXLRaEuUsfdx1lzUmzNfsdabVlgsfFM/\nv1i7Pj2FxUy0uIn890rpZaLtd3KgfvZeZWO50tyzyuvo0SY+nmj/H4m2T5F/o7VYODljSQTR4Teq\nt7OMcL5yE6h8yxSi+aDSvS+zo6OE/GTeTs4/ouw8pazoSJR3WF5bdzQpzZX8xaDwJMcqHprtubHc\nxHDny1MP4XzpRMZKjocQeCfb7yRKm2+0FcpI/YlFn/Xm6hmi+Bbaftu9sJr143xh9Wv7ZGXvFYuF\n48SWRhEdfMW+vp6j85xp7llXrPRok/az+uy+kgscyL2mF1HWHm0cK1O56zZmE2ftbRhJtCyGflv1\nKtF80JHlj7IDves+oux9rm0pyyda2YXo7Peu27rLnseIjv1bXlt3NSkTXiTaMIpo4yjXSRJa6F+q\nRK7zJSrcC+wTFQfk7gdMpUZbIrCHT+o8xl2L+9I5lrBBB651VXRGuz5bTGRFiPQl2vXpKSIVFrmV\nJC5uOfEoVxdf1xfI3i3vPAeae0V9+FaTV1LpsE3eLbdxm9Iqh23yxwwHABRkn3Ks73dzDyDxOWDE\nItYvVEr9lsDolUC3P4M2jay22wHWY87aVG6/BwBwNW1N3ZijqqvAyf8AqzpxEdzOzwKTUtF5zDuY\n2zIFLcfOBSalsfrI7nuBDcM5/ql2sVxzOXD2O1hWtEJpSTbyoqYrn7tCKksvwZw0G4UZu1w3dlOT\n8mr4zbBk70Z+33lccNqDY+mBRLXfCF5ObGwsJSQkGG3GjcHGkUCP14EWtxptiaA2BUeBHXcCk1KM\ntkQZqzoDIxYDTfroO+6eh1i7tOOT2vV56Vfg4EvspPj5a9ev1uQfAXbeBUxS6XxmxAMJzwKt7wH6\n/AMICFV2fkk6SlcNQH1Ljrrx7ZAd2AMRUxOqi2paMZUBGwYDnZ7mhztkbkHu9qfQ1Kyd054b0AVN\nQ/2BLi+wWkXKV1zBPXoc0PUF15XnLSbg4krW6yzNADo/B7S4g3UrU74EmvTDhvKJ6JT5T5yNfhVj\nJ7ygme32uLhkCNZfjMR9Ub+hfudHgN5/AwJCPDLW3O1nMfNiR8xtmYKZozt4ZAwtkCQpkYhiXbVz\n4T4Kbmiir0kNCefL+2jUA6gqBEoygNAY1+29BavUkN7OV9QYfi9r6Xw1vxUIbASkL/JuPbnGPYGq\nfNYFrd9K+fkxU1mkPPF5YG0fYPA3vIopB3MlsOteoOtLmFt4D6bFxiA81H52Wl5JJcJX1EPe5Aqn\nbRYfSMcMvAocfBkY+HnNBonPXcvue0rBBB2Q+j2Cuz2Jufl3amN3QgamDWgFFO9C1eF34Lf/aVR2\nfAEhEw4Boa3l2eQXwH+PmKlAbgIqjsxB4KFZqGzzKIJv3gI06o7Ykkps/q0d7iqYARSOBxp1VXsF\nnFN8Ds2RAkuf71DRuxHqH38ZWNcHGPwdEDlC8+GmxcYAF6/9vA4Q244CxzQXUkNei+THN0RfKzkR\nGaeN2LVSrFI7Wq70SxLQ+20g+W3AYtauX62xvlfc0des1xQY9hPQ/yNgz4PAgT8CVUWuz0v6PyA4\nAvX7vIqZozsgvH6gQ8298A0s3RQeEgC8+ipgqbU9bbEg/J2/Yuao9gga9h1LJZ37pfp46g9A1k5g\n0Ff8tyFSr+9XWQhcXIXQzo+w3Q6cKgC/H3PVZuboDghvUA+Ivhnf1fsW/jDjx7Kn5TtetWkai3l+\n78EPFvxgeg1o1P33saaNvR1+fecAu6Y5Dx1x5xql/QC/NvfhibjuaBLeEhjxC9D3Xd4aTXgeMJWo\nm5cD5FxnX0I4XwLHhMfyykpZptGWCOzhizqPUXFA1g79nZXQtoBfPeDqKW37jR4H1GsGnP9Z2361\nJlKj90qrO4DbkgFzGbC2F5C5yXHbjHjgwjJgyDx2AAF5uo2zZwPvvQcMGFDtgFks/Py99/h4UCPe\nvk58jv+mBcnAoZeBkUuAwDB5YznT90tfBETdBAR7pq7ktIHscLm7imM9324/HR4HmvTlLWNHqL1G\nZGFnt8OMmq/H3Mnb8JX5wNre7jn81ztyovK96SGyHXVmx1Su/yPwPgqOES1vZ7QVylnVletP6c2e\nR4hOf6F9v5c3Ea3s5DoDy0jyj2r/Xrm4jtUD9j5BVFFQa7wjXOqgdnaenBpeZjNR3778Wt++9p9b\nOTOXy2Ks7FJXw9OdWk/rh3LGt1yM1G101k9lEV8fR/qmaq9R5tZrte6cXMMLq7ge1/6ntas1ptU1\n8yAQ2Y4CTYgeB1wWW49eScNugLkEKDlvtCXKcFZ13ZN4aqUw6iYgOBo4t0D7vrWiUQ/AVKzte6XF\neOC2ZJSbCBmr7qiR7WfeMgFnpVjkhfSteY4kAR99BDz/PPDxx4CfH/98/nl+HeDXEhOBvn2BpCTA\n359/9u3Lr/vZ3LY6/AEmBCKrPAh50Q8oG8tRxlvhSaA4DWgxQYOLZDCBDXg1MGkWJ+nURu01Sv0e\naD/DedZgy9t5FcxcwauklzdqM6frBOF8CZwTPQ64ssl7JBkE1UiScY6MOxi1XRoVx9sgWr+XJQno\n/Q6Q/E7d9H9vQZKq568lgQ3xg2k2Yip2InxFPWCBBCyQ4F9+ER3Kf8W2PWvs22J1tKzUvtFbHTBb\najte1/r6IfRHRFYdxeKEDHVj1SZtHtDuQdflDHyFRt2B/h9y/Je9OD2l16iqCLiwEmj7oOuxgxoD\nQ74FBs4F9j3BUk+VhcrncB0inC+Bc8I6AH7BQOExoy0R2MOaPehLRMUB2TsNiPtqAwQ0AAqPa993\nVBxQPwZI+5/2fWtFZJxHEjSs8UZ5kyuA6QRMJ+RNrsCG8M8xueRFjv+xxRpTZEttzT1rjJcttjFg\nNtw5qFsNOxSPZYvFxKUf2s+wf9xXafcQEDES2P+k/eB6JdcofRG/35XEw7W4FbjtKCD5A2t7AhfX\nKjL/ekQ4XwLXNL9WckLgfVhXvnxpZTI4kgtZ5h/Sf2xPrrr1fhtI/pv3ijN7aO72stDCQ4Nwy/hn\n4B9zJ/DbI3WDua1bWxZL9ZaX1QGwOl7WrUazuXoL0o4D5jALztVY9j4zlzewE30tc/C6YsAn/MUj\nZW71a2qukXXLUSmBDYFBXwJDfuAkgN8eqeuY30AI50vgGhH35b007AJYKoGSNKMtUYZW2XdKiYrz\nXHmOyFFAg/acBeaNNOzKVdCLdXyv9H0XKM8CTn7Az5cvrxtTZBtzBHA2Y+0YL9sYsNmz5Y3taix7\nmXxqHQtfICCEM0SP/BXIO8ivKb1GV08DRSnuxcNF3wRMPMI18tb0BC6sUN+XLyMnKt+bHiLb0QAq\n8ogWhrE+mcD72HU/Ucq3RluhjPNLiLZO1H/ckgyiJU09p8mYtYtoeZtqUWZvY+e9jjPf3MFZFlrx\neRZFztrlVHMvdyHrNuZeLSOaNatmViMRP7fzem5RGZ9XXOuaK9X3K88hWtRInR6kt2Y72uPcwmrd\nS6XX6NBsosSX3bPXlis7WJx71/1EZdmu24tsR8ENRVAToFE3IGeP0ZYI7OGLOo+Ro4HsXfoHqNdv\nBQQ28VwMY8RwIKwzB217I0YkO4S25qrnu+8DKnIcau7taVQMAAhfFQL0eQ/4xf/3AH4skPi5ndfD\nV7KcTZ2Ae6X6fucWsGanGj1IX6LNPTzPvY/xc7nXyGLWPh4uciQw8TAQ0pwzIn1BK1UjhPMlkEf0\nLWLr0VuxbuH5VNxXMw6Az0t03VZrPO2s9nobSP47p9h7G1FjWGFA7/dKy9s4O27Pg/aF1UsvYWLx\nq1jd9McagftyHgU3JaHELwrT+jd3z8brecuxNv3eZ23IUx/LPydzIxDSAmjcQ1tbAuoD/T8ARsbz\nlujOabxVfZ0jnC+BPJqPE0H33kpYR/5ZfNZYO5QSOcYYeSRPr/5EDOW6WqnfeW4MtYR1YuenOFXZ\neWYzr4SYzfZfBzhY24EsEF59Fej5NlfGP/bPWsdNwJ774df5adx+60NOJYjsvd44ug9Cm7RF+NVt\nyuZkS/5hXpWLuqnuMVfzsr6uVqZHTnul/bjqa+VaYPhC4PgcIGevvP5Sv69b0V5LuyOGAhMOcYb9\n2t7AuZ996wulUuTsTXrTQ8R8GYSpgmhRQ46LEHgfux8gOvOV0VYoIz2eaMut+o9bcpFocbjn4r6I\nuLL7slZEpjLPjaGWXdOJznyt7JwpU4gAombNiEwmfs1k4ucAx+LMmkV1qtDbVqefNYuvfXxzosub\nq/s+NJto8y3Vf4/4eKpTYd228np8fF37Tn9JtONuZXOyJeF5oqTX7R+TM6/5UG6zvfglNXN3FAcl\np6+MFUTLWrv+v16eey0eLk/9WErI2U+0ugfR9slEpZdcz9WLgMyYL8OdKaUP4XwZyNbbOVhT4H2k\nfMNBq75EeS4ncpgr9R97ZWeivEOeHWPrbUQnP/XsGGo48zU7YEqwdbSsDpjtcyWyQJc3sgNWepno\nwhp2UsuyqsdSI3lTUcDOgZovh6YKoiURRFdT7B+XM6/5UG6zPUdCzdwdOSRy+zr4Cie/OPsycuoz\nol33OT7ujpSTI0zl7BAviSA6O4/7EM6XcL5uSE5+TLT3caOtENij6Czf0NT8kzOStX2JsvboP+6+\nmUQnPvTsGDkHiOJbet/q19UUovgWyt8rtg6X9WF1xKw3RVvHxPqorcdIRHTkLapc3Y9Kfm5Khee3\n1B3L9uZtfbi6ie+aTnTyE2VzIiJKX0q0cZTzNq7mNR/KbZbjNLnTj9y+zJVE64cRJc9x3M+6AUSX\n1js+rsZuueQeJFrThyo2jbef1eplyHW+RMyXQD7R41ifi67jfXhfJbQdIAUARaeNtkQZkXEcAK43\neigDNI0FwvsDKV95dhylNGgPSH5A0Rll5/n7A5mZNV/LzOTXrciVBeo6C/6FScgr98PPaa3rjqVG\nFqjDDI5LUspZGYH2cualxmZ7aNWP3L78AoERC4FT/wGubK/bR8FRoPwKEHWzfnbbEt4PGH8AJ4pb\nAACW7Pex2FYHCOdLIJ+GXQEyK/+nLfA8kmScZqI7GGVz5Ggga4fnJY56vQUc/xdgKvPsOEqQJHVF\nbs1mIDq65mvR0TWD8OXKAh19HaamI9G4noTpMXbknoiUSd4AHCxfkcvB83Ipy+SSJzF3O28nZ15q\nbLaHVv0o6at+K2DIPGDPA0DZlZrHzn4PtHsE8POHU7S0uzZ+gYgZ+19cCeyN+1ufdL8/L0A4XwL5\nSJKQGvJmfFHnMXIUZ1uZK/UdNySaawsVJHl2nPD+QNPBQMqXnh1HKVEKM02tjldODtCsGWAy8c+c\nnGqHTK4sUMYyIGMpgunIw0EAACAASURBVOKWocHNixGW9AegxKZGl/UmrkTyBuDVvPaPKFv9Svsf\nEHMnENjAcRu581Jjc23Uzl2LvlqM5xXAPQ9UfymxVAHn5wPtH9XPbgeEhwYhqu8zCLv0k9t9eQVy\n9ia96SFivgwmbQHRtklGWyGwR1Ea0dIoH4z76k90Zaf+4+5/huj4+54fJy+JaGk0UVWx58eSS1Gq\nsveKVtmORWc5gDp7b3XfyXM45siaeOFO5py1fzkKAxYL0apuXGXdGddztmNtzCaiTWOIDr/Jz9OX\nEW0Y6fDSuDWWGioKOOteTjV8g4AIuBd4hLIrnFVkRIaawDXL2xIVHDfaCmUkvkx05B39xz2/iDMS\n9WDHVKLj/9ZnLLksbyP/vWIysQNmdbxqv27NdnQmC1RZwo72yY9rHreYOdvu4CvXniuUvKnNxtEc\nRO+K7L0sbeOqP1fzsmY7KrXZUbajFv2o7YuIs1DjWxBd2sBftOXIUbn7N1PCrulEJ/6jXX8aI9f5\nkkiD5UA9iY2NpYSEBKPNuLFZ1w+I/YylVATexd7HgPBYoPMzRlsin4trgJMfAjdv1nfc8mxgVSfg\nrhzAL8CzYxUcBbaMAyadBQJCPTuWTCq234fEorboOuYdhIcGudfZAokrzjvjwB85cHvE4rpB2BW5\nwLr+QOwnQKvJ7tmS+gPL1MStct5u/1NA/Rig51/cGw+QN38tzvFkP7Zc2QrLzntRVVWGkonnEd4o\nXNv+3SFzE3DwFWCih0MGVCJJUiIRxbpqJ2K+BMoRUkPeS2Sc7wXdR4wAcvfrL8cTHME33/xDnh+r\ncS+Obzv9uefHkkludioGFryP3bsXeX6wc78Al9cDg7+1n/1Wryln3O37A1Cc5t5Yre/mIPqyTMdt\nTGVA+iKg3cPujXW9EjUGqf4DUY+KsTgp32hrahJ1E1CZD+Tp8Ln1IML5EihHSA15L1FjgKztvlUO\nJKgR0LCbfJkTLdFTlLznm8CJ94GqIn3Gc0FkcCUONXoOE4tn8ypQ1VXPDHT1FJD4HK94BTVy3K7Z\nEKDHa8Cuae454gGhQMxUDqZ3xIVlQPhAIDRG/TjXOeHjlgIApsV62TVSk1jhhQjnS6CciBG8jVJZ\naLQlgtqExgCBDYHCY0Zbogyl2XdajquX89W4BxB9M3D6M236Iwe6eY5etyX/MAJMeRh02/vwvz0Z\nIBOwphdwab02tlkxlbIz1ecfXK/Jlc2d/wTUbw0cfNm9cds/yjdnR9fgRhLRVkl4g2D+6e6WtCdo\n/yhw/mfvFK+XiXC+BMrxDwaaDfO97a0bBT1Xc7TCKJsjRwPZuzmlXg96vgGc/EibVably4GpU2um\n8tO1lP+pU/m4I1JtajcFNQIGfwMM/ho4MBPY+zhQWeC+fQCQ8BzQuDfQ4Q/ybF6xAhjyHXB5HXB+\nofpxI0bw3zR3f91jJelA3kEgZor6/gXG0qA9i9dfdBHX58UI50ugjubjgEwR9+WVRBq0iuQOESOA\nvAT9i5HWawo0aAfkJbpuqwWNurFSxKlP3O9rypS6tZRsay1NceBcmCuBcwvq1m5qfgsw8SjgXw9Y\n0xO4uNo9+1LnATl7gIFfVsd5ybE5qDFvUSY8C1xVqdggSdWrX3Xs+gFocy9/iRT4Lu1VKhp4CcL5\nEqjDKjUk8D6i4q7FfVlcNvUaAsOARr2AXCPivnSust/rDeDUx+5v21vlXKzOjJ9ftRPjTNbl0mp2\nAsM61D0WGAYM/AIY9j8g8Xlgz0NARZ5y2wqSgUN/BkYsqVnAVK7N4f2B3n+DafsUfLv1MPJKVBTh\nbfcwLOcX4putydXnkwVIm2f4lqPVHlXz8kA/Pknru4HsPUDpJaMtUYUoNSFQB1mAZc2BW/byyoHA\nu1jVmVcPmvQx2hL5JM1mnbne7+g77oUVwOkvgJs0jndyxp6HgbCO7Ii5C1FNjUGLxbme3rY7gNZ3\nua5abioBkl4DMhYDsZ9zJXhH2JY7qCoC1g8Eus/mwGi1NpurULo4GvUtKpy/Wnzd4gT+ENeVtQsT\n/sgrfO5qDtqisNzD1rX/xpiCWZoNvyhyLe4ZO0Gz/n7HE2UstGTv40DDzkD3V4225HfklprwcHEb\nwXWL5MerX5kbgY5PGm2NoDZWqSFfcr6ixgDJf9N/3MhRvMJjrgT8dQou7vlXYONQoMufeJtNLdZt\nO1tefNHxypdVy3D4z677DggFYj8GWk8D9j3GMVixn3KJDmf27H+St5GdOV5ybE5+G4FNeuGrel/h\n7oFtVQV+5xVko2jzPXjE9Cegaml1oL2WjpdSCpIxuvQ9LIpci7FDb3YroD2vpBKHt3+Mu0pfBKpG\nOpdJuh5pPwPY/wTQbZaxf1MViG1HgXrE1qP3EhkHZPlY0H3EcK65ZSrVd9ygJrwKlXdAvzEbdgJa\n3sHB92qpHS8lR09PjpZhbSJHABOSWHx5bW/g/CLHWYQpc4HC48CAT92z+dI6IHUeAkctxJNxnVU7\nKOGNI9Dmzo0ICmsL0/rhqExbjPzIaar60oSqYmDXNPj1fx/3jJ3gdiZheGgQxkz8M/wjhwP7Z/pW\niRktiBjOuzBGlKlxE+F8CdQTPRa4sqVahFXgPUTFAVk7fOtvExAKNO7DQdp6Y4QoeY/XgTOfq4up\nAjhzsHa8lG08Ve1sRyL1JRYC6gP93wdGLQOOvgnsuhsou1KzTd5B4Mhfebs7IES9zSUZwN4ZwPAF\nQEiUcltr4xcADJqLy+VhIEsVFiXrlNlaGyJ2kJoNc7wqqJbYT4HCo8DZr7Xt19txlljh5QjnS6Ce\n+i2BkOZA/kGjLRHUJqQ5EBwFFBwx2hJl6B38bsUIZYCwDkDLySytpIYpU4D4+JrbdVZnJj6+brZj\n7n4uvxAxQr3NzYYAEw4BYZ2Bdb2BtPnVqy27prHsWMPO6m2edBuw+16gywu8HawVkoTQW9fD4heK\ne7sZFJx+9mt2kGIdrAq6Q0B9dnoP/8XnK78rpt3DQPpi/VfM3UQ4XwL3iB4npIa8FV+UGjJiBQrg\nG33uPv2LNvZ8HZZTX2D+pm3KM9YkCbjzzrqxLg5eLz/9Dfb7TUJeqZsrP/7BQN85wOg1wPF/oXLT\nRO4/4hYu4eCOzYdf423g7toFo1sJD2uAkC6PoPHlBZr37ZK8Q+wYjVjMjpInaNiFnd9d026sAtj1\nWwHNBgMZ8UZboggRcC9wj+hxwIn3tBGnFWhL1BiO8en2ktGWyKfZUKDgMMfG6Bk8HNQIaNiVV4ci\nR+o3boN2yEczPJA1Bljh2aGCAQwCMDfhGcwcbafMhFKaxgLjE5EXPwjRAPblt8JoIvWBzxdWABlL\ngPGJnNDjCdrPALbfAfR6iwvM6kFloc2qYBfPjtXmXg432Pe4fQHz65X2M4CUr4B2DxptiWyE8yVw\nj6jRvE2g981S4JqoOM48s5j1u9G4S0B9oEl/rjrf4lZ9x7ZW2dfT+QIQ1PdtpB+diwbjN3hUyiWv\nuBzhK0O01erzD0J409ZILB6G4bQY2LYLGPSVcs3E4lQW1R69igvfeoomfYB6zThWtfk4z41jhYgd\noea3ul4V1Ir+HwIbhwOnP+Vs2huBVpOBA88AxeeABm2NtkYWYttR4B4BoUB4LH/bEngXwZEcl5fv\nYzEgRuk8RhoTbxbWehxaWw4hPEThv2OF2o4Otfrc0Ygsz0JQ7g4MmPAuAiYc4OyzX/vzKoTczDtz\nBbDrHqDHX3j7yB175KBnZfTTnwIl59ghkoMWc/evB4xYBCT/HcjZp9hkn8Q/GGhzH5D2g9GWyEY4\nXwL3EVJD3otBDoVbGKbzOILLTZjL9R03uBkQ2ka5xJE72o5a9ZP2E686BIZxgdyerwM3bwVSvga2\njOOVCFccfJnnb12l0Wpejmg7Hbi0Vjv9Skfk7GMHaMQidojkoNXcG7TnFcjd96rPpvU12s9gSStf\nUfYgIp96DBgwgAReRs5+otXdjbZCYI/zS4i2TjTaCmWYyogWhhJVXtV/7F8HEWVu1X/cA38iSp6j\n7ByLhej554kA/mnveW3mQ5t+rOet7mn/epmriI79i2hJU6JTnxFZzPb7OPcL0YoORBUF7tujhB13\nE53+r/v9WKl9XctziZa3IUpfpqwfreee+BLR1tsdX39X2Hu/eCu/vx+3GGoGgASS4csY7kwpfQjn\nywsxm4gWhxOVXDDaEkFtyrKJFjXkm6EvsTGO6OJa/cc99CrR4Tf1Hzd9GdGWW5WfZ3tztj4c3KTz\nM/YSzQflFle41c/v5BwgWt7O+Y294ATR+qFU+esoWrBpU42xC9J3UOnPTajgwl5t7FHChTXsaGtA\nXu6FGtc192opZSwZTqV7n1fXoZZzN1cSrR9KdOxddbb4kvNFRHT8A6LdDxlqglznS2g7CrRh1z1A\ni4mu9eIE+rO2NzDoa46n8RWOvs3agv3e03fcS+uB4/8Exm7Xd9yKPGBFW+DuXN6+UwLJ0EksSIZl\nbR/4wYK5LVPsZzvK6ceWA3/kWnKu9CktZuxZ9waGFf7T7mHN7FGCxQSsaAPctBFo1F35+WVXgAvx\nQPoSVGQdQD0qqtPkx6g9ePjmoers03LuJRmstTlisfJkEm/XdqxNeRbr2k5JBwIbGmKCXG1HEfMl\n0AYhNeS9RBoUwO4ORhVbjRjOsVemMn3HrRfORVdzFX6xJAc6ibZfqk0lwO77UN7pzyjzC8e93ezU\n+ZLTjy3mcuD8L/Iqtfv5o2vcmwCAvMkVfDOfTsifcAmFfq0wvYUdWSel9ijFLwBo95CywPuyy8Dp\nz4FNccDqLkDWTqDzsyi5LQNzW6b8Pre8yRVICn0C99Hb6uKPtJ57aAww5Htg9/3snFzPBEdyzOj5\nRUZb4ho5y2Pe9BDbjl5KURrR0kj1sQUCz5Eer25Ly0hM5UQLG9SMBdKL9UOJLm/Wf9yEF4mS/yG/\nvZz4IIuFaM/D/LBYiE5+TLS2P8fVKemnNud+Idp0s7L52dvCyk0gWhJBdPWMe/aoofAk0dJo3ppz\nRMkFvmYbRhItaky0+0GijOU1r589zJVEG0YQJf9TmU2enHvSa0Sbx3KYiFx8bduRiP8+64cZNjxE\nzJdAd1Z2IspLMtoKQW3Kc4kWhjm/yXgjm24iurBK/3GTXiNKel3/cTNW8M1RLvHxdW/Ktjfr+Hii\nlG85GaaquPr4jruI9j+jrJ/abLmVKPUnZfNzdCM/9TnR2r5EVaXq7VHL+qFEGStrvlacTnTiI76B\nL25CtOcRfh+aypX1XXKBnbvM/2fvvMOjqtI//rmpkBASAoQSepWmoUiXYkdsqIgitrW7u9a1sLi2\n1V1lXV3157r2igooCtJEpEjvvfcWSEjvbeb8/jgZ0ibJnZl75045n+e5T5g7577nnZsh88457/t+\nl+m/xszXbisV4teRQmx/Sf81/hh82UrkQkD2XkumV8GXwvusf1iIXVOt9kLhjPlJQqSuttoL19jx\nd1mt5W2SFwmxaJj35y3OlKt9ZU4S4p1ht8sP4+qrIY7z6VuE+L6ZEFm7q82TJSsMj3yrz0718/kn\nZFBSmq//tQlR+we53S7EiglCrL3PPX884cCHQiwfJ0TeUSF2vyHEwsGyeGjN3bLgQ+/vojaSfxFi\nVmshCs7oG2/2ay9IFmJWKyFOL9Y33h+DLyHk340tz1oytd7gS+V8KYyj5WVwRuV9+SQJoyDV3/p9\nWaTz2HwYZG6VuVLeJCKOsgZtWbDoC306j3XoJGaMvoisX8eR1+tfENuj2jyxMHwm9o1/ZvriRVLr\n0QWNyIJ9n7E77Aoyig0SSNE0GPQRtjPLWLLgDZf98YSMJtcgTv5I4ezzKcrYLWWHbjgDgz+F1mMg\n1EPFgVaXQ+d7YfVEqTRRHy7qdbpMw1Yw5GtYczsUJHtmy5fpdDcc+VLfPbcIJS+kMI4Wo+V/6rJC\nCGtotTeKyrQYLbtt9/qr1Z7oJ/5CyN0PJZlSbNlbhEVBk75wdrV3JGgqUZp/hjHifph9v0d24st/\nfpByEQ+c52xAX1ZGPcaE1Ctc1pSMAnoCH2x8xRiNSIDwGGZFv8X41Kth9lPG2NSB4z5dsP1TnkxM\n4oHWBr2eyvR+HpZeDjtfhvNfMt6+q7S8GLo8BKtvhYt/k8UHgUZcb2jYWjb/bj3Gam+cEoB3XWEZ\nEbEQdz6cXen1Dy1FPSSMgNW3ga3E82/z3iI0Qgptp/4uu6h7k4RRstrSm+/jkiwiQ2yka91o0ONh\novs86rapjPwS4mdH1qnj2HvEX2DOc2RcV+ySpmRGXjHxcxoYqxEJXDLkMpiNy/54Qu7hn8nc9A8e\nuqSP4a/nHCGhMPQbKbvUfJhcDbOa3lPk3+ntz0OS8xYgfo9DRspHgy+17agwFrX16JtExEFMN0hf\nb7UnrmHV1qM7+pLCQ12+Y98R0vpymo6ZR/T+VyHdSQuGypSWQteu8me18/FJvQCIjwqv1af4X+fX\nO8a5RqSUyqkRINnt8Mwz8qez83XYRAjiF81zyx9PiCk9QrsOfXn8sm7mBnwNW8DQabDmTig4Zd48\netFCYOjXcPQrODXfam/MocOtcPoXn5VX0h18aZqWoGlaO8ehY/ynmqalapq2s5bnR2malq1p2tby\no55OfQq/oJUKvnwWq3pneYJjBcrbNBsCWduhNE//NZ7q8h3+TH5bj+kCF74vGxeXZNY+vmdPOHgQ\nGjasCMBKS+Xjgwf1+WSE3w4mT4apU6F//4oAzG6Xj6dO9b4/esjZBzHdjbNXFy1GQfc/w6pbwO6k\n15q3adAchn4L6+6G/ONWe2M8EU2g1Rg4+o3Vnjinvox84FrgAJAPHAHswC4d140A+gE7a3l+FDBX\nT1VA5UNVO/o4thIhZsQKUZhitSeK6pycK9s3+BO2EtkmoyjN+3P/OkKIUwv0j/ekR1PWLlkVV1kG\nauOjQiy7tvbrSkqECA2V9kNDaz6eRv0+6RmjVyPSZhMiKUlel5RU87GZ/rjL4ktc+x17it0mxJIr\nhdj8tPfmrI9dU2WVp7PKTn+tdnRwaqHsa+dFMKrVBLANaApsKX88GvhEl3HooIKvIGT5dUIcmWa1\nF4rqFGeVtzJwsV+R1Sy5UjaK9TbbXpBaj67gri7f5r/UnKusWOoP7n6j9usqB1yOwxGIOT446/JJ\nz5hqZB9bUrtGZOWAy3E4AjGT/PGIH9sIkXvIWJv1UXhWiB/b1uwvZhV2mxDLrpFNfqvj78GXrUz+\njjO2eW1KvcGXnm3HUiFEOhCiaVqIEGIpUK9ukU6GaJq2TdO0BZqm9aptkKZp92uatlHTtI1nz541\naGqFaai8L98kIhYa94C0tVZ74hotRlmz9ejONq2mwVtvVT331lt1twiwl8KRr+WWY2VCI2D4DNgz\nFc6ucn5teDgUVpNCKiyU513xSa/fBclEr7wSgJkbT9T0JyQENm2qem7Tpqo6hUb64wll+VCcBlHt\njbOphwbNYNh3sP5eyDvq3bmdoYXA4M/h5I9w4kervTGWkFDoeIdrMlJeQk/wlaVpWiPgd2Capmlv\nI7cgPWUz0F4IcQHwLlDrRr4Q4kMhxAAhxIDmzZsbMLXCVBw6j458DYXv4E4iudUkWJSr1mwQZO+C\n0hz91zhykypTny5f8kJo1BEaO8k9im4Pgz4p1+Vz8sXTkeNVmco5YHp90jPGXgarb6Wk88MUhDTj\n1g5HavrjyPGqTOUcMCP98ZTcA9Cos/yA9jbNh0KPZ2Ren01HTzeziYyHYdNh/QOQe8hqb4yl411w\ndJpv3OdK6Am+rgMKgMeBhcAh4GpPJxZC5Agh8sr/PR8I1zStmad2FT5ATFfZOyZnr9WeKKpj1SqS\nJ8T3g4LjzoMPMwltAE0HQupKfeMdAcPbb8Ojj8qA49FH5eO6AgdHon1tJF4NHSbKHnqVhZodgZfN\nBqGhUFIif9psFQFZfT654vf25yGkAQ0H/puoEV/RePNdUJhS4Y8j8Nq6FZKSpB9JSfKxIyAz0h9P\nydnnPOD1Fuc9DlGtYYv3+prVSbOB0Ptv5QFhkdXeGEfjrvL3nOxjVZ317UsCY5yce1DPniZ153y1\nBLTyfw8Ejjse13WonC8/Ye29Quz5j9VeKKpTkiPE9OgKHT1/YelVQhyb6f15t78s87H04I4uX2Gq\nLFApya7btq1UijvveKXiXJcuVXO8hKiaAzaN+n3SM2bWLCFOzpO5M4WpFfNvnSIT1h1CzU8/XTXH\nS4iqOWBG+mME218SYstkY2y5S3GGED91tOa97Qy7XYjfbxJi/UPysb/nfDk4+IksXvECGJhwvxq4\nuNLjp4AFOq77FjgNlAIngXuABx2BG/AnYBcyoX8tMFSPwyr48hOOThdi6VirvVA4Y+FgIc4ssdoL\n19j9r6pi0N4i5XchFuj8m+OOLt+et4RYNUmf/XNCzeW/u5ISGYCVVBNMd5x3VA7W5ZOeMblHpVBx\nyoqqz9tKhfh1lCxMEEIGWk8/XRF4nRtXft4of4xKul85UYhDnxljyxPSNgjxfXMhcg5Y7YmkOEuI\n2V2k9megBF8lOfJLjl6NTQ/QG3w5Vp5qpXwrcG550HUlcB5wqxDCkg3UAQMGiI0bN1oxtcIVitNh\ndke4Mc1/OqoHC1snQ0g4nP+y1Z7oJ2MTrLkDxu7y7ry2YsSMOD5P+J3rBl9gbCNOIWBBEvR7S0q+\n6OH0r7D2LrhyEzRsWeuwzKxUmsxvUWe3eEcX/DrH5OZRuvAiYrreTFTS5JoDCk/Dwv4w+Iv61QC+\n0WBiPVuGesYYxcIB0P9daD7EO/PVxf7/wqGP4LLVviHNlrkV++LLCClN86rigKmsuQvi+kCPJ02d\nRtO0TUKIeosS6835EkKkIXt9vQe0Bm6yKvBS+BGRTeU+e9oaqz1RVMcfm63GJUkh4Mo5Rt6gOB0h\nSrg7ZSC/rF1hrO3MLTKZv8Uo/de0ugw63ycT8GsTDRaCrCWTAIifHSkDGidH/OzI+sf8HEOL0q18\nlXWT87katirv3H6Hb3Ru14sQkLPf2pyvynR9SDZ73fyY1Z5ImiSxP3wkUEtVqz/ikBvykUKwWoMv\nTdNyNU3L0TQtFzgIdAPGAzmaprlQ/qMIWlTLCd+k+TD5wV9WYLUn+gkJhYSLIHW59+Ysr+4r6j4F\ngAmZE2DPm7UHPa5y+DPoeKcs9XeF3n8DLRR2vOj8+X3/oW2DTD5qvYuM64rlSpKTI+O6YgBdY8Zf\nWEc7hhajodsfyzu3l7n2Wqyi6AyERsoqP19A02DQR1JK68jXVnsDQIuL3qZYa8T4vgHSYSBhBNgK\nIcM3ds5q/V8vhIgRQjSu9LOBEKKR47E3nVT4KUpqyDcJi4a4CyBttdWeuIY7K3ZCuK8TWF7dF9Xv\nRQBCrlgHp+bAr8Mhe49rflTHVgzHvoVOd9Z8rl6NRE2uNh3+TLapqMzZNbD7NcJGzOS+UT3r1nZ0\naCk2DKt1vviX/ybH1Ke32HOyfF9tf87FG2ERRlc6evI+cxAeA8NnwubHIXu3cb65SZOmiUQ2SyI+\nr5Yec/6Gpsm2Ez7S86ver1yapv2m55xCUYNmQ+WHlI8KmwY1/rj1mDAKUl302V2dwFPzpejw0K8r\nVqZiOsMlS6Dj7bB4BOx6ze2Vnvwdb3LG3o4MLbHmk/VpJE6eLIWah30j87/yy7eFitLk6tPAj6BR\nB32vX898euzMngNDvpL9lE7NdeueeJWcfVJo3iiM0qNscj4kvQ4rx8smsFaTeC2cnGO1F8bR6U44\nNt03WmnUlokPNEDKCm0DmgDx5UcHYK+ebH4zDlXt6GcsGeM7ZdSKCk4vFuKXoVZ74Rp2mxAzmwhR\nkOzCNW7oBOYdq1ndV73qK/eIEL9dKsSCAUJk7nDNn8NfibJpYeLgJ63F/5Y6qXCrTyOxcjXhzn/K\n32NZkfy/tvkp117/NIzRZHTcx9SV8t7lHa35uvRUznmrum7j40Lses04e0bqUdrtQqy+U4hVtxsv\np+QqWXuEmJVovR9G8tulspLTJPC01QTwKFJIuxg4XP7vI+XB2J/0GDfjUMGXn7HnTSHW3W+1F4rq\nlObLfl8luVZ74hrLrxfiyDeuXeOKTmBZsWzFsWtq1fPOggK7XYgDHwnxfTORv+kF8eHSPc71DsvJ\nOHtEHP1htCj9ubfIOr5MnJ3RQ+TteNv54Lo0Eqv4YBNi6VWidE5PkTyzv0jPyXPt9Ttel6eajJXZ\n/S+pSVldqNmXgq+lY4U4/qOxNo3UoyzNE2JuLyEOfmysj65itwsxp6sQ6Zus9cNIjkwT4rfLTTOv\nN/jS02riz0KId41fc3MP1WrCz8jaCcuvgWsPG6vLpvCcX0dArynQ+gqrPdHP3rel5M+gD127Toiq\n+oJ2u/P346YnIO8gjPipaiJ8XS0Q8k9wfOHttCvWVwzwUevd3DeqB+QehEVDYdR8aOqkMt1ulx3r\nHdhsVV+DgyPfINbcxj9O3U2zgVN4YGTnmmNqe/2VX1dt81Ueo+c+CgG/XweNOkH//1Sc96VWE3O6\nwsg5ENvDWLt632d6yN4jt7cvXgxNLjDGP3fY/BcIawTnv2idD0ZSVgg/JcKYbRDd1nDzRraaeFfT\ntN6apt2sadodjsMYNxUBT2wvsBdDXoDphQUC/qjz6I7PQujTCTzxoxQXHvy5axWI0W1pdMUvQD2V\ng9fKPJMbLywPjmK6wIX/lXIuJZlVberRSATZemPrUxT0nMrjbecwoYeTHDQ9r98oTUaQwcaQL+Dk\nbDj+Q01/rMZWIuWqGjkJUj1B7/3RS2wP6P+2zP9yRV/UaBKvgVM/Wze/0YQ1hHY3w5EvLXVDT8L9\nC0jh63eB0cBUZN8vhaJ+NE21nPBV/FHnMa43lGTo7ynl+ECsTycw95AUFR423a32A/GNyntm1dGM\n0umYdjfJD7e1d1f4Up9G4rmkeBusngid7yE66Smikp4jbvMkWUmp9/Xrmc+V++ggogkMnwEbHpQr\nfL5E3iGIamtsSlHbPgAAIABJREFU82dX749eOkyEFhfDunut60/VfBjkH4WCk9bMbwad7obDn1vb\n86u+fUlgBzJI21b+uAXwq549TTMOlfPlhxz+Sojl46z2QlGdssLyvK8cqz1xjd9vkO8pPejRCSwr\nFGJ+PyH2vlO7HaPylZyNKSuWOVK7/y0f16eR+PTT8ty254VYPLpCW9Ful//PNvypwrYeLUUjNBlr\n01vc+64Q85PkPfaVnK/jP0qtUCMxU4+yrFDew33/Z4yv7rDqNiH2v2/d/EZjtwvxcw8pH2YwGKjt\nuL785yagMaChqh0VrlBwWogZcVILTuFb/DpKiFPzrfbCNfa+K8Tae/SN1aMTuP4hKSZcV2K0mcGX\nELJ68ocEIVJX1a+RaLMJkfyLELNay/9blSnOFGJ2J6mtKoQ+LUUjNBlru3d2uxArxgux7gHfCb52\nvS6rHY3EbD3KnANS/zFtvWd23OXodFlNG0jsmirEmrsNN6s3+NKT2LBR07Q44KPyAGwzoDRjFPpp\n2BKi20H6Bqs9UVSjoHF/Dq19h4x8P1IMc6VHmabBuHE1k54d5499J/USB31sbUFIow4w6BNsK2/h\ni2WbyHj+7zWT60NC4PXXycw4Rv7ySeT0+7ymvmNEHAyfiX3DH/lu8WIyCkprff0Zl0g9yYzCMnj9\n9Vrnc4yv8z7Wdu80DQZ9jO30YjmXL7zPjG6wCu7fH73EdIEL33eeH+gNWl0BZ1dCaZ735zaLjrfL\nPE+LXpOehPuHgXwhxP+Ay4A7hRB3m+6ZIrBQeV8+ydHkE7QvXMS8dZusdkU/sT2hNBfyj3tmJ3sv\nbHoELpoJEbHG+OYJiVezPfQq7jwzsE69xSaLOhFtP8u3Rzs5txPfj5VRj3BL6mV16zbOjQNg9nqT\nu6mHN2ZR5DMA/LDeB/K/ck0IvrxBuxuhzXVSINrbuUoRsdBsUGD9DW/YEpoPhxPfWzJ9XdqO/cqP\nm4BvNU3ri2yyGqZpWj+veagIDFTw5ZN0ah5DcoNh3FL6rP/o8mlaebHAMvdtlBXAypvggn9AkySj\nPPOY9pe8A+jUWxxQe5l875HP6LKzK3oit/Gy6R/mgy66k+SIC7mlzU5T59GF0d3tvUnSVKlLufdN\n78+deK2U1wokOt9tmdxQXStf/y4//gi0ARZWOveG+a4pAoqEiyBzq7Ul04oaNMhYQbvR/yE8PAJ2\nvOCdSYUBOngtRrsuNVSZjX+EJn2h872yum/cOPmzMtXP16W36Djv4Zj4hmEAUnexlvsTHxUux+jR\nbaxnTK+xHxNRdAz2m9vKMT46gtb9Hibm1FemzlMvxRmyGrRhK2v9cJfQCFlFumcqnPWy5mLiNXBq\nnnHC8r5A66tlP7VcC1oh6UkMkzlkPKJ3rJmHSrj3YxZfIsSJ2VZ7oXCQf0qImfGyS3phipQR8Uby\nvRGVYVm7hfipvXvzH/xUVjo5uvtff72ct1kzIcrKKwfLyuRjkM9Po/4KRKPH1HV/9FQg6q1SzD0k\nk7nPrnV+v4xKgi/JlYU31YsEzJirNs6uEWJBAHyGnPxZiB/bClGY6t155/WRRSGBxMZHhdj6nGHm\nMLDasQHwBPAj8APwGNBAj3EzDhV8+TG7XqtaBq+wlsNfV20BkrJciB9aCJF33Nx5jdDBs9uF+KGl\nrBJ0hYxtQnzfTIisXRXnKgdajgCs+uNp1K+3aOSY+u6PHr1FVzQZj8+SwWxRes17ZmRAtObumtJN\nZs3ljEOfC7FyorlzeIstzwix5Ar55clbbJ0ixJZnvTefN8jYKgNZR8sWDzEy+JoBfIJssDoaWfU4\nU49xMw4VfPkx6ZuE+Lm71V4oHKy9t2Zvq12vSW3D6rp8RmOADl7Rb1eL1T8/W6eeYmXS046L7O/a\niNw9n9Z8snLA5Tgqr4RVF6B2prdo5Jj67o8evUVXNRk3Pi5KFl4k/rdk77l7mp6VKcQ0dN/jekn5\nXa461vZ7Njv42jJZiO0vmTuHt7CVCrHoIiF2vOK9Oc+uFWJuT+/N5y3m9xUieZEhpvQGX3q0HXcL\nIXrWd85bKG1HP0bYYVYLuHKTbD2hsJY5XaSGYVzvinPCDsuvldVg/f5t7vxCeKSDd2TWZXQsWuzy\ntJ+12sTdo53UDNlsEBZW8bisrELr0KE5WJfeotFj6ro/evQWXdVkzNiCbeEgQimtcWvWNn6KwVf9\nA0LCajznEkLAz91g6Neyeq46Zms7rrgR2o6HDreYN4c3KTgFCwfAsG9kHqTZCDv82BouWwUxBssz\nWcm+dyFtjbyPHmKYtiOwWdO0wZUMDwJU9KNwHS0EWl6qqh59gfwTUJot2zZURguRunwnfpA9cMxC\nCI918NpEFTC36ed1VvRVr+7bHn0Xt4nna85js0HLaj2zWrasmoSvR//QqDF674+ecXrGlObB6lsp\n7Ps+HyQePHdPM64r5psWS+kfsVGKgGd5WK2oadDpLssqzMjZ759tJmojKhGGfAmrJ0HhGfPn00Ig\n8erA0noEKeOUPB9Ksrw3Z31LY8AewA4cLT/s5ed2ANv1LK8ZeahtRz/n4CdCrJhgtReKw1/Kru61\ncXatTMLOPWT83EbkfJXmSWmk0nzX5i4rFmLhICF2/6vSuSDP+bLbZR5UXaoBdrsQBz6Q+XI7/i6E\nrcS1+16ZvONCzGwiRGlBzefM3Ha0lQnxXQP53gk0tr1QVWrKTE7MlnMFGr/fZIiEEgbmfLWv69Az\niZGHCr78nLzj8g+4N5NEFTVZc3f9WnF7/iM1D8sKjZ3biGrH5F+EWDTcvfnzjpVL+ayUj4O92nH/\n/4SYd77zYKjGvTsuxJIrpdZgxhb37r8QQvx2uRBHptU8b2bwlXtYiB/bmGffSmxlspp829/Mn6s0\nX4jpMUIUZ5g/lzc5OU9qrHqIYcGXrx0q+AoAfj5PiPSNVnsR3PzUoWrFnzPsdilivf5hY+c2Qgdv\ny2TPysNPzpUfxIWpMtC6/vqKwMtB5fMOAeq69BaNHFPf/dGjt6hnTNpG+WUoe5/+e2e3C3HoM3nd\ntr+5V5xx5Fshfru05nkzg69TC2SAEqgUnClvF7PQ/LmWXi3EkW/Mn8eb2EqlXmp9fxfrQW/wpSfn\nS6EwlpaXST09hTXkHQVbATTuUfc4TYNBn8LpX+Dod8bNb4AOnu3oDH4+0819rcDEsdBhEqUrJvLB\nisNkfD29agI8yMc//kh2yhaAOvUWs1O21zsm6+ze+sek7ZdjLh9b6/3JzDgpx9Sh28i4cVX/7WzM\n2Ith1QQY8H/Q2IWO7468rTFbIWMLLOwP6S6mAbe9HjI2ey4R5Qo5+1x7nf5GwxYyYXztXVBw0ty5\n2gRgt/uQMKn36KV8RA9LVxQKN2h5Gez7D/R61mpPgpPUZZAwSl9lYUSs7Ki99AqI7+sbycon5xJS\ncIj1+1eR3GAoD4x0s+rq/L9z4qereaCoG8yufZhD9XHmxhPO5yo8Q9jyKwGklmItxDnsbDjOA6O6\n1BxQlo992bX12mlS/vOHDYe4b1Q9AXRtCAHr/gCtroT2E9yzEZUII+fA0WmwfCx0+gP0eQFCG9R/\nbWgDOe/hL6DP39yb31Vy90OMD7x/zSRhBHR/FFbdApcshZBwc+ZJvBq2PgP2UvPmsIJOd8PiUVJ2\nzOTXpVa+FN6nxShIXy/19RTeJ2Wpa2Xp8f3g/Fdg5Xjrf2cFp2D9feQnfcBf281gQrc8922FhBF3\nhfz2XlfFZOaY0+SGJjIxcUtNG3YbrLoVrev9VaoEnVZbXp1Davj5TIr/qaYdIWDDw0S3GswHrQ/U\nbefaIo40uIzbG7zn/mvf9w7kH/O8nYimQcdJMGabXFla0A/S1uq7ttPdcORz2b7AG+T4qaC2q/R8\nGsJjYdsU8+Zo2AoadYHUFebNYQWNu0OjjpC80PSp3Aq+NE370GhHFEFEeIzU1Uv93WpPgg8hpCC1\nqz2ButwPsX1g459NcUsX9jL5jb7bn2jU834aXvhv4jZPhLL82q8Rok4dyXM6iXVoKTaJa0HMJT8Q\ns+1hyDtcdcyOFyEkjKi+L/DAiE51azLGNCJhzGyiD/6rZoBy+DPI2EjkkPd5YGTnuu1ER9Dx6hk0\nSF0Ax7+v+545I20t7HpVrmiGRtZ7j2qcd0bDlnDRD9DnRfj9etj8FygrrPua+AEQ2tB7H+C5QRJ8\naSGy/cSx6XDSxK3BNtcGXssJkF8KvLH1qCcxrPoB9HfnOiMOlXAfIGx/WYhNT1jtRfCRe0jK8rjQ\nSf4cJbmyWOLQZ4a7pQtnciqr7xRi1e21vx491X56qguFkNWfC/pXVH+eWiATnAvO6J9LCFmq/2M7\nIYrS5OOMreWSR7tds5O+UbYDyTng/LU7S14vSpNzH//RtXvkCoWpsp3MnK5CpKyoe+zuN+TvsC6f\njaA0T7aZ8EYrBl/h7BpZ1euqBJdeMrYK8VNH9/6W+DIl2ULMiHVbNxMjqh2BUOANPYa8dajgK0A4\nu1aKtCq8y8GPhVh5q/vXZ+6QgULmDuN80sM5IeGzVc+X5gkxt5d8Xc7Q0+dKT18thy1H9WfecamD\nmbLctbkcbP6LEEvGCFGcKYOUw1+5Z2ffe7Ltg56eWXabEEuvqvmlx4i+a844PkuIWa2E2PBI7b21\nCs7ID7qSHOc+G0X6ZiHm9jbHti+z5y0hFlwoRFmR8bbtdhnIZ+403rbVrJok750bGBJ8STus1WPI\nW4cKvgIEW5lstFiQbLUnwcWqSUIc+NAzG4c+F2Wz2osvF68yTvOvLvKOlvflWuX8+azdMiDM2Or8\neT06iXr1D4uzRNmPHUXmdx1E/mYnmnp67dhKRMn8wSJtejdRuNJJc1O9dux2ucq07v6aNqoHMrte\nE+KXIc4bpBqgtemUojT5npvdSYgzS52PWXatbL7szGejOPqdDJyDDbtdiOXjhNjwZ3Psr/+jEDv/\naY5tKzn9m+x958b7X2/wpSfna4umaXM0Tbtd07QbHIdJu6CKYCEkVOYdnXFdm0/hJkLIZPuEUZ7Z\n6XQn6WWNuT1lGKcW3w+5hwxxzym2Elh5M/R4GpoPdT4mtgf0f1sWBJTm1Hxe0+Ctt6qee+utqtWe\nesYARMTyW+QTxNmO8lX2ze7NBRASzuywv9K0bD/TSpzk0em1o2kw6COZx3fk65p2HKT+DnvfgmHT\nnVdx6Z3PVSKbwtCv5O9n9STY8DCU5lYd440cm5x9gV/p6AxNg8GfQvI8OD7TePuB2HICZFFYaQ5k\nOimyMQg9wVcDIB24GLim/LjaNI8UwYPq9+Vdcg/KnzFO2hy4SNhVsq9Tl9YJsGiwTLJOWe6SNqMu\ntj4tK6vOe6LucR0mQouLYd295ukfljNgxP0AjL+wfU0/XLBz8dArABg30Em7CBfsEB4Dw2fC5sch\ne3fN54tSYdVEGPwZRLet+byr87lD4tUwdifYimB+n6r/7xPHyjYQOQeMmcsZwVLp6IyIOPn+2PBH\n4+9xwkj5nitKNdau1Wgh0PFOc78U6Fke86VDbTsGEJ4kfytc58CHcgvIKBxbRKV5UhPt5+5CzO8r\nxKEvjMkxOfa9TOjVK2NSVijznyrLJhmZ8+XstVfGndwpo+wIIbfu5vasyK+ahtze/+1SIbb+tfb7\nZlbOV22cWiBzhdbeK0Rxljy38XHpo1nbjgv6ywT0YGb/+0LMu0CfjJQr/H6TEAc/NdamL5B7WIjv\nm7r8twwDc766Ab8BO8sfnw88p8e4GYcKvgKM2Z2EyNxutRfBwcpba09MdwdnCd0n5wnx22Uy0Xr7\ny25XDImcA7KSL22Dm9etl4+NrHasjLMgwZ2qQaPsOMZUrv6chhDbXxTi15FSOqU2jK521ENJthDr\nHpASTyfnyb8BsxLNCb7sdiGmNxKiKN142/6E3S7EyluEWHufsXYPfynE8uuNtekrLB4txLEZLl1i\nZPC1HBgIbKl0bqce42YcKvgKLIoXXykO/nCFdxK3gxm7Xa4y5h4yzmZdH5SZO4RYe48QM+LkT1eq\nI52tYLnCse+ldmVxhj4dST1aitWpbcXKKjsOKld/TkMGwfUVtRihtekupxfL39XqO+SqjBnBV0Gy\nLMhQyKrSOd1kwGQURWlCzGhc0YIlkDj8paxKdgG9wZeenK8oIcT6aufKjNjyVChy0g/TPG8FMzcc\ns9qVwCZ3P4REQHRH78wX1xsGfQzX7Ieo9rDkMnmcml9nR/OMnHxO/zic4oZdoOvD7s3d7kZocx0l\nK+/gg+WH6tRJzDkpG/3WNUZ30rkBmpUe2wmLhuEzsW9+CoCcvp/JnDlv+O0OLS+Bq3ZAWAz2vCMA\n7ut11kYw53tVJzwGLvoeNj/hPD/QHSKbQtwFcGaJMfZ8ibY3QtoaqaxhMHqCrzRN0zoDAkDTtJuA\n04Z7ogg+snYQH5JFccOOTEzcarU3gU3KUlnBY+YHqTMaNJfafdcdhQ63w/YpMK8nHHi/amf6kizY\n8wYR8zuTULyZ1QX9PfM1aSonsu08kNxV6iR+ozk9Gq8YBUjdxoAhtgc7I64D4NtjnhdXmE54I7jw\n/1ja6HkAfl1t8Id4sFY61kZcH0iaCituqlsdwhUCtdt9WBS0uwmOfGW4aT3B1x+BD4DzNE07BTwG\nPGS4J4rgY8dLhPR6huZDXiXm4GvGV8opKnBVz9FoQiOh0x1w5Wa48AM4/QvMbk/RynvZ+9ON2Gd3\ngowt2Ib/yOyEHxhZ8O+K6ky35ougyeU/AvXoNl55gryQFkxsu8ugF+obtLn0AwDGD6ilutEH6Tvy\nz6xt/DTjQj3QrHSGWvmqSee7odkgWP+QMX93E6+RLScC8W+4oxWKwa+t3uBLCHFYCHEp0Bw4Twgx\nXAhx1FAvFMFH5lZIWw1dH5T/ce0l8gNZUYEwQHPPMT51mef9vYxA06DFSBjxE1y+jvQzOzmvYBbT\nmv4Mw6YR22YIN1w2jpA+L8i+Xbai2m3Vc3906TY2SaTRxTOI2Xo/5Otb/crIlGX1hm+PGUh8dESV\nn/5AfHQEg8e8TETebjjzm3GGc/er4MsZA96TfawOfeK5rcbdIawRZG723Jav0WyI/LuVtsZQs/UG\nX5qm2TRNew0oEELklp8LwDus8Co7XpKNM8OiZE+VXlNg1yuB+c3JXX76CW64oWq/JVHej+mGG+Tz\nesjZA6FR0KiDaa66RUxnGo6ROVdjB11Y9bluf4SYrrDpsdqv13t/6huTMALOexxWTQB7ad0+n11N\n6KL+ACQvvgdK81x91Yq6CI2UW2KbHwe7zRibOfsgppsxtgKJsCjZ/2vbZPll2FMSr4GTAbj1qGnQ\n8S7De37p2XbcVT5ukaZp8Q53DPVCEVxkbIb09dDlgYpz7cbLRn2pv1vnl69x/fXw6KPw9tsVwcPj\nj8vHjz4qn9eD1VuOdVDrCo2myYT9M7/BkWnOL9Z7f/SM6fEURMTD1snO5yorgE2Pw4obCen3Bp+1\n2kTX+BDZMNTIVRoFtL0BIprAYQNWZGwlUHACGnX23FYgEnueVB9YUYs6hCsEard7gI53wPHvjcuR\nA12tJjaX/5yADMT6O85ZcahWEwHAsmuE2PtOzfMHP5UNIRUVGKG59/tNxpaWOzCqLUBddjK2yjYB\nWbudP2+kbmNRmij7oa1Y/fPTVVqfZB/9VWR9104ULb+lprD3qflS8Hvd/RUNQ4167Z5ipm2zSd8k\nW6O4c08rk7VbiNldjPEpkFn3oBArxnvWVsRWKpuS5p8wzi9fYskYXX9HMbDVhFYepE0vD8A+AzoZ\nF/4pgor0jXLlq8t9NZ/rOAly9kPaOu/75at4qrkn7L6T7+UOTS6AC/4p87+cfes0VLcxnmTRniE5\nU6tUSDZedRmxtuN8Ll6BBs2qXtN6jGyVIIRcBUte6P5rVVQQ30/e213/8MyOSrbXR/+3ZIHLfg+K\nHULCoNWYwKx6BFmkYODWo57g617HP4QQO4GLgEcM80ARXOx4AXpNhtAGNZ8LCYeeT8OuV73vl6/i\n2CarjCuae9m7IDy2dk0/f6DzPdCknxRldpY4b5Ru46GPaBWRySetdlSpkMy4rhioo3IwIhYGfSgF\njDc8BGvvhpJMN16oogoXvAqHPoa8w+7bUMn2+ghtIPO/dr4M6Rvct9PmWjgZoFuPiddC1nYo70fn\nKXqCr06apsUAaJr2HHLla6chsyuCi7R1kLUDOt9b+5hOf4CMjZC53Xt++SrV85Ps9pr5S/WRssxn\n8710o2kw8H35vqj8zVPv/dEzJmMLbJtC2MgfuGd07yo5aLorB1teCldth9BomNcnMJOPvYlDUH3L\n0+7bUMn2+onpDAP/Bytvdv/LQ6sr4OyqwCxECY2E9rfC4S+MsVffviSwvfzncGAZMBZYp2dP04xD\n5Xz5MUuulOKu9bH7X0KsmGC+P76OEZp7y8cJcfhrc/zzRs5XZbJ2yfyvjG3ysVG6jcVZQszuLMSR\nbzz30cGZZdLmyolSfsUou67gzzlfDkoLpAh3ynL3rl80TIgzSw11KeDZ+JjMy3U3/+u3y4Q4/oOx\nPvkK6ZuE+Km91LGtBQzM+XLU+44FPhRCzAP8p3mMwjc4u0bKWXT6Q/1juzwIKUvkt9Zg5vrrYdas\nqvlJjvylWbPqr3YUdkhd7v8rXw5ie0K/t2DlTbIyS+/9qWvMddfBunug1eXQ4VbjfG0xEq7aBg0S\nZC7Y8R+Msx1MhDWEpNdlpWkdslS1onK+XCfpdVl5vvff7l2fGKDd7gGa9JVpHCnLPDalJ/g6pWna\nB8hk+/mapkXqvE6hqGDHC9B7CoTqiNvDG0G3P8Pu18z3y5fxVHMvawdENoOo1ub56G06TpLFA+vu\nl4/13J+6xhz4P5nD0e9N430Ni5aJzMNnwra/yu2colTj5wl02k+QWz5HvnTtuuIMsBVDg5bm+BWo\nhEbA8Bmw519yC9FV2lwDp+Ya16fNl9C0io73HqIniLoZ+AW4QgiRBcQDT3k8syJ4SF0JuQdkozq9\ndP+zTNzMO2qWV4GPQ88x0Oj/NuTslfqQnpC2Dna+AhfNdF4AYhTNh8GYrRDdAeafD0e/U82EXUHT\n5Irntimu5RI5ku29rWcaCES3g0GfwqpboOisi9e2h4atIX2tOb5ZTYfb5MpeSbZHZvTICxUIIWYJ\nIQ6UPz4thFjk0ayK4GLHC9D7OX2rXg4i4mQT1j1TzfMr0ElZCgkBsuVYmbCGcjVpxwuydYk7FGfI\njvYDP4BGXuicE9YQ+k6FEbNh199hxQ1QeMb8eQOFZoPk9vnu1/Vfo5LtPSNxLHSYBKsnub7lm3hN\n4G49NmgOLS6G4zM8MqO2DxXmkvo75B+VHYJd5bzH4dh3UJBsuFsBj90m773elS+7HZ55Rv7Uc95s\nO6IeXcuYLnDhf92rzBJ2WHMntLkB2o7Tr6FphM5ms0FSXDy2J/Z55wOQkVfsmv/BygX/hAP/hfzj\n+sarfC/POf/vYCt0vd9aYgC3nABDth5NC740TftU07RUTdOctqXQJO9omnZQ07Ttmqb1M8sXhYVs\nfwF6/0328HKVBs2h453uJ34GM1nboGFLeehh8mSYOhX6968IkOx2+XjqVPm8N+3o0W1sNx4Sr5Z9\ntVzZxtvzBhSnQdJr+ucCY3Q2QeYvXfAqc2Nk49dFa5frvzaYiW4L3f4EW5/VNz5XBV8eExIGw76T\nQe+ZJfqvazpAfinKPWieb1bSeozMFc3e674NPSWR7hzACKAfsLOW568CFiA76A9GZ/sK1WrCjziz\nREp72Erdt5F/UoiZTWrKuijqZvcbQqx/SP94m02IpCTZfiEpyfnj6jhrZWCUncrtIBxtIqo/FkKI\nsiIhFlwoxO5/O39d1W2n/C7EDwlC5B1zba5p6PPHBdLzisX6OY+JouW3uXytLgKh1UR1SvOEmJUo\nROrq+sfO7SVExhbzfQoGTv8qxKxWQhQk679m7b1C7HnTPJ+sZvNfhNjyTI3T6Gw1YWpPLqBDHcHX\nB8CtlR7vA1rVZ1MFX36C3S7EoouEOPSF57bWPSDE1ime2wkmll4txLEZrl1TOVByHLUFTELU/uFu\nlB29moy5R2RAlbqqbtuFKfKD++Q81+dyRSPSFUqyZe+y7L3u26iNQAy+hJB/UxYOqrPXkrCVCfFd\nAxmsKYxh+4tC/DpS/5fpE3OE+HWUqS5ZStYuGZBWux96gy8rc74SgROVHp8sP1cDTdPu1zRto6Zp\nG8+edbHyQmENKUug6Ax0mOi5rZ7PwMH/QUmW57aCAXsZnF0BCSNduy4kBDZtqnpu0yZ53go7ejUZ\nG3WAgR+VV2alObdlt8Hq22TuYeJV7s3lqc6mM8IbQ/fHYMfL7tsINjpOAmGT+aC1UXBctlkJi/ae\nX4FOr+dk+siOF/WNb3kJZGwKXKmt2J4Q1RZOu1d/6BcJ90KID4UQA4QQA5o3b261O4r6EAK2Pw+9\nX5A5A57SqCO0HuuZ6GswkbkVotrIBp+u4MjNqkzl3C1v23HkVFWmNlmlNtdC+1tgze3OK7N2vQr2\nEji/liBHz1yu+OMK3R+BM79C9h7P7AQLWohsPbH1WSgrcD4mZx/EqHwvQwkJhaHT4PDnkLyg/vFh\nUbLgR89Yf8WDxHsrg69TQGWl2jbl5xT+zplfoSRDfhgaRc/JsP8dKMs3zmagkrLU9a72joBp61ZI\nSgKbTf7cutW1wMkoO45AxxVdywtehbLcms15z/wmV06Hfuv8y4DeuTzV2ayN8BipYbjjJfdtBBsJ\nw6HZENhTSzGOqnQ0hwYJMOwbWeSSf6L+8YHc7R7kZ9yZX6E43fVr9exNuntQd87XWKom3K/XY1Pl\nfPk4drsQCwfXrZPnLivG155YrahgyRghjn3v2jVPP10zN6ty7tbTT9e8xllOkVF23NW1zD8hxA8t\nKvT8piHzMk4vrv21G6UR6QkluTJvLXOnZ3YqE6g5Xw5yjwgxM14W5VRn/UNC7H3b6y4FDbteE+KX\nIULYSupRvpUlAAAgAElEQVQeV5AsxIw4IcqKveOXFay8VYi975x7iNUJ98C3wGmgFJnPdQ/wIPBg\n+fMa8B5wCNgBDNBjVwVfPs6p+ULM7SkTXo0mY4sQs1oLUVZovO1AwVYqxIzGrleH2mwyMKqeFF/b\neSFqr3Y0wo7dLgOa6snstZ2vTPIv8n2Sd0La3v5S7WP1zjUN9/3Ry66p8guGUQR68CWEEFsmC7H6\nzprnF18ixKmFXncnaLDbhFg6VohNT9Y/duHAur/8+DvJi4SY3/fcQ73BlyY8zVfwMgMGDBAbN7rZ\n1VphKhk5hUTOb4dIepNG591uziTLrpEJ010fMse+v5O2DtbfL0WdzeYbDSYa8PfDKDuV2f48tkNf\nEFp4nIxrC4hv1NAze2b4WJ2yfJjTGUYvgibne27PGz5bTWkuzO0OI+bI3lIOfmoLl/4u80UV5lCc\nDgv7S7mvNtfVPm7nK7KvXv//eM83b2K3wZyOMPJnaHIBmqZtEkIMqO8yv0i4V/gHp5f8gUhbBt8m\n9zVvkt5TpMSIvdS8OfyZlKVSeDrY6fU3skulnNXMTX6ikBAWDT2egp0q90s34TGyC/vmSnl3Zfny\nwz6qnbW+BTqRTWHYdFh3H+Qdrn2co9u9ny306CYkVDYDdzHxXgVfCmM4u5qeRT+xI+Yebhxkop5a\ns8HQqDMcnWbeHAaRnZ1Nr169yM72TIDVJVKXuZ5sH4iEhsPYXQCMH9C2nsE+RNeHIG2NrFhV6KPj\nXVCWBye+l49z9kOjLvJDUWEuzQZBrylS5stWi0xWXB/ADtm7veqaV+l0Fxz9Bmwlui9RwZfCc4rS\nYNUEtJBQ+l76IvHRLghou0Pv52DXP+Vyrw8zd+5cdu/ezbx587wzob0Uzq6GhBHemc/HcbwPTX8/\nGklYFPR4Wn8vJYUMsvq9CVueBlsR5O5XlY7epPsjEN0eNj/p/HlNKxfaDmCtx5jOENsDkufqvkQF\nXwrPEHbZWynuAmg+AqJamz9nwii55H3iB/Pn8oAvvviiyk/TSd8g/whExntnPoU5dHlA/i4zNlvt\nif/QYjQ0SYJ9b6s2E95G02DQp3B6IRyb7nxMoAttg+z5dUj/1qMBHTAVQc3u1+SSvxYG3R72zpya\nJrstb5ssxZU96TBuILNmzWLZsmXnHv/+++8ALF++nEceeeTc+VGjRnHDDTcY70DqMkhQW45+T1hD\n6PmsXP0aGeAfWEbS91+waLD8ElhXArjCeCJiYfgMWHolNOkLjaulniSMhJw9UJgCDVtY46PZtL0J\nNj1e/7hyVPClcJ+UZbDvXbjoR/j9Gvntxlu0HgPbn4NTc6HNNd6btw5KS0t5//33KSsrq3K+uLiY\nd999F4CwsDCGDx9ujgMpS6HbI/WPU/g+Xe6ThSXpG6DphVZ74x/EdIGOd2E/9BmziycyskWJf205\n+zvx/WTxw8rxcPla+SXCQWgEtLockudB5z9Y56OZhDeCtuMAfatfattR4R6FZ6RW3pAv4MwvstNv\naKT35tc0mei56xWfqaKZMGEC27Zto1OnTjRsWLW1QcOGDenUqRPbtm3j5ptvNn5yWzGkrYWEi4y3\nrfA+oQ2g12SV++UqvaaglWbw2arjzNyoowO7wli63A+xvWGTky+Bgd7tHuTWo05U8KVwHbsNVk+E\nzvdCy0ul1pcLbzrDaDtO9vlJ+c37c9dCz5492bRpEyUlVateSkpK2Lx5Mz179jRn4vQNMs8lIs4c\n+wrv0/leyNohe7cp9BHZhLK4Qdw3NMG/qlwDBU2DgR/A2ZVw+Muqz7UeI6W+ygqt8c0bNNe/q6GC\nL4Xr7HwJ0KD385C6HMIby31+b6OFQK+/yiZ+PsSKFSuIiooiLCyM0NBQwsLCiIqKYsWKFeZNqvp7\nBR6hkfL9veMFqz3xK8KbXcA17bPUlqNVhDeC4TNhy5OQtavifGRTiO8LKUus881sXMg/VsGXwjWS\nf4FDn8DQb2SJ96HP5KqXVUnv7W+BghNwdpU18zvhyy+/JC8vj759+7J69Wr69u1LXl4eX375Zf0X\nu0uqG2LaCt+n0x8gew+cXWO1J/5DbC/I3lX/OIV5xPWGvm/I/K/SvIrzidcE/tajTlTwpdBPwUlY\ne5cMvBq2gNIc2bulw23W+RQSBj2fgZ2vWudDNQ4cOMDzzz/PmjVrGDhwIGvWrOH555/nwIED5kxo\nK4L09SrfKxAJjZB97dTql35ie6vgyxfodCc0GwIbHqzIy3XkfflInq6VqOBLoQ97Kay6RTbUazFS\nnjs2A1pcDA2aW+tbxzshewdkbLLWj3K2bt3Kiy++SGio7LAdGhrKiy++yJYtW8yZMG0dNO4pt38V\ngUenuyD3AKSutNoT/yC2F2TvVB/wvsCAdyFrOxz6WD5u3E1KQmWqHnYq+FLoY9sUCGssV5kcHP7M\nmkT76oRGwnl/gV3/sNoTa0hRW44BTUi4Wv1yhQYJMh+06IzVnijComT+17YpFZJZidcEfsNVHajg\nS1E/J+fIzsVDv5J/1EB2kc47LCtYfIEu98m8r6wg3G5Qeo6BT8c7IP8opCy32hPfR9NU3pcv0bi7\nXAFbMR5Kssu3HlXwpYIvRd3kHYX198Gw72S1ioPDn0PHSTLnyhcIi4Luj8Huf1rtiXcpK4SMjdB8\nmNWeKMwkJBx6/02tfukltldwfhHzVdpPkE1W190LTQfLIqn84O7DpoIvRe3YiqVafc9nofmQivN2\nGxz50je2HCvT7WE4/QvkHrTaE++RtgZi+8g8CkVg02ESFJyS28yKulErX75Hvzch/wgc/B+0uiro\nqx5V8KWonS1PQVSiXFGqzJlFENUGYk1qGOou4Y2h68NSliVYUFuOwUNImFz92v6CSiavDxV8+R6h\nkVL/ceffIbaHCr6sdkDhoxyfKXW4Bn9Ws4eXryTaO6P7I3BiVvAsaacshRajrPZC4S06TISiFJ9S\ndfBJHMGXClJ9i0adZAf8A/+T1buluVZ7ZBkq+FLUJOcAbHhYfkupLldTnAGnF8nmpr5IZFPofA/s\n+ZfVnphPWQFkblH5XsFESJhUllCrX3XToDmEREBhstWeKKrTdhy0vRHCGkDyQqu9sQwVfCmqUlYo\nuxKf/zLE96/5/NFvoPVVvq0heN4TcPRrKEyx2hNzSVsNTZIgLNpqTxTepP0tUJIBZ3612hPfRm09\n+i5Jr2HTGpC99i9k5JfUPz4AUcGXoiqbHpX78V0edP68L285OmjYUnbd3/um1Z6Yi9JzDE5CQqH3\nC2r1qz7iekPWTqu9UDgjNIJfoqYQVXqS2et3W+2NJajgS1HBka+kUPbAD51rNWZuh+Kzsqu9r9Pj\nKdlVuTjDak/MQzVXDV7ajYeyHDgdvNs29aJWvnyawRf9gWPRY7i56WKrXbEEFXwpJNm7YfMTcNH3\ntbctOPyZlPIJCfWub+4Q3U7mFux7x2pPzKE0T8p2NBtS/1hF4KFWv+pHBV8+TXx0BF2GTyH66Puy\nfVGQoYIvBZTlw4qbIGkqxPVxPsZWAkenSZ05f6Hns3DgPSkAHmicXQVN+snmsorgpN1NYCuE5PlW\ne+KbxPaSXypVcOq7NBsMEU1lZX2QoYKvYEcIWP8QNBsEnevI5UqeJ3PBYjp7zzdPiekCLS+HA+9b\n7YnxpKotx6BHC4E+L8qu9yrAqElkvCxGKQiStjP+iKZB90cDd4eiDlTwFewc+kS2KxjwXt3j/CHR\n3hm9JsPet2RbhkAiZZkKvhRya91eGvQNK2tFbT36Pu3GQ87uoCuOUMFXMJO5FbZNlqrzdW1fFZ6B\n1BXQ9ibv+WYUcb2h2VCZfB8olOZC9k65ZK8IbrQQ6POSWv2qDRV8+T6hEdDloaBb/VLBV7BSmiNV\n5vu/DbHn1T326NfyG3Z4I+/4ZjS9p8imq7YA6SeTugLiL4TQBlZ7ovAF2lwHaHDyJ6s98T3iVPDl\nF3S5X6qqFKdb7YnXUMFXMCKEVJdveamUK6lvrL9uOTqI7y+/AR/50mpPjEHpOSoqo2nluV8vgrBb\n7Y1vEdsLslTw5fM0bCG/RBz8yGpPvIYKvoKR/e9B7kHo/1b9Y9M3yBWj5sPN98tMej0Hu/8J9jKr\nPfEcpeeoqE7iNRASDid+tNoT3yK2l8wnUkGp79P9UVmdbi+12hOvoIKvYCN9A+x8WeZ56dm2OvyZ\nbC/hrOmqP5EwHKLawLHpVnviGSXZkLMXmg6y2hOFL6Fp5blfL6pAozIRcRAeB/nHrPZEUR/xfSG6\nY9B8gVDBVzBRkgkrb4aB/9PXMqKsEI7PgI53mO+bN+j1HOz+h39/OJ1dIQOv0EirPVH4Gq2vkoUz\nx7+32hPfQiXd+w/dH4X9wZF4r4KvYEEIWHMntLke2t6g75qTP0H8AIhua65v3qLlpRAa7d+JyWrL\nUVEbjtWvnS8FZcfwWlHBl//Q5jrIPwEZm6z2xHRU8BUs7P03FKVC0uv6r/H3RPvqaBr0fg52vuK/\nZflKz1FRF62ugLDGcsVaIYlTSfd+Q0gYdPsj7H3bak9MRwVfwcDZVbLVwvAZsqeKHvKPy28fba83\n1zdvk3g1iDL/FCQuyYTcA7LNhELhDE2D81+SeZ0KiVr58i863yubBheesdoTU1HBV6BTdBZW3QKD\nPpVi03o58iW0nxB4vaS0EOg1xT9Xv1J/l0LaegNoRXDS8jLKkO+RjPwA6W3nCbE9ZZGKP+d6BhOR\n8fKz58D/rPbEVFTwFcgIO6yeBB0mQeJYF64TcPjzwNpyrEzbm6A4DVKXW+2Ja6gtR4UeNI3NQr5P\nZm5UuoaEN4bIppB3xGpPFHrp/ggc/B/Yiq32xDRU8BXI7PoH2Arh/L+7dt3ZFXLFK36AOX5ZTUgo\n9HwWdr1qtSeuofQcFTrpOuwvFGsxjO/XympXfAO19ehfxPaEuPMDOndRBV9+Qm5xLh9v/phnfn2G\njzd/TG5xbt0XnFkCB/4Lw76TSYyu4Ei09/feXnXRcZLMn0pbZ7Un+ihOh7zDslu/QlEPTeLbENm4\nHfElKuAApMarCr78i+6Pwr63/S89RCcq+PIDVh5fSeKbiTy28DGmrp7KYwsfI/HNRFYeX+n8gsLT\nsGYSDPkSolq7NllpHpz4SW5VBjIh4dDjaf9Z/UpdDs2HSb8VCj0kjJJb1YpymaGdVnuhcIXWY2RT\n6bTVVntiCir48nFyi3O5atpV5Jbkkl+aD0B+aT65JfJ8Xkle1QvsZbDqVujygOxr5SrHZ0LCCKm1\nFeh0/gNkbITMbVZ7Uj9qy1HhKi1Gy/eNQm07+iNaCHT/s1z9CkBU8OXjTN81HXstVTp2YWf6zmpy\nOTtelKsjvZ5zb8JA6+1VF6EN4LwnZW6cr5OyVK5kKBR6SRgJaauCRiuvThr3gNz9qvmsv9HpLjiz\nWDZeDTBU8OXjHEg/cG7Fqzr5pfkczDhYcSJ5gaxSHDpNJpW7Su5ByN3nWmWkv9PlARnYZO+12pPa\nKToLBScgvp/Vnij8iQbNILp9UHQLr5fwRtCgBeQdstoThSuEN5bydgfes9oTw1HBl4/TtWlXosOj\nnT4XHR5Nl/gu8kH+CVh7Nwz7BhokuDfZ4c+h/W3BlVcU3kiWNe9+zWpPaid1OTQf7nrhhEKRoLYe\nz6G2Hv2Tbn+GQ59AWYHVnhiKCr7MRggKtk3ls6Vb3Wp4OKHXBEI057+mEC2ECb0nyG2FVRPgvMdl\nvpY72G1w5AvoHCRbjpXp9ifZUdlX+wApPUeFu7QYrZLuHajgyz+J6SybSx+dZrUnhqKCL7Oxl3D0\nyFbuPt2XtSu/dvnymMgY5t82n5iImHMrYNHh0cREyPONIhrB1skQEQ89nnLfz5Tf5LJ8XB/3bfgr\nEXHQ9UHYPdVqT5yTukwl2yvcI2GErBazqU73KvjyYwKw7YQKvswmNJKWl30OwBWFf4c1d0mNPhcY\n3m44yU8m8/aVb/PssGd5+8q3SX4ymeHthsPJ2XDiexjyhawOcZdgSrR3RvfH4Ph0KEi22pOqFKZI\nn+KSrPZE4Y9ExkNMF1nVG+zEqeDLb2lxsfyZssRaPwxEBV9eID5a6qyFjt0B4TEwrw+cnOOSjUYR\njbin3z3889J/ck+/e+SKV95hWHcfDJsu5TPcpSRTJuu3v9V9G/5Og+bQ8S7Y84bVnlQldRkkXORe\nAYVCAeV5X2rrUVY8HlDVn/6Ipsnc3ABqO6GCL28S3ggGvCuT4jc/Catuk53L3cFWDCtvliLRzQZ5\n5tex76DVFfJbcjDT4y9w5HNZXegrqP5eCk9pMUoFXwBhUdAwUVZ1K/yPDpMgbQ3kBkbFqgq+rCBh\nBFy1TeZYze8Dx39w3cbmJ2UZefdHPPfnUJBvOTqIag3tJsC+/1jtSQWpSkxb4SEJIyB9XUCLFOtG\n5X35L2FR0Pke2P+u1Z4Yggq+rCIsCvq/CcO/h+1TYMV4KErVd+2x6XB6IQz6tIr+osv6jwBZu6Aw\nGVpe5uYLCTB6Pg0HP4CSLKs9kbleRalSYFahcJeIOGjcHdLXW+2J9ajgy7/p+kc48hWU6vhs83FM\nDb40TbtS07R9mqYd1DTtWSfP36Vp2llN07aWH/ea6Y9P0nwoXLkFGnWC+efD0W/rrujI2Q8b/wTD\nZ0BE7LnTLus/Ojj8mWxip3KKJI06QuurYf//We2J7O+VMNKzQgqFApTOowMVfPk30W2h5SWyJ6Wf\nY9pfdU3TQoH3gDFAT+BWTdN6Ohk6XQiRVH58bJY/Pk1YQ+j7Ooz8WQo9rxgnxbGrU1YIK2+C81+p\n0u3cZf1HB/ZSOPq1lHBQVNBrMux7R4qMW0mK2nJUGESL0bJ4I9hRFY/+T7dH5NZjLbJ7/oKZX6kH\nAgeFEIeFECXAd8B1Js7n/zS9EK7cBLF9sM9PYvGCdyoaswpB2aKLOFTUhoxWd1W5zGX9RwfJC6BR\nZ2jczcAXEQA07i6TlA9+YK0fSs9RYRQJF8ltR1uR1Z5YS+PzZMK26nvmvzQfBmEx8vPLjzEz+EoE\nKqthniw/V50bNU3brmna95qmtXVmSNO0+zVN26hp2sazZ32oEs0MQiPhgr8zq/FHXJr5KPGzI+Eb\nDb4NISxrE52LFjBzY1WRUZf0HysT7L296qLXFNj7pnUfVgUnoTQL4npbM78isAhvDI17Qtpaqz2x\nltAGEN1OtpxQ+CeaVtF01Y+xOpnkZ6CDEOJ84FfgC2eDhBAfCiEGCCEGNG/e3KsOWsXFQ68EIOO6\nYpgoYKIg4+pszob3YlLTn6uM1a3/WJmiVLmy0v5mw30PCJpcAE36yQDVClKWqXwvhbG0UDqPgMr7\nCgTaT4CsHZC922pP3MbMv+yngMorWW3Kz51DCJEuhHDUP38M9DfRH7/C0ZjV8RMgvnFjmo+ZQ/T+\nf0JaReWSLv3H6hydBonXym/ECuf0ngK7X7emKaPaclQYTYvRsnVJsKOCL/8nNBK6PAD7/LfthJnB\n1wagq6ZpHTVNiwBuAaq0ddc0rVWlh9cCe0z0JzBo1AkGfgCrbobiDECn/mNlhJArOsEoou0KzQZD\noy7WCLoqPUeF0TQfBhmbZOFOMBPbWwVfgUDXB2WDcBfl+nyFMLMMCyHKNE37E/ALEAp8KoTYpWna\ny8BGIcQc4BFN064FyoAM4C6z/Ako2o6D1BWw5k4YORu0kHP6j9N3TudgxkG6xHdhQu8JNQMvgMzN\nsk9Kwkjv++5v9H4O1t8PHW73XjuO/OPy9xPrrDhYoXCT8BiI7SO7hLe82GpvrCOuF+x80WovFJ7S\nsCUkXg0HP4aeT1ntjcuYFnwBCCHmA/OrnXu+0r8nA5PN9CFgSXqNskUj2Djvr3Qb/TLx0RHn9B/r\no2jfJ+wMuZZOBWVVtjUVTkgYCZHNpXh5eyfbt2aQslRWW1ZqoKtQGEKLcp3HYA6+YrpB3lHZ8T80\n0mpvFJ7Q/VFYcSOc9ziEmBrOGI5/eauoIDSC6RH/4raUETD7dZcubQAMAD7Y+AgPjOxsinsBg6bJ\n1a+tz0C78d5JgFdbjgqzaDEKdr5stRfWEhopmynn7IMmSj3Cr2k6AKLawMnZ0O5Gq71xCRV8+TFj\nBg+C2bIi0pUVrIz8EuJnRzJ+gNPOHorqtLoStj0Hp+ZCm2vNny9lKfR42vx5FMFH82GQuRXK8iHM\neYV0UOBIulfBl//jaDuhgq/gILc4l+m7pnMg/QBdm3ZlQq8JxETGuGVrf9p+7vrpLo5kHaFjXEc+\nv/5zujWr2vjU2Xzx0XI+R+Cl1ydnlZRmvbaAQNOg119h5yuQeI2524F5R+R2SOPzzJtDEbyERUOT\nJDi7GloFsZ6rqngMHNqOgy1PQsYWiO9rtTe6UcGXG6w8vpKrpl2FXdjJL80nOjyaJ355gvm3zWd4\nu+Eu2Xrilyd4a+1b5x6fyT9D9/e68/jgx3lTz3wG+2Tkawso2o6D7X+DM4vN/dBKWabyvRTm4tB5\nDPbg69i3VnuhMIKQcCm4vf8dGGxRX0Y3UB0cXcRtHUUn7E/bXyXwqozjfH3zGemTka8t4NBC5OrX\nrlfNnUf191KYjdJ5VCtfgUaX++DET7J5uJ+ggi8XcVlHsTSP0oXDACp0Gsu566e7PJ7PLZ/cnEuv\nnYCl/S1QcAJSV5pjXwjZBFMl2yvMpNkQyNpuvXC8lcR0lS1dgl3rMlCIbArtboIDFuvxuoAKvlzE\nZR3FXa9SlrUXoIYm45GsIx7P55ZPbs6l107AEhIGPZ81b/Ur7zAIu/xgUCjMIixKSmedNelLhD8Q\nGgExnSFnr9WeKIyi+yNw8H2/EU1XwZeLuKSjeGo+HPmK4lHLyQlty8RW66uM7xjX0eP5XPbJg7n0\n2gloOt4B2TshfaPxth1bjirfS2E2autRdrrP2mm1FwqjiOsDjXvA8ZlWe6KLoAy+MjNPs+nnP5GR\nneXytbp1FPOPw7q7Ydi3xLXsTeNLZxGz4xHIOXBu/OfXf+7xfC755OFceu0ENKGR0OMp2PUP422n\nqC1HhZdwNFsNZlTeV+DhaDshhNWe1EtQBl+zt5yif+57hCzsK2V6XECXjqKtBFZOgPOehISL5IVN\nB0Cfl6QmY7m2Wrdm3Xh88ONO53Gcr28+3T4Z9doU0PleSFtt7LdmIVRzVYX3aDZYBh6lOVZ7Yh0q\n+Ao8Wo+FknRIX2e1J/WiCT+IECszYMAAsXGjZ1s+jiajuQNnELPjMWh7IyT906Wmg3klebXrKG5+\nEnL2n9NdPIcQsOpWiIiV4tjlHMo4xB0/3sHRrKN0iOvAl+O+pHN8Z/hGg4mi7vn0jHFGpetcem0K\nye7XIXM7DDNIdDtnPyy5BK477j/bjnW8hyyxY6ZtM320isWj5Spu4lVWe2IN2Xth+Vi49pDVniiM\nZO9/ZPA1zJpWIpqmbRJCDKhvXFD2+XI0F43pMh7aXgKbHsP+UweWRT1D0shHdHWLr01HMffATDgw\nnbLLN9Kk+haepsGgj7DN78/yBf8macSfiY+OoHN8Z1bds6rK0OwTK4mlPFCsRbcx6/Q24uoZ44z8\n7W8SXek6va9NUYmuD8GczpB7EGIMyIVLWQoJo/0n8FL4Py1Gy+raYA2+YrpAYTKUFcgiBEVg0Olu\nKaFVcAqiEq32plaCMviqQmQ8DP2SbXMe4OKsp2C2Z+rojj7wH2zP54GRTgaExzAr+j+MTx0Ls/9S\nq53Y8p/LVs/jhsvG1RxQlo9YIeUU4me7Jg7rWN+bufGE0nZ0l/DGsrHf7tdg0Mee20tdBi0v99yO\nQqGXFqPkKn2wEhImK4tz9kB8f6u9URhFRCx0uA0O/BcuMLkvoweo4Kuc9pe8y87FBXRrnEfEqFlu\nr0Do0U28ZMil9WoyZuSXsHHFx1yX/ziUjIKIJhVPCgHrHyKq1TA+sP/C+AFtXdJ2zDqzjfBllzP+\n/9u78/ioyquB478zWQgmITFsYTUQJQhU2deoCFURFRRZBG3RYqUVKmj7Kta3Vu1mrcW6QKuiVagg\nBOUFWypKwUqQ1QiIyr4JMewRwr487x/3BrNMZkkycydzz/fz4ZPMzDN3zlxjcuY+z3NOx0YBP0d5\nkfUAvHcZtHscEptX/jjGWFe+rgzBIn6lKlK3m1Vq4fS31h8sN0ppC4VfaPIVbVr9DD7Mhrb/C7G1\nnY7GK1cuuPcmLTGedjdPIf7U17DxBb/j84/kM3LOSLq92o2Rc0aSfyT/wnFKft10YBM9p/Sk0bON\n6DmlJ5sObCo35uipo0zJm8IjHz7ClLwpHD11lLTEeK7vdz8xzW6DZSNL797Y+hoc/oxaPf7K6Gsy\nfR7Hm9T0K0m8uCVpR1y+26mqaqVZi++/+lPVjnNkA8QkQJL/0iNKVZuYWlYCtu9jpyNxji66j051\nWkHdLrBzutORVEiTr5JiakF2jlVE88DyCodNXjWZJs81Yeq6qazMX8nUdVNp8lwTJq+aXGrcQwse\nImtSFsv2LKPgWAHL9iwja1IWDy146MKY3F25NJnYhPHvj+eZT55h/PvjaTKxCbm77AKI7f9otUzY\n8Gfr9uE1sPZRK84S6xT8HqeszHtgW83pgxWxWj8EO96CEwWVP4buclROadjb3fW+NPmKXlnjrAsp\nEbqpUJOvspJaQLdXYekdcOpguYfzj+QzZv4Yr08dM38MBUXWH+Hq6NtYdLrIqsScPcu6uvLNB7Bk\nCHR6HlJaXzhepXoyNh9mNYk+eSDwc6PKq90QMu6CDRP9j62I9nNUTnF7va+Udpp8Rav06+D8Gdj3\nX6cj8UqTL2+aDoRmg2HZD612LyU8+p9HfT51wsIJQPX0bbzQSzGxOXR+FbO4H9vPXMKh+oMrd5yS\n4lM4ndKBDe//pFzPSRWk1r/AbHyRGQsXBn8ujYG9H+mVL+WMtC5wdDOcOuR0JM5Iagkn97q7z2W0\nEoGsn1lFVyOQLrivSPs/wMJrrCtObR65cPeGA757gW08sBEuqp6+jaV6KZ7YyVlqUXCwgA9W7WR0\n7xAeemYAABVPSURBVO/6/1W2J+PBI0dpffojCHK3pCpPgOH7ruPl1VuC20H67ZcQl1y1BftKVVZM\nvNVoe/8S60On23hioE6W9f9hva5OR6OqW4sfwrpfQdH2iFtTq8lXRTxx0GsmLOhi/XJqcDUAreu1\nZmX+ygqfllUvC44vp0VqCwqO+V4HVNxL0VviVKqX4sFVsP43HOuziozcH3FlnenAr4M/TknH99DQ\nbOW1Rp9zW9dWQe2WVOUdKjxI/IJ2DM/YDgSRfOmUo3Ja8dSjG5Mv+G7dlyZf0Sc20ar7tekl6Phn\np6MpRacdfUlsBt3fgKUj4MReAP7Q9w8+n/L0958Gqqdv47B2w+D0YcgdCl3/Rmp6Oxr1/z8u2vky\nFCwK7jhlbZ+Gp/lgRl3bThOvapCWWpeknpOo8/kDVnupQO3Tfo7KYa5f96WL7qNaq7Gw7Y2Im1rW\n5Mufxv2g5d3wyZ1w/hyN6zRmUv9JXodO6j+J9KR0oHr6NibFJVplJpreCs0GWU++qDH0mArL7oIT\n3wR2nLKtgYyxdjq2vKcqZ0aV1fQ2aw1JoKUnzHlrMWjD3iENSymf0jpZ0zJeNhi5giZf0S3xEut3\n7PY3nY6kFJ12DMT3noBF18H638AVT3B/l/sZdPkgJiycwMYDG8mql8XT33/6QuJVbOINExnTZUwF\nfRutHY/ZzbPJ/3m+916KXz1rLQbNnl06nvTvQ+Z9Vp/IPgvBE+v7OGUdWGYtRqzXI0QnzKVEoPNL\nsKAzXHIHJPuZfixcD3EXw0VNwxOfUt544qB+L+uDQPGHPDfR5Cv6ZY2DlfdZbeEqmCUKN02+AuGJ\nhV7TOT+/E/O/aUHP7OGkJ6V7nVo8dOw0aXzXN9Fb38ayY7z1Ujyy6yNi1z7N6b7LSI3xMi3Y7lec\nWfgxn//zATL6/iWo3o4nN73GGgbQ6vgZnXKsbkkZcPnDsHoM9P63704Je3XKUUWI4qlHNyZfSS2s\nq35njlhtw1T0qX8VeBKsck2N+zkdDaDJV+BqN2Je8vPcemAozL27wmFpxV997CAMZEzxr4BpX3q8\n94j0xDA99mlGFnWDuX/1FXk5CUB34OXVo7W3Yyi0fhC2T4Nds+ASL+vtiu37CJoPDVtYSlWoQW9Y\n4f+DW1QSD9Rpbe947O50NCoUROyiq89r8lUTXd1rYEA9GdPm1qq2Mb56RN7Srb3feCp7bFUFnjjo\n+jLkDoFG/bz3zSte79VlcvnHlAq3tI5w/Gs4uR8S6jsdTfil2sVWNfmKXhnDYe0E+HZDqSLlTomM\nyc9qEmhvQ38C6duYl59H5vOZJP4ukcznM8nLzys3BmD62unEPRWHPCnEPRXH9LXTy41ZsHkByb9P\nxvOkh+TfJ7Ng84JyY5bsWEL9Z+oT91Qc9Z+pz5IdSwLqEelN2eeF6jy6Wv2e0PgmWPuY98cPr4WE\nBlBbm5urCOCJhfrZ7m01lNLWWoOpoldMgrVWetOLTkcCgJgI7XtUkc6dO5vVq1eXuz93Vy793+rP\neXOeY2eOkRiXiEc8zL9zPtnNs8sfaLrAiPLvffKqyV7bB03qP4n7u9wP04VhcUOZ9eWscmOGthnK\nzCEzLxy72cRm7D66u9y4pslN+Tp9N4wwdHy5I58VfFZuTIf0DuQlfwYjDH3e7MPiHeW3gl+bcS2L\n4hbDCFNt7z/o46iKnToE/2oLV88tX0Now3NwZBN0DW7KOKJU8DPk2HFCeexQxhgpvnrW2vXYxftu\n7qi251/WlFSfD5yORIXS8Xzrd/LA7RCfGpKXEJFPjTGd/Y2Liitflept6EWgfRu9JV7F968rWAdY\nV7y8JV7AhfsXbF7gNfECLty/ZMcSr4kXcOH+6nr/1XUcZauVBh3+BKtGw/mzpR/bu1hLTKjI4uZ6\nX7rj0R0uagyN+8PW152OJDqSr2B7Gxbut9rtHCo6Ver+QPs2+jJolrVbaOTckX7HDs4Z7HdM8fF8\nqVRvxxAeR5WQcSfEp1kVloudPwf7lmhlexVZUttbtQNP+O7MEZUSm1u7HU8XOh2JCrWscdbU4/lz\njoYRFclXsL0Nc76wKpB/9d/flbo/oL6NfhRfHTtrzvoZSYUxl1R40v8vg8r2dgzVcVQJItai+i9+\nC8ftK6GFa6xPYLUbOhubUiV5YqDBVdZGELcRD9S5XK9+uUG9rpDQEPa852gYUZF8Ffc29MZbb8Pb\nu1zK9IaL6HHib3BgxYX7W9fzvQMiq16W31iKC63Giv+NpBXFXFJqgv956WDff6iPo8qokwWXjYXV\nD1i3tZ+jilRunnpM1alH1yguO+GgqEi+gu1tmJYYz4i+1+Lp9gosHWYtjCbwvo2+vDv0XQDeHOi/\nlcHsIbP9jik+ni+V6u0YwuMoL9pOgG/Xw+73YO9HWlxVRSY3J18pbaFQky9XaD4Yjm6Cw+scCyEq\nkq+gexsWa3YrNLvd6p9ozgfct3FoG++FMYe2GcoV6VcAMOLKETRN9t42pvj+Gy67gQ7pHbyOKb7/\nqoyruDbD+x/q4vsr/f7LqK7jKC9iEqzpx9VjYX8uNPBWOVcph6VeAaf2W7vC3EYX3buHJw4uu9/R\nq19RU2oCoOh0UWC9DUs6fwYWXmM1r27zMGCt26qwb6O95XxdwToGzRpEQVEB6UnpvDv03QuJV8lt\n6bPXz2b4u8M5a84SK7HMGDSDwe0GlxqzaNsiBs4cyLHTx0iMT2TusLn0admn1JjlXy9nwNsDOHzi\nMBfXvph5d8yje7PupcYE9f59bJ2v1HlUATnzfk/M4TUUDSis+a2dakIZh5oQY6T5+DZoPgQyRjgd\nSXgd2wULusGgb5yORIXDyf3wXiu4ZTMk1Ku2wwZaaiKqkq9KO/Y1LOgC2TnWglNf/PwSLtrwJkl5\nd1e5wv2RnQups/Q6/9XrK/tHwU1/TCLI/H+/Sp+DY5nRZAX3XNve6XCqpiYkNjUhxkiz8QUo/By6\nvep0JOFlDOSkWDWgatV1OhoVDstHQXImtP1ltR0y0ORL2wsBJDaD7n+HpcPhxjyr8nhlFK4nZs2D\nQPX1dsxdmsOA6++sXDwq4nS/eiS7P5jL0LoLgRqefKno1KA3bIyMKuBhJfLd1GODq52ORoVD1gPw\n0U1w+f9YU5FhpMlXscY3QsuR8Mmd0Pt9a9t1MM4UQe4Qzl35J17e15shnZv5vPKVs/prv2OW5U7n\n5qKH4URfqJ0e7DtSESgtMZ607Mdg2V3Q7sHgf86UCrXUdnCm0CqNcpH3datRK1WTL1e5+EpIvhR2\nvQMZd4T1paNiwX0wfPYt/N6T1hqwL35X8QG8MQZWjoZ6PUm6fBSjr8n02W8xLTG+1BhvfSLTEuO5\n6Ya78Vx6L3wywvGCcKoa1esO8XUh/19OR6JUeeKxNoS4cdej7nh0H4fKTrgq+crdlUuTiU0Y//54\nnvnkGca/P54mE5uQuyvXGuCJhV4zYMvfoOA/gR9466vw7efQufSler+vBwzLGUanVzuxrXAbx88e\nZ1vhNjq92olhOXZZh3aPAwLrn6ziu1cRQ8T+H/4FpyNRyrsGva2SKG6jOx7dp8kAOFkAB1aG9WVd\nk3wF3LewdiPo8Q9Y9oPAtlsf+gzWPmYt1o+9KKjXy8vP898n0hMDPafD1tcgf0HVToKKHM2HwJEv\noXC905EoVZ5b631p8uU+nhhoNTbsV79ck3wF1bcwvQ9c+lP4ZHj5hsglnf4WcodA55esKuZBvt6Q\nnCE+Y77Q17F2QysBW373dy1qVM0WEw+X/kSvfqnIlNIGzhbBsZ1ORxJetRvD+dNWGQLlHpmjIH9+\nWOvbuSb5CrpvYbvHwJMA6x73fkBjYMUoaHQDXFK+8nsgr1fcB7IipR5veI21M2PpHda6NFXzXToa\nduXAqYNOR6JUaSLQsLf7ph5L7nhU7hGfChnDrSVHYeKa5CvovoXigZ7/gB3TYM/88k/a9CIc2wEd\nJ1b69S4Ubq1AucfbPAKxdaxpTlXz1W4ITQfCFpfVU1I1g049Kjdp9QBseRnOnQzLy7km+apU38KE\n+tBzBqy4x6p+XOzAClj/W8ieBTHea3UF8no5Q3J8xlyur6N4oOc02DkTds/z+VxVQ2SNg82T9Gqm\nijwN7OSrhhXirrLUdpp8uVFKa7i4A+x8Oywv55rkq9J9CxtkQ+tfQO4wOHfaum/pMOj6CiS1rNLr\ndWzcMaA+kaXUqgu93oaVP4aiHQG/fxWh0jpAYgv4eo7TkShVWp0sa/3TsR1ORxJeKW11I4xbFZed\nCMMHDlcVWc1unk3+z/OD71t4+c9h/xL47BHrdrPbrabc1fB6M4fM5LGCxyruE+lN/R7QZgLkek/c\nVA2TNQ42PgeX6H9PFUEurPtaDEktnI4mfIqnHY2xzoFyj0Y3wKfjrb/3IS6066rkCyApPolRHUcF\n9yTxQPc3OD8vEw9w6LKnLrQIqo7XuyL9CrY8sMXnmHKyxnNm5xzisHtF1vQmzW7WdCDkPQSHPoW0\nTk5Ho9R3itd9Zf7I6UjCJ6Gh9fXkXu0s4jbisTa2bXwh5MmXa6Ydq6xWGh8mW5Xvc/J871IMCxHe\nibGagc5ZucnhYFSVeGKh1RjYEP4qy0r51KA37PvIXeu+dMeju7X4ofWBI8RlVjT5CkKXq+7l5SZb\nGNK5mdOhAHB9jz7sqnU1wxqtdjoUVVWZ98Ke9+BEBCT2ShVLvgzMeSja6nQk4aXJl3vFJUOLkbBp\nUkhfRpOvIJTtyei0tMR4mnceQ9KeaU6HoqqqVppVL25z+OrMKOWXiDtLTmjy5W5ZY2Hb63DWe63O\n6hDS5EtE+onIRhHZIiITvDxeS0Rm2o+vEJGMUMYTlZoOgMK1uvMxGmQ9YBX5O3fK6UiU+o4b+zym\navLlakktoX42bA/dhY2QJV8iEgNMAm4E2gDDRaRNmWGjgMPGmEuB54A/hiqeqBWTAM3vgO1vOh2J\nqqqUNpB6hVXHTalI0fBa2Oeyel8pbaHwC3e9Z1Va1jhr4X2IfgZCeeWrK7DFGLPNGHMaeBsYWGbM\nQKA4a5gN9BXRvb1By/wRbHvDWpuharYw1plRKiBJLUFi4aiLNvYkNABPHJz4xulIlFMa9LZ+Bgo+\nDMnhxYTol7yIDAb6GWPutW//AOhmjBlbYsx6e8xu+/ZWe8yBMse6D7jPvpkFbPTz8vWAA37GqOqh\n5zp89FyHh57n8NFzHT56rsMjyxiT7G9QjajzZYx5BXgl0PEistoY0zmEISmbnuvw0XMdHnqew0fP\ndfjouQ4PEQmo/EAopx33ACVrMjS17/M6RkRigRTgYAhjUkoppZRyVCiTr1XAZSLSQkTigTuAst2g\n5wEj7e8HA4tMqOZBlVJKKaUiQMimHY0xZ0VkLLAAiAFeN8Z8ISJPAauNMfOA14BpIrIFOISVoFWH\ngKcoVZXpuQ4fPdfhoec5fPRch4+e6/AI6DyHbMG9UkoppZQqTyvcK6WUUkqFkSZfSimllFJhFFXJ\nl4i8LiL77PphKkREpJmILBaRL0XkCxEZ53RM0UpEEkRkpYistc/1k07HFO1EJEZEPhORfzodS7QS\nkR0i8rmIrAl0a76qHBFJFZHZIrJBRL4SkR5OxxSNRCTL/nku/ndERMZXOD6a1nyJyNVAETDVGNPO\n6XiilYg0AhoZY/JEJBn4FLjVGPOlw6FFHbvjQ6IxpkhE4oBcYJwxZrnDoUUtEXkI6AzUMcbc7HQ8\n0UhEdgCdyxbUVtVPRN4ElhhjptiVBy4yxhQ6HVc0s9sr7sEqGr/T25iouvJljPkYa9ekCiFjzDfG\nmDz7+6PAV0ATZ6OKTsZSZN+Ms/9FzyemCCMiTYGbgClOx6JUVYlICnA1VmUBjDGnNfEKi77A1ooS\nL4iy5EuFn4hkAB2AFc5GEr3sabA1wD7gQ2OMnuvQ+QvwMKCNUkPLAB+IyKd2+zgVGi2A/cDf7an0\nKSKS6HRQLnAHMMPXAE2+VKWJSBLwDjDeGHPE6XiilTHmnDGmPVaXiK4iolPqISAiNwP7jDGfOh2L\nC2QbYzoCNwJj7CUjqvrFAh2BvxpjOgDHgAnOhhTd7KndAUCOr3GafKlKsdcfvQO8ZYx51+l43MCe\nLlgM9HM6lijVCxhgr0d6G+gjIv9wNqToZIzZY3/dB8wBujobUdTaDewucbV8NlYypkLnRiDPGLPX\n1yBNvlTQ7EXgrwFfGWMmOh1PNBOR+iKSan9fG7gO2OBsVNHJGPOoMaapMSYDa9pgkTHmLofDijoi\nkmhv1MGeArse0B3qIWCMKQC+FpEs+66+gG6MCq3h+JlyhBC2F3KCiMwAegP1RGQ38GtjzGvORhWV\negE/AD631yIB/NIYM9/BmKJVI+BNe/eMB5hljNESCKomawjMsT7DEQtMN8a872xIUe1nwFv2dNg2\n4B6H44la9oeJ64DRfsdGU6kJpZRSSqlIp9OOSimllFJhpMmXUkoppVQYafKllFJKKRVGmnwppZRS\nSoWRJl9KKaWUUmGkyZdSqkYRkSdE5Bf292+IyOBKHidDRHzWl7LHjChx+24Reakyr6eUUsU0+VJK\nqYplACP8DVJKqWBo8qWUingi8piIbBKRXCCrzMNN7QKSFT33CRGZJiLLRGSziPy4zOMt7StcS0Qk\nz/7X0374aeAqEVkjIg+Wed5N9jHricgtIrLCbl68UEQaVsf7VkpFJ02+lFIRTUQ6YbX7aQ/0B7qU\neLg2MAhI9nOYK4A+QA/gcRFpbD83E8gG9gHX2c2ehwEv2M+bACwxxrQ3xjxXIqbb7Mf6G2MOALlA\nd7t58dvAw5V/x0qpaBdV7YWUUlHpKmCOMeY4gIjMs78OwUqcxhljDvo5xlxjzAnghIgsBroDPwa2\nGmOmikgK8JKItAfOAa18HKsP0Bm43hhzxL6vKTBTRBoB8cD2yrxRpZQ76JUvpVSNZIzJAT4MdHiZ\n2+eAn5a4/SCwF7gSK7GqcBoT2Ip1pa1kgvYi8JIx5ntYfd0SAoxLKeVCmnwppSLdx8CtIlJbRJKB\nWypxjIEikiAidYHewKoyj6cA3xhjzmM1jY+x7z9K+SnNncDtwFQRaVvi+Xvs70dWIj6llIto8qWU\nimjGmDxgJrAW+DflEycAROQpERlQwWHWAYuB5cBvjDH5ZR6fDIwUkbVAa+BYieedE5G1JRfcG2M2\nAHcCOSKSCTxhf/8pcCD4d6mUchMxpuzVeKWUih4i8gRQZIx51ulYlFIK9MqXUkoppVRY6ZUvpZRS\nSqkw0itfSimllFJhpMmXUkoppVQYafKllFJKKRVGmnwppZRSSoWRJl9KKaWUUmH0/4T8qq02ATqn\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_new_example(fig, 2.8, 0.9)\n", + "plot_voronoi(fig, X[:, 1:])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Podział płaszczyzny jak na powyższym wykresie nazywamy **diagramem Woronoja** (_Voronoi diagram_)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Taki algorytm wyznacza dość efektowne granice klas, zwłaszcza jak na tak prosty algorytm. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Niestety jest bardzo podatny na obserwacje odstające:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "X_outliers = np.vstack((X, np.matrix([[1.0, 3.9, 1.7]])))\n", + "Y_outliers = np.vstack((Y, np.matrix([[1]])))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n5Y7uxXoAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X_outliers, Y_outliers, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + "plot_new_example(fig, 2.8, 0.9)\n", + "plot_voronoi(fig, X_outliers[:, 1:])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Pojedyncza obserwacja odstająca dramatycznie zmienia granice klas." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Aby temu zaradzić, użyjemy więcej niż jednego najbliższego sąsiada ($k > 1$)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm $k$ najbliższych sąsiadów dla problemu klasyfikacji\n", + "\n", + "1. Dany jest zbiór uczący zawierajacy przykłady $(x_i, y_i)$, gdzie: $x_i$ – zestaw cech, $y_i$ – klasa.\n", + "1. Dany jest przykład testowy $x'$, dla którego chcemy określić klasę.\n", + "1. Oblicz odległość $d(x', x_i)$ dla każdego przykładu $x_i$ ze zbioru uczącego.\n", + "1. Wybierz $k$ przykładów $x_{i_1}, \\ldots, x_{i_k}$, dla których wyliczona odległość jest najmniejsza.\n", + "1. Jako wynik $y'$ zwróć tę spośrod klas $y_{i_1}, \\ldots, y_{i_k}$, która występuje najczęściej." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Algorytm $k$ najbliższych sąsiadów dla problemu klasyfikacji – przykład" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "# Odległość euklidesowa\n", + "def euclidean_distance(x1, x2):\n", + " return np.linalg.norm(x1 - x2)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Algorytm k najbliższych sąsiadów\n", + "def knn(X, Y, x_new, k, distance=euclidean_distance):\n", + " data = np.concatenate((X, Y), axis=1)\n", + " nearest = sorted(\n", + " data, key=lambda xy:distance(xy[0, :-1], x_new))[:k]\n", + " y_nearest = [xy[0, -1] for xy in nearest]\n", + " return max(y_nearest, key=lambda y:y_nearest.count(y))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres klas dla KNN\n", + "def plot_knn(fig, X, Y, k, distance=euclidean_distance):\n", + " ax = fig.axes[0]\n", + " x1min, x2min = X.min(axis=0).tolist()[0]\n", + " x1max, x2max = X.max(axis=0).tolist()[0]\n", + " pad1 = (x1max - x1min) / 10\n", + " pad2 = (x2max - x2min) / 10\n", + " step1 = (x1max - x1min) / 50\n", + " step2 = (x2max - x2min) / 50\n", + " x1grid, x2grid = np.meshgrid(\n", + " np.arange(x1min - pad1, x1max + pad1, step1),\n", + " np.arange(x2min - pad2, x2max + pad2, step2))\n", + " z = np.matrix([[knn(X, Y, [x1, x2], k, distance) \n", + " for x1, x2 in zip(x1row, x2row)] \n", + " for x1row, x2row in zip(x1grid, x2grid)])\n", + " plt.contour(x1grid, x2grid, z, levels=[0.5]);" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie interaktywnego wykresu\n", + "\n", + "slider_k = widgets.IntSlider(min=1, max=10, step=1, value=1, description=r'$k$', width=300)\n", + "\n", + "def interactive_knn_1(k):\n", + " fig = plot_data_for_classification(X_outliers, Y_outliers, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n", + " plot_voronoi(fig, X_outliers[:, 1:])\n", + " plot_knn(fig, X_outliers[:, 1:], Y_outliers, k)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "652f2d8ba643479298bc4e252b59474f", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(IntSlider(value=1, description=u'$k$', max=10, min=1), Button(description=u'Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(interactive_knn_1, k=slider_k)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych (inny przykład)\n", + "\n", + "alldata = pandas.read_csv('classification.tsv', sep='\\t')\n", + "data = np.matrix(alldata)\n", + "\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 1:].reshape(m, n)\n", + "\n", + "X2 = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "Y2 = np.matrix(data[:, 0]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n131E0kbbL0m6RdLPp+s9JOl3Jf23VtULYB5bGh9PpicmkpeUhLfx8WQ5AGDR5d0D14grJH0zM38o\nbVsp6fWIeHNee02277Zdtl0+evRoy4oFek42xFUR3gCgpVoe4Gw/YftAjdfGVv/bWRGxMyJKEVFa\ntWpVO/9poLtVT5tmZcfEAQAWXctPoUbErRf5EYclXZWZvzJtOybpHbYvTXvhqu0A2mX+mLfx8TPz\nEj1xANAiRTiF+pykofSK035JmyXtiYiQ9LSkO9P1tkh6LKcagd40NXV2eKueTq1e2MBVqADQEnnf\nRmST7UOSfkLS52zvS9t/2PZeSUp71z4iaZ+klyR9JiIOph9xr6TttmeUjIn783Z/B6CnDQ9Lu3ad\n3dNWDXG7dnEVKgC0iKMHx6mUSqUol8t5lwEAAHAW2/sjou69cauKcAoVAAAAGQQ4AACAgiHAAQAA\nFAwBDgAAoGAIcAAAAAVDgAMAACgYAhwAAEDBEOAAAAAKhgAHAABQMAQ4AACAgunJR2nZPirpH3Ms\n4TJJ/5Tjv9/J2Df1sW/qY9/Uxn6pj31TH/umvnbsm6sjYtVCK/VkgMub7XIjzznrReyb+tg39bFv\namO/1Me+qY99U18n7RtOoQIAABQMAQ4AAKBgCHD52Jl3AR2MfVMf+6Y+9k1t7Jf62Df1sW/q65h9\nwxg4AACAgqEHDgAAoGAIcAAAAAVDgGsR2ytsP257On1fXmOdn7H9fOb1z7aH02Wfsv31zLK17f8W\nrdHIvknXeyvz/fdk2q+1/SXbM7Ynbfe3r/rWavC4WWv7i7YP2v6K7dHMsq46bmzfbvvl9L/1jhrL\nl6bHwEx6TFyTWfbRtP1l2+9rZ93t0MC+2W77xfQYedL21ZllNX+2ukUD++ZDto9m9sGvZJZtSX/+\npm1vaW/lrdXAfhnP7JOv2n49s6zbj5lP2n7N9oE6y237P6f77iu2b8osy+eYiQheLXhJ+iNJO9Lp\nHZI+tsD6KyQdl/QD6fynJN2Z9/fIc99IeqNO+2ckbU6n/0zSh/P+Tu3cN5L+laShdPqHJb0q6R3d\ndtxIukTS1yRdJ6lf0pclXT9vnf8g6c/S6c2SJtPp69P1l0q6Nv2cS/L+Tm3eNz+T+X3y4eq+Sedr\n/mx1w6vBffMhSf+lxrYrJL2Svi9Pp5fn/Z3atV/mrf/rkj7ZC8dM+v1+StJNkg7UWb5B0uclWdKP\nS/pS3scMPXCts1HSQ+n0Q5KGF1j/Tkmfj4jvtbSqztDsvjnNtiXdIunRC9m+ABbcNxHx1YiYTqeP\nSHpN0oJ37S6gmyXNRMQrEXFS0iNK9k9Wdn89Kuln02Nko6RHIuJERHxd0kz6ed1iwX0TEU9nfp88\nK+nKNteYl0aOm3reJ+nxiDhoYu9QAAAEtUlEQVQeEd+R9Lik21tUZ7s1u18+KOnTbamsA0TE3ynp\nRKlno6S/jMSzkt5h+3LleMwQ4FrnnRHxajr9LUnvXGD9zTr3h+UP0q7acdtLF73C/DS6b95mu2z7\n2eqpZUkrJb0eEW+m84ckXdHCWtutqePG9s1K/m/6a5nmbjlurpD0zcx8rf/Wp9dJj4nvKjlGGtm2\nyJr9fluV9B5U1frZ6haN7pufS39OHrV9VZPbFlHD3y093X6tpKcyzd18zDSi3v7L7Zi5tB3/SLey\n/YSkH6qx6L7sTESE7br3a0lT/I9K2pdp/qiSP+D9Su47c6+k+y+25nZZpH1zdUQctn2dpKdsv6Dk\nD3ShLfJx81eStkREJW0u9HGDxWf7FySVJK3PNJ/zsxURX6v9CV3pbyR9OiJO2P73Snpxb8m5pk6y\nWdKjEfFWpq3Xj5mOQ4C7CBFxa71ltr9t+/KIeDX9Q/vaeT7qA5J2R8SpzGdXe2FO2P4LSb+5KEW3\nyWLsm4g4nL6/YvsLkt4t6bNKuq4vTXtcrpR0eNG/QAstxr6x/YOSPifpvrQ7v/rZhT5u5jks6arM\nfK3/1tV1Dtm+VNLbJR1rcNsia+j72b5Vyf8YrI+IE9X2Oj9b3fLHeMF9ExHHMrMPKhl7Wt32p+dt\n+4VFrzAfzfxMbJb0a9mGLj9mGlFv/+V2zHAKtXX2SKpejbJF0mPnWfecsQbpH+/qmK9hSTWvjCmo\nBfeN7eXV03+2L5P0HkkvRjJq9GklYwbrbl9gjeybfkm7lYzHeHTesm46bp6TNOTkquN+JX9U5l/9\nlt1fd0p6Kj1G9kja7OQq1WslDUn6+zbV3Q4L7hvb75b0CUl3RMRrmfaaP1ttq7z1Gtk3l2dm75D0\nUjq9T9J70320XNJ7dfaZkSJr5OdJtt+lZDD+FzNt3X7MNGKPpF9Mr0b9cUnfTf+HOb9jph1XSvTi\nS8k4nCclTUt6QtKKtL0k6cHMetcoSfB987Z/StILSv4A/w9Jy/L+Tu3cN5J+Mv3+X07ft2a2v07J\nH+MZSX8taWne36nN++YXJJ2S9HzmtbYbjxslV359Vcn/6d+Xtt2vJJRI0tvSY2AmPSauy2x7X7rd\ny5Len/d3yWHfPCHp25ljZE/aXvdnq1teDeybP5R0MN0HT0t6V2bbX06PpxlJv5T3d2nnfknnf1fS\nA/O264Vj5tNKrug/pWQc21ZJvyrpV9PllvTxdN+9IKmU9zHDo7QAAAAKhlOoAAAABUOAAwAAKBgC\nHAAAQMEQ4AAAAAqGAAcAAFAwBDgAAICCIcABAAAUDAEOAJpg+2nbt6XTv2/7T/OuCUDv4VmoANCc\n35F0v+1/qeR5kHfkXA+AHsSTGACgSbb/VtIyST8dEbO2r1Py6K63R8Sd598aAC4ep1ABoAm2f1TS\n5ZJORsSsJEXEKxGxNd/KAPQSAhwANMj25ZIelrRR0hu2b8+5JAA9igAHAA2w/QOSdkm6JyJekvR7\nSsbDAUDbMQYOAC6S7ZWS/kDSbZIejIg/zLkkAF2OAAcAAFAwnEIFAAAoGAIcAABAwRDgAAAACoYA\nBwAAUDAEOAAAgIIhwAEAABQMAQ4AAKBgCHAAAAAF8/8BucToHJa84GcAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X2, Y2, xlabel=r'$x_1$', ylabel=r'$x_2$')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie interaktywnego wykresu\n", + "\n", + "slider_k = widgets.IntSlider(min=1, max=10, step=1, value=1, description=r'$k$', width=300)\n", + "\n", + "def interactive_knn_2(k):\n", + " fig = plot_data_for_classification(X2, Y2, xlabel=r'$x_1$', ylabel=r'$x_2$')\n", + " plot_voronoi(fig, X2[:, 1:])\n", + " plot_knn(fig, X2[:, 1:], Y2, k)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a10b0ca5c82349b596c12857fda3cd55", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(IntSlider(value=1, description=u'$k$', max=10, min=1), Button(description=u'Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(interactive_knn_2, k=slider_k)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Algorytm $k$ najbliższych sąsiadów dla problemu regresji\n", + "\n", + "1. Dany jest zbiór uczący zawierajacy przykłady $(x_i, y_i)$, gdzie: $x_i$ – zestaw cech, $y_i$ – liczba rzeczywista.\n", + "1. Dany jest przykład testowy $x'$, dla którego chcemy określić klasę.\n", + "1. Oblicz odległość $d(x', x_i)$ dla każdego przykładu $x_i$ ze zbioru uczącego.\n", + "1. Wybierz $k$ przykładów $x_{i_1}, \\ldots, x_{i_k}$, dla których wyliczona odległość jest najmniejsza.\n", + "1. Jako wynik $y'$ zwróć średnią liczb $y_{i_1}, \\ldots, y_{i_k}$:\n", + " $$ y' = \\frac{1}{k} \\sum_{j=1}^{k} y_{i_j} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Wybór $k$\n", + "\n", + "* Wartość $k$ ma duży wpływ na wynik działania algorytmu KNN:\n", + " * Jeżeli $k$ jest zbyt duże, wszystkie nowe przykłady są klasyfikowane jako klasa większościowa.\n", + " * Jeżeli $k$ jest zbyt małe, granice klas są niestabilne, a algorytm jest bardzo podatny na obserwacje odstające.\n", + "* Aby dobrać optymalną wartość $k$, najlepiej użyć zbioru walidacyjnego." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Miary podobieństwa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Odległość euklidesowa\n", + "$$ d(x, x') = \\sqrt{ \\sum_{i=1}^n \\left( x_i - x'_i \\right) ^2 } $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Dobry wybór w przypadku numerycznych cech.\n", + "* Symetryczna, traktuje wszystkie wymiary jednakowo.\n", + "* Wrażliwa na duże wahania jednej cechy." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Odległość Hamminga\n", + "$$ d(x, x') = \\sum_{i=1}^n \\mathbf{1}_{x_i \\neq x'_i} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Dobry wybór w przypadku cech zero-jedynkowych.\n", + "* Liczba cech, którymi różnią się dane przykłady." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Odległość Minkowskiego ($p$-norma)\n", + "$$ d(x, x') = \\sqrt[p]{ \\sum_{i=1}^n \\left| x_i - x'_i \\right| ^p } $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Dla $p = 2$ jest to odległość euklidesowa.\n", + "* Dla $p = 1$ jest to odległość taksówkowa.\n", + "* Jeżeli $p \\to \\infty$, to $p$-norma zbliża się do logicznej alternatywy.\n", + "* Jeżeli $p \\to 0$, to $p$-norma zbliża się do logicznej koniunkcji." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### KNN – praktyczne porady" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Co zrobić z remisami?\n", + " * losowanie\n", + " * prawdopodobieństwo _a priori_\n", + " * 1NN" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* KNN źle radzi sobie z brakującymi wartościami cech (nie można wówczas sensownie wyznaczyć odległości)." + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w4/zumz4a.pdf b/w4/zumz4a.pdf new file mode 100644 index 0000000..a40e790 Binary files /dev/null and b/w4/zumz4a.pdf differ diff --git a/w4/zumz4b.ipynb b/w4/zumz4b.ipynb new file mode 100644 index 0000000..001f82c --- /dev/null +++ b/w4/zumz4b.ipynb @@ -0,0 +1,1202 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe UMZ 2017/2018\n", + "# 4. Algorytm KNN, uczenie nienadzorowane\n", + "### Część 2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 4.2. Uczenie nienadzorowane – Algorytm $k$ średnich" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przydatne importy\n", + "\n", + "import ipywidgets as widgets\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas\n", + "import random\n", + "import seaborn\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych (gatunki kosaćców)\n", + "\n", + "data_iris = pandas.read_csv('iris.csv', header=0, usecols=['łod.dł.', 'łod.sz.', 'pł.dł.', 'pł.sz.'])\n", + "data_iris.columns=['x1', 'x2', 'x3', 'x4']\n", + "\n", + "X = data_iris.values\n", + "Xs = data_iris.values[:, 2:4]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres danych\n", + "def plot_unlabeled_data(X, col1=0, col2=1, x1label=r'$x_1$', x2label=r'$x_2$'): \n", + " fig = plt.figure(figsize=(16*.7, 9*.7))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " X1 = X[:, col1].tolist()\n", + " X2 = X[:, col2].tolist()\n", + " ax.scatter(X1, X2, c='k', marker='o', s=50, label='Dane')\n", + " ax.set_xlabel(x1label)\n", + " ax.set_ylabel(x2label)\n", + " ax.margins(.05, .05)\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie interaktywnego wykresu\n", + "\n", + "dropdown_arg1 = widgets.Dropdown(options=[0, 1, 2, 3], value=2, description='arg1')\n", + "dropdown_arg2 = widgets.Dropdown(options=[0, 1, 2, 3], value=3, description='arg2')\n", + "\n", + "def interactive_unlabeled_data(arg1, arg2):\n", + " fig = plot_unlabeled_data(\n", + " X, col1=arg1, col2=arg2, x1label='$x_{}$'.format(arg1), x2label='$x_{}$'.format(arg2))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4196201adbb34356bf7a5f511a8206f9", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(Dropdown(description=u'arg1', index=2, options=(0, 1, 2, 3), value=2), Dropdown(description=u'arg2', index=3, options=(0, 1, 2, 3), value=3), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact(interactive_unlabeled_data, arg1=dropdown_arg1, arg2=dropdown_arg2)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nwjH8+o0P8X6nvAgnHMsdTQlH5QVBB45HMr93dkdxpCeK5U+2oyscw02PbcOUO1/ETY9tw7FIHMmk\nsOlbPDVQc5Tb9cie79HemCW31W4/Xac8e3skpmHF3KmZ2ZTWtt3o6o2hZU6DoU09RepYJG6wvd5Y\nwmKPXeE4AOQ9u8IzMUypY1e02RfTcLTXaP9He2OIxLXMtl+/8SG6wrFM2gqQCrTMvfd1LP7lWzjS\nE8XUu/6Amx7bhiO9Mfzzb3ek2umJZRb3svMP9h2GKW+K9lEuhNgq2fabYrXvFLJpTF1TXF640/90\noqJAuny4z6MYfl/z8l6p+oo+jTrQKVbGHeT7fHPtZ97eHYlL1Xyuv2CyZQrdq5A01aVlo1l9hW2O\nKS/sCt41Idfe13/O1hbPTlsxj+u51opgGKZycUV1CBHdBOAmAJg4ceKwnttuGlNf5hhITUueNaYm\n7+lEv1fF6s3y5cP33n05wlENdz37Htp2HMC/XRPKmSLDSyW7j3ztOd+lsO32k6VXjR7hl+6bPYWe\nSUlRKG/1Fba5ysXJ8XmosEuzAsnH3BGBk0X3umKWLG1FH9ezj5WtFcE4RznaM+MeXLHIjxDiQSFE\nsxCiedSoUcN6brtpTF3fu23HAbS27UZvNJH3dGI4pmWWDz/zBy9g7r2vo7M7mtECByFTkW+nU9uf\npjhTuuRrz/k+X7v9ZDrhunqKbN/sgkxVVaTt2h3PNle5ODk+DyWyVBE77f3uSDzze/aYnZ22IiCk\nSivmtSIYZylXe2bcgSs+yp1ENo2ZrSmeSw2lkDbtlqvPtbQ9a4qXN/k+31z7mbePDHqxVqL2YKfm\nIzveqr7CNsdUBnba//rPdtridv4oWyuCYZjKhYTof7GbIe0A0UYAs5FSbOkE8K9CiIft9m9ubhZb\nt1rS14eUXOor+lS/ecn7Qts0p71k/70vriGZhHRp+3zVORgpjt+o/uy56OorXhVCCIt6hJ39yo4H\nwDZXmjj+EJwYn4ebfNVX+rRkbn9MrxXh97If2eD4zcjHnid9//mC2/3oZ18ZaJdKjuG6/kLPU4L3\nOC97djynXAixyOk+9Ic+jQkg8/9aT+ojxryAz2DatPt70Hfy7+Z9+2uHcTf5Pl+7/eTbCbVqfvZr\n1y7bHFOpqKoi9R/ztpr0O8LWH/324zrDMJUJjwQMwzAMwzBMRVMKsx6cU84wDMMwDMMwDsMf5QzD\n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\nuSfVxL0AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "seaborn.pairplot(data_iris, vars=data_iris.columns, size=1.5, aspect=1.75)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Odległość euklidesowa\n", + "def euclidean_distance(x1, x2):\n", + " return np.linalg.norm(x1 - x2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Algorytm k średnich\n", + "def k_means(X, k, distance=euclidean_distance):\n", + " history = []\n", + " Y = []\n", + " \n", + " # Wylosuj centroid dla każdej klasy\n", + " centroids = [[random.uniform(X.min(axis=0)[f], X.max(axis=0)[f])\n", + " for f in range(X.shape[1])]\n", + " for c in range(k)]\n", + "\n", + " # Powtarzaj, dopóki klasy się zmieniają\n", + " while True:\n", + " distances = [[distance(centroids[c], x) for c in range(k)] for x in X]\n", + " Y_new = [d.index(min(d)) for d in distances]\n", + " if Y_new == Y:\n", + " break\n", + " Y = Y_new\n", + " XY = np.asarray(np.concatenate((X, np.matrix(Y).T), axis=1))\n", + " Xc = [XY[XY[:, 2] == c][:, :-1] for c in range(k)]\n", + " centroids = [[Xc[c].mean(axis=0)[f] for f in range(X.shape[1])]\n", + " for c in range(k)]\n", + " history.append((centroids, Y))\n", + "\n", + " result = history[-1][1]\n", + " return result, history" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres danych - klastrowanie\n", + "def plot_clusters(X, Y, k, centroids=None):\n", + " color = ['r', 'g', 'b', 'c', 'm', 'y', 'k']\n", + " fig = plt.figure(figsize=(16*.7, 9*.7))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + "\n", + " X1 = X[:, 0].tolist()\n", + " X2 = X[:, 1].tolist()\n", + " X1 = [[x for x, y in zip(X1, Y) if y == c] for c in range(k)]\n", + " X2 = [[x for x, y in zip(X2, Y) if y == c] for c in range(k)]\n", + "\n", + " for c in range(k):\n", + " ax.scatter(X1[c], X2[c], c=color[c], marker='o', s=25, label='Dane')\n", + " if centroids:\n", + " ax.scatter([centroids[c][0]], [centroids[c][1]], c=color[c], marker='+', s=500, label='Centroid')\n", + "\n", + " ax.set_xlabel(r'$x_1$')\n", + " ax.set_ylabel(r'$x_2$')\n", + " ax.margins(.05, .05)\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Ys, history = k_means(Xs, 2)\n", + "fig = plot_clusters(Xs, Ys, 2, centroids=history[-1][0])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie interaktywnego wykresu\n", + "\n", + "slider_k = widgets.IntSlider(min=1, max=7, step=1, value=2, description=r'$k$', width=300)\n", + "\n", + "def interactive_kmeans_k(steps, history, k):\n", + " if steps >= len(history) or steps == 10:\n", + " steps = len(history) - 1\n", + " fig = plot_clusters(Xs, history[steps][1], k, centroids=history[steps][0])\n", + " \n", + "def interactive_kmeans(k):\n", + " slider_steps = widgets.IntSlider(min=1, max=10, step=1, value=1, description=r'steps', width=300)\n", + " _, history = k_means(Xs, k)\n", + " widgets.interact(interactive_kmeans_k, steps=slider_steps,\n", + " history=widgets.fixed(history), k=widgets.fixed(k))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "41f26926f3cc4de6acf9239e228e775a", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(IntSlider(value=2, description=u'$k$', max=7, min=1), Button(description=u'Run Interact', style=ButtonStyle()), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact_manual(interactive_kmeans, k=slider_k)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm $k$ średnich – dane wejściowe\n", + "\n", + "* $k$ – liczba klastrów\n", + "* zbiór uczący $X = \\{ x^{(1)}, x^{(2)}, \\ldots, x^{(m)} \\}$, $x^{(i)} \\in \\mathbb{R}^n$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Na wejściu nie ma zbioru $Y$, ponieważ jest to uczenie nienadzorowane!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm $k$ średnich – pseudokod\n", + "\n", + "1. Zainicjalizuj losowo $k$ centroidów (środków ciężkości klastrów): $\\mu_1, \\ldots, \\mu_k$.\n", + "1. Powtarzaj dopóki przyporządkowania klastrów się zmieniają:\n", + " 1. Dla $i = 1$ do $m$:\n", + " za $y^{(i)}$ przyjmij klasę najbliższego centroidu.\n", + " 1. Dla $c = 1$ do $k$:\n", + " za $\\mu_c$ przyjmij średnią wszystkich punktów $x^{(i)}$ takich, że $y^{(i)} = c$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Algorytm k średnich\n", + "def k_means(X, k, distance=euclidean_distance):\n", + " Y = []\n", + " centroids = [[random.uniform(X.min(axis=0)[f],X.max(axis=0)[f])\n", + " for f in range(X.shape[1])]\n", + " for c in range(k)] # Wylosuj centroidy\n", + " while True:\n", + " distances = [[distance(centroids[c], x) for c in range(k)]\n", + " for x in X] # Oblicz odległości\n", + " Y_new = [d.index(min(d)) for d in distances]\n", + " if Y_new == Y:\n", + " break # Jeśli nic się nie zmienia, przerwij\n", + " Y = Y_new\n", + " XY = np.asarray(np.concatenate((X,np.matrix(Y).T),axis=1))\n", + " Xc = [XY[XY[:, 2] == c][:, :-1] for c in range(k)]\n", + " centroids = [[Xc[c].mean(axis=0)[f]\n", + " for f in range(X.shape[1])]\n", + " for c in range(k)] # Przesuń centroidy\n", + " return Y" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Liczba klastrów jest określona z góry i wynosi $k$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Jeżeli w którymś kroku algorytmu jedna z klas nie zostanie przyporządkowana żadnemu z przykładów, pomija się ją – w ten sposób wynikiem działania algorytmu może być mniej niż $k$ klastrów." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Funkcja kosztu dla problemu klastrowania\n", + "\n", + "$$ J \\left( y^{(i)}, \\ldots, y^{(m)}, \\mu_{1}, \\ldots, \\mu_{k} \\right) = \\frac{1}{m} \\sum_{i=1}^{m} || x^{(i)} - \\mu_{y^{(i)}} || ^2 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Zauważmy, że z każdym krokiem algorytmu $k$ średnich koszt się zmniejsza (lub ewentualnie pozostaje taki sam)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Wielokrotna inicjalizacja\n", + "\n", + "* Algorytm $k$ średnich zawsze znajdzie lokalne minimum funkcji kosztu $J$, ale nie zawsze będzie to globalne minimum." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Aby temu zaradzić, można uruchomić algorytm $k$ średnich wiele razy, za każdym razem z innym losowym położeniem centroidów (tzw. **wielokrotna losowa inicjalizacja** – _multiple random initialization_).\n", + "* Za każdym razem obliczamy koszt $J$. Wybieramy ten wynik, który ma najniższy koszt." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Wybór liczby klastrów $k$\n", + "\n", + "* Najlepiej wybrać $k$ ręcznie w zależności od kształtu danych i celu, który chcemy osiągnąć." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 4.3. Metryki" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def powerme(x1,x2,n):\n", + " X = []\n", + " for m in range(n+1):\n", + " for i in range(m+1):\n", + " X.append(np.multiply(np.power(x1,i),np.power(x2,(m-i))))\n", + " return np.hstack(X)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres danych\n", + "def plot_data_for_classification(X, Y, xlabel=None, ylabel=None, Y_predicted=[], highlight=None):\n", + " fig = plt.figure(figsize=(16*.6, 9*.6))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " X = X.tolist()\n", + " Y = Y.tolist()\n", + " X1n = [x[1] for x, y in zip(X, Y) if y[0] == 0]\n", + " X1p = [x[1] for x, y in zip(X, Y) if y[0] == 1]\n", + " X2n = [x[2] for x, y in zip(X, Y) if y[0] == 0]\n", + " X2p = [x[2] for x, y in zip(X, Y) if y[0] == 1]\n", + " \n", + " if Y_predicted != []:\n", + " Y_predicted = Y_predicted.tolist()\n", + " X1tn = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 0]\n", + " X1fn = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 0]\n", + " X1tp = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 1]\n", + " X1fp = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 1]\n", + " X2tn = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 0]\n", + " X2fn = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 0]\n", + " X2tp = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 1]\n", + " X2fp = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 1]\n", + " \n", + " if Y_predicted != []:\n", + " if highlight == 'tn':\n", + " ax.scatter(X1tn, X2tn, c='r', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1fn, X2fn, c='k', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1tp, X2tp, c='k', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1fp, X2fp, c='k', marker='x', s=50, label='Dane')\n", + " elif highlight == 'fn':\n", + " ax.scatter(X1tn, X2tn, c='k', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1fn, X2fn, c='r', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1tp, X2tp, c='k', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1fp, X2fp, c='k', marker='x', s=50, label='Dane')\n", + " elif highlight == 'tp':\n", + " ax.scatter(X1tn, X2tn, c='k', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1fn, X2fn, c='k', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1tp, X2tp, c='g', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1fp, X2fp, c='k', marker='x', s=50, label='Dane')\n", + " elif highlight == 'fp':\n", + " ax.scatter(X1tn, X2tn, c='k', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1fn, X2fn, c='k', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1tp, X2tp, c='k', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1fp, X2fp, c='g', marker='x', s=50, label='Dane')\n", + " else:\n", + " ax.scatter(X1tn, X2tn, c='r', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1fn, X2fn, c='r', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1tp, X2tp, c='g', marker='o', s=50, label='Dane')\n", + " ax.scatter(X1fp, X2fp, c='g', marker='x', s=50, label='Dane')\n", + "\n", + " else:\n", + " ax.scatter(X1n, X2n, c='r', marker='x', s=50, label='Dane')\n", + " ax.scatter(X1p, X2p, c='g', marker='o', s=50, label='Dane')\n", + " \n", + " if xlabel:\n", + " ax.set_xlabel(xlabel)\n", + " if ylabel:\n", + " ax.set_ylabel(ylabel)\n", + " \n", + " ax.margins(.05, .05)\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wczytanie danych\n", + "import pandas\n", + "import numpy as np\n", + "\n", + "alldata = pandas.read_csv('data.tsv', sep='\\t')\n", + "data = np.matrix(alldata)\n", + "\n", + "m, n_plus_1 = data.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data[:, 1:]\n", + "\n", + "X2 = powerme(data[:, 1], data[:, 2], n)\n", + "Y2 = np.matrix(data[:, 0]).reshape(m, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnAAAAFpCAYAAAAcIhVtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X90XOV95/HPV2A5G1kttnGpYzCQ\nSm0SYA9QlU0bn4oQfkV/YFmhkQk5JQ1ZNtmkcYF2cU7OJjmkOSXpnihKy6blOGnSXZ8wlMiKu1XK\n8nO7bkOKYIHYcIgUsgFjElybZMdKIwnmu3/ce+2r0Yw0g2bunXvn/TpnjuY+9478zJ0Zz0fPfX6Y\nuwsAAADZ0ZF2BQAAAFAfAhwAAEDGEOAAAAAyhgAHAACQMQQ4AACAjCHAAQAAZAwBDgAAIGMIcAAA\nABlDgAMAAMiYk9OuQBpOPfVUP+uss9KuBgAAwAKPPvrov7j7huWOa8sAd9ZZZ2lycjLtagAAACxg\nZj+s5TguoQIAAGQMAQ4AACBjCHAAAAAZQ4ADAADIGAIcAABAxrREgDOzr5jZS2a2v8p+M7Mvmtm0\nmT1pZhfG9l1nZlPh7brkag0AAJCOlghwkr4q6col9r9TUm94u0HSlyTJzNZJ+qSkfyfpIkmfNLO1\nTa0pAABAyloiwLn7P0g6usQhWyX9tQcelnSKmW2UdIWke939qLu/LOleLR0EAQAAMq8lAlwNNkl6\nPrZ9MCyrVr6Imd1gZpNmNnn48OGmVRQAAKDZshLgVszd73D3Pnfv27Bh2RUqAAAAWlZWAtwLks6I\nbZ8ellUrBxDnLu3ZE/yspRwA0NKyEuD2SvrdcDTqWyX91N1flHSPpMvNbG04eOHysAxA3Pi4NDQk\n3XjjibDmHmwPDQX7AQCZ0RKL2ZvZ1yVdLOlUMzuoYGTpKkly97+QNCFpQNK0pJ9J+r1w31Ez+7Sk\nR8Jfdau7LzUYAmhPg4PSjh3S6GiwPTIShLfR0aB8cDDd+gEA6mLehpdO+vr6fHJyMu1qAMmKWtyi\nECcF4W1kRDJLr14AgOPM7FF371v2OAIc0EbcpY5Yz4lSifAGAC2k1gCXlT5wAFYqaoGLi/eJAwBk\nBgEOaAfxy6c7dgQtb1GfOEIcAGROSwxiANBk4+MnwlvU521kJNg3Oir190vbtqVbRwBAzQhwQDsY\nHJTGxoKfUZ+3KMT19zMKFQAyhgAHtAOzyi1s1coBAC2NPnAAAAAZQ4ADAADIGAIcAABAxhDgAAAA\nMoYABwAAkDEEOAAAgIwhwAEAAGQM88ABAFCmOFtU4UBBU0em1Lu+V8PnDKt7dXfa1QKOI8ABABCz\n77l9Gtg9oJKXNDM/o65VXbrpnps0ce2Etmzeknb1AElcQgUA4LjibFEDuwdUnCtqZn5GkjQzP6Pi\nXFB+bO5YyjUEAgQ4AABChQMFlbxUcV/JSyrsLyRcI6AyAhwAAKGpI1PHW97KzczPaProdMI1Aioj\nwAEAEOpd16MuW11xX5etVs+6X0m4RkBlBDgAAELDP+hSx89nK+7r+Pmshp99fcI1AiojwAEAEOp+\n1zWamL1a3bNSlwcTNXT5yeqelSZmr9aad12Tcg2BANOIAAAQMdOW/3KXDt34YRX+/kuaXif1HH1F\nw7/9Ia0ZuV0yS7uGgCTJ3D3tOiSur6/PJycn064GAKBVuUsdsYtUpRLhDYkws0fdvW+547iECgBA\nnLt0440Ly268MSgHWgQBDgCASBTeRkelHTuClrcdO4JtQhxaCH3gAACIjI+fCG8jI8Fl05GRYN/o\nqNTfL23blm4dAbVIgDOzKyWNSjpJ0i53v61s/4ikt4ebr5f0S+5+SrjvVUnfDfc95+5XJVNrAEDu\nDA5KY2PBz6jPWxTi+vuDcqAFpD6IwcxOkvQ9SZdJOijpEUnXuPtTVY7/fUkXuPv7w+1j7r6mnn+T\nQQwAAKAVZWkQw0WSpt39WXefk3SnpK1LHH+NpK8nUjMAAIAW1AoBbpOk52PbB8OyRczsTElnS3og\nVvw6M5s0s4fNjLZtAMlxl/bsWdyxvVo5ADRIKwS4emyXdLe7vxorOzNsanyPpC+YWcWF6szshjDo\nTR4+fDiJugLIu/FxaWho4ejEaBTj0FCwHwCaoBUC3AuSzohtnx6WVbJdZZdP3f2F8Oezkh6SdEGl\nB7r7He7e5+59GzZsWGmdASDo0F4+xUR8Cgo6vANoklYYhfqIpF4zO1tBcNuuoDVtATN7k6S1kr4d\nK1sr6WfuPmtmp0p6m6TPJVJrACifYmJ0NLgfn4ICAJog9RY4d39F0kck3SPpaUl3ufsBM7vVzOJT\ngmyXdKcvHDb7ZkmTZvaEpAcl3VZt9CoANEU8xEUIbwCarBVa4OTuE5Imyso+Ubb9qQqP+ydJ5zW1\ncgCwlGrLLhHiADRR6i1wAJBZLLsEICUt0QIHAJnEsksAUkKAA4DXimWXAKSEAAcAr5VZ5Ra2auUA\n0CD0gQMAAMgYAhwAAEDGEOAAAAAyhgAHAACQMQQ4AACAjCHAAQAAZAwBDgAAIGMIcAAAABlDgAMA\nAMgYAhwAAEDGEOAAAAAyhgAHAACQMQQ4AACAjCHAAQAAZAwBDgAAIGMIcAAAABlDgAMAAMgYAhwA\nAEDGEOAAAAAyhgAHAACQMQQ4AACAjCHAAQAAZAwBDgAAIGNaIsCZ2ZVm9oyZTZvZzgr732dmh83s\n8fD2gdi+68xsKrxdl2zNAQAAkndy2hUws5Mk3S7pMkkHJT1iZnvd/amyQwvu/pGyx66T9ElJfZJc\n0qPhY19OoOoAAACpaIUWuIskTbv7s+4+J+lOSVtrfOwVku5196NhaLtX0pVNqicAAEBLaIUAt0nS\n87Htg2FZuXeZ2ZNmdreZnVHnY2VmN5jZpJlNHj58uBH1BgAASEUrBLha/K2ks9z93ypoZftavb/A\n3e9w9z5379uwYUPDKwgkpThb1K7HdumWe2/Rrsd2qThbTLtKAICEpd4HTtILks6IbZ8elh3n7kdi\nm7skfS722IvLHvtQw2sItIh9z+3TwO4BlbykmfkZda3q0k333KSJaye0ZfOWtKsHAEhIK7TAPSKp\n18zONrNOSdsl7Y0fYGYbY5tXSXo6vH+PpMvNbK2ZrZV0eVgG5E5xtqiB3QMqzhU1Mz8jSZqZn1Fx\nLig/Nncs5RoCAJKSeoBz91ckfURB8Hpa0l3ufsDMbjWzq8LDPmpmB8zsCUkflfS+8LFHJX1aQQh8\nRNKtYRmQO4UDBZW8VHFfyUsq7C8kXCMAQFpa4RKq3H1C0kRZ2Sdi9z8m6WNVHvsVSV9pagWBFjB1\nZOp4y1u5mfkZTR+dTrhGAIC0pN4CB6A2vet71bWqq+K+rlVd6lnXk3CNAABpIcABGTF8zrA6rPJH\ntsM6NHzucMI1qsBd2rMn+FlLOQDgNSHAARnRvbpbE9dOqLuz+3hLXNeqLnV3BuVrOtekXENJ4+PS\n0JB0440nwpp7sD00FOwHAKxYS/SBA1CbLZu36NDNh1TYX9D00Wn1rOvR8LnDrRHeJGlwUNqxQxod\nDbZHRoLwNjoalA8Opls/AMgJ8za8pNHX1+eTk5NpVwPIp6jFLQpxUhDeRkYks/TqBQAZYGaPunvf\nsscR4AA0nLvUEeuhUSoR3gCgBrUGOPrA5RkdypGGqAUuLt4nDgCwYgS4PKNDOZIWv3y6Y0fQ8hb1\niSPEAUDDMIghz+hQjqSNj594f0V93kZGgn2jo1J/v7RtW7p1BIAcoA9c3tGhHElyD0Lc4ODC91e1\ncgDAAgxiWEJbBTiJDuUAAGQEgxgQoEM5AAC5Q4DLMzqUAwCQSwxiyDM6lAMAkEsEuDwbHJTGxhZ2\nHI9CXH8/o1ABAMgoLqHmmVnQwlY+YKFaOdobEz8DQGYQ4ACoOFvUri9/WLf81yHtuuUyFX/+/4Id\nTPyce8XZonY9tku33HuLdj22S8XZYtpVAlADphEB2ty+5/ZpYPeASl7SzPyMumaljs5Vmvi9+7Vl\n5BuL+1EiNxa99qu61GEdmrh2Qls2b0m7es3HvIVoQUwjAmBZxdmiBnYPqDhX1Mz8jCRpZrVUtHkN\n/OVv69iXCG95VfG1n59RcS4oPzZ3LOUaJoDlBpFhBDigjRUOFFTyUsV9JUmFc0R4y6klX3svqbC/\nkHCNUhBfbjAKcSw3iIwgwAFtbOrI1PHWl3Izq6XpdWLOwJxa8rWfn9H00emEa5SCaFR+FOI6Ougy\ngMwgwAFtrHd9r7pWdVXc17WqSz0XvoOJn3Nq2dd+XU/CNUpJfH7MCOENGUCAA9rY8DnD6rDK/w10\nWIeGP73nROsE/YFyZdnX/tzhhGuUEpYbREYR4IA21r26WxPXTqi7s/t4a0zXqi51dwbla1Z3B60R\n0YTQyI1lX/vONSnXMAEsN4gMYxoRADo2d0yF/QVNH51Wz7oeDZ873B5f4Gjv137PnmC0abzPWzzU\njY2x3CASV+s0IgQ4gLmggPbEZx8tiHnggFoxFxTQnlhuEBnWEgHOzK40s2fMbNrMdlbYf5OZPWVm\nT5rZ/WZ2Zmzfq2b2eHjbm2zNkQvMBQUAyJiT066AmZ0k6XZJl0k6KOkRM9vr7k/FDvs/kvrc/Wdm\n9iFJn5MUDZH6V3c/P9FKI1/i0wiMjgY3ibmgAAAtqxVa4C6SNO3uz7r7nKQ7JW2NH+DuD7r7z8LN\nhyWdnnAdkXfMBQUAyJBWCHCbJD0f2z4YllVzvaRvxbZfZ2aTZvawmVW91mVmN4THTR4+fHhlNUb+\nMBcUACBDWiHA1czM3iupT9KfxorPDEdrvEfSF8zsVyo91t3vcPc+d+/bsGFDArVFZjAXFAAgY1Lv\nAyfpBUlnxLZPD8sWMLNLJX1cUr+7z0bl7v5C+PNZM3tI0gWSvt/MCiNnxscXr38Y7xPX389cUACA\nltIKLXCPSOo1s7PNrFPSdkkLRpOa2QWS/lLSVe7+Uqx8rZmtDu+fKultkuKDH7AU92Aiy/IWpmrl\neTU4GEzYGe/zFoU4ViAAgPaTge/H1AOcu78i6SOS7pH0tKS73P2Amd1qZleFh/2ppDWS/qZsupA3\nS5o0syckPSjptrLRq1gK858FmAsKABCXge/HVriEKnefkDRRVvaJ2P1LqzzunySd19za5Vh8/jMp\naHFi/jMAQLvLwPcjS2m1u3gH/gjznwFVFWeLKhwoaOrIlHrX92r4nGF1r+5Ou1oAGi2l70fWQl0C\nAa6Mu9QRu5peKhHegAr2PbdPA7sHVPKSZuZn1LWqSx3WoYlrJ7Rl85a0qweg0VL4fmQtVNSG+c+A\nmhRnixrYPaDiXFEz8zOSpJn5GRXngvJjc8dSriGAhmrx70cCXDtj/jOgZoUDBZW8VHFfyUsq7C8k\nXCMATZOB78eWGMSAlDD/GVCzqSNTx1veys3Mz2j66HTCNQLQNBn4fiTAtbNo/rPBwcXzn/X3t8Qo\nG6BV9K7vVdeqroohrmtVl3rW9aRQKwBNkYHvRwYxAEANirNFbfr8JhXniov2dXd269DNh7Smc00K\nNQOQJwxiAIAG6l7drYlrJ9Td2a2uVV2Sgpa37s6gnPAGIElcQgWAGm3ZvEWHbj6kwv6Cpo9Oq2dd\nj4bPHSa8AUgcAQ4A6rCmc42uv/D6tKsBoM1xCRUAACBjCHAAAAAZQ4ADAADIGAIc0ucu7dmzeGbr\nauUAALQ5AhzSNz4uDQ0tXJ4kWsZkaCjYDwAAjiPAIX2Dg4vXmIuvQdcCM14DADIsh1d6CHBIX7Q8\nSRTiOjoWr0EHAMBrlcMrPQQ4tIb4QsERwhsAoBFyeKWHAIfWEH2Y4uJ/KQEA8Frl8EoPAQ7pK/9L\nqFRa/JcSAAArkbMrPQQ4pG98fPFfQvG/lDLYNwEA0GJydqWHAIf0DQ5KY2ML/xKKQtzYWCb7JgAA\nWkgOr/SwmD3SZyZt21Z7OQAA9ah2pUcKyvv7M/d9Q4ADAAD5Fl3pGRxcfKWnvz+TV3oIcAAAIN9y\neKWHPnAAAAAZQ4ADAADImJYIcGZ2pZk9Y2bTZrazwv7VZlYI93/HzM6K7ftYWP6MmV2RZL0BAADS\nkHofODM7SdLtki6TdFDSI2a2192fih12vaSX3b3HzLZL+qykYTN7i6Ttks6R9AZJ95nZr7r7q8k+\nCwBoT8XZogoHCpo6MqXe9b0aPmdY3au7064WkHs1Bzgzu0zSuyXd7u6Pm9kN7n5HA+pwkaRpd382\n/HfulLRVUjzAbZX0qfD+3ZL+3MwsLL/T3Wcl/cDMpsPf9+0G1AsAsIR9z+3TwO4BlbykmfkZda3q\n0k333KSJaye0ZfOWtKsH5Fo9l1DfL+mPJL3XzC6RdH6D6rBJ0vOx7YNhWcVj3P0VST+VtL7Gx0qS\nzOwGM5s0s8nDhw83qOoA0J6Ks0UN7B5Qca6omfkZSdLM/IyKc0H5sbljKdcQyLd6AlzR3X/i7n8o\n6XJJv9GkOjWFu9/h7n3u3rdhw4a0qwMAmVY4UFDJSxX3lbykwv5CwjUC2ks9Ae7vojvuvlPSXzeo\nDi9IOiO2fXpYVvEYMztZ0i9KOlLjYwEADTZ1ZOp4y1u5mfkZTR+dTrhGQHtZNsCZ2aiZmbt/M17u\n7n/WoDo8IqnXzM42s04FgxL2lh2zV9J14f2rJT3g7h6Wbw9HqZ4tqVfSPzeoXgCAKnrX96prVVfF\nfV2rutSzrifhGgHtpZYWuKKkvWb2ekkysyvM7B8bVYGwT9tHJN0j6WlJd7n7ATO71cyuCg/7sqT1\n4SCFmyTtDB97QNJdCgY8/L2kDzMCFQCab/icYXVY5a+QDuvQ8LnDCdcIaC8WNGQtc5DZeyTdKGlO\n0jFJf+zu/7vJdWuavr4+n5ycTLsaAJBplUahdlgHo1DRGO7BIvTx9UuXKs8JM3vU3fuWO27ZaUTM\n7B2S/r2kGUkbJb3f3Z9ZeRUBAFm2ZfMWHbr5kAr7C5o+Oq2edT0aPndYazrXpF015MH4uDQ0JO3Y\nESw6bxaEtxtvlEZHg8XpM7qOaSPUMg/cxyX9Z3ffZ2bnSSqY2U3u/kCT6wYAaHFrOtfo+guvT7sa\nyKPBwSC8jY4G2yMjJ8Lbjh3B/ja2bIBz90ti979rZu+U9A1Jv9XMigEAgDZmFoQ2KQhtUZCLt8i1\nsZr6wC16kNm/cfd/bUJ9EkEfOAAAMsJd6ogNmCmVch3eau0D95oWs89yeAOAlSjOFrXrsV265d5b\ntOuxXSrOFtOuEpBfUZ+3uBtvDMrbXOqL2QNAVrD2J5Cg+ICF6LJptC21/WXU19QCBwDthrU/gYSN\njy8Mb1GfuGhgw/h42jVMFQEOAGrA2p9AwgYHg6lC4i1tUYgbG2MUatoVAIAsYO1PIGFmled5q1be\nZmiBA4AasPYngFZCgAOAGrD2J4BWQoBLgru0Z8/iYc/VygG0nO7V3Zq4dkLdnd3HW+K6VnWpuzMo\nZ/moxmCaFqA2r2ki36xLfCLfPXtYzw3IiWNzx1j7s0kqTdPSYR1M04K2UutEvgS4JCw1lw1LggCA\nirNFbfr8JhXnFre4dXd269DNhwjKaAtNXYkBdSqfu6ajg/AGADFM0wLUhwCXlPiivBHCGwBIYpoW\noF4EuKSwnhsAVMU0LUB9CHBJKO8DVyqduJxKiAMApmkB6kSASwLruQHAkpimBagPo1CT4B6EtMHB\nhX3eqpW3O84X0LaYpgXtjmlElpB4gEN9mDcPANCmmEYE2TU4uLiPYLwP4eBg2jUEADQSKxbVjQCH\n1sO8eQDQXsbHgysv8YF90R/vQ0P0Fa+AAIfWxLx5ANA+uPJSNwIcklVrMznz5rUmLnMAaAauvNSN\nAIdk1dJMzrx5rYvLHACahSsvdUk1wJnZOjO718ymwp9rKxxzvpl928wOmNmTZjYc2/dVM/uBmT0e\n3s5P9hm0mCy0jtTSTM68ea2LyxwAmoUrL/Vx99Rukj4naWd4f6ekz1Y45lcl9Yb33yDpRUmnhNtf\nlXR1vf/ur//6r3sujY25S+47driXSkFZqRRsS8H+VhCvU3Qrr/PY2Int+OMqlSNZy71+AFCv+P8r\n0f8n5dttQtKk15KhajmoWTdJz0jaGN7fKOmZGh7zRCzQEeDisvQBKJUWBoBWqttr0W6hM2+vH4B0\nZaUBIgG1Bri0+8Cd5u4vhvd/JOm0pQ42s4skdUr6fqz4M+Gl1REzW92kemZDVjqBeg6bydupb1ge\nXz8A6RocDCZpj39XRd9pY2N0z6iklpS3kpuk+yTtr3DbKuknZce+vMTv2aigxe6tZWUmabWkr0n6\nxBKPv0HSpKTJzZs3Nzgvt5hWbh3JUithPfL6vMq1y/MEgJQoT5dQJf2CpMe0xOVSSRdL+h+1/Lu5\nvYTq3vr9k/LcTN7q574R8vz6AUALqDXApboWqpn9qaQj7n6bme2UtM7d/1PZMZ2SviXpb939C2X7\nNrr7i2ZmkkYk/dzddy737+Z2LVQvGxE4MrJ4O+3LqJ7zherdg0vXkVIp28+nXN5fPwBIWSYWszez\n9ZLukrRZ0g8lvdvdj5pZn6QPuvsHzOy9kv5K0oHYQ9/n7o+b2QOSNii4jPp4+Jhjy/27uQ1wLAKf\nrvi5jrRKcAYAZEImAlxachvgaB1JTxZaPwEALa/WAHdyEpVBQswqt7BVK0fjVJt8WArK+/t5DQAA\nDZP2NCJAPjAEHkAr8QyszIMVIcABjRC1cpZfJq1WDgDN1E5zU7YpLqECAJA38XWLpcX9crkqkHkE\nOAAA8qa8H24U5BhUlRuMQgUAIK/yPjdlDtU6CpU+cAAA5FHU5y2OdYtzgwAHAEDelM9NWSqd6BNH\niMsF+sABAJA3zE2ZewQ45FJxtqjCgYKmjkypd32vhs8ZVvfq7rSrBQDJiOamjK/AE4W4/n5GoeYA\ngxiQO/ue26eB3QMqeUkz8zPqWtWlDuvQxLUT2rJ5S9rVAwCgKgYxoC0VZ4sa2D2g4lxRM/MzkqSZ\n+RkV54LyY3PHUq4hAAArR4BDrhQOFFTyUsV9JS+psL+QcI0AAGg8AhxyZerI1PGWt3Iz8zOaPjqd\ncI0AAGg8AhxypXd9r7pWdVXc17WqSz3rehKuEQAAjUeAQ64MnzOsDqv8tu6wDg2fO5xwjQAAaDwC\nHHKle3W3Jq6dUHdn9/GWuK5VXeruDMrXdK5JuYYAAKwc88Ahd7Zs3qJDNx9SYX9B00en1bOuR8Pn\nDhPeAOQa81+2F+aBAwAg45j/Mj+YBw6VuUt79ixeB69aOQCgpTH/ZXsiwLWb8XFpaGjhYsbRosdD\nQ8F+AEBmMP9le6IPXLsZHAwWNx4dDbZHRoLwFi16zPp4AJApzH/Znghw7SZazFgKQlsU5HbsCMqj\nRY8BAJkQzX9ZKcQx/2V+MYihXblLHbEr6KUS4Q0AMqg4W9Smz29Sca64aF93Z7cO3XyIUfgZwiAG\nVBf1eYuL94kDAGQG81+2Jy6htpsovEV93uJ94CQuowJABjH/ZfshwLWb8fGF4a28T1x/v7RtW3L1\ncQ/qNDi4MDhWKwcAVLSmc42uv/D6tKuBhKR6CdXM1pnZvWY2Ff5cW+W4V83s8fC2N1Z+tpl9x8ym\nzaxgZp3J1T6jBgelsbGFLW1RiBsbS34UKtOaAABQt7T7wO2UdL+790q6P9yu5F/d/fzwdlWs/LOS\nRty9R9LLkvjTYzlmQQtbeatWtfJmi09rEoU4pjUBAGBJqY5CNbNnJF3s7i+a2UZJD7n7r1U47pi7\nrykrM0mHJf2yu79iZr8p6VPufsVy/y6jUFtMPLRFmNYEANCGsjIK9TR3fzG8/yNJp1U57nVmNmlm\nD5tZ1CSzXtJP3P2VcPugpE3V/iEzuyH8HZOHDx9uSOXRIPF+eBHCGwAAVTU9wJnZfWa2v8Jta/w4\nD5oCqzUHnhmm0fdI+oKZ/Uq99XD3O9y9z937NmzYUP8TQfMwrQkAAHVpeoBz90vd/dwKt29K+nF4\n6VThz5eq/I4Xwp/PSnpI0gWSjkg6xcyikbSnS3qhyU8HjVbe561UWtwnDgAALJD2JdS9kq4L718n\n6ZvlB5jZWjNbHd4/VdLbJD0Vttg9KOnqpR6PFldtWpMoxDEKFQCARdIOcLdJuszMpiRdGm7LzPrM\nbFd4zJslTZrZEwoC223u/lS47xZJN5nZtII+cV9OtPZYuVab1gQA0L7cpT17Fl/9qVaeItZCBQAA\nkIKQNjS08KpQvKvP2FjTJ7uvdRQqKzEAWKA4W1ThQEFTR6bUu75Xw+cMq3t1d9rVAoDmi89NKi1c\nbrLF5ialBQ7Acfue26eB3QMqeUkz8zPqWtWlDuvQxLUT2rJ5S9rVA4DmS3lu0lpb4AhwACQFLW+b\nPr9Jxbnion3dnd06dPMhFsYG0B7cpY7YMIFSKbG5SbMykS+AFlE4UFDJSxX3lbykwv5CwjUCgBRk\nZG5SAhwASdLUkSnNzM9U3DczP6Ppo9MJ1wgAEpahuUkJcI2UoeHHQLne9b3qWtVVcV/Xqi71rOtJ\nuEYAkLAMzU1KgGuk8fFg+HE8pUdpfmiopV54oNzwOcPqsMr/JXRYh4bPHU64RgCQsAzNTUqAa6T4\n8OMoxLXo8GOgXPfqbk1cO6Huzu7jLXFdq7rU3RmUM4ABQO6ZBfO8lQ9YqFaeIkahNlrKw4+BlTo2\nd0yF/QVNH51Wz7oeDZ87THhrJPegNX5wcOH/CdXKAbQVphFZQtOnEUlx+DGAFtcCM71jBQjgaDKm\nEUlLRoYfA0gJXS0aJ42BY/R1RosgwDVShoYfA0hJ+ai2jo7Fo95QmzTCFAEcLYJLqI3EpREAtaKr\nxcqVh6fydSubFYjp64wmog/cEpoW4OgbAaAWBIDGSetcEsDRJPSBS0OGhh8DSAldLRoruiQdl0R4\no68zUkaAA4AkZWim90xIOkwRwNEiCHAAkKQMzfTe8tIIUwRwtAj6wAEAsimNgWP0dUaTMYhhCQQ4\nAMgBwhRyqNYAd3ISlQEAoOGiAWK1lgM5Qh84AACAjCHAAQCAZKSx/FlOEeAAAEAyWEu2YegDBwAA\nkhFfS1ZavPwZ0+jUjAAHAACSEV85Y3T0RJBjKbm6MY0IAABIFmvJVsVaqAAAoPWwlmxDpBrgzGyd\nmd1rZlPhz7UVjnm7mT0eu/0ELqyvAAANj0lEQVTczAbDfV81sx/E9p2f/LMAAAA1YS3Zhkm7BW6n\npPvdvVfS/eH2Au7+oLuf7+7nS7pE0s8k/c/YIX8U7Xf3xxOpNQAAqB9ryTZM2oMYtkq6OLz/NUkP\nSbplieOvlvQtd/9Zc6sFAAAabnAwWKM2vsxZFOL6+xmFWoe0W+BOc/cXw/s/knTaMsdvl/T1srLP\nmNmTZjZiZqurPdDMbjCzSTObPHz48AqqDNSICSuBhfhMIFrmrHzAQrVyVNX0AGdm95nZ/gq3rfHj\nPBgOW/XTa2YbJZ0n6Z5Y8cckvUnSb0hapyVa79z9Dnfvc/e+DRs2rOQpAbVhwkogEAW0PXsWfibc\ng9aYP/gDPhNAnZp+CdXdL622z8x+bGYb3f3FMKC9tMSverekPe4+H/vdUevdrJn9laQ/bEilgUZg\nwkogEP0x89GPBrfR0RN/1Hzxi8FPPhNAXdLuA7dX0nWSbgt/fnOJY69R0OJ2XCz8maRBSfubVVGg\nbkxYCQTif8xEIS4KblKwzWcCqEuqE/ma2XpJd0naLOmHkt7t7kfNrE/SB939A+FxZ0n6R0lnuHsp\n9vgHJG2QZJIeDx9zbLl/l4l8kSgmrAQWTh9Rjs8EcFwmJvJ19yPu/g5373X3S939aFg+GYW3cPv/\nuvumeHgLyy9x9/Pc/Vx3f28t4Q1IFBNWAoF4i3Q5PhNA3dIehQrkFxNWAie4B4MV4uJ94vhMAHUh\nwAHNwoSVQCD6Yybq91beDy4KcXwmgJqlPYgByC8mrAQC0R8zH/1o8N7fti0oNwvKv/EN6eKL+UwA\ndUh1EENaGMQAAAlyD0Jc/I+ZpcqBNlbrIAZa4AAAzRXNsl9rOYBl0QcOAAAgYwhwAAAAGUOAAwAA\nyBgCHAA0WrR4e/kgsWrlAFAnAhwANFq0eHt8ctpoLrShIeY7A7BijEIFgEaLL94uBXP/xVflYL4z\nACtEgAOARouv+zk6eiLIxVflAIAV4BIqADRDpcXbsxLe6MMHtDwCHAA0Q9TnLS4rC7bThw9oeQQ4\nAGi0KOxEfd5KpRN94rIQ4uJ9+KL60ocPaCn0gQOARosWb4/3eYv3iYsv6N6K6MMHtDwWsweARsvL\n4u3uUkfsQk2plI16o7ny8v5uUbUuZs8lVABotGiR9vIvsWrlrSjLffjQXM3sI8kAmpoR4AAAC2W9\nDx+aq5l9JBlAUzP6wAEAFsp6Hz40VzP7SDIJds3oAwcAWIg+TqhFs/pIxlv0Im00gIY+cACAE+rp\nW5SHPnxormb2kczyJNgJIsABQDugbxEapdl9JBlAUxMCHAC0AybnRaNU6yMZvb9WOgqVATQ1oQ8c\nALSLNu9bhAZpZh/JPXuCFuH4+zL+vh0by/0Amlr7wBHgAKAVJDVwgMl50coYQJONQQxm9jtmdsDM\nSmZWtbJmdqWZPWNm02a2M1Z+tpl9JywvmFlnMjUHgAZLoo8afYvQ6hhAU7O0+8DtlzQk6R+qHWBm\nJ0m6XdI7Jb1F0jVm9pZw92cljbh7j6SXJV3f3OoCQJM0u48afYuAXEl1Il93f1qSbOlEfZGkaXd/\nNjz2TklbzexpSZdIek943NckfUrSl5pVXwBommYvIM/kvECupN0CV4tNkp6PbR8My9ZL+om7v1JW\nDgDZ1Mz5rwYHgw7g8d8X/XtjY4xCBTKm6QHOzO4zs/0Vblub/W+X1eMGM5s0s8nDhw8n+U8DQG2a\nPTkqfYuA3Gh6gHP3S9393Aq3b9b4K16QdEZs+/Sw7IikU8zs5LLyavW4w9373L1vw4YNr+WpAEDz\n0EcNQB2ycAn1EUm94YjTTknbJe31YP6TByVdHR53naRaQyEAtJZmTo4KIHfSnkZkm5kdlPSbkv7O\nzO4Jy99gZhOSFPZx+4ikeyQ9Lekudz8Q/opbJN1kZtMK+sR9OennAAANQR81AHVgIl8AAIAWkYmJ\nfAEAAFA/AhwAAEDGEOAAAAAyhgAHAACQMQQ4AACAjCHAAQAAZAwBDgAAIGMIcAAAABlDgAMAAMgY\nAhwAAEDGtOVSWmZ2WNIPG/xrT5X0Lw3+nVnDOeAcSJwDiXMQ4TxwDiTOgVTfOTjT3Tcsd1BbBrhm\nMLPJWtYuyzPOAedA4hxInIMI54FzIHEOpOacAy6hAgAAZAwBDgAAIGMIcI1zR9oVaAGcA86BxDmQ\nOAcRzgPnQOIcSE04B/SBAwAAyBha4AAAADKGAAcAAJAxBLg6mNnvmNkBMyuZWdXhwGZ2pZk9Y2bT\nZrYzVn62mX0nLC+YWWcyNW8cM1tnZvea2VT4c22FY95uZo/Hbj83s8Fw31fN7Aexfecn/yxWppZz\nEB73aux57o2Vt8v74Hwz+3b4mXnSzIZj+zL7Pqj2+Y7tXx2+rtPh63xWbN/HwvJnzOyKJOvdSDWc\ng5vM7Knwdb/fzM6M7av4uciaGs7B+8zscOy5fiC277rwszNlZtclW/PGqeEcjMSe//fM7CexfXl5\nH3zFzF4ys/1V9puZfTE8R0+a2YWxfSt7H7g7txpvkt4s6dckPSSpr8oxJ0n6vqQ3SuqU9ISkt4T7\n7pK0Pbz/F5I+lPZzeg3n4HOSdob3d0r67DLHr5N0VNLrw+2vSro67eeRxDmQdKxKeVu8DyT9qqTe\n8P4bJL0o6ZQsvw+W+nzHjvmPkv4ivL9dUiG8/5bw+NWSzg5/z0lpP6cmnYO3xz7zH4rOQbhd8XOR\npVuN5+B9kv68wmPXSXo2/Lk2vL827efUjHNQdvzvS/pKnt4H4fP4bUkXStpfZf+ApG9JMklvlfSd\nRr0PaIGrg7s/7e7PLHPYRZKm3f1Zd5+TdKekrWZmki6RdHd43NckDTavtk2zVUHdpdqew9WSvuXu\nP2tqrZJV7zk4rp3eB+7+PXefCu8fkvSSpGVnF29xFT/fZcfEz83dkt4Rvu5bJd3p7rPu/gNJ0+Hv\ny5plz4G7Pxj7zD8s6fSE69hstbwPqrlC0r3uftTdX5Z0r6Qrm1TPZqr3HFwj6euJ1CxB7v4PChop\nqtkq6a898LCkU8xsoxrwPiDANd4mSc/Htg+GZesl/cTdXykrz5rT3P3F8P6PJJ22zPHbtfhD+5mw\nKXnEzFY3vIbNV+s5eJ2ZTZrZw9ElZLXp+8DMLlLwV/r3Y8VZfB9U+3xXPCZ8nX+q4HWv5bFZUO/z\nuF5BC0Sk0ucia2o9B+8K3+N3m9kZdT621dX8PMJL6GdLeiBWnIf3QS2qnacVvw9OXnHVcsbM7pP0\nyxV2fdzdv5l0fdKw1DmIb7i7m1nVeWjCvzLOk3RPrPhjCr7wOxXMi3OLpFtXWudGa9A5ONPdXzCz\nN0p6wMy+q+DLPBMa/D74b5Kuc/dSWJyJ9wFWxszeK6lPUn+seNHnwt2/X/k3ZNrfSvq6u8+a2X9Q\n0Cp7Scp1Sst2SXe7+6uxsnZ5HzQNAa6Mu1+6wl/xgqQzYtunh2VHFDSdnhz+VR6Vt5ylzoGZ/djM\nNrr7i+EX80tL/Kp3S9rj7vOx3x212sya2V9J+sOGVLrBGnEO3P2F8OezZvaQpAskfUNt9D4ws1+Q\n9HcK/gB6OPa7M/E+qKDa57vSMQfN7GRJv6jg81/LY7OgpudhZpcqCPv97j4blVf5XGTti3vZc+Du\nR2KbuxT0G40ee3HZYx9qeA2br57383ZJH44X5OR9UItq52nF7wMuoTbeI5J6LRhp2KngjbvXg16L\nDyroEyZJ10nKYoveXgV1l5Z/Dov6PIRf9lFfsEFJFUfutLhlz4GZrY0uC5rZqZLeJumpdnofhO//\nPQr6f9xdti+r74OKn++yY+Ln5mpJD4Sv+15J2y0YpXq2pF5J/5xQvRtp2XNgZhdI+ktJV7n7S7Hy\nip+LxGreOLWcg42xzaskPR3ev0fS5eG5WCvpci28SpEVtXwWZGZvUtBJ/9uxsry8D2qxV9LvhqNR\n3yrpp+EfsCt/HzR7hEaebpK2KbhOPSvpx5LuCcvfIGkidtyApO8p+Gvi47HyNyr4D3ta0t9IWp32\nc3oN52C9pPslTUm6T9K6sLxP0q7YcWcp+Aujo+zxD0j6roIv7P8uaU3az6kZ50DSb4XP84nw5/Xt\n9j6Q9F5J85Iej93Oz/r7oNLnW8Hl36vC+68LX9fp8HV+Y+yxHw8f94ykd6b9XJp4Du4L/4+MXve9\nYXnVz0XWbjWcgz+RdCB8rg9KelPsse8P3x/Tkn4v7efSrHMQbn9K0m1lj8vT++DrCkbYzyvIB9dL\n+qCkD4b7TdLt4Tn6rmIzWKz0fcBSWgAAABnDJVQAAICMIcABAABkDAEOAAAgYwhwAAAAGUOAAwAA\nyBgCHAAAQMYQ4AAAADKGAAcAdTCzB83ssvD+H5vZn6VdJwDth7VQAaA+n5R0q5n9koL1G69KuT4A\n2hArMQBAnczsf0laI+lidy+a2RsVLJP1i+5+9dKPBoCV4xIqANTBzM6TtFHSnLsXJcndn3X369Ot\nGYB2QoADgBqZ2UZJuyVtlXTMzK5MuUoA2hQBDgBqYGavlzQm6WZ3f1rSpxX0hwOAxNEHDgBWyMzW\nS/qMpMsk7XL3P0m5SgByjgAHAACQMVxCBQAAyBgCHAAAQMYQ4AAAADKGAAcAAJAxBDgAAICMIcAB\nAABkDAEOAAAgYwhwAAAAGfP/AZ666boBPEObAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plot_data_for_classification(X2, Y2, xlabel=r'$x_1$', ylabel=r'$x_2$')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def safeSigmoid(x, eps=0):\n", + " y = 1.0/(1.0 + np.exp(-x))\n", + " if eps > 0:\n", + " y[y < eps] = eps\n", + " y[y > 1 - eps] = 1 - eps\n", + " return y\n", + "\n", + "def h(theta, X, eps=0.0):\n", + " return safeSigmoid(X*theta, eps)\n", + "\n", + "def J(h,theta,X,y, lamb=0):\n", + " m = len(y)\n", + " f = h(theta, X, eps=10**-7)\n", + " j = -np.sum(np.multiply(y, np.log(f)) + \n", + " np.multiply(1 - y, np.log(1 - f)), axis=0)/m\n", + " if lamb > 0:\n", + " j += lamb/(2*m) * np.sum(np.power(theta[1:],2))\n", + " return j\n", + "\n", + "def dJ(h,theta,X,y,lamb=0):\n", + " g = 1.0/y.shape[0]*(X.T*(h(theta,X)-y))\n", + " if lamb > 0:\n", + " g[1:] += lamb/float(y.shape[0]) * theta[1:] \n", + " return g\n", + "\n", + "def classifyBi(theta, X):\n", + " prob = h(theta, X)\n", + " return prob" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Metoda gradientu prostego dla regresji logistycznej\n", + "def GD(h, fJ, fdJ, theta, X, y, alpha=0.01, eps=10**-3, maxSteps=10000):\n", + " errorCurr = fJ(h, theta, X, y)\n", + " errors = [[errorCurr, theta]]\n", + " while True:\n", + " # oblicz nowe theta\n", + " theta = theta - alpha * fdJ(h, theta, X, y)\n", + " # raportuj poziom błędu\n", + " errorCurr, errorPrev = fJ(h, theta, X, y), errorCurr\n", + " # kryteria stopu\n", + " if abs(errorPrev - errorCurr) <= eps:\n", + " break\n", + " if len(errors) > maxSteps:\n", + " break\n", + " errors.append([errorCurr, theta]) \n", + " return theta, errors" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "theta = [[ 1.37136167]\n", + " [ 0.90128948]\n", + " [ 0.54708112]\n", + " [-5.9929264 ]\n", + " [ 2.64435168]\n", + " [-4.27978238]]\n" + ] + } + ], + "source": [ + "# Uruchomienie metody gradientu prostego dla regresji logistycznej\n", + "theta_start = np.matrix(np.zeros(X2.shape[1])).reshape(X2.shape[1],1)\n", + "theta, errors = GD(h, J, dJ, theta_start, X2, Y2, \n", + " alpha=0.1, eps=10**-7, maxSteps=10000)\n", + "print('theta = {}'.format(theta))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Wykres granicy klas\n", + "def plot_decision_boundary(fig, theta, X):\n", + " ax = fig.axes[0]\n", + " xx, yy = np.meshgrid(np.arange(-1.0, 1.0, 0.02),\n", + " np.arange(-1.0, 1.0, 0.02))\n", + " l = len(xx.ravel())\n", + " C = powerme(xx.reshape(l, 1), yy.reshape(l, 1), n)\n", + " z = classifyBi(theta, C).reshape(int(np.sqrt(l)), int(np.sqrt(l)))\n", + "\n", + " plt.contour(xx, yy, z, levels=[0.5], lw=3);" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "matrix([[0],\n", + " [1],\n", + " [0],\n", + " [0],\n", + " [0],\n", + " [0],\n", + " [1],\n", + " [1],\n", + " [1],\n", + " [0]])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Y_predicted = (classifyBi(theta, X2) > 0.5).astype(int)\n", + "Y_predicted[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "# Przygotowanie interaktywnego wykresu\n", + "\n", + "dropdown_highlight = widgets.Dropdown(options=['all', 'tp', 'fp', 'tn', 'fn'], value='all', description='highlight')\n", + "\n", + "def interactive_classification(highlight):\n", + " fig = plot_data_for_classification(X2, Y2, xlabel=r'$x_1$', ylabel=r'$x_2$',\n", + " Y_predicted=Y_predicted, highlight=highlight)\n", + " plot_decision_boundary(fig, theta, X2)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d66ed3534beb4ceb998f948bbb7f348c", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type interactive.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "interactive(children=(Dropdown(description=u'highlight', options=('all', 'tp', 'fp', 'tn', 'fn'), value='all'), Output()), _dom_classes=('widget-interact',))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "widgets.interact(interactive_classification, highlight=dropdown_highlight)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Dokładność (_accuracy_):\n", + "$$ accuracy = \\frac{tp + tn}{tp + fp + tn + fn} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Precyzja (_precision_):\n", + " $$ precision = \\frac{tp}{tp + fp} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Pokrycie (_recall_):\n", + " $$ recall = \\frac{tp}{tp + fn} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "_$F$-measure_:\n", + "$$ F = \\frac{2 \\cdot precision \\cdot recall}{precision + recall} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "_$F_\\beta$-measure_:\n", + "$$ F_\\beta = \\frac{(1 + \\beta) \\cdot precision \\cdot recall}{\\beta^2 * precision + recall} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* $F = F_1$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 4.4. Analiza głównych składowych" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Redukcja liczby wymiarów\n", + "\n", + "Z jakich powodów chcemy redukować liczbę wymiarów?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Chcemy pozbyć się nadmiarowych cech, np. „długość w cm” / „długość w calach”, „długość” i „szerokość” / „powierzchnia”." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Chcemy znaleźć bardziej optymalną kombinację cech." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Chcemy przyspieszyć działanie algorytmów." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Chcemy zwizualizować dane." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Błąd rzutowania\n", + "\n", + "**Błąd rzutowania** – błąd średniokwadratowy pomiędzy danymi oryginalnymi a danymi zrzutowanymi." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Sformułowanie problemu\n", + "\n", + "**Analiza głównych składowych** (_Principal Component Analysis_, PCA):\n", + "\n", + "Zredukować liczbę wymiarów z $n$ do $k$, czyli znaleźć $k$ wektorów $u^{(1)}, u^{(2)}, \\ldots, u^{(k)}$ takich, że rzutowanie danych na podprzeztrzeń rozpiętą na tych wektorach minimalizuje błąd rzutowania." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Analiza głównych składowych to zupełnie inne zagadnienie niż regresja liniowa!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm PCA\n", + "\n", + "1. Dany jest zbiór składający się z $x^{(1)}, x^{(2)}, \\ldots, x^{(m)} \\in \\mathbb{R}^n$.\n", + "1. Chcemy zredukować liczbę wymiarów z $n$ do $k$ ($k < n$).\n", + "1. W ramach wstępnego przetwarzania dokonujemy skalowania i normalizacji średniej.\n", + "1. Znajdujemy macierz kowariancji:\n", + " $$ \\Sigma = \\frac{1}{m} \\sum_{i=1}^{n} \\left( x^{(i)} \\right) \\left( x^{(i)} \\right)^T $$\n", + "1. Znajdujemy wektory własne macierzy $\\Sigma$ (rozkład SVD):\n", + " $$ (U, S, V) := \\mathop{\\rm SVD}(\\Sigma) $$\n", + "1. Pierwszych $k$ kolumn macierzy $U$ to szukane wektory." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "# Algorytm PCA - implementacja\n", + "def pca(X, k):\n", + " X_std = StandardScaler().fit_transform(X) # normalizacja\n", + " mean_vec = np.mean(X_std, axis=0)\n", + " cov_mat = np.cov(X_std.T) # macierz kowariancji\n", + " n = cov_mat.shape[0]\n", + " eig_vals, eig_vecs = np.linalg.eig(cov_mat) # wektory własne\n", + " eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:, i])\n", + " for i in range(len(eig_vals))]\n", + " eig_pairs.sort()\n", + " eig_pairs.reverse()\n", + " matrix_w = np.hstack([eig_pairs[i][1].reshape(n, 1)\n", + " for i in range(k)]) # wybór\n", + " return X_std.dot(matrix_w) # transformacja" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X_pca = pca(X, 2)\n", + "fig = plot_unlabeled_data(X_pca)" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w4/zumz4b.pdf b/w4/zumz4b.pdf new file mode 100644 index 0000000..8720f53 Binary files /dev/null and b/w4/zumz4b.pdf differ diff --git a/w5/ad0.png b/w5/ad0.png new file mode 100644 index 0000000..e30c7a7 Binary files /dev/null and b/w5/ad0.png differ diff --git a/w5/ad1.png b/w5/ad1.png new file mode 100644 index 0000000..c590adb Binary files /dev/null and b/w5/ad1.png differ diff --git a/w5/ad2.png b/w5/ad2.png new file mode 100644 index 0000000..5c41ecd Binary files /dev/null and b/w5/ad2.png differ diff --git a/w5/exp1.png b/w5/exp1.png new file mode 100644 index 0000000..8d8c146 Binary files /dev/null and b/w5/exp1.png differ diff --git a/w5/exp2.png b/w5/exp2.png new file mode 100644 index 0000000..551480a Binary files /dev/null and b/w5/exp2.png differ diff --git a/w5/exp3.png b/w5/exp3.png new file mode 100644 index 0000000..b1e771b Binary files /dev/null and b/w5/exp3.png differ diff --git a/w5/iris.csv b/w5/iris.csv new file mode 100644 index 0000000..2ee7967 --- /dev/null +++ b/w5/iris.csv @@ -0,0 +1,151 @@ +łod.dł.,łod.sz.,pł.dł.,pł.sz.,Gatunek +5.2,3.4,1.4,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +6.7,3.1,5.6,2.4,Iris-virginica +6.5,3.2,5.1,2.0,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +6.0,2.7,5.1,1.6,Iris-versicolor +5.7,2.6,3.5,1.0,Iris-versicolor +5.0,2.0,3.5,1.0,Iris-versicolor +5.2,3.5,1.5,0.2,Iris-setosa +4.8,3.0,1.4,0.1,Iris-setosa +6.7,3.3,5.7,2.5,Iris-virginica +6.1,3.0,4.9,1.8,Iris-virginica +4.8,3.4,1.9,0.2,Iris-setosa +5.8,2.8,5.1,2.4,Iris-virginica +4.4,2.9,1.4,0.2,Iris-setosa +7.2,3.0,5.8,1.6,Iris-virginica +4.4,3.2,1.3,0.2,Iris-setosa +5.0,3.5,1.3,0.3,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +7.7,2.8,6.7,2.0,Iris-virginica +5.0,3.6,1.4,0.2,Iris-setosa +6.2,2.8,4.8,1.8,Iris-virginica +6.0,2.2,5.0,1.5,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +5.0,3.2,1.2,0.2,Iris-setosa +6.7,3.1,4.4,1.4,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +5.1,3.4,1.5,0.2,Iris-setosa +6.0,2.9,4.5,1.5,Iris-versicolor +5.3,3.7,1.5,0.2,Iris-setosa +5.6,2.9,3.6,1.3,Iris-versicolor +5.5,2.5,4.0,1.3,Iris-versicolor +5.5,2.4,3.7,1.0,Iris-versicolor +4.4,3.0,1.3,0.2,Iris-setosa +6.6,3.0,4.4,1.4,Iris-versicolor +7.9,3.8,6.4,2.0,Iris-virginica +5.7,2.8,4.1,1.3,Iris-versicolor +5.8,2.7,4.1,1.0,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +5.1,3.8,1.9,0.4,Iris-setosa +5.0,3.4,1.6,0.4,Iris-setosa +5.5,2.6,4.4,1.2,Iris-versicolor +5.0,3.4,1.5,0.2,Iris-setosa +6.8,2.8,4.8,1.4,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.1,3.8,1.6,0.2,Iris-setosa +6.4,3.2,5.3,2.3,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +5.7,2.8,4.5,1.3,Iris-versicolor +5.8,2.6,4.0,1.2,Iris-versicolor +4.7,3.2,1.6,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +6.3,3.4,5.6,2.4,Iris-virginica +5.1,3.8,1.5,0.3,Iris-setosa +7.0,3.2,4.7,1.4,Iris-versicolor +5.4,3.0,4.5,1.5,Iris-versicolor +6.0,2.2,4.0,1.0,Iris-versicolor +6.0,3.0,4.8,1.8,Iris-virginica +6.2,2.9,4.3,1.3,Iris-versicolor +5.6,3.0,4.1,1.3,Iris-versicolor +4.9,3.0,1.4,0.2,Iris-setosa +5.0,2.3,3.3,1.0,Iris-versicolor +6.3,2.5,5.0,1.9,Iris-virginica +4.8,3.4,1.6,0.2,Iris-setosa +5.9,3.0,4.2,1.5,Iris-versicolor +4.6,3.6,1.0,0.2,Iris-setosa +5.0,3.5,1.6,0.6,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.0,3.0,1.6,0.2,Iris-setosa +5.6,3.0,4.5,1.5,Iris-versicolor +6.3,2.8,5.1,1.5,Iris-virginica +5.2,2.7,3.9,1.4,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +7.7,3.0,6.1,2.3,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +6.4,2.9,4.3,1.3,Iris-versicolor +6.5,3.0,5.5,1.8,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +4.7,3.2,1.3,0.2,Iris-setosa +5.5,2.4,3.8,1.1,Iris-versicolor +5.4,3.4,1.5,0.4,Iris-setosa +7.2,3.6,6.1,2.5,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +6.1,3.0,4.6,1.4,Iris-versicolor +6.0,3.4,4.5,1.6,Iris-versicolor +6.3,2.7,4.9,1.8,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.5,3.5,1.3,0.2,Iris-setosa +6.7,3.0,5.2,2.3,Iris-virginica +4.6,3.1,1.5,0.2,Iris-setosa +5.8,2.7,5.1,1.9,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +4.8,3.0,1.4,0.3,Iris-setosa +7.1,3.0,5.9,2.1,Iris-virginica +5.9,3.0,5.1,1.8,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +5.4,3.9,1.7,0.4,Iris-setosa +6.4,3.2,4.5,1.5,Iris-versicolor +5.1,2.5,3.0,1.1,Iris-versicolor +6.3,2.9,5.6,1.8,Iris-virginica +7.2,3.2,6.0,1.8,Iris-virginica +5.4,3.4,1.7,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +6.1,2.8,4.0,1.3,Iris-versicolor +7.7,3.8,6.7,2.2,Iris-virginica +5.7,2.9,4.2,1.3,Iris-versicolor +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +6.5,3.0,5.2,2.0,Iris-virginica +4.9,3.1,1.5,0.1,Iris-setosa +6.3,2.3,4.4,1.3,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.7,3.8,1.7,0.3,Iris-setosa +6.4,2.8,5.6,2.1,Iris-virginica +4.9,2.4,3.3,1.0,Iris-versicolor +5.7,2.5,5.0,2.0,Iris-virginica +5.5,4.2,1.4,0.2,Iris-setosa +6.7,3.0,5.0,1.7,Iris-versicolor +5.0,3.3,1.4,0.2,Iris-setosa +6.3,2.5,4.9,1.5,Iris-versicolor +5.4,3.7,1.5,0.2,Iris-setosa +7.7,2.6,6.9,2.3,Iris-virginica +5.7,3.0,4.2,1.2,Iris-versicolor +7.6,3.0,6.6,2.1,Iris-virginica +4.8,3.1,1.6,0.2,Iris-setosa +5.6,2.8,4.9,2.0,Iris-virginica +4.5,2.3,1.3,0.3,Iris-setosa +6.8,3.2,5.9,2.3,Iris-virginica +6.3,3.3,6.0,2.5,Iris-virginica +4.6,3.4,1.4,0.3,Iris-setosa +5.8,2.7,3.9,1.2,Iris-versicolor +5.5,2.3,4.0,1.3,Iris-versicolor +5.2,4.1,1.5,0.1,Iris-setosa +6.6,2.9,4.6,1.3,Iris-versicolor +4.3,3.0,1.1,0.1,Iris-setosa +6.8,3.0,5.5,2.1,Iris-virginica +5.8,4.0,1.2,0.2,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +6.5,3.0,5.8,2.2,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica diff --git a/w5/multireglog.png b/w5/multireglog.png new file mode 100644 index 0000000..8e5faa7 Binary files /dev/null and b/w5/multireglog.png differ diff --git a/w5/nn1.png b/w5/nn1.png new file mode 100644 index 0000000..5842e99 Binary files /dev/null and b/w5/nn1.png differ diff --git a/w5/nn2.png b/w5/nn2.png new file mode 100644 index 0000000..034ebfe Binary files /dev/null and b/w5/nn2.png differ diff --git a/w5/nn3.png b/w5/nn3.png new file mode 100644 index 0000000..e2da2f9 Binary files /dev/null and b/w5/nn3.png differ diff --git a/w5/perceptron.png b/w5/perceptron.png new file mode 100644 index 0000000..287b387 Binary files /dev/null and b/w5/perceptron.png differ diff --git a/w5/reglin.png b/w5/reglin.png new file mode 100644 index 0000000..c005a3d Binary files /dev/null and b/w5/reglin.png differ diff --git a/w5/reglog.png b/w5/reglog.png new file mode 100644 index 0000000..54c252d Binary files /dev/null and b/w5/reglog.png differ diff --git a/w5/zumz185.zip b/w5/zumz185.zip new file mode 100644 index 0000000..ef080c7 Binary files /dev/null and b/w5/zumz185.zip differ diff --git a/w5/zumz5.ipynb b/w5/zumz5.ipynb new file mode 100644 index 0000000..85016bc --- /dev/null +++ b/w5/zumz5.ipynb @@ -0,0 +1,2634 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Uczenie maszynowe UMZ 2017/2018\n", + "# 5. Sieci neuronowe" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "import math\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import random" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 5.1. Perceptron" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\ndEJJKaybM7khzO6JJJqw2YzsmGqSSiv/2Q==\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('cNxadbrN_aI', width=800, height=600)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\"Frank" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\"Frank" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\"perceptron\"/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Pierwszy perceptron liniowy\n", + "\n", + "* Frank Rosenblatt, 1957\n", + "* aparat fotograficzny podłączony do 400 fotokomórek (rozdzielczość obrazu: 20 x 20)\n", + "* wagi – potencjometry aktualizowane za pomocą silniczków" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Uczenie perceptronu\n", + "\n", + "Cykl uczenia perceptronu Rosenblatta:\n", + "\n", + "1. Sfotografuj planszę z kolejnym obiektem.\n", + "1. Zaobserwuj, która lampka zapaliła się na wyjściu.\n", + "1. Sprawdź, czy to jest właściwa lampka.\n", + "1. Wyślij sygnał „nagrody” lub „kary”." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Funkcja aktywacji\n", + "\n", + "Funkcja bipolarna:\n", + "\n", + "$$ g(z) = \\left\\{ \n", + "\\begin{array}{rl}\n", + "1 & \\textrm{gdy $z > \\theta_0$} \\\\\n", + "-1 & \\textrm{wpp.}\n", + "\\end{array}\n", + "\\right. $$\n", + "\n", + "gdzie $z = \\theta_0x_0 + \\ldots + \\theta_nx_n$,
\n", + "$\\theta_0$ to próg aktywacji,
\n", + "$x_0 = 1$. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def bipolar_plot():\n", + " matplotlib.rcParams.update({'font.size': 16})\n", + "\n", + " plt.figure(figsize=(8,5))\n", + " x = [-1,-.23,1] \n", + " y = [-1, -1, 1]\n", + " plt.ylim(-1.2,1.2)\n", + " plt.xlim(-1.2,1.2)\n", + " plt.plot([-2,2],[1,1], color='black', ls=\"dashed\")\n", + " plt.plot([-2,2],[-1,-1], color='black', ls=\"dashed\")\n", + " plt.step(x, y, lw=3)\n", + " ax = plt.gca()\n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('bottom')\n", + " ax.spines['bottom'].set_position(('data',0))\n", + " ax.yaxis.set_ticks_position('left')\n", + " ax.spines['left'].set_position(('data',0))\n", + "\n", + " plt.annotate(r'$\\theta_0$',\n", + " xy=(-.23,0), xycoords='data',\n", + " xytext=(-50, +50), textcoords='offset points', fontsize=26,\n", + " arrowprops=dict(arrowstyle=\"->\"))\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAElCAYAAAC/NQipAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XlYlPX+//HXKDBCkEJq7slRsYSK\no+QleEwjLXJtcT1hYouaWRHlUTu4lBqW2sFzyrUFU7sS7CqJXMoMy8qSOqZBmSaQlqZmHksEBe7f\nH32ZX9OoDNwMN8vzcV1c4WeZec/dcL+4l/lgMwxDAACg8hpYXQAAALUdYQoAgEmEKQAAJhGmAACY\nRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQrUAjabbZPVNQC4MK8KjmftQcAC3bp1k/j5A6xg\nc2cQR6YAAJhEmAIAYBJhCgCASYQpAAAmEaYAAJhEmAIAYBJhCgCASYQpAAAmEaYAAJhEmAIAYBJh\nCgCASYQpAAAmEaYAAJhEmAIAYBJhCgCASYQp4KZDhw7pwQcfVGRkpPz8/GSz2ZSXl+fW3NLSUiUl\nJal9+/Zq1KiRrr32Wr3++uueLRhAtSFMATft379fqampCgwMVK9evSo0d/r06Zo1a5YmTZqkjRs3\nqkePHho2bJg2bNjgoWoBVCebYRgVGV+hwUBdUlpaqgYNfv/984UXXtB9992n3NxctW/f/qLzjh49\nqrZt22rq1Kl64oknHO033nijjh07pt27d5f73BEREcrKyjJVP4BKsbkziCNTwE1lQVpRmzdv1tmz\nZxUbG+vUHhsbqz179ig3N7cqygNgIcIU8LDs7GzZ7XZ17NjRqT00NFSSlJOTY0VZAKpQhU7z9unT\nx4iLi1NcXJyOHz+uoUOHuoy5//77NWLECB08eFCjR4926X/00Uc1aNAg7d27V+PHj3fpT0xMVN++\nfbVr1y7Fx8e79D/11FOKiorSxx9/rMcff9ylPzk5WeHh4dqyZYvmzJnj0r9s2TJ17txZb731lhYu\nXOjSv2rVKrVt21Zr167VkiVLXPrXrVunpk2bKiUlRSkpKS79GzZskJ+fnxYvXqzU1FSX/szMTEnS\nggULlJGR4dTn6+urjRs3SpJmz56t9957z6n/sssuc9y0Mm3aNH3yySdO/W3atNHq1aslSfHx8dq1\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bipolar_plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Perceptron – schemat\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Perceptron – zasada działania\n", + "\n", + "1. Ustal wartości początkowe $\\theta$ (wektor 0 lub liczby losowe blisko 0).\n", + "1. Dla każdego przykładu $(x^{(i)}, y^{(i)})$, dla $i=1,\\ldots,m$\n", + " * Oblicz wartość wyjścia $o^{(i)}$:\n", + " $$o^{(i)} = g(\\theta^{T}x^{(i)}) = g(\\sum_{j=0}^{n} \\theta_jx_j^{(i)})$$\n", + " * Wykonaj aktualizację wag (tzw. _perceptron rule_):\n", + " $$ \\theta := \\theta + \\Delta \\theta $$\n", + " $$ \\Delta \\theta = \\alpha(y^{(i)}-o^{(i)})x^{(i)} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "$$\\theta_j := \\theta_j + \\Delta \\theta_j $$\n", + "\n", + "Jeżeli przykład został sklasyfikowany **poprawnie**:\n", + "\n", + "* $y^{(i)}=1$ oraz $o^{(i)}=1$ : $$\\Delta\\theta_j = \\alpha(1 - 1)x_j^{(i)} = 0$$\n", + "* $y^{(i)}=-1$ oraz $o^{(i)}=-1$ : $$\\Delta\\theta_j = \\alpha(-1 - -1)x_j^{(i)} = 0$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Czyli: jeżeli trafiłeś, to nic nie zmieniaj." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "$$\\theta_j := \\theta_j + \\Delta \\theta_j $$\n", + "\n", + "Jeżeli przykład został sklasyfikowany **niepoprawnie**:\n", + "\n", + "* $y^{(i)}=1$ oraz $o^{(i)}=-1$ : $$\\Delta\\theta_j = \\alpha(1 - -1)x_j^{(i)} = 2 \\alpha x_j^{(i)}$$\n", + "* $y^{(i)}=-1$ oraz $o^{(i)}=1$ : $$\\Delta\\theta_j = \\alpha(-1 - 1)x_j^{(i)} = -2 \\alpha x_j^{(i)}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Czyli: przesuń wagi w odpowiednią stronę." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Perceptron – zalety i wady\n", + "\n", + "Zalety:\n", + "* intuicyjny i prosty\n", + "* łatwy w implementacji\n", + "* jeżeli dane można liniowo oddzielić, algorytm jest zbieżny w skończonym czasie" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Wady:\n", + "* jeżeli danych nie można oddzielić liniowo, algorytm nie jest zbieżny" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def plot_perceptron():\n", + " plt.figure(figsize=(12,3))\n", + "\n", + " plt.subplot(131)\n", + " plt.ylim(-0.2,1.2)\n", + " plt.xlim(-0.2,1.2)\n", + "\n", + " plt.title('AND')\n", + " plt.plot([1,0,0], [0,1,0], 'ro', markersize=10)\n", + " plt.plot([1], [1], 'go', markersize=10)\n", + "\n", + " ax = plt.gca()\n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('none')\n", + " ax.spines['bottom'].set_position(('data',0))\n", + " ax.yaxis.set_ticks_position('none')\n", + " ax.spines['left'].set_position(('data',0))\n", + "\n", + " plt.xticks(np.arange(0, 2, 1.0))\n", + " plt.yticks(np.arange(0, 2, 1.0))\n", + "\n", + "\n", + " plt.subplot(132)\n", + " plt.ylim(-0.2,1.2)\n", + " plt.xlim(-0.2,1.2)\n", + "\n", + " plt.plot([1,0,1], [0,1,1], 'go', markersize=10)\n", + " plt.plot([0], [0], 'ro', markersize=10)\n", + "\n", + " ax = plt.gca()\n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('none')\n", + " ax.spines['bottom'].set_position(('data',0))\n", + " ax.yaxis.set_ticks_position('none')\n", + " ax.spines['left'].set_position(('data',0))\n", + "\n", + " plt.title('OR')\n", + " plt.xticks(np.arange(0, 2, 1.0))\n", + " plt.yticks(np.arange(0, 2, 1.0))\n", + "\n", + "\n", + " plt.subplot(133)\n", + " plt.ylim(-0.2,1.2)\n", + " plt.xlim(-0.2,1.2)\n", + "\n", + " plt.title('XOR')\n", + " plt.plot([1,0], [0,1], 'go', markersize=10)\n", + " plt.plot([0,1], [0,1], 'ro', markersize=10)\n", + "\n", + " ax = plt.gca()\n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('none')\n", + " ax.spines['bottom'].set_position(('data',0))\n", + " ax.yaxis.set_ticks_position('none')\n", + " ax.spines['left'].set_position(('data',0))\n", + "\n", + " plt.xticks(np.arange(0, 2, 1.0))\n", + " plt.yticks(np.arange(0, 2, 1.0))\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_perceptron()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Funkcje aktywacji\n", + "\n", + "Zamiast funkcji bipolarnej możemy zastosować funkcję sigmoidalną jako funkcję aktywacji." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def plot_activation_functions():\n", + " plt.figure(figsize=(16,7))\n", + " plt.subplot(121)\n", + " x = [-2,-.23,2] \n", + " y = [-1, -1, 1]\n", + " plt.ylim(-1.2,1.2)\n", + " plt.xlim(-2.2,2.2)\n", + " plt.plot([-2,2],[1,1], color='black', ls=\"dashed\")\n", + " plt.plot([-2,2],[-1,-1], color='black', ls=\"dashed\")\n", + " plt.step(x, y, lw=3)\n", + " ax = plt.gca()\n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('bottom')\n", + " ax.spines['bottom'].set_position(('data',0))\n", + " ax.yaxis.set_ticks_position('left')\n", + " ax.spines['left'].set_position(('data',0))\n", + "\n", + " plt.annotate(r'$\\theta_0$',\n", + " xy=(-.23,0), xycoords='data',\n", + " xytext=(-50, +50), textcoords='offset points', fontsize=26,\n", + " arrowprops=dict(arrowstyle=\"->\"))\n", + "\n", + " plt.subplot(122)\n", + " x2 = np.linspace(-2,2,100)\n", + " y2 = np.tanh(x2+ 0.23)\n", + " plt.ylim(-1.2,1.2)\n", + " plt.xlim(-2.2,2.2)\n", + " plt.plot([-2,2],[1,1], color='black', ls=\"dashed\")\n", + " plt.plot([-2,2],[-1,-1], color='black', ls=\"dashed\")\n", + " plt.plot(x2, y2, lw=3)\n", + " ax = plt.gca()\n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('bottom')\n", + " ax.spines['bottom'].set_position(('data',0))\n", + " ax.yaxis.set_ticks_position('left')\n", + " ax.spines['left'].set_position(('data',0))\n", + "\n", + " plt.annotate(r'$\\theta_0$',\n", + " xy=(-.23,0), xycoords='data',\n", + " xytext=(-50, +50), textcoords='offset points', fontsize=26,\n", + " arrowprops=dict(arrowstyle=\"->\"))\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\neXP5+Pho6tSpslgsmjBhglJTU7Vr1y75+/vnu0byId+tmjhxom18+Xbir732msLCwjR37lytXLlS\nv/32m1q1alXo63NdAFBkXCNZcvRmlAtX681Pf/KrsuvdIkmqVtFb65/urKQ/T6p+/fqaOHEivRkw\nB9dIwnX5+flp/fr1atCggQYNGqQHHnhAYWFhWr9+/VXv6ma1WvONP/zwQw0ZMkTjx49Xz549deLE\nCa1evbpIjQoAABT0/3vzoBFPKyeso2358z0aydfTQ4ZhKC8vj94MODiOSMJlXeuurfbAbz2BIuOI\nZMnRm1EuDflws37cnyRJiq4TpC+Gt5fFUnrfEujNQJE5/hHJAwcO6Mknn1SzZs3k7++v6tWrq0+f\nPtq5c6eZZTm1N954Q71791b16tVlsVg0efJks0tyGidOnFC/fv1UqVIlbd++XXfffbeOHz9udllO\nKT4+XiNHjlT79u3l6+sri8WiuLg4s8tyWkuXLtU999yjOnXqyMfHRw0bNtTzzz+v1NRUs0tDKaA3\nlz1X7M3r9522hUiLRZrcJ7JUQiS9uezQm8uWI/RmU4PkmjVr9OOPP+rBBx/UN998ozlz5igpKUnt\n2rXT1q1bzSzNab377rtKTEzUP/7xD7NLcSrp6enq0qWL9u3bp48++khhYWE6ePCgbrvtNp5ZVQoO\nHTqkJUuWKCgoqNDnhqHkZs6cKXd3d7388stavXq1HnvsMc2dO1e33357gVPPUP7Rm8ueq/Xm7Fyr\nXlq51zbu36aWompUsvvr0JvLFr25bDlEbzYMozgfdpWUlGRYrdZ8cykpKUZgYKAxaNAge78cDMPI\ny8szDMMwcnJyDEnGpEmTzC3IRHWeW2n7KKlZs2YZbm5uxsGDBw3DMIzWrVsbR44cMdzd3Y3XX3+9\nxPtHfpffx4ZhGO+++64hyTh69Kh5BTm5xMTEAnMfffSRIclYt25dSXdf3D7EB73Z6bhab5634ZCt\n/0ZNWm2cSc0sldehN5ctenPZcoTebOoRyZCQkAKnMVSqVEkNGjTQyZMnTarKubm5cX+l0rBixQq1\na9cu33OswsLC1LFjRy1fvtzEypwT7+OyFRoaWmCuTZs2ksT3aidEby57rvQ9LfFCpt5ad9A2Ht2t\ngSr7F/7ojhtBby5brvQ+dgSO0Jsd7l88OTlZe/bsUePGjc0uBSiymJgYRUVFFZiPjIxUbGysCRUB\n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\nvLxcubm5TvX8/HwlJyerpKREr776qlN92bJlSkhIUHFxsZYsWeJUX7VqlUaOHKmNGzdq6dKlTvU1\na9YoOjpa69at07vvvutULyoqUlhYmAoKClRQUOBU37x5sywWi1asWKH169c71Xfs2CFJeuONN7Rp\n0yaHWlBQkLZs2SJJWrx4sbZv3+5QHzBggD7++GNJ0iuvvKLdu3c71KOiovTRRx9JknJzc1VeXu5Q\nj4uL03vvvSdJevbZZ3Xw4EGHekJCgpYtWyZJevLJJ3X8+HGH+r333qvXX39dkvT444+roaHBof7A\nAw9o4cKFkqSHHnrI6V6dqVOn6uWXX5YkTZw4UdfLzs7Wiy++qJaWFmVkZDjVr1579fX1ysrKcqp3\ndu1d61Zde1f/TbsJz5roui6PzZJnXaNX8fnonp+PdrtdO3fu1KJFi5SXl3fDa4+xmWvvWozN7jM2\ns7QVXi/Ax9bxdXt7uyTJ39/5v0ZoaKjOnDnzo99n7dq1Kisrk3Tlt6cAAKDrGJsB98SMJLxaH5Of\ncifF6Tf33S5JKikpUUpKirZs2aLJkyc7nJuamiqz2ez0m7nOJCUlqbS09Jb0DHgYZiS7rltmJAEj\niouLlZ6efsPz0tLSnGZK2tvbFRAQ0DEjeSOMzUCPc88Zyeo/Tunpt0Qv19LSopqamhueZ7FYNHTo\nUIdjRger0NBQSVJTU5NTrbGx0WnpDAAA3ig5OVn79++/4XkWi6XL78XYDLgnlrbC7VksFo0aNapH\n3mv48OEym82qqKhwOH7p0iVVVVVp+vTpPdIHAADujLEZALu2AtcwmUyaPHmy1q9f33FPhnTlpvbW\n1lZNmzbNhd0BAOB9GJsB98SMJDxSaWmpqqurZbNd2UinsrJSRUVFkqSMjIyOpTazZ8/W6tWrHQam\nvLw8TZgwQdnZ2XrppZdUXV2tefPmKSsrq2O3NwAAYAxjM+BZCJLwSMuXL9fq1as7/l5YWKjCwkJJ\n0tGjRxUTEyNJslqtslqtDq9NSEjQtm3bNH/+fE2ZMkUhISGaNWuW8vPze6x/AAA8DWMz4Fl6fNdW\nwBuwMxxw09i1tesYm4GbwNgM3LSbGpu5RxIAAAAAYAhBEgAAAABgCEESAAAAAGAIQRIAAAAAYAhB\nEgAAAABgCEESAAAAAGAIQRIAAAAAYAhBEgAAAABgCEESAAAAAGAIQRIAAAAAYAhBEgAAAABgCEES\nAAAAAGAIQRIAAAAAYAhBEgAAAABgCEESAAAAAGAIQRIAAAAAYAhBEgAAAABgCEESAAAAAGAIQRIA\nAAAAYAhBEgAAAABgCEESAAAAAGAIQRIAAAAAYAhBEgAAAABgiI/dbnd1D4DH8fHx2Wq32ye7ug8A\nAHAFYzPQvQiSAAAAAABDWNoKAAAAADCEIAkAAAAAMIQgCQAAAAAwhCAJAAAAADCEIAkAAAAAMIQg\nCQAAAAAwhCAJAAAAADCEIAkAAAAAMIQgCQAAAAAw5D9uqH5cCoY+SQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_activation_functions()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Perceptron a regresja liniowa" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Uczenie regresji liniowej:\n", + "* Model: $$h_{\\theta}(x) = \\sum_{i=0}^n \\theta_ix_i$$\n", + "* Funkcja kosztu (błąd średniokwadratowy): $$J(\\theta) = \\frac{1}{m} \\sum_{i=1}^{m} (h_{\\theta}(x^{(i)}) - y^{(i)})^2$$\n", + "\n", + "* Po obliczeniu $\\nabla J(\\theta)$, zwykły SGD." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Perceptron a dwuklasowa regresja logistyczna" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Uczenie dwuklasowej regresji logistycznej:\n", + "* Model: $$h_{\\theta}(x) = \\sigma(\\sum_{i=0}^n \\theta_ix_i) = P(1|x,\\theta)$$\n", + "* Funkcja kosztu (entropia krzyżowa): $$\\begin{eqnarray} J(\\theta) &=& -\\frac{1}{m} \\sum_{i=1}^{m} [y^{(i)}\\log P(1|x^{(i)},\\theta) \\\\ && + (1-y^{(i)})\\log(1-P(1|x^{(i)},\\theta))]\\end{eqnarray}$$\n", + "\n", + "* Po obliczeniu $\\nabla J(\\theta)$, zwykły SGD." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Perceptron a wieloklasowa regresja logistyczna" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Wieloklasowa regresji logistyczna\n", + "* Model (dla $c$ klasyfikatorów binarnych): \n", + "$$\\begin{eqnarray}\n", + "h_{(\\theta^{(1)},\\dots,\\theta^{(c)})}(x) &=& \\mathrm{softmax}(\\sum_{i=0}^n \\theta_{i}^{(1)}x_i, \\ldots, \\sum_{i=0}^n \\theta_i^{(c)}x_i) \\\\ \n", + "&=& \\left[ P(k|x,\\theta^{(1)},\\dots,\\theta^{(c)}) \\right]_{k=1,\\dots,c} \n", + "\\end{eqnarray}$$\n", + "* Funkcja kosztu (**przymując model regresji binarnej**): $$\\begin{eqnarray} J(\\theta^{(k)}) &=& -\\frac{1}{m} \\sum_{i=1}^{m} [y^{(i)}\\log P(k|x^{(i)},\\theta^{(k)}) \\\\ && + (1-y^{(i)})\\log P(\\neg k|x^{(i)},\\theta^{(k)})]\\end{eqnarray}$$\n", + "\n", + "* Po obliczeniu $\\nabla J(\\theta)$, **c-krotne** uruchomienie SGD, zastosowanie $\\mathrm{softmax}(X)$ do niezależnie uzyskanych klasyfikatorów binarnych." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Przyjmijmy: \n", + "$$ \\Theta = (\\theta^{(1)},\\dots,\\theta^{(c)}) $$\n", + "\n", + "$$h_{\\Theta}(x) = \\left[ P(k|x,\\Theta) \\right]_{k=1,\\dots,c}$$\n", + "\n", + "$$\\delta(x,y) = \\left\\{\\begin{array}{cl} 1 & \\textrm{gdy } x=y \\\\ 0 & \\textrm{wpp.}\\end{array}\\right.$$\n", + "\n", + "* Wieloklasowa funkcja kosztu $J(\\Theta)$ (kategorialna entropia krzyżowa):\n", + "$$ J(\\Theta) = -\\frac{1}{m}\\sum_{i=1}^{m}\\sum_{k=1}^{c} \\delta({y^{(i)},k}) \\log P(k|x^{(i)},\\Theta) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Gradient $\\nabla J(\\Theta)$:\n", + "$$ \\dfrac{\\partial J(\\Theta)}{\\partial \\Theta_{j,k}} = -\\frac{1}{m}\\sum_{i = 1}^{m} (\\delta({y^{(i)},k}) - P(k|x^{(i)}, \\Theta)) x^{(i)}_j \n", + "$$\n", + "\n", + "* Liczymy wszystkie wagi jednym uruchomieniem SGD" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## Podsumowanie\n", + "\n", + "* W przypadku jednowarstowej sieci neuronowej wystarczy znać gradient funkcji kosztu.\n", + "* Wtedy liczymy tak samo jak w przypadku regresji liniowej, logistycznej, wieloklasowej logistycznej itp.\n", + " * Wymienione modele to szczególne przypadki jednowarstwowych sieci neuronowych.\n", + "* Regresja liniowa i binarna regresja logistyczna to jeden neuron.\n", + "* Wieloklasowa regresja logistyczna to tyle neuronów ile klas." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Funkcja aktywacji i funkcja kosztu są **dobierane do problemu**." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 5.2. Wielowarstwowe sieci neuronowe\n", + "\n", + "czyli _Artificial Neural Networks_ (ANN) lub _Multi-Layer Perceptrons_ (MLP)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Architektura sieci\n", + "\n", + "* Sieć neuronowa jako graf neuronów. \n", + "* Organizacja sieci przez warstwy.\n", + "* Najczęściej stosowane są sieci jednokierunkowe i gęste." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* $n$-warstwowa sieć neuronowa ma $n+1$ warstw (nie liczymy wejścia).\n", + "* Rozmiary sieci określane poprzez liczbę neuronów lub parametrów." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Sieć neuronowa jednokierunkowa (_feedforward_)\n", + "\n", + "* Mając daną $n$-warstwową sieć neuronową oraz jej parametry $\\Theta^{(1)}, \\ldots, \\Theta^{(L)} $ oraz $\\beta^{(1)}, \\ldots, \\beta^{(L)} $ liczymy:

\n", + "$$a^{(l)} = g^{(l)}\\left( a^{(l-1)} \\Theta^{(l)} + \\beta^{(l)} \\right). $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Funkcje $g^{(l)}$ to tzw. **funkcje aktywacji**.
\n", + "Dla $i = 0$ przyjmujemy $a^{(0)} = \\mathrm{x}$ (wektor wierszowy cech) oraz $g^{(0)}(x) = x$ (identyczność)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Parametry $\\Theta$ to wagi na połączeniach miedzy neuronami dwóch warstw.
\n", + "Rozmiar macierzy $\\Theta^{(l)}$, czyli macierzy wag na połączeniach warstw $a^{(l-1)}$ i $a^{(l)}$, to $\\dim(a^{(l-1)}) \\times \\dim(a^{(l)})$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Parametry $\\beta$ zastępują tutaj dodawanie kolumny z jedynkami do macierzy cech.
Macierz $\\beta^{(l)}$ ma rozmiar równy liczbie neuronów w odpowiedniej warstwie, czyli $1 \\times \\dim(a^{(l)})$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* **Klasyfikacja**: dla ostatniej warstwy $L$ (o rozmiarze równym liczbie klas) przyjmuje się $g^{(L)}(x) = \\mathop{\\mathrm{softmax}}(x)$.\n", + "* **Regresja**: pojedynczy neuron wyjściowy jak na obrazku. Funkcją aktywacji może wtedy być np. funkcja identycznościowa." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Pozostałe funkcje aktywacji najcześciej mają postać sigmoidy, np. sigmoidalna, tangens hiperboliczny.\n", + "* Mogą mieć też inny kształt, np. ReLU, leaky ReLU, maxout." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 5.3. Metoda propagacji wstecznej – wprowadzenie" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Jak uczyć sievi neuronowe?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* W poznanych do tej pory algorytmach (regresja liniowa, regresja logistyczna) do uczenia używaliśmy funkcji kosztu, jej gradientu oraz algorytmu gradientu prostego (GD/SGD)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Dla sieci neuronowych potrzebowalibyśmy również znaleźć gradnient funkcji kosztu." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Co sprowadza się do bardziej ogólnego problemu:
jak obliczyć gradient $\\nabla f(x)$ dla danej funkcji $f$ i wektora wejściowego $x$?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Pochodna funkcji\n", + "\n", + "* **Pochodna** mierzy, jak szybko zmienia się wartość funkcji względem zmiany jej argumentów:\n", + "\n", + "$$ \\frac{d f(x)}{d x} = \\lim_{h \\to 0} \\frac{ f(x + h) - f(x) }{ h } $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Pochodna cząstkowa i gradient\n", + "\n", + "* **Pochodna cząstkowa** mierzy, jak szybko zmienia się wartość funkcji względem zmiany jej *pojedynczego argumentu*." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* **Gradient** to wektor pochodnych cząstkowych:\n", + "\n", + "$$ \\nabla f = \\left( \\frac{\\partial f}{\\partial x_1}, \\ldots, \\frac{\\partial f}{\\partial x_n} \\right) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Gradient – przykłady\n", + "\n", + "$$ f(x_1, x_2) = x_1 + x_2 \\qquad \\to \\qquad \\frac{\\partial f}{\\partial x_1} = 1, \\quad \\frac{\\partial f}{\\partial x_2} = 1, \\quad \\nabla f = (1, 1) $$ " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ f(x_1, x_2) = x_1 \\cdot x_2 \\qquad \\to \\qquad \\frac{\\partial f}{\\partial x_1} = x_2, \\quad \\frac{\\partial f}{\\partial x_2} = x_1, \\quad \\nabla f = (x_2, x_1) $$ " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ f(x_1, x_2) = \\max(x_1 + x_2) \\hskip{12em} \\\\\n", + "\\to \\qquad \\frac{\\partial f}{\\partial x_1} = \\mathbb{1}_{x \\geq y}, \\quad \\frac{\\partial f}{\\partial x_2} = \\mathbb{1}_{y \\geq x}, \\quad \\nabla f = (\\mathbb{1}_{x \\geq y}, \\mathbb{1}_{y \\geq x}) $$ " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Własności pochodnych cząstkowych\n", + "\n", + "Jezeli $f(x, y, z) = (x + y) \\, z$ oraz $x + y = q$, to:\n", + "$$f = q z,\n", + "\\quad \\frac{\\partial f}{\\partial q} = z,\n", + "\\quad \\frac{\\partial f}{\\partial z} = q,\n", + "\\quad \\frac{\\partial q}{\\partial x} = 1,\n", + "\\quad \\frac{\\partial q}{\\partial y} = 1 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Reguła łańcuchowa\n", + "\n", + "$$ \\frac{\\partial f}{\\partial x} = \\frac{\\partial f}{\\partial q} \\, \\frac{\\partial q}{\\partial x},\n", + "\\quad \\frac{\\partial f}{\\partial y} = \\frac{\\partial f}{\\partial q} \\, \\frac{\\partial q}{\\partial y} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Propagacja wsteczna – prosty przykład" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Dla ustalonego wejścia\n", + "x = -2; y = 5; z = -4" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(3, -12)\n" + ] + } + ], + "source": [ + "# Krok w przód\n", + "q = x + y\n", + "f = q * z\n", + "print(q, f)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[-4, -4, 3]\n" + ] + } + ], + "source": [ + "# Propagacja wsteczna dla f = q * z\n", + "dz = q\n", + "dq = z\n", + "# Propagacja wsteczna dla q = x + y\n", + "dx = 1 * dq # z reguły łańcuchowej\n", + "dy = 1 * dq # z reguły łańcuchowej\n", + "print([dx, dy, dz])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Właśnie tak wygląda obliczanie pochodnych metodą propagacji wstecznej!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Spróbujmy czegoś bardziej skomplikowanego:
metodą propagacji wstecznej obliczmy pochodną funkcji sigmoidalnej." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Propagacja wsteczna – funkcja sigmoidalna" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Funkcja sigmoidalna:\n", + "\n", + "$$f(\\theta,x) = \\frac{1}{1+e^{-(\\theta_0 x_0 + \\theta_1 x_1 + \\theta_2)}}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.3932238664829637, -0.5898357997244456]\n", + "[-0.19661193324148185, -0.3932238664829637, 0.19661193324148185]\n" + ] + } + ], + "source": [ + "import math\n", + "\n", + "# Losowe wagi i dane\n", + "w = [2,-3,-3]\n", + "x = [-1, -2]\n", + "\n", + "# Krok w przód\n", + "dot = w[0]*x[0] + w[1]*x[1] + w[2]\n", + "f = 1.0 / (1 + math.exp(-dot)) # funkcja sigmoidalna\n", + "\n", + "# Krok w tył\n", + "ddot = (1 - f) * f # pochodna funkcji sigmoidalnej\n", + "dx = [w[0] * ddot, w[1] * ddot]\n", + "dw = [x[0] * ddot, x[1] * ddot, 1.0 * ddot]\n", + "\n", + "print(dx)\n", + "print(dw)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Obliczanie gradientów – podsumowanie\n", + "\n", + "* Gradient $f$ dla $x$ mówi jak zmieni się całe wyrażenie przy zmianie wartości $x$.\n", + "* Gradienty łączymy korzystając z **reguły łańcuchowej**.\n", + "* W kroku wstecz gradienty informują, które części grafu powinny być zwiększone lub zmniejszone (i z jaką siłą), aby zwiększyć wartość na wyjściu.\n", + "* W kontekście implementacji chcemy dzielić funkcję $f$ na części, dla których można łatwo obliczyć gradienty." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 5.4. Uczenie wielowarstwowych sieci neuronowych metodą propagacji wstecznej" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Mając algorytm SGD oraz gradienty wszystkich wag, moglibyśmy trenować każdą sieć." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Niech:\n", + "$$\\Theta = (\\Theta^{(1)},\\Theta^{(2)},\\Theta^{(3)},\\beta^{(1)},\\beta^{(2)},\\beta^{(3)})$$\n", + "\n", + "* Funkcja sieci neuronowej z grafiki:\n", + "\n", + "$$\\small h_\\Theta(x) = \\tanh(\\tanh(\\tanh(x\\Theta^{(1)}+\\beta^{(1)})\\Theta^{(2)} + \\beta^{(2)})\\Theta^{(3)} + \\beta^{(3)})$$\n", + "* Funkcja kosztu dla regresji:\n", + "$$J(\\Theta) = \\dfrac{1}{2m} \\sum_{i=1}^{m} (h_\\Theta(x^{(i)})- y^{(i)})^2 $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Jak obliczymy gradienty?\n", + "\n", + "$$\\nabla_{\\Theta^{(l)}} J(\\Theta) = ? \\quad \\nabla_{\\beta^{(l)}} J(\\Theta) = ?$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### W kierunku propagacji wstecznej\n", + "\n", + "* Pewna (niewielka) zmiana wagi $\\Delta z^l_j$ dla $j$-ego neuronu w warstwie $l$ pociąga za sobą (niewielką) zmianę kosztu: \n", + "\n", + "$$\\frac{\\partial J(\\Theta)}{\\partial z^{l}_j} \\Delta z^{l}_j$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Jeżeli $\\frac{\\partial J(\\Theta)}{\\partial z^{l}_j}$ jest duża, $\\Delta z^l_j$ ze znakiem przeciwnym zredukuje koszt.\n", + "* Jeżeli $\\frac{\\partial J(\\Theta)}{\\partial z^l_j}$ jest bliska zeru, koszt nie będzie mocno poprawiony." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Definiujemy błąd $\\delta^l_j$ neuronu $j$ w warstwie $l$: \n", + "\n", + "$$\\delta^l_j \\equiv \\dfrac{\\partial J(\\Theta)}{\\partial z^l_j}$$ \n", + "$$\\delta^l \\equiv \\nabla_{z^l} J(\\Theta) \\textrm{ (zapis wektorowy)} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Podstawowe równania propagacji wstecznej\n", + "\n", + "$$\n", + "\\begin{array}{ccll}\n", + "\\delta^L & = & \\nabla_{a^L}J(\\Theta) \\odot {(g^{L})}^{\\prime}(z^L) & (BP1) \\\\[2mm]\n", + "\\delta^{l} & = & ((\\Theta^{l+1})^T \\delta^{l+1}) \\odot {{(g^{l})}^{\\prime}}(z^{l}) & (BP2)\\\\[2mm]\n", + "\\nabla_{\\beta^l} J(\\Theta) & = & \\delta^l & (BP3)\\\\[2mm]\n", + "\\nabla_{\\Theta^l} J(\\Theta) & = & a^{l-1} \\odot \\delta^l & (BP4)\\\\\n", + "\\end{array}\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm propagacji wstecznej" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Dla jednego przykładu (x,y):\n", + "\n", + "1. **Wejście**: Ustaw aktywacje w warstwie cech $a^{(0)}=x$ \n", + "2. **Feedforward:** dla $l=1,\\dots,L$ oblicz \n", + "$$z^{(l)} = a^{(l-1)} \\Theta^{(l)} + \\beta^{(l)} \\textrm{ oraz } a^{(l)}=g^{(l)}(z^{(l)})$$\n", + "3. **Błąd wyjścia $\\delta^{(L)}$:** oblicz wektor $$\\delta^{(L)}= \\nabla_{a^{(L)}}J(\\Theta) \\odot {g^{\\prime}}^{(L)}(z^{(L)})$$\n", + "4. **Propagacja wsteczna błędu:** dla $l = L-1,L-2,\\dots,1$ oblicz $$\\delta^{(l)} = \\delta^{(l+1)}(\\Theta^{(l+1)})^T \\odot {g^{\\prime}}^{(l)}(z^{(l)})$$\n", + "5. **Gradienty:** \n", + " * $\\dfrac{\\partial}{\\partial \\Theta_{ij}^{(l)}} J(\\Theta) = a_i^{(l-1)}\\delta_j^{(l)} \\textrm{ oraz } \\dfrac{\\partial}{\\partial \\beta_{j}^{(l)}} J(\\Theta) = \\delta_j^{(l)}$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "W naszym przykładzie:\n", + "\n", + "$$\\small J(\\Theta) = \\frac{1}{2}(a^{(L)} - y)^2 $$\n", + "$$\\small \\dfrac{\\partial}{\\partial a^{(L)}} J(\\Theta) = a^{(L)} - y$$\n", + "\n", + "$$\\small \\tanh^{\\prime}(x) = 1 - \\tanh^2(x)$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Algorytm SGD z propagacją wsteczną\n", + "\n", + "Pojedyncza iteracja:\n", + "* Dla parametrów $\\Theta = (\\Theta^{(1)},\\ldots,\\Theta^{(L)})$ utwórz pomocnicze macierze zerowe $\\Delta = (\\Delta^{(1)},\\ldots,\\Delta^{(L)})$ o takich samych wymiarach (dla uproszczenia opuszczono wagi $\\beta$).\n", + "* Dla $m$ przykładów we wsadzie (_batch_), $i = 1,\\ldots,m$:\n", + " * Wykonaj algortym propagacji wstecznej dla przykładu $(x^{(i)}, y^{(i)})$ i przechowaj gradienty $\\nabla_{\\Theta}J^{(i)}(\\Theta)$ dla tego przykładu;\n", + " * $\\Delta := \\Delta + \\dfrac{1}{m}\\nabla_{\\Theta}J^{(i)}(\\Theta)$\n", + "* Wykonaj aktualizację wag: $\\Theta := \\Theta - \\alpha \\Delta$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Propagacja wsteczna – podsumowanie\n", + "\n", + "* Algorytm pierwszy raz wprowadzony w latach 70. XX w.\n", + "* W 1986 David Rumelhart, Geoffrey Hinton i Ronald Williams pokazali, że jest znacznie szybszy od wcześniejszych metod.\n", + "* Obecnie najpopularniejszy algorytm uczenia sieci neuronowych." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 5.5. Implementacja sieci neuronowych" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "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", + "
łod.dł.łod.sz.pł.dł.pł.sz.Iris setosa?
05.23.41.40.21.0
15.13.71.50.41.0
26.73.15.62.40.0
36.53.25.12.00.0
44.92.54.51.70.0
56.02.75.11.60.0
\n", + "
" + ], + "text/plain": [ + " łod.dł. łod.sz. pł.dł. pł.sz. Iris setosa?\n", + "0 5.2 3.4 1.4 0.2 1.0\n", + "1 5.1 3.7 1.5 0.4 1.0\n", + "2 6.7 3.1 5.6 2.4 0.0\n", + "3 6.5 3.2 5.1 2.0 0.0\n", + "4 4.9 2.5 4.5 1.7 0.0\n", + "5 6.0 2.7 5.1 1.6 0.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas\n", + "src_cols = ['łod.dł.', 'łod.sz.', 'pł.dł.', 'pł.sz.', 'Gatunek']\n", + "trg_cols = ['łod.dł.', 'łod.sz.', 'pł.dł.', 'pł.sz.', 'Iris setosa?']\n", + "data = (\n", + " pandas.read_csv('iris.csv', usecols=src_cols)\n", + " .apply(lambda x: [x[0], x[1], x[2], x[3], 1 if x[4] == 'Iris-setosa' else 0], axis=1))\n", + "data.columns = trg_cols\n", + "data[:6]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 1. 5.2 3.4 1.4 0.2]\n", + " [ 1. 5.1 3.7 1.5 0.4]\n", + " [ 1. 6.7 3.1 5.6 2.4]\n", + " [ 1. 6.5 3.2 5.1 2. ]\n", + " [ 1. 4.9 2.5 4.5 1.7]\n", + " [ 1. 6. 2.7 5.1 1.6]]\n", + "[[ 1.]\n", + " [ 1.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n" + ] + } + ], + "source": [ + "m, n_plus_1 = data.values.shape\n", + "n = n_plus_1 - 1\n", + "Xn = data.values[:, 0:n].reshape(m, n)\n", + "X = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n", + "Y = np.matrix(data.values[:, n]).reshape(m, 1)\n", + "\n", + "print(X[:6])\n", + "print(Y[:6])" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "150/150 [==============================] - 0s - loss: 2.0678 - acc: 0.6667 \n", + "Epoch 2/10\n", + "150/150 [==============================] - 0s - loss: 1.9711 - acc: 0.6667 \n", + "Epoch 3/10\n", + "150/150 [==============================] - 0s - loss: 1.8811 - acc: 0.6667 \n", + "Epoch 4/10\n", + "150/150 [==============================] - 0s - loss: 1.7793 - acc: 0.6667 \n", + "Epoch 5/10\n", + "150/150 [==============================] - 0s - loss: 1.6948 - acc: 0.6667 \n", + "Epoch 6/10\n", + "150/150 [==============================] - 0s - loss: 1.5993 - acc: 0.6667 \n", + "Epoch 7/10\n", + "150/150 [==============================] - 0s - loss: 1.5162 - acc: 0.6667 \n", + "Epoch 8/10\n", + "150/150 [==============================] - 0s - loss: 1.4308 - acc: 0.6667 \n", + "Epoch 9/10\n", + "150/150 [==============================] - 0s - loss: 1.3487 - acc: 0.6667 \n", + "Epoch 10/10\n", + "150/150 [==============================] - 0s - loss: 1.2676 - acc: 0.6667 \n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "\n", + "model = Sequential()\n", + "model.add(Dense(3, input_dim=5))\n", + "model.add(Dense(3))\n", + "model.add(Dense(1, activation='sigmoid'))\n", + "\n", + "model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n", + "\n", + "model.fit(X, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8209257125854492" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.predict(np.array([1.0, 3.0, 1.0, 2.0, 4.0]).reshape(-1, 5)).tolist()[0][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 5.6. Funkcje aktywacji" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "* Każda funkcja aktywacji ma swoje zalety i wady.\n", + "* Różne rodzaje funkcji aktywacji nadają się do różnych zastosowań." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "import math\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import random\n", + "\n", + "import keras\n", + "from keras.datasets import mnist\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense, Dropout, SimpleRNN, LSTM\n", + "from keras.optimizers import Adagrad, Adam, RMSprop, SGD\n", + "\n", + "from IPython.display import YouTubeVideo" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def plot(fun):\n", + " x = np.arange(-3.0, 3.0, 0.01)\n", + " y = [fun(x_i) for x_i in x]\n", + " fig = plt.figure(figsize=(14, 7))\n", + " ax = fig.add_subplot(111)\n", + " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n", + " ax.set_xlim(-3.0, 3.0)\n", + " ax.set_ylim(-1.5, 1.5)\n", + " ax.grid()\n", + " ax.plot(x, y)\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Funkcja logistyczna" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ g(x) = \\frac{1}{1 + e^{-x}} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Przyjmuje wartości z przedziału $(0, 1)$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Funkcja logistyczna – wykres" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n9K/ZqnBq/u4AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(lambda x: 1 / (1 + math.exp(-x)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Tangens hiperboliczny" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ g(x) = \\tanh x = \\frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Przyjmuje wartości z przedziału $(-1, 1)$.\n", + "* Powstaje z funkcji logistycznej przez przeskalowanie i przesunięcie." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Tangens hiperboliczny – wykres" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(lambda x: math.tanh(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### ReLU (_Rectifier Linear Unit_)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ g(x) = \\max(0, x) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### ReLU – zalety\n", + "* Mniej podatna na problem zanikającego gradientu (_vanishing gradient_) niż funkcje sigmoidalne, dzięki czemu SGD jest szybciej zbieżna.\n", + "* Prostsze obliczanie gradientu.\n", + "* Dzięki zerowaniu ujemnych wartości, wygasza neurony, „rozrzedzając” sieć (_sparsity_), co przyspiesza obliczenia." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "#### ReLU – wady\n", + "* Dla dużych wartości gradient może „eksplodować”.\n", + "* „Wygaszanie” neuronów." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### ReLU – wykres" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nGQPODQBJhBkAO2vIlzWekWT/apglSWvt6iR/k+TMTRx7d5I/WXPsPUnekuTJVXXU9McFgC+7/taD\nwgyAHTXkmbNTk7xjwvbLkzxjE8de3Vq7fcKxD0xy8vjriW7+Yssr3/WJLYzKMrju+jvzPw9YF9yX\ntcF6LcmFl96RBz/oKGEGwI4ZMs6OSXLLhO03J3nYNo5dffxeqmpfkn1J8sBjH5U3f/DqzU/KUmhp\nqeusC+7L2mCSrzqq5UXfekSuvexDuXbWw9CVAwcOZGVlZdZj0BnrgmkYMs52VGvt/CTnJ8mePXva\nJ3/t38x4InqzsrKSvXv3znoMOmRtMIl1wUasDSaxLpiGIa85uyWTz5BtdFZss8cmXz6DBgAAsBCG\njLPLM7p2bL1TktzfxR2XJzlxfDv+9cfeleSq+x4CAAAwv4aMs3cmeVxVnbS6oapOSPJd48cO5aIk\nD8iaG4dU1a4kz0ryP1prd057WAAAgFkaMs4uSHJNkndU1ZlVdUZGd2+8LsnrV3eqquOr6p6q+sXV\nba21j2V0G/3XVNXzqur7MrqN/olJfmnAmQEAAGZisDhrrd2W5PQkVyZ5U5I/SnJ1ktNbawfW7FpJ\njpwwy48l+YMkr0zy7iSPTPKU1tpHh5oZAABgVga9W2Nr7R+SPP1+9rkmo0Bbv/2OJC8efwAAACy0\nIV/WCAAAwCaJMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6I\nMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAA\ngA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6I\nMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAA\ngA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6I\nMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA6IMwAAgA4MFmdVdURVvayqrqmqL1bV\n31fV0zd57Buqqk34eM1Q8wIAAMzSrgGf+1eTvCTJy5N8JMm/TfLWqnpaa+3iTRx/U5Iz1m27Yboj\nAgAA9GGQOKuqh2cUZq9urf3mePP7q+rkJK9Ospk4u6u1tn+I+QAAAHoz1Msan5zkgUnevG77m5N8\nc1WdONCfCwAAMJeGirNTk9yZ5Kp12y8ffz5lE8/x8Kr6bFXdU1VXVtXPV9WRU50SAACgE0Ndc3ZM\nks+11tq67TevefxQ/i6j69QuT3J0kh9M8qokj07yvEkHVNW+JPuSZPfu3VlZWTmswVlcBw4csC6Y\nyNpgEuuCjVgbTGJdMA2birOqekKS925i10taa3u3NVGS1tr6uzJeXFUHkryoqs5trX1qwjHnJzk/\nSfbs2dP27t32GCyYlZWVWBdMYm0wiXXBRqwNJrEumIbNnjn7QJLHbGK/28efb0nyVVVV686erZ4x\nuzlb98dJXpTktCT3iTMAAIB5tqk4a63dnuSTW3jey5McleRRufd1Z6vXmn1iC891n3G2cSwAAECX\nhrohyHuS3J3k2eu2PyfJZa21qw/jOZ+dUZh9aJuzAQAAdGeQG4K01j5TVecleVlV3Zrko0meleT0\nrHtj6ar6yyTHt9ZOHn9/fJI3JXlLRmfdjsrohiA/muT1rbVPDzEzAADALA11t8YkeXmSA0lemOQR\nSa5I8szW2rvW7XfkujluzeiatJ9PcmySgxm9pPJnk7xuwHkBAABmZrA4a619Kckrxx+H2m/vuu9v\nTvIDQ80FAADQo6GuOQMAAGALxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkA\nAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAH\nxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkA\nAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAH\nxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkA\nAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHxBkAAEAHBouzqnpx\nVV1UVTdUVauqc7Z4/HdX1Qeq6o6qurGqzquqBw00LgAAwEwNeebs+UkenuTtWz2wqr4lyXuTfCbJ\n05K8IsmPJXnDFOcDAADoxq4Bn/vU1trBqtqV5AVbPPaXk1yf5BmttbuTpKruSvLGqjq3tfbRKc8K\nAAAwU4OdOWutHTyc46rqAUmekuTC1TAbuzDJXUnOnMJ4AAAAXenxhiCPSnJ0ksvWbmytfTHJp5Oc\nMouhAAAAhtRjnB0z/nzLhMduXvM4AADAwtjUNWdV9YSMbtBxfy5pre3d1kSHqar2JdmXJLt3787K\nysosxqBjBw4csC6YyNpgEuuCjVgbTGJdMA2bvSHIB5I8ZhP73b6NWVatnjF72ITHjkly+aSDWmvn\nJzk/Sfbs2dP27t07hVFYJCsrK7EumMTaYBLrgo1YG0xiXTANm4qz1trtST458CyrPp3kziSnrt1Y\nVUcnOSnJW3doDgAAgB3T3TVnrbW7krwnyTPHt+FfdVaSo5K8cyaDAQAADGiw9zmrqtOSnJAvB+Ap\nVXXW+OuLx2fjUlW/l+Ts1traWc5Jsj/JhVX1O+Pn+Y0kb2utfWSomQEAAGZlyDeh/ukkZ6/5/hnj\njyQ5Mck146+PHH/8k9ba31XVk5Kcm+TdST6f5A+T/MKA8wIAAMzMYHHWWvvRJD96uPu11v4qyXdO\neSwAAIAudXfNGQAAwDISZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0Q\nZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAA\nAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0Q\nZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAA\nAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0Q\nZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0QZwAAAB0YLM6q6sVVdVFV\n3VBVrarO2cKx54yPWf/x9qHmBQAAmKVdAz7385N8Icnbk7zgMJ/ju5N8ac33N293KAAAgB4NGWen\nttYOVtWuHH6c/W1r7Z5pDgUAANCjwV7W2Fo7ONRzAwAALJrebwhyXVV9qaqurapzq+pBsx4IAABg\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(lambda x: max(0, x))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Softplus" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ g(x) = \\log(1 + e^{x}) $$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Wygładzona wersja ReLU." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Softplus – wykres" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(lambda x: math.log(1 + math.exp(x)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Problem zanikającego gradientu (_vanishing gradient problem_)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Sigmoidalne funkcje aktywacji ograniczają wartości na wyjściach neuronów do niewielkich przedziałów ($(-1, 1)$, $(0, 1)$ itp.).\n", + "* Jeżeli sieć ma wiele warstw, to podczas propagacji wstecznej mnożymy przez siebie wiele małych wartości → obliczony gradient jest mały.\n", + "* Im więcej warstw, tym silniejszy efekt zanikania." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Sposoby na zanikający gradient\n", + "\n", + "* Modyfikacja algorytmu optymalizacji (_RProp_, _RMSProp_)\n", + "* Użycie innej funckji aktywacji (ReLU, softplus)\n", + "* Dodanie warstw _dropout_\n", + "* Nowe architektury (LSTM itp.)\n", + "* Więcej danych, zwiększenie mocy obliczeniowej" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 5.7. Wielowarstwowe sieci neuronowe w praktyce" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Przykład: MNIST\n", + "\n", + "_Modified National Institute of Standards and Technology database_" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "* Zbiór cyfr zapisanych pismem odręcznym\n", + "* 60 000 przykładów uczących, 10 000 przykładów testowych\n", + "* Rozdzielczość każdego przykładu: 28 × 28 = 784 piksele" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# źródło: https://github.com/keras-team/keras/examples/minst_mlp.py\n", + "\n", + "import keras\n", + "from keras.datasets import mnist\n", + "\n", + "# załaduj dane i podziel je na zbiory uczący i testowy\n", + "(x_train, y_train), (x_test, y_test) = mnist.load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [], + "source": [ + "def draw_examples(examples, captions=None):\n", + " plt.figure(figsize=(16, 4))\n", + " m = len(examples)\n", + " for i, example in enumerate(examples):\n", + " plt.subplot(100 + m * 10 + i + 1)\n", + " plt.imshow(example, cmap=plt.get_cmap('gray'))\n", + " plt.show()\n", + " if captions is not None:\n", + " print(6 * ' ' + (10 * ' ').join(str(captions[i]) for i in range(m)))" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\nLN9DqFbTpk1NPvfcc00ePHiwyeH8tVC4Nlu49ibyK/nft1OnTikv+9JLL5k8ceLErIwJUrNmzUy+\n+uqrTQ73xeGc1L59+2Z0f23btq04PWPGDLMt/NyL0FNPPWXyhAkTMrpvxEvyurf77bdfRtft2LFj\nyu2vv/66yW+88UZGt4/cSZ6Xyu/+ZXhFFQAAAAAQKxyoAgAAAABihbf+RuSjjz4y+fLLL684PW3a\nNLNtyJAhKXP4to/HH3/c5A0bNtR2mAjce++9Jocf+R++tTfOb/VN/lhziY82DzVv3rxO1+/cubPJ\nYVfCZagOPfRQk/fZZ5+K04MG2TXMw3+7cBmLpUuXmvz111+bvPfe9qn8rbfeEuIjfEvoHXfcUe1l\nX331VZMvu+wyk7dt2xbdwGAk/x+VpBYtWqS8fPLbNSXpBz/4gcnDhg0zuU+fPiZ36NCh4nTjxo3N\ntvBtf2F+4oknTA6nIyG/GjVqZHL79u1N/uMf/2hyqmlHme7bw6Vywh5+++23Ka8PxAmvqAIAAAAA\nYoUDVQAAAABArHCgCgAAAACIFeaoZsmcOXMqTq9evdpsC+dFnnnmmSbffvvtJh922GEmjxs3zuRP\nP/201uMsNb179za5S5cuJofzgObPn5/1MUUlnLcS/izvvPNOLoeTF+HczuTH4MEHHzTbbrzxxoxu\nO1xGJJyj+s0335i8e/duk997772K048++qjZFi5RFc6F/vzzz01ev369yQ0bNjR51apVQv60bt3a\n5NmzZ6d93X/9618mh//2yJ49e/aYvGnTJpNbtmxp8po1a0zOdDmJ5LmE27dvN9sOPvhgk7/44guT\nFyxYkNF9IVr169c3OVzqLvw/H/57hvuq5C6Ey8eEy5WF819D4WcWXHTRRSaHS1yFvQfihFdUAQAA\nAACxwoEqAAAAACBWOFAFAAAAAMQKc1RzYMWKFSYPGDDA5AsuuMDkcN3VESNGmHzkkUeafNZZZ9V1\niCUjnMsXrpu3ceNGk2fNmpX1MaWrQYMGJo8dOzbl5V9++WWTf/e730U9pNi5+uqrTV67dm3F6VNO\nOaVOt71u3TqT586da/L7779v8ptvvlmn+0s2fPhwk8O5cuG8RuTX6NGjTc5kTeNUa6wiu7Zu3Wpy\nuP7tM888Y3K4NnO4nvq8efNMfuyxx0zevHlzxemZM2eabeGcxnA7civ8XSGcN/r000+nvP7NN99s\n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\nWPn/0DbqrzfbMFoAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 5 0 4 1 9 2 1\n" + ] + } + ], + "source": [ + "draw_examples(x_train[:7], captions=y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "60000 przykładów uczących\n", + "10000 przykładów testowych\n" + ] + } + ], + "source": [ + "num_classes = 10\n", + "\n", + "x_train = x_train.reshape(60000, 784) # 784 = 28 * 28\n", + "x_test = x_test.reshape(10000, 784)\n", + "x_train = x_train.astype('float32')\n", + "x_test = x_test.astype('float32')\n", + "x_train /= 255\n", + "x_test /= 255\n", + "print('{} przykładów uczących'.format(x_train.shape[0]))\n", + "print('{} przykładów testowych'.format(x_test.shape[0]))\n", + "\n", + "# przekonwertuj wektory klas na binarne macierze klas\n", + "y_train = keras.utils.to_categorical(y_train, num_classes)\n", + "y_test = keras.utils.to_categorical(y_test, num_classes)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "dense_4 (Dense) (None, 512) 401920 \n", + "_________________________________________________________________\n", + "dropout_1 (Dropout) (None, 512) 0 \n", + "_________________________________________________________________\n", + "dense_5 (Dense) (None, 512) 262656 \n", + "_________________________________________________________________\n", + "dropout_2 (Dropout) (None, 512) 0 \n", + "_________________________________________________________________\n", + "dense_6 (Dense) (None, 10) 5130 \n", + "=================================================================\n", + "Total params: 669,706\n", + "Trainable params: 669,706\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model = Sequential()\n", + "model.add(Dense(512, activation='relu', input_shape=(784,)))\n", + "model.add(Dropout(0.2))\n", + "model.add(Dense(512, activation='relu'))\n", + "model.add(Dropout(0.2))\n", + "model.add(Dense(num_classes, activation='softmax'))\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "((60000, 784), (60000, 10))\n" + ] + } + ], + "source": [ + "print(x_train.shape, y_train.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 60000 samples, validate on 10000 samples\n", + "Epoch 1/5\n", + "60000/60000 [==============================] - 14s - loss: 0.2457 - acc: 0.9244 - val_loss: 0.1250 - val_acc: 0.9605\n", + "Epoch 2/5\n", + "60000/60000 [==============================] - 14s - loss: 0.1021 - acc: 0.9691 - val_loss: 0.0859 - val_acc: 0.9748\n", + "Epoch 3/5\n", + "60000/60000 [==============================] - 14s - loss: 0.0746 - acc: 0.9773 - val_loss: 0.0884 - val_acc: 0.9744\n", + "Epoch 4/5\n", + "60000/60000 [==============================] - 13s - loss: 0.0619 - acc: 0.9815 - val_loss: 0.0893 - val_acc: 0.9754\n", + "Epoch 5/5\n", + "60000/60000 [==============================] - 15s - loss: 0.0507 - acc: 0.9849 - val_loss: 0.0845 - val_acc: 0.9771\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy'])\n", + "\n", + "model.fit(x_train, y_train, batch_size=128, epochs=5, verbose=1,\n", + " validation_data=(x_test, y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test loss: 0.0845102945257\n", + "Test accuracy: 0.9771\n" + ] + } + ], + "source": [ + "score = model.evaluate(x_test, y_test, verbose=0)\n", + "\n", + "print('Test loss: {}'.format(score[0]))\n", + "print('Test accuracy: {}'.format(score[1]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Warstwa _dropout_ to metoda regularyzacji, służy zapobieganiu nadmiernemu dopasowaniu sieci. Polega na tym, że część węzłów sieci jest usuwana w sposób losowy." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "dense_7 (Dense) (None, 512) 401920 \n", + "_________________________________________________________________\n", + "dense_8 (Dense) (None, 512) 262656 \n", + "_________________________________________________________________\n", + "dense_9 (Dense) (None, 10) 5130 \n", + "=================================================================\n", + "Total params: 669,706\n", + "Trainable params: 669,706\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "Train on 60000 samples, validate on 10000 samples\n", + "Epoch 1/5\n", + "60000/60000 [==============================] - 11s - loss: 0.2214 - acc: 0.9314 - val_loss: 0.1048 - val_acc: 0.9668\n", + "Epoch 2/5\n", + "60000/60000 [==============================] - 12s - loss: 0.0838 - acc: 0.9739 - val_loss: 0.0842 - val_acc: 0.9752\n", + "Epoch 3/5\n", + "60000/60000 [==============================] - 10s - loss: 0.0548 - acc: 0.9829 - val_loss: 0.0806 - val_acc: 0.9773\n", + "Epoch 4/5\n", + "60000/60000 [==============================] - 9s - loss: 0.0387 - acc: 0.9878 - val_loss: 0.0713 - val_acc: 0.9804\n", + "Epoch 5/5\n", + "60000/60000 [==============================] - 9s - loss: 0.0297 - acc: 0.9911 - val_loss: 0.0847 - val_acc: 0.9787\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Bez warstw Dropout\n", + "\n", + "num_classes = 10\n", + "\n", + "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", + "\n", + "x_train = x_train.reshape(60000, 784) # 784 = 28 * 28\n", + "x_test = x_test.reshape(10000, 784)\n", + "x_train = x_train.astype('float32')\n", + "x_test = x_test.astype('float32')\n", + "x_train /= 255\n", + "x_test /= 255\n", + "\n", + "y_train = keras.utils.to_categorical(y_train, num_classes)\n", + "y_test = keras.utils.to_categorical(y_test, num_classes)\n", + "\n", + "model_no_dropout = Sequential()\n", + "model_no_dropout.add(Dense(512, activation='relu', input_shape=(784,)))\n", + "model_no_dropout.add(Dense(512, activation='relu'))\n", + "model_no_dropout.add(Dense(num_classes, activation='softmax'))\n", + "model_no_dropout.summary()\n", + "\n", + "model_no_dropout.compile(loss='categorical_crossentropy',\n", + " optimizer=RMSprop(),\n", + " metrics=['accuracy'])\n", + "\n", + "model_no_dropout.fit(x_train, y_train,\n", + " batch_size=128,\n", + " epochs=5,\n", + " verbose=1,\n", + " validation_data=(x_test, y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test loss (no dropout): 0.0846566448619\n", + "Test accuracy (no dropout): 0.9787\n" + ] + } + ], + "source": [ + "# Bez warstw Dropout\n", + "\n", + "score = model_no_dropout.evaluate(x_test, y_test, verbose=0)\n", + "\n", + "print('Test loss (no dropout): {}'.format(score[0]))\n", + "print('Test accuracy (no dropout): {}'.format(score[1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "dense_10 (Dense) (None, 2500) 1962500 \n", + "_________________________________________________________________\n", + "dense_11 (Dense) (None, 2000) 5002000 \n", + "_________________________________________________________________\n", + "dense_12 (Dense) (None, 1500) 3001500 \n", + "_________________________________________________________________\n", + "dense_13 (Dense) (None, 1000) 1501000 \n", + "_________________________________________________________________\n", + "dense_14 (Dense) (None, 500) 500500 \n", + "_________________________________________________________________\n", + "dense_15 (Dense) (None, 10) 5010 \n", + "=================================================================\n", + "Total params: 11,972,510\n", + "Trainable params: 11,972,510\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "Train on 60000 samples, validate on 10000 samples\n", + "Epoch 1/10\n", + "60000/60000 [==============================] - 212s - loss: 0.7388 - acc: 0.7954 - val_loss: 0.2908 - val_acc: 0.9172\n", + "Epoch 2/10\n", + "60000/60000 [==============================] - 191s - loss: 0.2390 - acc: 0.9305 - val_loss: 0.1833 - val_acc: 0.9470\n", + "Epoch 3/10\n", + "60000/60000 [==============================] - 166s - loss: 0.1688 - acc: 0.9517 - val_loss: 0.1555 - val_acc: 0.9549\n", + "Epoch 4/10\n", + "60000/60000 [==============================] - 166s - loss: 0.1344 - acc: 0.9614 - val_loss: 0.1274 - val_acc: 0.9621\n", + "Epoch 5/10\n", + "60000/60000 [==============================] - 166s - loss: 0.1074 - acc: 0.9683 - val_loss: 0.1213 - val_acc: 0.9661\n", + "Epoch 6/10\n", + "60000/60000 [==============================] - 440s - loss: 0.0924 - acc: 0.9725 - val_loss: 0.1066 - val_acc: 0.9709\n", + "Epoch 7/10\n", + "60000/60000 [==============================] - 169s - loss: 0.0768 - acc: 0.9773 - val_loss: 0.1777 - val_acc: 0.9517\n", + "Epoch 8/10\n", + "60000/60000 [==============================] - 183s - loss: 0.0657 - acc: 0.9805 - val_loss: 0.1053 - val_acc: 0.9711\n", + "Epoch 9/10\n", + "60000/60000 [==============================] - 170s - loss: 0.0572 - acc: 0.9832 - val_loss: 0.1044 - val_acc: 0.9717\n", + "Epoch 10/10\n", + "60000/60000 [==============================] - 166s - loss: 0.0493 - acc: 0.9851 - val_loss: 0.0938 - val_acc: 0.9752\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Więcej warstw, inna funkcja aktywacji\n", + "\n", + "num_classes = 10\n", + "\n", + "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", + "\n", + "x_train = x_train.reshape(60000, 784) # 784 = 28 * 28\n", + "x_test = x_test.reshape(10000, 784)\n", + "x_train = x_train.astype('float32')\n", + "x_test = x_test.astype('float32')\n", + "x_train /= 255\n", + "x_test /= 255\n", + "\n", + "y_train = keras.utils.to_categorical(y_train, num_classes)\n", + "y_test = keras.utils.to_categorical(y_test, num_classes)\n", + "\n", + "model3 = Sequential()\n", + "model3.add(Dense(2500, activation='tanh', input_shape=(784,)))\n", + "model3.add(Dense(2000, activation='tanh'))\n", + "model3.add(Dense(1500, activation='tanh'))\n", + "model3.add(Dense(1000, activation='tanh'))\n", + "model3.add(Dense(500, activation='tanh'))\n", + "model3.add(Dense(num_classes, activation='softmax'))\n", + "model3.summary()\n", + "\n", + "model3.compile(loss='categorical_crossentropy',\n", + " optimizer=RMSprop(),\n", + " metrics=['accuracy'])\n", + "\n", + "model3.fit(x_train, y_train,\n", + " batch_size=128,\n", + " epochs=10,\n", + " verbose=1,\n", + " validation_data=(x_test, y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test loss: 0.0937788957049\n", + "Test accuracy: 0.9752\n" + ] + } + ], + "source": [ + "# Więcej warstw, inna funkcja aktywacji\n", + "\n", + "score = model3.evaluate(x_test, y_test, verbose=0)\n", + "\n", + "print('Test loss: {}'.format(score[0]))\n", + "print('Test accuracy: {}'.format(score[1]))" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + }, + "livereveal": { + "start_slideshow_at": "selected", + "theme": "amu" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/w5/zumz5.pdf b/w5/zumz5.pdf new file mode 100644 index 0000000..469528c Binary files /dev/null and b/w5/zumz5.pdf differ