From 894181f28aa74685dae8f101a7e26aaa9569b479 Mon Sep 17 00:00:00 2001 From: Kochkareva Date: Sat, 2 Dec 2023 21:46:20 +0400 Subject: [PATCH] kochkareva_elizaveta_lab_6 is ready --- kochkareva_elizaveta_lab_6/MLPClassifier.png | Bin 0 -> 33187 bytes kochkareva_elizaveta_lab_6/README.md | 101 ++++++++++++++++++ kochkareva_elizaveta_lab_6/main.py | 52 +++++++++ .../static/charts/MLPClassifier.png | Bin 0 -> 33187 bytes 4 files changed, 153 insertions(+) create mode 100644 kochkareva_elizaveta_lab_6/MLPClassifier.png create mode 100644 kochkareva_elizaveta_lab_6/README.md create mode 100644 kochkareva_elizaveta_lab_6/main.py create mode 100644 kochkareva_elizaveta_lab_6/static/charts/MLPClassifier.png diff --git a/kochkareva_elizaveta_lab_6/MLPClassifier.png b/kochkareva_elizaveta_lab_6/MLPClassifier.png new file mode 100644 index 0000000000000000000000000000000000000000..960710b5e77d9a9d2523d01ea57e09aa0acdeb52 GIT binary patch literal 33187 zcmd>`bx_pr+wVb8q)WO41w>jv8bm~pR1CUHx;vI`=}r{^Q3*jxVu1ygZV8E{yK9Ms zJ@Z~yNL_#9oV_(gtJe+O@Z@1&&TiiJgLg89Y%DqC!gg%w2h;+fnVubiD( zPruhEi=799FS2&AdEKxq9LW@%?&{saRj7AZd3gJ?J~{3)^7?27&d(FvsF&f<(Kxtx z4o zHx}C_xyuHAiqi=`Mn*;|1-`<*LrzYPFYquB^Dy@Fn=difwS2{j22bPCQau6BCSn!b zcmSTIFn)uj0G_@P`~TXDmxVI~&2EL87}MV3;^Hbi%`SQY3nvyN3gI*Ot$j)t-a6}v zFj(F3+!*QbybL!Xqo(ehvdZsokD@&AX)26EFDGlP&o+qSldR^|+ za`Exi%pmW@OC4%4AHF!~x)*Ou8*ZWZ>J@ni9w`SG7k=?*xAcxGRpDmA}hpMmGB!t>|1kTb4>Mgz`| zW&oCNY_hWXK{$9f_BX$m=Z&aB;3Wg6W3M%wcd92wiZxhzPhAJ4)2X=M z4K;cnz4k$~9m2tWQ!ij}s0*q^1Z1PHkFmsluldY0jaTp8=H!cH4(HP;D@r=L7jNF&QOkb3(u&7&yffI_Yc}@v)!28f_@SYf zre0|lh*cykE!<@PVyiqkKYx#5HxKM@r$yFzu%i(EV3WSCvQ!HvWl?urY82^IS%!v&?sqac=IkRrD#kO9ff?EuEl&SiYdy-*e7P&>&~)-HI9NFVDl;r# z>y3WQNnaLbR7|n`x4O4>rwKV%;EUY7&(2OxP5m6Kx7U0Sp0ac&<+*>&_0^?b5e4eh z#qZ%0IXP_PoG<@cjw^|vpkRAv=SZ1>W5BM-Bwuxt%TcyL0PmE zNkqubbnVg6pzNiC?Q&OQK5`4jztLG*ARMp|V8yVZQL$=wTu&D6W<)Y#FH z%Ay3KqN3X2@cexba4T1r$h9cWym>eaWO=)4@N`Ggkf8VB5!HF^xloP$^z(AVCR!Ok zF<`&#<{H6%^A6vGqUVr~Z(fl~ACm$5Q)73z2SNAtWeWLQ5rQ9am*v|9&p&*&?9aMG zMRo8;%gFiUkCu@Cg&StsKQ7n*K3k00_*?ybk0!1%d>!Gv#&mJIqk`O>^+wKma`Esi z1Dkl_?|5}hlWbd7AC5V<;J8zz!u`~|x*1?%YV>IYB8ccTf$80ynX()H9HyhMZ%0i-lZ{8h zD8S-1k4-61-mohH{G03e4;>C;^*pKiwt8&WnL1}k9b(5LyQ8DS5*Xt?2x^I?c?TTL zTAf1W)JKjD7QJbf`7-`JQkLM_)jf#n$=1YRY-HpEce`8(_dZ}S&zqTL0~$A+#QNTT zf2R|7306g|B}W$0?8so;+1{R^7{|yZH0TUP9mZJGhKt)x3Lt707fpo(1&8er%}pzl z1G$oVd85&&>6~@v?A3CFqNL}p)WS)lVL9e5fPrqu?PGzUe)dhH{A&=t=qsceOrQ^s z#c!W9Ui?~Gz-j(TmHXCsnm<^>w6*2BrShPT7@F)N>n!GY_>Wfw;ojpqR+-@cp86gh zHFPX2j)rc-3Wdz@szDjs`u>L9-@Qb{#3D_Gdn}eziAL79wU>prX6l8A>4lB|{<5~4 ztOx>kmYcGG0Gn>nrQWGtA6SwQ8bhxjU?LCy+Lq^rjzP1eydSOQ`SN}G^a=Oo%>|cw z?O*T7fz3Z;a=kuZbKRa4bojl&0nV@D^XJb?rp3{yqjS{Jpf@=DN-tip%F3d@tfGL0 zwVtYE$DDbG+G)>?;Q}~*1Pg!j*&-$1rdXoS$>wmit=3$?rG0dCG}ak-{R8M{cIU^%-bfbO6Ww_qe3ai)k(25s0IX#E^Fv#^$zSQ}0a+*JwJZx|x zf%P0gN(;DejzRq(dNpFY;L}|CMJ6g-R+JA94|yiUn|m(m-j(XU z0!H7*=fbGxF2#F{=MjPl)a}$vXNbFUV9cZQQm5PYcPtF5SlPs1URqq_F^UKc#e!T3#^BQTW8e8H z2ad7#*+N97l($Ps6*uJV`}Ys*r)#cYSKu%ExidX`{Mv={*Z>rgkKY)cf+9=L<*($BQkVz}z zS-F}H4G+J;ezX%u!|?Hq^%a;fai@7K5Cb+>1z^GBm@Z$(uhgFIOv5eG4W94(t{M@d+acyy_pdjihF_F8&ngWZ3mHoGBNUsN=x7QrliOAT|T}zuusx{ zkCo~n9cKf;tcxQ2gb1m5<}m?BUEP@m=?Z!n+J9iTHBny6i0mL>cNxQWK20m+P_ zjp@AX?B4CEDu3<}h2>?;9cN2{n2Jiq1I(Zw*an3)qKU8AHik-p=T_jol`sAz$5mFw~s|#C*$8^c6n{hChNJ zO&=K56~kgS^y4O<6E?7Ufm1u2G>a#{bEh4I&65qDvd6u=bmBj6%$&ule?@gSlo5hX~Mu069HF(Colm*Qc{vK zF(Ti6T<6P|FZ*DD5>is0VFJD^VJ>$lh&QbA{nLPXb^%l5w3h3ssjb}w;%4|yGx+tG zt-`a1UAu1|um#Q6eh=(DRQw)@UU%^e+dX*OLM7rjCv|k#%P$J-mcy-^H#5Nmi8OfZ z*Z`+F#lyq%YX<44g-t_Eodu$RN4DcXti!{@vw-O@6ZhQJuQGxLSc3EC2X6woiRDC@ zK|k1tLSkZ*|9GOSlZkAwr;toXEjXkZ;FOC1`(hIw8kzz8s;FWtt%;?%`B~h#TI#YCo>WI@Fd ze3(2sHE;F5l|V!AmmT+gni$2L0>6I!3O)9G3-aydVnm*I{UDMzJP{=;sPxn|eOS;5}7@Wf|ToDLSF zP{fyE*i{!HA-3u_ON&?A{q1zGKMb;X4eVx6J=*Vu9KIb?&_7rQDY4;U))~8Wc=F1B1o6B@iiuyem-@`cayw) z6fN*r;dLV?uGIY3UCZ9$J=dx4O=pW`=i8@6f0?TEuhxj?*E#UsQZ$X(INynYeGx!( zY)2u6yjv{n^ip~&Y36DrE$ba}-5A8r`JzedyJV6grt%-?x| z9-PD0AZ_0e?j{{rS**Eq#?7uHWb`|=rx1Ax6U(A(mqh2;c=joO(#*qVlnsyyHxckV z+kX_VS80xK|MwTGuyD%7$(E3JrL^O^XQRK62{EgXc*^)r<@zWJkFNwxsr6V#Wwh!M z*SDRv*VElYqz;wrMhYicL-E`VyUSTs6GJFXnkl+J-Li~oy9?i*{o$YgcJ%l#ethd} z%@=1oPPfQI-tn{Up3QbS(~B+c0gm;K0x>JgB|qtyu0_8_gEl35+5y>O;u=Yt%uTVR zugLP&J3Jo>TdzVU>F5UKtc3A$1@HI@aVeK;T#tzTmOcGA`>NL+9^Jf+U!sm&nLTrx znLr&Kved0ai}+PrlIM21S!pP_@1lyz!J_|hKhtJQ6Dy(dWKgk!w5H4E_6FwJp;mp%7_u;GA{paSIwLZ5Dc7MlGg}L9}GE9y`8aje2PqN(@avK~9 zeUbfj-)NF|qVDFujH7Jh;^;4Z+HS8o2-RZKwzI?5Tu@g$U+gK-k zeZ^@T?b>w5Hy2k@T7Sxq$(|35jT3S~w~XwqqM zF8UTf?uY1>Y4%t@SQxffj2($CIUgm~-tXI+=8QN*^o-Y0pN}spWN8`aoqX&+Xp=wh zh8b(gy}-BAf`3^eOIA1gT~#hXjYBzV=GYm%PakMv`or@T|L)@%+q`>w!)w-VYxZJL zPi*5n?4?HvhMb1wt=|2fg3E0?Vr4Vf;c}Os80wA|9kIK334V%OoHusNw=64}h|!fU zY75k2hhy8GPFQ$bGPT^DTv#1CweV2neVqu8nh=h>&Gi|q#+Y?89nSj+YY}_CnW#~L z124up!mCRK&1DfM-<@g^zhSK| zFAvo^8X5ZThydrUyZRFo=L6iJnj@A7;u~jx@BqQV%7a{=kEWbzAsU-9?qxIG_p0(| zcj^c)YCfb<CNgI&D$B&J{!{WlY&y~#os?uHimzP9;HIfZZ7m0xIT`kJx4B` zIbSGyG}T6DEIy4(Z~3;@dDfFp$&WvMsHFDKnep&_J#~JFmK*i^_yu=deGpZRx|tbT zBl$crpT;Gyh#_86R*Xr^@CN^0p&Zw6W=YTJT+)vxSVOj?TPwcF8k~w1iAt}v zm?N5=y6h^BJeo13jH z1#IbuVN=%P;v%JCaYaP}pi;dn=5^}>dHM*8rb687q?dm*uYHUv@-A`-HF~acAI`Ec z4=nhv=_(tScW&{nI386}FH^%O!I@)XVOCxACFWrl;FXxsye2_ps}057XedbIUJgr4 zqj+CNTAKp3XZ_RtgTm6a=g{5ZgfM>05S2}#{oxAA1&JTi>r+tkm}02Bamrk#?vtvm zg6~##QH^4XEbZ*Ps|eyCCAEc+FNTwFR=OLws^Cj)x=k=0&_R^-GIKoOt~thCC^}7 zx5sG9mgJGwOV@^icLb?LSOZxiF)RURK?h54t@X2Czc8?oXBzx*YM3=QH_zFZSc1oM zf?&z>g}VCnbUn8IC-$|f^1Vvtr9gKha~r`Xer?hxP6?3wW~7%&XBo+!WV!_dgZ8OE zv|L6nts1w*RzkzKMi#a~gw21yc^Yf4cHHQeDM7TDlvKlV3?rI3;_H%9+mbWI@wPv1 z#7@nw>O)ICB`GZC2sD~DGM1-ZVE%hCw8oCqlls77qTE@Gm16`==XMz~1B z!w)O6!j;>4#|EytMy_Om`w5i!UlL{EXvm>f3&^wTLEMT-+yS+qYR)s!HW~wf$?4MB ztTUEXNNCh^3S{0!q*n~*aOLPx8e83@Y&-uT<{#v(pR3tBxXN3gMvdxLf*c$te5fey zfvfJya+M~vU-c+FtY9K^z`<`q7uGuSf&7LlcjnQ=p@byyAdU>@YXfsn-`CDJ>#d!< z&GVu7#xLI&H;o4*41(+koy0i}a)~|~a%8;^gM zfU5y1N5rVkg{m4zytM0_K3Pl$-z0oLUBk;au^~PB`1mSYnfGjc*iybEj8(d<)K%B@ zO2^-@sc9@YUM)s1RhL%t(hqGYGwt3Us7WaEXt$fMTHwobGjv|E4hV{eKV3kxk7$f+ zOd_Wl99%~Z-F@~odxPWQ^n9zs5;45&74X_wjAsZBDP7rnV&_isuEf%SmSPWa)Q>f= z=U)Ln#;9n#x(~l`t8FJh7MJl&FHiOS5(?3e-}jyhZb3R{3QYeW`z#}yR`{Upz{6^R zjWZQzEzVrM8z5CxI$G`ed>|QlnwBi}-&{Av-a9$-q z2IZ&r|5$AgmThuF;A^NW4-=*50e2!u&yg=r7io&gU(H{;x56Wngv_J%u73;MrzP#+ zw7S*8RW+R*E!0dK+z8xh=jl*Vy`0?O9MTq_=!nAb4|)*m_o1}df#!r*J2W}{qDJ5yjs53qDjN;Yh3HHl7rcWZ%7fCu8)y~{;7vAfuzQA|Oyz}fFy)>E1Byag{vYb%n z?=@jdt-zO$0+D;9W2cv_^C*Ayww#XUL(%Q2BCND9)@u3qgO1mZQ#rrvtRwDqaTC?> zoMG`0%EwuRR#|iupWfny2Ql)~MHKK7%3$@jCCJmgo%CPNXp-Z`he^pClqPMA6cSYy^Cc-`^rFJBzrqw6Gwjq?EU`TtzUG zG%x>zyoAcpzP@ONos<)^Ne#%$r6ucJ85N+9v$^<$y?ratX!e9#TAafd(Y@zREn9Ao z_hKEE0_reW4JYE$K|wkhGfP{eq!CDF!t}4&p&3VeFWds$Xyp_*iePu$2W^6x3^zsI z_s>8yDkV+BP)qd<=j+W{b%(8x#I@+og|N1n-0iHoSl9ge@c3Qd4v>Ml%*JB-4MFJ9 zUi0sg3TCkEWa;}*YgT8cx%d*ZlF^0yQW}F+4uyvHSjjjWa(zu!za0^o^Wo^3fgWF( zf`LHwP^K5Sq_l4d&rLhc9nJ=K8by!$ymF1un|H?{=Uip_H`NemW%cg!_h3VNnUFE0`S+aGUmJ8`Ur70I z%Z0~~vgGwpy82R38g_m9;l$i<`r0AD^sY5L?%?DIfq@&4=S<1}ZVsyx03a0NZ1n3DW&!^N)u2 zJIquzyaiUZ!PBvKLPO^KK7dE2D?OJO1 z@iwNaIKjxxt*nG>$9Xh0H9>)oAB$GVlIRk-x7II;z%^cMj{-0`9n|AqzIoFQiUAk` z4yK~!$mE~9rB3~f#VqBOfT_ZajlD57HN{|6Bfo>2m|87XNl6I+!*EYOAb9{((G=7L zK&5^7vjU;a<+czg`&dlKlYxa5w}05rMke{5q9ii1D^qa~k?KW)5vWAw{P&>L|0P0| zjJpjuN>R+7vG@7;>1_(hHTh!`ltdN0)uTP?1y4KX-F&o#cdQ%C(zc>GFOp}*V5=+y zO0nPK3Wl)NlY`f9wCNkRee?3(Sry%m(*KO`YRf= zuX+@P=?^qqg4qNEGd|m$+WBW&5?{A&ryErR^B(Jcd22P`S4#MrQN*i3obaIf3FE6K z7MCNvTv`NDy5ZitE+_}lV)`%BM(0=Uj~});J$3LA*xJj1t?=u&S|I~^92~!4xQ%U!G~(Ot-=iHm12o(n{%P+dOPlcbQf3NFo^U zvIYKf!s6`GKAfN@d?xUbrV@-Vdg+x7Nn&mM_pTD`bYYwH{s-SzwzwLl?xRvLw;>$Jx?3$ zC>sjj#*Zr)JtF-JLMnI07r#_C)Li-ta%w-4)*3X%s`o!0t?n4ymR;re)DS~267PIP zgRYdcsh1#S>YeKgA8WQHn>NhpUdVXx$n^7M)rtM*t=SIn#4)W;KA7y2<8<`h?QOr^ zfPK3f2pU`G=O^>G#3q<^+pArp@bHk~4{!|w7rIZx)E=q5qx_t-=)^d{QKK&N)^;U% zh9kL`L%(~mpnpSnK^N>L3>0(?mr{3lDyA4>lhA;eSMp(mk9<$cdKD5$@0qN3FZf0Q zyM4sfC4y}eWxz(8oiJ#b1AYv_iwI9vqGg)FN8t^**@*-6}CpPcO4f{K2 zjQZYc8FX}hV9@YFfs)?_&@}-ilsT}07?A}L!{b<>%*kI}Mw{I+@oI6SV=SZT5FN}3 zg9Yw!2(va>GR~3Vz-$-YsHc<5g9)lWO;SE{N{CR&w*PpZK%7w&lBH$80M_(HY)|`+ z`#e{rr1exB^IQleC6U;Cw8`As+JeCRmUs6yfxS{gLV)uJs1vkm-Gm3&tF3?N2+lZf-cu?6OL?S;!WFxkw*CNY2Y38u-IrS8+7rS%;i<6{lXoZ82E?C2r9nMwI+P(Uv^*4xE4QrU~u5 z4t?v$JvD46I_7N3w8574{im<=1;9GJ+*x;Mxhp0ekD@o37Z6ZQ?qiApE6L&bGit(? zjN0&7wWWgC?;_KTTXLd|_dh+SRxgg4*lOW%n+BUw&XE5W)~$wId{xx4CZl??)f#d! zP?VYo2Zq&njnVXP`E~(R3;E`2{|u5%M!8e z+^Izj0PT(!h!iwj4=MDJeMQd))b(`?jqp(ynU4WtOIa)IOvG7+ul!9a|4c0-6f$Tv zVSMz7zL{duW?2GYr!1C%354jkUm8oTPp1iT zX@@i{)#-f|wAruI9N&6SpeXFPf{=WUJKPWxJmNIVKa~JmlC;;oXK4yEE}qu9G26@L zzfx{6^O*X>Sr>q8OAIXRsF!?kPs_`3!%;=3up;W06-yR1{;L4Rx|p$AOSW01_~b5~kJ`ejrbKlduwQJNsT z+OL&jCdEkWK&>2b%iR48jDD`k*R!{VS=y%p9Es={^qFW3h%hQED|ynBKb^9Rj`}EN z72;ZokW{BYT_bim>O9U~)I(pd{H57zZz{_y#65lA*s6IQkohNes80Zxtc@NBqOBhZ z2lP$X=~p4@q!Fd~dGiuY2kLpb;}qIEk%cJf5g_GwUo#81ST6ywm4;?pIlI93=t7je z+PD6n2})oB%kQ>!e~$c}M&ZR%xlHr9BIH*7a6;oc8A!pOn9s5`<`VF*J54Qcw3M%u z!#&ggfTy@=ALQ1ANhj6HC}24!f(`;5&API4x@l0g?KfZXhXWP zioDx)pdyxiw2y>@{L?|Wd%f@z5-!=WY^{C%lrnBCu5!Eg2TKnyx;LMg)IbJ_T_j^# z1xmdCSV|aF^jDU<&Z-HsRAQG;v=ANa(KuSZ6LctV{ag=BYN^$fXFJtEciQZYh2EjF&uo zwGbK?tn>-kfC^%D&T)_({!50F-Sq~dGYSHg!IHYkzGfw*a_?;8>j}-m*DqooeFUF} zc8)JujnhYoIoMsVlYX%8edP|aQS=M~rM_usF@lzaKZDE-CihKiux9)F_*blgEo@cQ zr@5R~W1DZf2YJ2Kq$Hs<5iy^6FG(_fHl8_m>#XEF)hgNQ$=9+bFm`ehAZB>{1ys#r zS!DBodMg_Q&l{m|4i1i_v^2}9G{E6rz9e&Yc7}Mdu(Gl?r*^{mIbkDsc~&cgYJind zcrw=X;iFbFtHk!NqSk~jVy0llnnyjnY2px;()VVWl#_m48s=f<=@7HWy8AQJJm+<3 z76V2*!9;*sX*7$)H{x7FiY$*~2f!i~#VMe!%%} zO+tB+(A*p@tYT#*MNRP9_-fRbv9^RO;)0%f_REg3%XIevqYo0>C5i93g4`pBfXh99 z&QqNR9em&ZInrl5jMZ%5r>ObOu~X_a-F>;WVDOG8|J!2ro=?HMLGvlSgumX(4ZlDl z-^oo+0({pOPpQmHv?10Cm6c)NohbtYiEVU|1A{X#I^L^~wTf1Lg#{FCasZ%pmKiim zf(+FR9>>nk9tIR3H`wKCYv+8v@0|fnSd}l*;dvZmHxSogbY-uL)h&QVt7du7bB|SQ z+E!;DTbnw(&P6S_ZN$D?>y>Q46`gO@Vt~Q^fkQWAAA*laJcUNBbHF$|In93fOf>Q_ zA)u-s&DG}*DAtcNaD9*L)OBlS=ia!u$b%=asJ9>cu~&30-4~ufM=*Y8pv#Cur$XER zHt+aSDpQANs3&{DSq2d&G$oP+P74RTXJWf&ZDgE=Bc7M&gvN~%GRmYiZb*9h?yY$} zS_+Ccsv`HMfwz?J^9w$dg6ix$%LW$WN)Sr%T*X7m^F&_9aPc_lQ2Svpnzwf=qxM-) zlUy%(UUJarM)iMCwBQ`(8S6`XbzO1V)q`$Fs|t+t6liueU%v*V`V)xxW0|G1RQP!_ z`G=qo2ym7P%F5Aun4J87VQ0*!;$6{yvTuw5L!UbBD_l9SJ-i>qU#$A^C>d!Q8dBS0 zypgfC;k-6mrzRRxG>J6%L-nUZi-P9(cWmum-hc?@-rcWVQKGk-Swzx1ktZLOgOf?0 zUm!_Gm-xIbX^lPvWNtCGvgF`*Nn&}D+vct@s~$qH zQ#Y%g<|r_Q&S(GS`(3o^Lj5O5zGnO&kU4LUTTRbVF>H#$#)|?ZmGkGKewPEdo{dgI zuXp_;_{{JqQeQqYfeOI-gW(+K0I6L_`$}?=`aN%BGKh4f0u1uLZM<9$W%Wjwh=6LH#K`);4jKnca4#1}ij-RiXWTkhW?*-@+;RZD|+FrYK# zkX8|i5V2f~!M=-Wr0XLDbnp$J2!9p+KPG3O;O9E$y+%$&rQqi$<$rN((woL>VaUnO zeiJ63Z1C7|&M!+d2Jn!{0+8{5N{oPc7umZq{qD9fLg$8AP*u&HnVE4Z2eM{ru;cyH z0Yc9WZ^zJ{Q~XNFmhOF!7HK!<$@ohg92@`0N0zIHS&@o+) zxr0W64<@vJr~^3XjFGmsl8MQuy)95CPD)Ph?(4e``b->G07*<7z4u>~?2Q#x1PN0Q z5XAQ_cEq6F&T;DY+X$yX<%MOJ^k0=J3`GvAI3t-zmkkStWo!%&w9%#5~r%rVs z@7nnC;tQBH3|hV%W=jYTzR_?G^X9m?dW0V*wpI?{EX6>y@a*|>P^E)n?GMS5Vu~q} z1sEv$Mz@B#g)`49m`=!YAG8ZlFfwjW2LS!}0T9nkXQ+Zt`EpoUjn#a>aVruURC7IF`v0h*&!?2$fAcW7v)6O{gWZB;c^&HLeCAgfRP zdks2MhJL%-GEn^U(E&99B=ex5q7I0jC!r8oAi4y?#|p4j=lqV;WUh{1|9gyi*xR6w zYOe{&e6%(Q7a(E|I5PpAGwq!Der<*6hBj8hVEq!6RakJZMAt*^V z*8x|Cn$QZ{j>m%kO)|Z}3~U74)b4a`JZQ~{a)e%`J$(BO%L$0qF@nuGf20A}P&=`l zn49C8lE8BUeI($fszARBXai{jn|tz?H6_?8K#TwHK@MOO5fYl6AFdS29IiyL1bhTK z)aA9c>69O)!Vyn^V6U$L>6kr;1yJ^7D9hQlM?;BDRS|I%7|yeYvU-H`Aj0b%`XmoT ziXw20XJtSM;k#QOv6c^+8+Z>!!j_s=DvuEdvGenj)=sOveA(@jvV>*P26Y4Z z-5>MVLrOhDV^G(v1I9P7=BL?tk8bUbJ-ZnXW*je+0H&Vor`K=&d*dTWco{ z!?HC?CJnLTFRw56Fsg8Gkn2aq$6NJf2!d{wQNRj-wX*P(`e$ijX*cTJHZ*4(L_uM> z5uD#&c2h}lOp-1@XbE~Oi;qaD-2SdwCQPMZOqP0Gqr1~%mV z&_`^XTSS;T*&EObGxifquME)3<`HxKGY6b{1oH>7GMEqn2;;R^e+~~1^B6XsxwTV( zcf-G3(~m7oR4{Xh*&1w|`Sw7X`6+^#O-ib<&x}Jg!zpXzpR-3YO)wu$%y658c!z%$bIi)T&_+Egxe5&2~&@YDIF^!i&(~(sfL?6oXacmV&yfq?F^9bt>(AEVM&vrT2mD7uqS0*M_HInc$>d$BF!lnxxP+&1sC|j1-OZj*mARkd zCLPC{l1Xaydn1c8Tix-59m02|z9$fqHY>(tJDOhi37Kv7$~w}wFJwIZ_Sk7*iavA$ zTgzS)A@w*vZo;s&l2q2BR`d@>{(07-{W(~u%OyfHW3%OfFza0RLg`+@qzzf#=l&l# z`^^~axN~MA_TWB06C=3^E$e*$Bk?rXgtO&mQs?lD%QGSj3IFZuh*vA;LB%ifoodl7 zqfT1=w8*E#=RU5d2%c-6U;l1KYA|oileqF5GCG~{EQ8)_xr#tP4cy-G#%KhuUQLQ` z6L6qIMQRLB<>gC&(B3{@bQ1X|h*9EA2+R26;whaD+Kz?!+Z|33ufW1&Lmax|m`-TL zt{&?hz8wpL?Xhk8lMWjdy=pAxi+I;jwFk%5oVf3FtS#`WN+{}FIG6Bp4kH`HtkJdL z`t1`*D<>G$PqBfA?Nh=mR!4qp@fIUXX-vXfi9JoP%Yal0qn3Q{y@W-AdXxRw^R!Se zBEPQU&%3|*Rbjsj!f5q2U5yRw%b;jxkg(Wpi%yIHxq*X@2l*v)0P$d+laz0p_#td- z#tnT_xV$NSSjC|NY@@P98{D~kHZkr3eg=qF{`Q5s%cl6${=9F_=m|$716$oU_-!zs z-yQSi7}fDP%&qS$dfrJsk4pY=t{$gKvhcaANxYFK<7l8MS|aW~CRMt^Ax%!Ef(P|+ zJj0`Uxv~?|-ltyN^S$Jay+~+d-@|1F8m9#%bU>*Q@>pQxbbS7$4{zJjr;E4nuj5O! z_@d?%`T8MO4K_(yZz5z!PcZjg)`0Y2H1ak{O#f;|Qa2P;Y)=*!!`N9?pLs$H=QnyH$bH==hrkw?J6HmWCG9wkA58)u#cbvt-HVf3bwU9Q=e?uf7my-nXxAh8gP1IUEwo17j?1WrVy(d#k@}u4^@)At{wo?qx!D z+vjAx9F51Ytxh5r;|z{rF1+p!J?+O5UA8WvU#Bu@Z*~A!YM1TxQV>p{DJXr*_+^s< ziGh%)nb_UkE!c6L1s-z*CC-CBPYmu=Psa-xCmzn%k+%My`6|qT0Pa8xvBjKm<{vx~ zOPIo)z!ALj7s9`B~>lQ7CVhwMVxb+m#XbfzFol_`SexthU`XMe1Tal){5~4-H zTuT`NQ!z=zC|nM48N>_>T}UF@*!XpXLIiVeiKEv(I=vvfImMU5$L|0`Lo9Rg?Yy~n zC(02onwmgISKHwUIA|FA-k&AnwmG&DIsw{%9)Zxx5)>1$Fy8skcda8pi(EkyR?e8; zicak|;lPF$T{VRSRbegX`dntYTAnJv$SOwhi+694M>g7$aQx_6h zzaSRBOrGnKkaN`7d}#GM$J|Kg!?&mo4B|z;e&=${L^FaedwH9iD`?ger8>ha?!~Ci z=ykpkLyy`nwE(Ac=d=h2f!n8QkC)zCGDc`pW*q4&#>Pe_9j=L#IFB2)(XRm7t#1Tz zCegn|Orcq#C!MR8ZtyH&bcq`>Jz}$Ouk5;R>N!$LGZrycqp$3Q`x^n6#&G@u$tP>o$APiX(Uj*)t z?S5UkKz80josBcR`5;d8bJW;ILyVDs;R$^ zJUE>AwfYCB#PU6>vJ;{jBBKXdgjE?8ZkdPc^cdydG}sWnAi+SW2NI!Q9mMaCi#^eP zhAo~+zI{~~UWoeBIPhX`K^{}%(tSZlo

WMX#(BA206*&?3`Y1O9+;hK`PovvJ@*8kG((VW)=rIx4An zVP2H?s}>~RLhHz~VX}H25?{~-ji?L07G0!lZsrqDf3ADFQWMMW=Sf8rK~tQc-{kr1 znK3O{fIJ?xzxH5d`Tlz{+3FuUhhe?oWx$c#CU!Y$Pm@@l5Hp^l+3i`0zW(lHOhLbh zurkLciVwo}JO1qcfUj5}1<7w1j14gL1m4R>jaz{yEd6a~vjXE6A9aketXhUjI47_u zN%-B#DQx?*XCLOT9-v!Z*Ca#;3 z4OoN|tMObm8_oVOSHJt@3q-V-4HjdPu`D94dMvd?`YF<#Zuz;z;)&P;kBgmJCajwg zRf4l*4eJ84m%A0)u5V9-HMbF^Bs3N;ZVd3 zR-bY54|G4^%j*?>7{`l;@F97M0?IJsJ1wn-;1#MrT$KiU)_Xs7j|v{5E-wjM-u4qd z@6Lg?!Nwa|RqlP#AhFDVfm7e)EH}@ad1Pg-H`vH5_BZk)-sk<_M6r#G*%a?$C3^$G zr>IQZUU^l^Z-{j1(gs`KAVD+xbGfBU;Q`Bg*Q(n6VW?G@+^Qb?YofzhtCnX|LV=}w z?LZbRyWkNIhXK(Bs@TzSedrS=cLo7%hHiCFUVdsuhLWysmW7^=kA$3@91!B=?n?lY z4C>%|e1IgQrR1t0sAawVSHRxVrbzSXS*eZt> zfp7!#1_G%Qh((4f?OTIy{<5E@PTxAd_7F6-fvB9TsQ!g@)>{EUUZyjeGe9FMQCfff zgK&@8(56*!`I;8+_w|$z^J~pNm~X zYIWw@-3E1Dl?ohhex}I68e$%%TY{TlRxa-l(ICP|b+ew;{7Qiq7=)C#e0NvB8`G%o zn~xEFR#amR zfcS3Z`pxTWQi|1op!+v3ddwihg1#Z|C;-R-cw-+lKnuPfx(nb8Tx3EY21*0~(g_0A zP1T$Wgm{UWnJ++Jt&+0xp~0N*o-{)6Us^1rJ7{CgkcG&AF6SKA0dXlHLu&**8pT)l zjIpR?rDNprUcZP$4E9M{&3|*HHLY|WmuTB2AH^ruz*)L`w2Rzhc`7NZW}yWm?f%{T zkbBN6ErF1P()HS;ZBVu^NK1ybHa;SU;j{KRf(9J3vP7n4(~W6jua!Jc{Hs>ttq{S- zxQR<10!x2xH0Mnvh_d9FfP}XHdJlI|a(BLo6Ahy=dTcdZndVphgFWir^wE-@SWCKR~%)XnPT5|E&brgsXC4*8vYYB6!#Ijl;**9 z!eFC@(f!5mZr{oWi!UzxOsN@HlBf7JCt33~5RhSzlV*uuiI|r0%r~U6ygtfPZ=W?# znt>AFLyHqK_n^;J^PkS?2o$0iDyP~wjqaB8s2|ogK6#nyV?LYQ_48BIa(uMe#;8Uj zSwpt_U~COYx?~tHC7gdY2sSpHo!6Hu`Ep19sx?!BaONQ4jZZa49BRrl2UZ7B4GDt~ z7YRJcIf}}0+pMiep zdhlfd@5g`889}Z@z}MGQNot0f|6AkxBAXP$T8h)=p!R2X*T0v`99YS}EjP>s$jb@N z1Pz!Q0Z>+5iwDD50-gU7&a+(M*8!P8&gy*(wg}qzMbiSl?gfXP+Y`AxB@bkm_@qd* z#y*B%li1<7dFseO#r5dUy5imKR>=W}lt1uwP5Uv|Zr7So{05Q5C z{E-Ks&31}T9z1;i@&Sa^CO`y4nggj?hEby%|D(Gzji<72 z_dX(#kXfdZp+TmUnF^VS21I5d^GsnW6(W=})IvqZ%2?)Q&OC*XVVNZ|&(nI2f7f;I zz3*r5dw-tKeqKG#_2PP=#ain;|I_(9e#iHhFa4J=Wobt|fb)}vVU9j37&b{e#rldp zPJ`9a7YI6HHtiLy-so??eEu;rAm|X=WdJ&WWkpDSXJH=@7p&S6WKna!S@q*SRs_xh z5pk7j7%XD?MXtO#IXO57D8-@{_k1V(&{xYpe=6pqHIc%lOZBa-f}dpp8v|X<|0aJj zRiI{X>AAwddE7R2rIIH!M4|aqv|`6n9~pz#Hb&K)zJk%+N(>%Chn*K zk6}Ps$!uIg>g)rpPZNgB#u$Do{eOyTjBD_1UnMXKm8$jfQi(%ysK z=BY@J?*0lDAXcRJA!!sqHXxV-+5w>q8XWgkN+W0Keo76ga6kq+Wo%D=IS5RGA%(jR5qW;7_Tl zs=ELF@e-u=_Vla#;Fi6uj1lBza&WK+@3KItjw*VhcGOrnqdo(hke-u0#!XH2%93-@lVO91h?5D1ZTa zd-b7>Pz_4;Ff?NwW!NCt~&F-hB6QczMv^gY2V87njd0$TnQx} z->O}x{=@j&!nHOwa!X1|z9GB-eouYeWelZYKpRm){Uc`MdMN(vIb&2*4uHHHjS6V+ z?_>+&$Yrjp`+QIY-D<6LwLD4*n6uFMzl|Fza^nYU%W=4$$fgD+mbH0&8;k;q3gEq^ z8x{zjxtaeaEiE|ithFf6B%s*k@VANi40w!;K-7o111A{QaTOxy$F2iLgo>snT2yem zN=iy_hIs;7IXy74z~{aJ3nhTpdTiSeIKWlvdZW_O)KI=>0RBMg{zu6Gbb*PL|9|H4 zX+SeTa!t3;KuFWru#GXNk8;MS>||}QXs~J{uc*v{EZc>VGB~mue3Bd6>ZrM1&m4qR zoIF=m?`ppP-bu$ub+<9vj&O5hf14B}ArHmAcINq>G(44Mi|xe@`0a1K68ve#tX%v- zRrZM+RQG=Tt&I<0Rwsj06P+i>Z>1T`959ZEO2laKc%-UogojEBY34we3wHgdLbCjp z6tj%SA!YVwrWZcH)3_m+puS37koW6Z9jccTUdaW#@JYOyTK)9l_Z3r;TJm^%cF9oV ztaZz80q_v=A<|Cy(DCXh^|D{J><7YYXM}?r+N`@3mL=wg>oQgH55zI-bA(P4&}k*K;x*WCc!l1XtX7API8o!Mh zb2k3TH~0CX@A|O)7vr(PyfmHe=PZ(1VUNQdrbXU>4Q@`hM9q@El z?DFgAO_S`P^YQCC=Tahn*DlVU3bqK1Q_NgDoPVbz=1UAm%6jK6bPuL9DdX?2|F&=T z%5_d%~U1m*`7q3ik9 z+h>;sjVUPu4^S+NE`2@cUgXTkvVXPT(OhG_yX(_y1(%#ak}PEAZfyPW^gaa(yNlAZ z#Y+}c^iL9lEwtS^N(uM+B%ni9jwp;aZyfXGvB-KtbU@{{)A@=`GqF~4W};T%PFw)v z^=nIs!#8Vd%FZ8ft0#?>z28e*K+it)RqQ@D0mH6Td(m4XQ2maRdChLihE-M2PS=FO zoUylHkJu)0zyt0Wc($FYt#FRDwEv{`G^vB3rRl5iQOAU!u!(MB;a!5+@Iq{?abWBz zpBfMMtK#Nt@EvZ>z1PYMlwb!1RU+Rn1a92;s)Vq}0qUjplx4ZrhTcOg?!pC~qqDmb zR14lzPnLFe&e6?QI^UlXj-9uBwo1%GEg@AMuzq&&cHm)qQ>j5uelV4`&^p7y4vjR{ zk0KKP8=3pv3;wm`C2d>(ZbpXI%qPcN40TE7A06*}=RE1Nc+G>>$Bj?2k1X|EPvYuC zlv9Vr?3pmKR%yb~<4#5j*RCAa^BlPNyI7K4ily-?S7O}}r$ZoH+Ad>aI^FA)NDF2) z4-1ADzFR1553|?nB{U|g>Mol7VoXMTnI&cET`-4McI;e|gDSoY%N=oLYAw^k)(UEL z@_bOH_PEE92TG0kQfR}#5e?_DchBiIwm4{it-h3Bj}RQ?*hF(-?STZ}netf7t(9{z zT|=bn;>Yc5So8>4JDP;I``9SyQJ1_IqxdssPF`!P?&oy93}Ho%)E`fr#B{f{4Zqft zTY!d0h3zEbG?&)H<{9G`>zu>#%erihboahdUo-oC+O2o*5k@{dEU9v5!NH-`p&Y0L zW1bA{*^3w1_ghXpS{N+N@ZIcXL$+w~!UJ{k)fBJdg6<`TEXNCk&pmypBq%0Gij6>6qs`HyzmJ{VoaD z23$-z4S#}rzF+C<9Rgw3b~fd){obBJ>Ea_Imhy-2n^woqcck6NFdGEyyC}j=@g&*C zPME0jT&Tdryz@1N?UqxZfd{-9H~+$O-Rj#?sGl_n#&FL+?fHR4PH<7r>tB+HD`QtQ z_GUUX@lXtWO{I77(QB+h^>z|!HF9d1{(k?o1Ni+0rs$0#z>>Cen zA+Cs;!Kco1`0y%}Y_i>4{JzBpq`otEYT7c}PHn!cml*8Wd(r;pC>8x3?R3qj>@!Y# zX19;&tk02DxVdf-PF@A=DG3HJ@VZxF70>7OR59&AK)2~j77sql7+QZlom!J41MZ?=jGJ1nt$v;xt-+)vI|KAWXj_4r#0 zYBJ-YV79U?88AukXZYP~5R`vyMyPkwuIwS!Po8Ce%IU9<-5K>}1vZCF=x+rLN{f}i!IPVqWh(EdSYnbblMdkzN;P6F z^p5h5|3So-Jt@+zS*V;moy*UOhI}eT=t}wS0jTm<9%D*@|L!+;&JjO zoIjygUzDG=q78F^qvhn+8POAWxx;0jeHPeWdP*y5Y(vFI%D+>2Xd?vdne5&^gqAG{ z`Fwv9$j|JP-LNIMtAr830F}8?+y8yo!gZ` zsTqOwC9b~Jm37RIlezZx(Dcmx^(+-+Kxz&utCgAGe$|y|!Hn_DJgFv!I@Mb+vkn7e z=9s+UYMyk7YEZRn7;8tS*y#JK2nXvvh_h`m`NpQG+N|5-ot+!1BJ=ctgoJI7d%1-3 z?gN5=cl=Dx$S~mym89roITVucuQ<8DhpGXqUY2ivORlixa!rIi$kWMT8X0~|GY=wu zO0;T=rchj=$7!lZd?tbh@w{gARTgJq7ZM3Q6$&CZ!E5aWu<88mQ_-n@yJeUue&Q zCM9c+D!(szx$zkgTEQ7EBPIJh`e~aSlAdR{SWQo2wEcWJXKuth#L-K@Hg7~XiFa$2 zl5^djZ^WCun;W!>qxXg@6@7&us0CeU(Mx)wQ%-qST1O45B^Laz^@)#@n{U(Pwr+-o zOa`BByh*~py)JVmpwa{jIk?e`2(6?C#gSbcMQ@+D1uag`K*_SX&@ zU{{1^%zt@N{yD38Bqkn&XgEE&bDXPy-TSSXH`yzd}2pVaoSzo}e= z?Yi5SFE8ZB_A`t0fT!IC7galvv`hHx&j$~u!tekGJ-#`PgHmtCEsVjtSO?y^fafFq zhE8SOUOPbM>npn_eq1@+64YdbgG|4gDhg1w&V*gluV&cKAO5u6)6yO7F?9ctx63-? zzk_{hn6XHZ5VNb=AG3W<0@HcV##0zU5!;x_%c@jhK0OrhnTF1#g=3Ek} zBe|USw0LEVe?SueOV--U3!O8(qwIt|9EtPnSG~P(#l4&Q5jwfTH8W&Aas(5ZoO@0l zOEQ8fg!cO$*Zt!avd^VcMn#)wyzOa-mfb5;<9t(LMtkHszlbw^mcHdxpw4V?1blWj9=SAX?J_>}wRac_v0Uo2^XXoG;Fd0slMWW2$2@hUp+3r!Zs~Gy@!2J&@O#|_^BT^Z ze$^Y(k7#VfayeYCk1fPfzr*%va4l2E;Kjq*67KaOe!)bi!lvYef>Fb2u-4D}bu&jr zB|={)CyZrS&)*)}W!$zmDA^r*-`^l@)I7=0)Na1i&GL4?Qjpn5uwLQTOX-d2W$oUr zIA}--Fpd~}Qf;>|ecZ{p7BgSzPeak89C@3ppw*9sK0u3-+kp9UA z#!F;1oL3VgMOqFwl9OWkp2XvA5gq&);*xN8EM+cvQq#UQgd?-$s2)5NEx;QUf!!C8Z9r7E z0M!pT071~GvX8gA;QyE|;0jEvA?NBth-+NOc`pnI17I|7*x6i$wVN8z1)|$X1x}qZ zhhCRie0d_o0o=^DsRS!I!k^FHJ%B!W>LW9ti+cs1y?)~c6AE^^lxUW)VG6wduJ?vZ@68hSu`XpL%P@(8-pY`>Lkab+&IA?YQfto_yczo$FGcgmWzu(J)%V>7zfQPn+8LT?(2yz=Hka*%kI$;Hz6I8lClr)is(?PXB4uq2kP zHCKAFV-jZ`G1qm*O`iQET;`xpd&QiRO$RJ;9iq`qkHA&4a03?eK{p~(2UYjUs zXgbZuLLSan8B2YjQFL?UH;s*3ZTIY;S1hA;TQ0KRCdy!sIvp$86cl|oCLCDt%!v-? zM1NSdp^%b#xzDc?C<322BdF>sLJY79!K_buMk*HWHmr@)GjW8Jyom(~fHmtdMlZdU z2-y9Ze`hj)q*e`vphg-0hUdKbww;e5r{PymR@-<(l=fBKOil}B*S620-ow!mBCb(y z?lW5la@!0agWGa>efQzE;}+J~V*WD%b#mepXKNI{DDfWFJ^joHBNNKV_G+=EIC}hU zwMs;Ug;V!0BN6{XI5T#cbsb`GJ74!*kDu?0v^d}HrMfit;@ae;rsz}2za1-{tx~Lb z-_D0uf~!Drp|e`@3jgyom+Ih>qfx(FB6Q0pbSNWk=kVfq@BO;m;rW5UT#+)CIH^Bq zT9t65_1)|8aceIUwov-bt>0vYf}E8(QkD7MzNJWf?F%69y_d}y@>XGEFRv)yHt*^8 zDM#x*j^#AWZv3ofR$Z+h7b=trmih36OZJgsSTEm5pkL4BmO1_8SbXLmE zOQXI=X_u3kCTJ$2W8~fE*;>Z)RGsU{oj;gPh6;duM<8@G*u>FF2T*GSPPw->D><_G z-%vZF0{h*sUYq4Ul^?K8*c2gKJ}$x@xoS(5wC#V%$dX!V?r3Rjs%(Fvj{Z;H`URLq zIp^~Cd)Up@*h!`7`H@dAy0ABgR!%RF7$b|CxE;;o&KluEOXshTJh3e>WpQ5amsRN> zB&zE;szENnfxN*p-ZfZ7X1j8m0JDk_?I*o-csi%FebuBf)A%;>oh=Et0(It#{GOKRmtaUJ(M%05~XF7$Tg>gS=)*gHQ)vWR;Y_<*2g9iiWQ$GZl z5(T~q+(h@Q^44J@?_%DOEy2w3Sla3@-i%gvkJT^aCKV==-Z1nc6}HKqVv)b5SrZy~ zG%F_XbqwODX$7%$5?2~HkB3^)d0LvY(C$Trtmm3CxZ`SxrvslBRt37^3*jZK!lp#92kzKvQQJz(56im=ncLlYo<({YW4G0aAF6gK z-KgY!SjR5$yKgUyETS~TqUYif#rK^CP_2`e6)-Z5B#^*k$N=m%+ zk;H^zcJ;2j$>wsgM#g8Aq(L7;WGR9taLTV*JmV^=XB$=Bb8cVUXR=u>rurjF{bh|k zv{q&f8IT{4*I)W`C&IbHGyAh9gnk9QzCAVj1)53kn7BXO$iAjdvE#6r`K#rPQWibo z+b``)VHV!^l+BNnM_k_nklOz!5w%KUnuNiDp9P)^!4EaVG87A{Q%`|hVgSOR71Mimj zf%tS&YzFt~Yxrs^K~dA{+JAkn0T1I7#?xvX_#|Z-z-?%{xGYj+U4;&<8#kiiVIA93 z!XKhHVW>9TJ|hR<&BD`p6j_XZe;lI|@&!?^x_{`B^t|=}GilpfDMh{Y`LkN$+U3uz zBG|KER8+Nyfc?oBPxDjXt{j%9ZhuuLb&BRtFR*I{4sAR0Y^^U7FN8`*kEYb(==51; z-bifqEa|m>YdP<94iN^lTHHTz;0AP&V&=&C`qH2jIWmupzAz8-`X<2J{`o7=I}3}E z16#=>uy;@bK23Qs}e8K`*h<+AVi9 z_3ym3GU3qPUqaJeJtDk#cX!*RMsMAeWuYaBJdM*ymW}=ewvC*yLloc~grP|Vsdt2G z?VD}wL|0p%P2ZG&u&sBuoNxu}EP<@uLQ0sb-q7*Z1tfW{@uz;%ud~EdSmHvZ z8Tvtfec7`({rtxHilg~z*@ve0Nc9?)pXmsZtowXVEL)6Ui*mcDNkn;w;Lo0-BkEv^ zF}`*FQx2}&(a0bwknGUj`b&bgkOV@8cw^1<%TH=_3Vi-pI;Ne!TPR}jH8L)4x&#`+ z)}8nSN0O6OEdA-KWyPBdX19CJ9Xt`sMG??6f_I|YtfQjR_;nrM`gY?~wBPGecpjHE zCf7>EXn)_bvZm#vcYM_s7$`ksxaQ;e_$BCU;YGXKLDOLTQrf&|>1!l9HD4fOM*ZEt zgGl2<>pEeS!QT7CtDES@8q8?HteP?A9XOGD@>cD{?Vu&+sOOTHA=4S5OR&p%j}FC; z-wxWV{Ja}<*l_9l$aJ*gm76%LL?^8``#|NO78Kkx=rU~+@pr!2l#!|<(fyrczeYHR zfDHPLXC_O&4+)lZI}X8C_>s0dbmg-2oexzCFxurJd+VG=r#-nGq`;{voz*YY6*fQ~ zFx|yo5rv>PkZ3XDE~Os-TU}dQ$Rm2b5Sk*N6W2I=wEJX$|59Hqz*xt1n|^L2QBjhx<1(LC$S$vE6HP%8AL>`xf7I!&I>T zttI#$TrT*IiUqk$lYrv<-3kr+Mg?z(KZz0K_r;#|cw$wl+~r>YzQx|F)vD#+3G$<( zpA+ygua=p)?pBEMJ1@D(qpA0)=>bR(PhKmJ6p1zh4#3p;Ary41cZ?JRW#hnPYMq(_ z?+1Iy!xzk{sD{xUKFe#KWDC~4yB5Xp=c~dsmCy}&$Td{&s-M}|$e!N@(51aTz87g$ zV=AWremQb|8yfoiJU$e+s5UVVbQcdNEeMFu-LCykw=ph@aHWB4S6 zAsXO5#X-Ogf_Cof`;15eiwn+wNW$-kNRSmBf~Ml(0XYY{86okl667!z;B8(J^}UA@ zP{O(XHGDIVOXhjw+P;uzGA{5@*3Yf{vSi#`r(O8o%|$=ey!5hsFi5R665%(E^r;^k zn7Vz-^;_+wGRh&tEv@_GVS?agwq~km&o=XLH<#+xpvL68q4uV_!v5zH6qz0vk#`#v0YX4$Nz$hr*ru-y zEA%3ov&C&BtFV0x$_C7TC<1dlQHkZdU6aXHryE-)dq-42W39*)9$$ESBAip&((PMg zrSRzv@?WKJj+fb<%}Y*6`Ic*?ZtT0L1o0uH7yg4ZHWnjbPz8A+y@f8v&)w-VUHRF8 ztI|IVJU^I|u!LKnxSs9Kp2AH)v>^n!4!4Env?~<&H6K&YIzP1eR=Ky5QRH)3M1FBOyh zvsi4Voyq75cJlU6tg6v!Re7w}e2BbSGk(Qqg4#7=GS6c`kEcw62z(3=r4xCp6O-DK zEA2Jn>b|UlLvo*y%xzj~>jNgTiiORLU)K5d3{uB|F3c^N&7g4H9U7B(k!hu33y#bu#nN!;S2U{M!ZEi z8hw3zM9|FMk3}A$y$_Jk0lc7Dh~U^gGhALdv+6orLHzFBJ7KD^9Kxnww1t zT5sh$mPbrhd^eb7x%QOWlsBOgD=m$jTEotyllBtv#5-*4)a0MBj2nq*UD3wQUwI4DahD44oqJl2S7_6vK`Nc z^AgSiEs3hybYo$}Q<=gB={t#p9e!|0J`4&1kMUIY?Uo}Y7GyjH{VkBJkfym4N%TY8}XQR-hZ9Fa%h&a;@9o@rDfhFSrLr@NcDH97MVq zz~HRBUIciq{M7kT;1tm`F$&pyQ_%Z632v}AYA;WDDj!rqxtBotp9I^e8Po#M{FZ@` z%bh8C0MESIIOazcmRJNiLK5)9I5FGjPKNL>@v}3P2EKoRNF2MAdoX1}& zPM;0dM)X=A$jkE?4dIsnN^h)$%e%oGl5hKHWGWyEC{u@0-UT9iP*fpg(D?O#Dw;e3 z*`7YI65DI=?WtH3?W+72GUEC7&&U1-GJKX)HDwdEJOCz9$rvM7a4?Vzfe}sv_OPP4 z;+f!xh*VGvuQtA%oqSMM9-XXn~$Mcp%1IEqXT}calQX^T+KWA zk|;K%0hGJx_P6^$8_k#2ssKbA6SBoZnoq9u6Qc5+rGp5&3cO~-(({GPI>gh1(S|Yt zOUB5sVEYG#sVZDn7pZtS4=4C8siJ_mlB5tWUE&pm$7cGt^O|{G=OxSLaNCaGvrO86 z`d|U~?6cRr@m$dqCll<;Ha2O4E~F5J1KkwSsR?%}1E8Lh=Q4JgPxDnWiA^ASBnSW9 zQmgcQJHSLyu?Iw6WMDv2Kk}`G_R(G_EWy~&BYpvCs_hYwuL<9u?GKa)2U;m&4ZPMR6YLZ#0-q^- zZfa!U27fgexG#X$kd5uUy(y3~aO!X`r~3aq8&k z;Lhg3^9K-E`>=uw5FhvQ6$XNoE*cqOC#`;10zw*PUCBVWtPy5+72RBff&jN{FUOgq ztKcOC48wCUMRuY~4h^;sDd<^*O#=oyYG|e{On2Hdvv7^THc*FXSr|U!fE?+n3-29{ zn7pO+7x5x-NZ9ofG9lMh^v;4c+zM*q_WfU;g3VL}?2=%8w)FZC@FG6GMS(`PMw!b` z5pE6aslzF+9Y;rkxcDG$YR-Gq`X93E|14$c-@TM7@0TEx*BKV54cr{QTpqwHi+&E! z;WOYu4nA*inu0;~Ct$a$gJ|U67XdVAqC_4r#M4g1q4l;oFkm@-#t+L8cHF=T0j(DA zfb1c&vrvutt8%yf5Ty4vm&_JWby2=B)X@-J6prp95U^(?*rQs~1{e?&p*YzZKhqx# z*aWzAVCpeeTTusy3aviBx|*6R z;2g&HpcFXp;KDgKxTZ!CBKv^k!h7n}uNPKCz-qv4(;v=x4N5oG6Pzg9s_v=#+@)#AY3w%7e`10ArKUR5B#9b!14flTMevx#8B^`VwZ@78;(L^ zVJSf*W8WUX@n_1=VkM5o=|5ta`PoT~!J&@04X~*}U1SlW#fCjg{I(I#0vfv!zaj*_ zo`}dZWlo=(r44j5&^H0QFFJ^U?`=Ycjhp)j3DdKyv#_rDLb4)?iG&GYu*S>Bhk*R3 zHwHGlZpuMppag*3_YJ@(P&DSn!2N*ZsfEBXlQ|EQyVJZ!#B3@crA{9l=vt}E59$ zDhnxjvWTw?Ss}-u<(eC|r*}%BOv&%xFOEgX-}s5wQ6%|un{{D9sTR|ORot^`7rgFc zkjD($SK6h5b;y40UnjthF#(rg0>XPUuMmfYgg|&$qd5CLZo>k{3Ha{TBUO)#TpM_a zVC3Qp@Dr|!Ka(Q1aGxNFuPH`o3SKbG1F{B?keP0t6kRqo)snm`mVtn8V=ZKhp+74@SBB+`uMH1Zp~m zY4aY28babgn(6K|75MVsfnkE>@ksx7oZmgzw|fhm5}gcTdlTqUS5xDbmE{P4eBW^B zT|gQ=1PyM$7Zy;c=jO&J!os1I4hUe<*7(4p!I zh@*d(o5b6*>^IJ0K4D-`3Y?t1Z9IVvLdQ`cHyk+{vGgaoNg%S_^$FzLy1)!tf{FV) zG0~|n2Eq{goys*~kPxRq4mXs@aJw)FjtdF3t*^pCL>-EOEYh9==+fvUU7j5(+fJU8 zg*^;5TLFXI@rT_*RcWj2SK~(`eMl;x0t03#R0?Y(P0A)to8Nv5+kfd zkdGS*Xi7wZ0=`x=^hBUoO7MrQv=C0Wfonfj%HtIDd(fi=*r{xl3Hp^_37eWHC;u>?EKCEqHBzX$3}bs4xVChxtP~Xog-S2Dx{AV8AB9$u+fb;46?EHi zDkJlgIc&HCkcf%8@B~b7*dX|%$y4!Swsbwl_s*akaLBH-0y+eQ&$2%DoA2dj7j*9_+LI)pawNM(|`Qd|5kD((5zL^ W?q1Mi3?+j9RF$+8KV33?@V@}<86yJ# literal 0 HcmV?d00001 diff --git a/kochkareva_elizaveta_lab_6/README.md b/kochkareva_elizaveta_lab_6/README.md new file mode 100644 index 0000000..6bbac48 --- /dev/null +++ b/kochkareva_elizaveta_lab_6/README.md @@ -0,0 +1,101 @@ + +# Лабораторная работа 6. Вариант 15 + +### Задание +Использовать нейронную сеть MLPClassifier для данных. Интерпретировать результаты и оценить, насколько хорошо она подходит для решения сформулированной задачи. + + +### Как запустить лабораторную работу +Для запуска программы необходимо с помощью командной строки в корневой директории файлов прокета прописать: +``` +python main.py +``` +### Какие технологии использовали +- Библиотека *pandas* для работы с данными в формате таблицы. +- Библиотека *matplotlib pyplot* - для визуализации данных. +- Библиотека *sklearn*: + - *recall_score* и *precision_score* для вычисления полноты и точности соответственно. + - *train_test_split* для разделения набора данных на обучающую и тестовую выборки. + - *MLPClassifier* для использования многослойный персептрон *MLP*. + - *StandardScaler* для масштабирования данных перед обучением модели нейронной сети *MLP*. + +### Описание лабораторной работы +#### Сформулированная задача +Задачи анализа, решаемые нейронной сетью MLPClassifier: определить локации (страны) по характеристикам вакансий. + +#### Оценка важности параметров +Так как аналогичная задача уже решать в лабораторной работе 4, где уже проводилась оценка важности параметров, воспользуемся результатами прошлой оценки. + +Наиболее важными параметрами являются 'Qualifications': 1.0, 'Work Type': 1.0, 'Preference': 1.0, 'Job Portal': 1.0, 'Min Experience': 1.0 и все показатели льгот. + +#### Нейронная сеть MLPClassifier + +Для начала выгружаем CSV-файл с данными о вакансиях работы с помощью функции `read_csv`. Загруженные данные сохраняются в переменной `data`. +Создается целевая переменная `y`, которая содержит столбец `"Country"` из загруженных данных. + +Далее создаем функцию `MLP_classifier_country()`, в котором будем производить работу с нейронной сетью. + +Сохраняем копию оригинальных данных в переменной `df`. Затем, из этой копии удаляем столбцы, которые имеют наименьшую важность. Далее, данные разделяем на обучающую и тестовую выборки с помощью функции `train_test_split`. Обучающие данные сохраняются в переменные `X_train` и `y_train`, а тестовые данные - в переменные `X_test` и `y_test`. Здесь `y` представляет собой целевую переменную. + +```python +df = data.copy() +df.drop(['Country', 'location', 'Company Size', 'Preference', 'Job Title', 'Role', 'Job Portal', 'skills', 'Company', 'Min Experience', 'Max Experience', 'Min Salary', 'Max Salary', 'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day'], axis=1, inplace=True) +X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) +``` + +Далее инициализируем объект `mlp` класса `MLPClassifier`, где создаем многослойный персептрон с двумя скрытыми слоя с размерами 100 и 50 соответственно. Алгоритм будет выполнять обучение в течение 20 итераций. + +Затем выполняем нормализацию данных с использованием `StandardScaler`. Создаем объект `scaler`, который представляет собой экземпляр класса `StandardScaler`. Затем метод `fit()` вызывается на объекте `scaler`, чтобы оценить параметры масштабирования на основе данных обучения `X_train.values`. Вызываем метод `transform()` на объекте scaler для применения масштабирования к данным обучения `X_train.values` и сохраняем значения в переменную `X_train_scaler` и соотвественно для данных `X_test.values` в переменную `X_test_scaler`. + +``` python +scaler = StandardScaler() +scaler.fit(X_train.values) +X_train_scaler = scaler.transform(X_train.values) +X_test_scaler = scaler.transform(X_test.values) +``` + +Теперь можем обучить модель `mlp` на тренировочных нормализованных значениях признаков тренировочного набора данных. И использовать обученную модель для предсказания меток классов на тестовом наборе данных `X_test_scaler`. Результаты предсказаний сохраняются в переменную `y_pred`. Для определения точности модели воспользуемся функцией `precision_score()`, которая вычисляет точность, сравнивая предсказанные метки классов `y_pred` с истинными метками классов `y_test.values`, указав `average='weighted'`, что нужно учитывать взвешенную точность, учитывая несбалансированность классов. Аналогично вычисляем полноту с помощью функции `recall_score()`. + +```python +mlp.fit(X_train_scaler, y_train) +y_pred = mlp.predict(X_test_scaler) +precision = precision_score(y_test.values, y_pred, average='weighted') +recall = recall_score(y_test.values, y_pred, average='weighted') +``` +С помощью точности измеряем долю правильно предсказанных положительных примеров относительно всех примеров, которые модель предсказала как положительные, по формуле: *Precision = TP / (TP + FP)*, где *TP (True Positive)* - количество правильно предсказанных положительных примеров, а *FP (False Positive)* - количество неправильно предсказанных положительных примеров. + +А с помощью полноты измеряем долю правильно предсказанных положительных примеров относительно всех истинно положительных примеров в данных, по формуле: *Recall = TP / (TP + FN)*, где *FN (False Negative)* - количество неправильно предсказанных отрицательных примеров. + +Результат данных метрик выводим в консоль: +``` +Precision: 2.1744885682448426e-05 +Recall: 0.004663141181912513 +``` +Также выведем классы, определенные `MLPClassifier` и общее количество возможных вариантов значений `Country` в изначальном наборе данных. +``` +Class labels: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 + 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 + 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 + 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 + 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 + 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 + 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 + 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 + 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 + 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 + 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 + 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215] +Уникальных Country : 216 + +``` + +Выполним построение графика относительно *Work Type* и *Qualifications*: + +![График "MLPClassifier"](MLPClassifier.png) + +### Вывод +Исходя из предоставленных результатов работы MLPClassifier, можно сделать следующие выводы: +- *Precision* (точность) имеет очень низкое значение (2.744885682448426e-05), что означает, что модель очень редко правильно классифицирует положительные примеры. Это может быть связано с высоким количеством ложно положительных предсказаний (*FP*). +- *Recall* (полнота) также имеет низкое значение (0.004663141181912513), что означает, что модель неспособна обнаружить большую часть истинно положительных примеров. Это может быть связано с высоким количеством ложно отрицательных предсказаний (*FN*). + +Таким образом, результаты указывают на низкую эффективность модели MLPClassifier в данной задаче классификации. Требуется дальнейшая настройка модели или использование других алгоритмов для достижения лучших результатов. diff --git a/kochkareva_elizaveta_lab_6/main.py b/kochkareva_elizaveta_lab_6/main.py new file mode 100644 index 0000000..5b9d69c --- /dev/null +++ b/kochkareva_elizaveta_lab_6/main.py @@ -0,0 +1,52 @@ +from sklearn.metrics import recall_score, precision_score +from sklearn.model_selection import train_test_split +from sklearn.neural_network import MLPClassifier +import os.path +import pandas as pd +from matplotlib import pyplot as plt +from sklearn.preprocessing import StandardScaler + + +picfld = os.path.join('static', 'charts') + +data = pd.read_csv('D:/Интеллектуальные информационные системы/Dataset/updated_job_descriptions.csv') +y = data['Country'] + + +def MLP_classifier_country(): + df = data.copy() + df.drop(['Country', 'location', 'Company Size', 'Preference', 'Job Title', 'Role', 'Job Portal', + 'skills', 'Company', 'Min Experience', 'Max Experience', 'Min Salary', + 'Max Salary', 'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day'], + axis=1, inplace=True) + X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) + mlp = MLPClassifier(hidden_layer_sizes=(100, 50), max_iter=20) + scaler = StandardScaler() + scaler.fit(X_train.values) + X_train_scaler = scaler.transform(X_train.values) + X_test_scaler = scaler.transform(X_test.values) + mlp.fit(X_train_scaler, y_train) + y_pred = mlp.predict(X_test_scaler) + precision = precision_score(y_test.values, y_pred, average='weighted') + recall = recall_score(y_test.values, y_pred, average='weighted') + print("Precision:", precision) + print("Recall:", recall) + + # Получаем метки классов + class_labels = mlp.classes_ + print("Class labels:", class_labels) + print("Уникальных Country :", data['Country'].nunique()) + + # Создаем график + plt.scatter(X_train['Qualifications'].values, X_train['Work Type'].values, c=y_train.values, cmap='viridis', label='Train Data') + plt.scatter(X_test['Qualifications'].values, X_test['Work Type'].values, c=y_test.values, cmap='viridis', marker='x', label='Test Data') + plt.xlabel('Qualifications') + plt.ylabel('Work Type') + plt.title('MLPClassifier Visualization') + plt.savefig('static/charts/MLPClassifier.png') + plt.close() + return 0 + + +if __name__ == '__main__': + MLP_classifier_country() diff --git a/kochkareva_elizaveta_lab_6/static/charts/MLPClassifier.png b/kochkareva_elizaveta_lab_6/static/charts/MLPClassifier.png new file mode 100644 index 0000000000000000000000000000000000000000..960710b5e77d9a9d2523d01ea57e09aa0acdeb52 GIT binary patch literal 33187 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 W?q1Mi3?+j9RF$+8KV33?@V@}<86yJ# literal 0 HcmV?d00001