From f61aea2ee28002cbfd22cbcdef8cbfa176c4cbb7 Mon Sep 17 00:00:00 2001 From: Kate Date: Wed, 1 Nov 2023 16:08:27 +0400 Subject: [PATCH] lab 6 ready --- belyaeva_ekaterina_lab_6/Current_Pub_Meta.csv | 125 ++++++++++++++++++ belyaeva_ekaterina_lab_6/README.md | 92 +++++++++++++ belyaeva_ekaterina_lab_6/accuracy.png | Bin 0 -> 3224 bytes .../classificationReport.png | Bin 0 -> 27637 bytes belyaeva_ekaterina_lab_6/main.py | 76 +++++++++++ belyaeva_ekaterina_lab_6/positions.png | Bin 0 -> 36688 bytes 6 files changed, 293 insertions(+) create mode 100644 belyaeva_ekaterina_lab_6/Current_Pub_Meta.csv create mode 100644 belyaeva_ekaterina_lab_6/README.md create mode 100644 belyaeva_ekaterina_lab_6/accuracy.png create mode 100644 belyaeva_ekaterina_lab_6/classificationReport.png create mode 100644 belyaeva_ekaterina_lab_6/main.py create mode 100644 belyaeva_ekaterina_lab_6/positions.png diff --git a/belyaeva_ekaterina_lab_6/Current_Pub_Meta.csv b/belyaeva_ekaterina_lab_6/Current_Pub_Meta.csv new file mode 100644 index 0000000..9916e00 --- /dev/null +++ b/belyaeva_ekaterina_lab_6/Current_Pub_Meta.csv @@ -0,0 +1,125 @@ +,Name,Primary Attribute,Roles,Herald Picks,Herald Wins,Herald Win Rate,Guardian Picks,Guardian Wins,Guardian Win Rate,Crusader Picks,Crusader Wins,Crusader Win Rate,Archon Picks,Archon Wins,Archon Win Rate,Legend Picks,Legend Wins,Legend Win Rate,Ancient Picks,Ancient Wins,Ancient Win Rate,Divine Picks,Divine Wins,Divine Win Rate,Immortal Picks,Immortal Wins,Immortal Win Rate +0,Abaddon,all,"Support, Carry, Durable",1111,575,51.76,6408,3309,51.64,13811,7050,51.05,16497,8530,51.71,11360,5877,51.73,5571,2893,51.93,2632,1345,51.1,991,497,50.15 +1,Alchemist,str,"Carry, Support, Durable, Disabler, Initiator, Nuker",1119,486,43.43,6370,2883,45.26,12238,5617,45.9,13028,6130,47.05,8455,4055,47.96,4120,1984,48.16,2021,1023,50.62,860,424,49.3 +2,Ancient Apparition,int,"Support, Disabler, Nuker",2146,1073,50.0,13697,7069,51.61,30673,16118,52.55,35145,18219,51.84,23114,12166,52.63,10688,5528,51.72,5035,2573,51.1,2134,1076,50.42 +3,Anti-Mage,agi,"Carry, Escape, Nuker",3765,1818,48.29,22050,10774,48.86,47371,23304,49.19,49115,24074,49.02,28599,13991,48.92,12303,5958,48.43,4866,2349,48.27,1502,751,50.0 +4,Arc Warden,agi,"Carry, Escape, Nuker",1448,704,48.62,8047,4162,51.72,14946,7982,53.41,14711,7875,53.53,9472,5167,54.55,4323,2309,53.41,2104,1148,54.56,789,435,55.13 +5,Axe,str,"Initiator, Durable, Disabler, Carry",5343,2880,53.9,32652,17719,54.27,71010,37736,53.14,77869,40559,52.09,49182,25079,50.99,22637,11353,50.15,10114,5000,49.44,3795,1837,48.41 +6,Bane,all,"Support, Disabler, Nuker, Durable",745,334,44.83,4983,2422,48.61,11332,5504,48.57,13633,6767,49.64,10132,5032,49.66,5596,2861,51.13,3028,1555,51.35,1958,1055,53.88 +7,Batrider,all,"Initiator, Disabler, Escape",349,136,38.97,1983,812,40.95,4053,1595,39.35,4725,1861,39.39,3173,1275,40.18,1678,731,43.56,802,362,45.14,497,227,45.67 +8,Beastmaster,all,"Initiator, Disabler, Durable, Nuker",402,174,43.28,2447,1060,43.32,5787,2569,44.39,6930,3092,44.62,5288,2389,45.18,2816,1274,45.24,1593,752,47.21,1176,539,45.83 +9,Bloodseeker,agi,"Carry, Disabler, Nuker, Initiator",2765,1382,49.98,12589,6270,49.81,21781,10683,49.05,20961,10420,49.71,13035,6430,49.33,6210,3006,48.41,2941,1475,50.15,1465,718,49.01 +10,Bounty Hunter,agi,"Escape, Nuker",3852,1868,48.49,19609,9535,48.63,36362,17600,48.4,37059,18314,49.42,22934,11518,50.22,10584,5276,49.85,5105,2594,50.81,2498,1325,53.04 +11,Brewmaster,all,"Carry, Initiator, Durable, Disabler, Nuker",545,280,51.38,3564,1745,48.96,8941,4388,49.08,12340,6111,49.52,11185,5623,50.27,7645,3906,51.09,4812,2478,51.5,3533,1820,51.51 +12,Bristleback,str,"Carry, Durable, Initiator, Nuker",5884,3262,55.44,27952,14587,52.19,48847,24379,49.91,46702,22927,49.09,27466,13319,48.49,12398,5969,48.14,5865,2915,49.7,2639,1304,49.41 +13,Broodmother,all,"Carry, Pusher, Escape, Nuker",456,173,37.94,2048,842,41.11,3444,1462,42.45,3392,1448,42.69,2193,1048,47.79,1203,602,50.04,795,422,53.08,453,230,50.77 +14,Centaur Warrunner,str,"Durable, Initiator, Disabler, Nuker, Escape",1721,911,52.93,11754,6266,53.31,28691,15201,52.98,35369,18741,52.99,25393,13468,53.04,12653,6607,52.22,6124,3181,51.94,2442,1243,50.9 +15,Chaos Knight,str,"Carry, Disabler, Durable, Pusher, Initiator",3032,1639,54.06,16762,8931,53.28,31892,17139,53.74,30697,16435,53.54,18217,9810,53.85,8572,4620,53.9,4230,2291,54.16,1750,943,53.89 +16,Chen,all,"Support, Pusher",284,125,44.01,1450,678,46.76,2969,1345,45.3,3258,1604,49.23,2641,1331,50.4,1488,767,51.55,970,512,52.78,770,448,58.18 +17,Clinkz,agi,"Carry, Escape, Pusher",3151,1608,51.03,13891,7141,51.41,25465,12938,50.81,27327,14066,51.47,18846,9726,51.61,9452,4890,51.74,4765,2475,51.94,2093,1052,50.26 +18,Clockwerk,all,"Initiator, Disabler, Durable, Nuker",816,397,48.65,5860,2837,48.41,14478,6929,47.86,18466,8843,47.89,13143,6301,47.94,6612,3169,47.93,3286,1581,48.11,1378,658,47.75 +19,Crystal Maiden,int,"Support, Disabler, Nuker",4821,2529,52.46,26584,13626,51.26,52168,26040,49.92,52258,25365,48.54,30690,14848,48.38,13295,6404,48.17,5602,2680,47.84,1638,771,47.07 +20,Dark Seer,all,"Initiator, Escape, Disabler",627,320,51.04,3675,1884,51.27,7881,3803,48.26,9589,4844,50.52,7186,3573,49.72,3902,1983,50.82,2145,1095,51.05,1217,593,48.73 +21,Dark Willow,all,"Support, Nuker, Disabler, Escape",2654,1293,48.72,13829,6657,48.14,28142,13480,47.9,32114,15785,49.15,23100,11331,49.05,12052,5909,49.03,6400,3182,49.72,3708,1915,51.65 +22,Dawnbreaker,str,"Carry, Durable",1746,875,50.11,12297,6105,49.65,32398,15921,49.14,44846,21936,48.91,35474,17441,49.17,19770,9832,49.73,10637,5263,49.48,6339,3173,50.06 +23,Dazzle,all,"Support, Nuker, Disabler",2827,1418,50.16,19852,9758,49.15,48236,23691,49.11,56417,27798,49.27,38159,18642,48.85,18695,9199,49.21,8530,4239,49.7,3382,1654,48.91 +24,Death Prophet,int,"Carry, Pusher, Nuker, Disabler",1372,659,48.03,6643,3145,47.34,11987,5729,47.79,12268,5856,47.73,7455,3606,48.37,3591,1698,47.28,1872,902,48.18,926,459,49.57 +25,Disruptor,int,"Support, Disabler, Nuker, Initiator",1541,757,49.12,11104,5331,48.01,27746,13542,48.81,33742,16310,48.34,23173,11096,47.88,10907,5201,47.68,4859,2255,46.41,1863,861,46.22 +26,Doom,str,"Carry, Disabler, Initiator, Durable, Nuker",1049,474,45.19,6112,2767,45.27,13700,6056,44.2,15454,6925,44.81,10727,4842,45.14,5444,2451,45.02,2979,1348,45.25,1545,731,47.31 +27,Dragon Knight,str,"Carry, Pusher, Durable, Disabler, Initiator, Nuker",1950,942,48.31,10643,5274,49.55,20451,9733,47.59,20326,9671,47.58,11674,5544,47.49,4979,2355,47.3,2024,973,48.07,725,341,47.03 +28,Drow Ranger,agi,"Carry, Disabler, Pusher",5737,2904,50.62,29675,14831,49.98,57655,28573,49.56,56682,27927,49.27,34310,16607,48.4,15050,7171,47.65,5947,2815,47.33,1768,788,44.57 +29,Earth Spirit,str,"Nuker, Escape, Disabler, Initiator, Durable",1038,465,44.8,7420,3276,44.15,20807,9432,45.33,30107,14166,47.05,25314,12148,47.99,14579,7041,48.3,7678,3802,49.52,4379,2169,49.53 +30,Earthshaker,str,"Support, Initiator, Disabler, Nuker",5012,2455,48.98,29784,14662,49.23,67050,33111,49.38,79963,39843,49.83,57108,28961,50.71,28650,14591,50.93,14186,7296,51.43,6151,3165,51.46 +31,Elder Titan,str,"Initiator, Disabler, Nuker, Durable",471,212,45.01,2551,1248,48.92,5213,2570,49.3,5572,2809,50.41,3847,1942,50.48,1964,998,50.81,1124,613,54.54,550,292,53.09 +32,Ember Spirit,agi,"Carry, Escape, Nuker, Disabler, Initiator",1514,635,41.94,9180,3836,41.79,20578,8738,42.46,25152,10844,43.11,17703,7814,44.14,8538,3793,44.42,4265,1892,44.36,2065,928,44.94 +33,Enchantress,int,"Support, Pusher, Durable, Disabler",1794,848,47.27,8050,3622,44.99,12921,5686,44.01,11673,4974,42.61,6863,2840,41.38,2948,1212,41.11,1434,654,45.61,806,318,39.45 +34,Enigma,all,"Disabler, Initiator, Pusher",1317,588,44.65,6937,3171,45.71,12908,5979,46.32,11687,5428,46.44,6194,2839,45.83,2493,1127,45.21,938,437,46.59,338,159,47.04 +35,Faceless Void,agi,"Carry, Initiator, Disabler, Escape, Durable",4323,2043,47.26,25618,11902,46.46,54581,25874,47.4,60671,28993,47.79,40137,19611,48.86,19376,9620,49.65,9579,4828,50.4,4439,2256,50.82 +36,Grimstroke,int,"Support, Nuker, Disabler, Escape",1455,694,47.7,9714,4789,49.3,24688,12430,50.35,32027,16094,50.25,23193,11795,50.86,12102,6100,50.4,6191,3047,49.22,3449,1666,48.3 +37,Gyrocopter,agi,"Carry, Nuker, Disabler",2560,1213,47.38,16589,7882,47.51,42072,20358,48.39,54200,26229,48.39,39414,19053,48.34,20164,9781,48.51,10164,4937,48.57,5241,2507,47.83 +38,Hoodwink,agi,"Support, Nuker, Escape, Disabler",2420,1126,46.53,14034,6800,48.45,31382,14964,47.68,35684,16966,47.55,22626,10651,47.07,9949,4690,47.14,4349,2089,48.03,1533,703,45.86 +39,Huskar,str,"Carry, Durable, Initiator",3501,1603,45.79,14234,6639,46.64,22794,10912,47.87,21801,10763,49.37,13811,6919,50.1,6769,3535,52.22,3556,1822,51.24,1936,993,51.29 +40,Invoker,all,"Carry, Nuker, Disabler, Escape, Pusher",4330,2042,47.16,27625,13176,47.7,69035,33863,49.05,86745,43479,50.12,61821,31510,50.97,31459,16321,51.88,15431,8195,53.11,7852,4148,52.83 +41,Io,all,"Support, Escape, Nuker",1274,615,48.27,6158,2999,48.7,12762,6247,48.95,14216,7024,49.41,9564,4843,50.64,5301,2685,50.65,2789,1463,52.46,1464,773,52.8 +42,Jakiro,int,"Support, Nuker, Pusher, Disabler",3147,1708,54.27,22718,12413,54.64,56736,30984,54.61,70038,37473,53.5,46389,24997,53.89,22084,11639,52.7,9838,5103,51.87,3282,1729,52.68 +43,Juggernaut,agi,"Carry, Pusher, Escape",5585,2711,48.54,30394,14800,48.69,62313,30581,49.08,65590,32344,49.31,39235,19326,49.26,16334,8012,49.05,6419,3066,47.76,1576,731,46.38 +44,Keeper of the Light,int,"Support, Nuker, Disabler",896,353,39.4,5051,2216,43.87,10452,4579,43.81,11614,5322,45.82,7870,3627,46.09,4268,2001,46.88,2147,1043,48.58,1333,588,44.11 +45,Kunkka,str,"Carry, Support, Disabler, Initiator, Durable, Nuker",2251,1124,49.93,13474,6828,50.68,31210,16196,51.89,39691,21293,53.65,30314,16458,54.29,15706,8793,55.98,7884,4339,55.04,3458,1898,54.89 +46,Legion Commander,str,"Carry, Disabler, Initiator, Durable, Nuker",6263,3264,52.12,37100,19157,51.64,81491,41557,51.0,91431,46558,50.92,59383,29917,50.38,27945,13917,49.8,13193,6587,49.93,5601,2745,49.01 +47,Leshrac,int,"Carry, Support, Nuker, Pusher, Disabler",674,316,46.88,3872,1799,46.46,7490,3433,45.83,7903,3604,45.6,5322,2526,47.46,2687,1298,48.31,1325,647,48.83,721,357,49.51 +48,Lich,int,"Support, Nuker",2700,1412,52.3,16646,8820,52.99,37785,19685,52.1,45471,23554,51.8,31203,16108,51.62,15530,7821,50.36,7243,3597,49.66,2520,1258,49.92 +49,Lifestealer,str,"Carry, Durable, Escape, Disabler",2515,1213,48.23,14131,6978,49.38,29724,14627,49.21,31211,15581,49.92,18970,9481,49.98,8689,4400,50.64,3630,1821,50.17,1229,617,50.2 +50,Lina,int,"Support, Carry, Nuker, Disabler",4512,2030,44.99,21927,10156,46.32,45301,21210,46.82,54229,25956,47.86,40016,19138,47.83,21072,10112,47.99,10481,5031,48.0,4369,2138,48.94 +51,Lion,int,"Support, Disabler, Nuker, Initiator",6204,2855,46.02,37869,17465,46.12,80124,36649,45.74,84390,38176,45.24,50720,22914,45.18,21698,9784,45.09,9308,4280,45.98,3220,1496,46.46 +52,Lone Druid,all,"Carry, Pusher, Durable",909,483,53.14,4714,2421,51.36,10987,5858,53.32,14580,7968,54.65,11810,6490,54.95,7241,3971,54.84,4024,2240,55.67,2303,1259,54.67 +53,Luna,agi,"Carry, Nuker, Pusher",1927,904,46.91,9091,4271,46.98,16571,7922,47.81,16035,7615,47.49,9728,4634,47.64,4463,2103,47.12,1912,911,47.65,719,322,44.78 +54,Lycan,all,"Carry, Pusher, Durable, Escape",374,174,46.52,1894,915,48.31,3691,1744,47.25,3824,1905,49.82,2694,1332,49.44,1460,753,51.58,827,411,49.7,532,289,54.32 +55,Magnus,all,"Initiator, Disabler, Nuker, Escape",770,339,44.03,5789,2651,45.79,17837,7954,44.59,26126,12058,46.15,20634,9592,46.49,10574,5056,47.82,4565,2073,45.41,1606,751,46.76 +56,Marci,all,"Support, Carry, Initiator, Disabler, Escape",1370,620,45.26,7092,3252,45.85,15199,7240,47.63,18485,8874,48.01,13308,6305,47.38,7176,3476,48.44,3689,1882,51.02,1746,883,50.57 +57,Mars,str,"Carry, Initiator, Disabler, Durable",862,375,43.5,5719,2529,44.22,15156,6756,44.58,20719,9369,45.22,16419,7387,44.99,9044,4052,44.8,4536,2093,46.14,1926,868,45.07 +58,Medusa,agi,"Carry, Disabler, Durable",1898,902,47.52,9289,4512,48.57,16504,7818,47.37,14796,6886,46.54,7488,3449,46.06,2775,1270,45.77,1073,482,44.92,394,184,46.7 +59,Meepo,agi,"Carry, Escape, Nuker, Disabler, Initiator, Pusher",1004,523,52.09,3970,1990,50.13,6904,3587,51.96,7166,3646,50.88,4906,2563,52.24,2383,1282,53.8,1139,588,51.62,585,300,51.28 +60,Mirana,all,"Carry, Support, Escape, Nuker, Disabler",2499,1193,47.74,16954,8135,47.98,39985,19097,47.76,45169,21554,47.72,28467,13456,47.27,12800,6047,47.24,5272,2500,47.42,1824,874,47.92 +61,Monkey King,agi,"Carry, Escape, Disabler, Initiator",3191,1384,43.37,17306,7544,43.59,35734,16113,45.09,40778,18322,44.93,27558,12630,45.83,14034,6433,45.84,6650,3152,47.4,3040,1440,47.37 +62,Morphling,agi,"Carry, Escape, Durable, Nuker, Disabler",1521,690,45.36,8620,4006,46.47,18075,8161,45.15,20414,9235,45.24,14395,6530,45.36,7697,3551,46.13,4432,2050,46.25,2560,1190,46.48 +63,Muerta,int,"Carry, Nuker, Disabler",2130,1089,51.13,10787,5740,53.21,22602,11898,52.64,27609,14495,52.5,20175,10465,51.87,10662,5518,51.75,5462,2759,50.51,2948,1517,51.46 +64,Naga Siren,agi,"Carry, Support, Pusher, Disabler, Initiator, Escape",1502,804,53.53,6495,3356,51.67,10423,5234,50.22,9830,4929,50.14,6057,2971,49.05,3216,1675,52.08,1855,933,50.3,1242,634,51.05 +65,Nature's Prophet,int,"Carry, Pusher, Escape, Nuker",5991,3029,50.56,36433,18143,49.8,83118,42095,50.64,100341,51268,51.09,69436,35870,51.66,34256,17858,52.13,16585,8745,52.73,7182,3755,52.28 +66,Necrophos,int,"Carry, Nuker, Durable, Disabler",4776,2702,56.57,28535,15771,55.27,62186,34285,55.13,70212,38163,54.35,46539,24708,53.09,21607,11302,52.31,9677,4994,51.61,3418,1733,50.7 +67,Night Stalker,str,"Carry, Initiator, Durable, Disabler, Nuker",1189,594,49.96,7868,3892,49.47,19446,10004,51.45,25524,13506,52.91,20138,10828,53.77,10767,5651,52.48,5499,2889,52.54,2415,1257,52.05 +68,Nyx Assassin,all,"Disabler, Nuker, Initiator, Escape",1718,867,50.47,10925,5525,50.57,27207,14073,51.73,34684,18059,52.07,25736,13572,52.74,13313,7093,53.28,6485,3444,53.11,2852,1468,51.47 +69,Ogre Magi,str,"Support, Nuker, Disabler, Durable, Initiator",5331,2845,53.37,31507,16299,51.73,62954,32248,51.22,61758,31373,50.8,33746,16988,50.34,13262,6654,50.17,4861,2420,49.78,1271,654,51.46 +70,Omniknight,str,"Support, Durable, Nuker",975,479,49.13,6426,3109,48.38,14641,7319,49.99,17258,8731,50.59,11695,5916,50.59,5746,2993,52.09,2870,1469,51.18,1333,656,49.21 +71,Oracle,int,"Support, Nuker, Disabler, Escape",796,384,48.24,4857,2417,49.76,13141,6645,50.57,18944,9853,52.01,15221,7964,52.32,8356,4458,53.35,4475,2380,53.18,1905,1018,53.44 +72,Outworld Destroyer,int,"Carry, Nuker, Disabler",2226,1118,50.22,13388,6864,51.27,33284,17362,52.16,43991,23377,53.14,32021,16994,53.07,16655,8724,52.38,8123,4218,51.93,3176,1649,51.92 +73,Pangolier,all,"Carry, Nuker, Disabler, Durable, Escape, Initiator",1156,534,46.19,7189,3209,44.64,17802,7937,44.58,25785,11677,45.29,21727,10144,46.69,13064,6351,48.61,7567,3737,49.39,5275,2734,51.83 +74,Phantom Assassin,agi,"Carry, Escape",8553,4426,51.75,48549,25553,52.63,104756,54881,52.39,119332,62511,52.38,79140,41143,51.99,37399,19325,51.67,17774,9077,51.07,7819,3856,49.32 +75,Phantom Lancer,agi,"Carry, Escape, Pusher, Nuker",3641,1960,53.83,19550,10374,53.06,38576,20633,53.49,41505,22310,53.75,26401,14268,54.04,12437,6590,52.99,5708,2985,52.3,2383,1243,52.16 +76,Phoenix,all,"Support, Nuker, Initiator, Escape, Disabler",743,315,42.4,5231,2471,47.24,13950,6633,47.55,18350,8864,48.31,13972,6715,48.06,7787,3761,48.3,4322,2132,49.33,2610,1325,50.77 +77,Primal Beast,str,"Initiator, Durable, Disabler",1455,701,48.18,9333,4448,47.66,22800,11058,48.5,30084,14643,48.67,24307,11993,49.34,13970,6991,50.04,7742,3890,50.25,4625,2407,52.04 +78,Puck,int,"Initiator, Disabler, Escape, Nuker",871,399,45.81,5773,2628,45.52,16596,7578,45.66,24480,11315,46.22,20070,9497,47.32,11023,5298,48.06,5656,2714,47.98,2555,1200,46.97 +79,Pudge,str,"Disabler, Initiator, Durable, Nuker",7677,3796,49.45,50891,24776,48.68,114784,56289,49.04,129604,63097,48.68,85800,41542,48.42,41730,20239,48.5,19823,9530,48.08,7112,3431,48.24 +80,Pugna,int,"Nuker, Pusher",2075,944,45.49,9998,4695,46.96,18962,8958,47.24,20240,9965,49.23,12807,6199,48.4,5825,2855,49.01,2758,1387,50.29,1195,592,49.54 +81,Queen of Pain,int,"Carry, Nuker, Escape",2287,1100,48.1,15119,7354,48.64,37137,18118,48.79,47706,23657,49.59,35500,18018,50.75,18405,9289,50.47,9243,4689,50.73,4227,2113,49.99 +82,Razor,agi,"Carry, Durable, Nuker, Pusher",2470,1231,49.84,12000,5964,49.7,24666,12142,49.23,30334,14844,48.94,21832,10558,48.36,11917,5679,47.65,6092,2912,47.8,3144,1551,49.33 +83,Riki,agi,"Carry, Escape, Disabler",3684,1929,52.36,19022,9891,52.0,35638,18582,52.14,33908,17415,51.36,20194,10312,51.06,8726,4377,50.16,3735,1855,49.67,1160,559,48.19 +84,Rubick,int,"Support, Disabler, Nuker",3090,1404,45.44,21639,9303,42.99,57417,24590,42.83,74874,32603,43.54,55186,24219,43.89,28206,12568,44.56,13732,6106,44.47,5764,2642,45.84 +85,Sand King,all,"Initiator, Disabler, Support, Nuker, Escape",2633,1513,57.46,13097,7323,55.91,25271,13807,54.64,26724,14323,53.6,17384,9144,52.6,7907,4104,51.9,3394,1719,50.65,1211,611,50.45 +86,Shadow Demon,int,"Support, Disabler, Initiator, Nuker",547,236,43.14,3252,1426,43.85,7920,3524,44.49,9752,4551,46.67,7404,3467,46.83,3956,1876,47.42,2076,1004,48.36,1054,497,47.15 +87,Shadow Fiend,agi,"Carry, Nuker",5051,2544,50.37,27255,14064,51.6,58589,29830,50.91,65429,33097,50.58,41810,21189,50.68,18766,9401,50.1,8232,4000,48.59,3016,1430,47.41 +88,Shadow Shaman,int,"Support, Pusher, Disabler, Nuker, Initiator",5323,2795,52.51,29733,15606,52.49,58894,31236,53.04,58765,30895,52.57,34475,18242,52.91,15166,7986,52.66,6377,3323,52.11,2413,1253,51.93 +89,Silencer,int,"Carry, Support, Disabler, Initiator, Nuker",4229,2324,54.95,27878,14960,53.66,61698,33081,53.62,65256,34458,52.8,38589,19853,51.45,16889,8653,51.23,6836,3416,49.97,2236,1105,49.42 +90,Skywrath Mage,int,"Support, Nuker, Disabler",4000,2030,50.75,22783,11675,51.24,46512,23624,50.79,51329,25706,50.08,34167,17364,50.82,16693,8415,50.41,8496,4208,49.53,4389,2069,47.14 +91,Slardar,str,"Carry, Durable, Initiator, Disabler, Escape",3935,2129,54.1,21523,11602,53.91,43947,23701,53.93,47721,25633,53.71,29887,16132,53.98,14233,7722,54.25,6530,3467,53.09,2322,1205,51.89 +92,Slark,agi,"Carry, Escape, Disabler, Nuker",4815,2521,52.36,29413,14762,50.19,64004,31771,49.64,70173,34411,49.04,44780,21926,48.96,20864,10270,49.22,9969,4962,49.77,4565,2394,52.44 +93,Snapfire,all,"Support, Nuker, Disabler, Escape",1524,682,44.75,10646,4576,42.98,27103,12120,44.72,34711,15412,44.4,24351,10786,44.29,11723,5131,43.77,5227,2294,43.89,1987,868,43.68 +94,Sniper,agi,"Carry, Nuker",8022,4079,50.85,44508,22727,51.06,88690,45223,50.99,87190,44086,50.56,47411,23648,49.88,18092,8924,49.33,6130,3040,49.59,1370,662,48.32 +95,Spectre,agi,"Carry, Durable, Escape",3454,2008,58.14,22097,12356,55.92,49157,26961,54.85,55914,30100,53.83,36321,19338,53.24,16946,8960,52.87,7921,4163,52.56,2568,1370,53.35 +96,Spirit Breaker,str,"Carry, Initiator, Disabler, Durable, Escape",4788,2423,50.61,26662,13530,50.75,56535,28908,51.13,63991,32249,50.4,42512,21357,50.24,20119,9926,49.34,9499,4814,50.68,3761,1884,50.09 +97,Storm Spirit,int,"Carry, Escape, Nuker, Initiator, Disabler",2202,1001,45.46,11656,5197,44.59,25644,11806,46.04,30968,14210,45.89,21680,10197,47.03,10810,5025,46.48,5278,2382,45.13,2363,1122,47.48 +98,Sven,str,"Carry, Disabler, Initiator, Durable, Nuker",3552,1761,49.58,19792,9744,49.23,41296,20478,49.59,48709,24228,49.74,35460,17828,50.28,19795,10065,50.85,11014,5655,51.34,6701,3387,50.54 +99,Techies,all,"Nuker, Disabler",2356,1131,48.01,13105,6245,47.65,27293,12893,47.24,29180,13507,46.29,18216,8407,46.15,8266,3771,45.62,3459,1644,47.53,1319,591,44.81 +100,Templar Assassin,agi,"Carry, Escape",2142,955,44.58,10932,4758,43.52,21211,9445,44.53,23928,10909,45.59,17399,8242,47.37,9567,4656,48.67,5525,2708,49.01,3524,1775,50.37 +101,Terrorblade,agi,"Carry, Pusher, Nuker",1115,484,43.41,5686,2430,42.74,10856,4638,42.72,11518,5041,43.77,8059,3540,43.93,4192,1827,43.58,2419,1082,44.73,1621,700,43.18 +102,Tidehunter,str,"Initiator, Durable, Disabler, Nuker, Carry",1835,855,46.59,11159,5369,48.11,26222,12699,48.43,30735,14879,48.41,20523,9727,47.4,9731,4740,48.71,4426,2079,46.97,1998,936,46.85 +103,Timbersaw,all,"Nuker, Durable, Escape",1050,448,42.67,5854,2584,44.14,12301,5391,43.83,14295,6097,42.65,9697,4217,43.49,4992,2163,43.33,2419,1021,42.21,1139,471,41.35 +104,Tinker,int,"Carry, Nuker, Pusher",2106,944,44.82,11058,5200,47.02,24263,11826,48.74,27531,13614,49.45,19017,9732,51.18,9416,4875,51.77,4700,2466,52.47,1951,1036,53.1 +105,Tiny,str,"Carry, Nuker, Pusher, Initiator, Durable, Disabler",1434,654,45.61,7742,3452,44.59,15936,6950,43.61,17139,7468,43.57,11269,4991,44.29,5485,2491,45.41,2599,1216,46.79,1058,519,49.05 +106,Treant Protector,str,"Support, Initiator, Durable, Disabler, Escape",1646,899,54.62,11430,5881,51.45,28752,15124,52.6,36093,19344,53.59,28762,15532,54.0,16751,9227,55.08,9870,5468,55.4,6801,3855,56.68 +107,Troll Warlord,agi,"Carry, Pusher, Disabler, Durable",3176,1720,54.16,14007,7445,53.15,24729,13022,52.66,25424,13228,52.03,17362,9030,52.01,9427,4913,52.12,4767,2499,52.42,2341,1242,53.05 +108,Tusk,str,"Initiator, Disabler, Nuker",1263,565,44.73,8338,3777,45.3,19642,8869,45.15,25308,11520,45.52,18927,8853,46.77,10100,4820,47.72,5220,2502,47.93,2350,1157,49.23 +109,Underlord,str,"Support, Nuker, Disabler, Durable, Escape",797,405,50.82,4583,2341,51.08,10067,5057,50.23,11650,5786,49.67,7224,3561,49.29,3310,1591,48.07,1368,673,49.2,395,190,48.1 +110,Undying,str,"Support, Durable, Disabler, Nuker",3170,1620,51.1,19403,10116,52.14,40582,21110,52.02,40850,21182,51.85,23985,12454,51.92,10395,5389,51.84,4541,2336,51.44,2064,1012,49.03 +111,Ursa,agi,"Carry, Durable, Disabler",2801,1273,45.45,15132,7038,46.51,33269,15478,46.52,40822,19264,47.19,29348,14011,47.74,15262,7375,48.32,7507,3622,48.25,3004,1473,49.03 +112,Vengeful Spirit,all,"Support, Initiator, Disabler, Nuker, Escape",2186,1108,50.69,15817,8285,52.38,41843,21809,52.12,57524,30476,52.98,45512,24120,53.0,25581,13382,52.31,13758,7121,51.76,8276,4303,51.99 +113,Venomancer,all,"Support, Nuker, Initiator, Pusher, Disabler",2309,1187,51.41,14669,7463,50.88,34787,18020,51.8,41797,21690,51.89,28706,15085,52.55,13974,7338,52.51,6538,3495,53.46,2794,1459,52.22 +114,Viper,agi,"Carry, Durable, Initiator, Disabler",4100,2057,50.17,18991,9510,50.08,33517,16923,50.49,32728,16677,50.96,18537,9427,50.86,7851,3928,50.03,3260,1652,50.67,1176,610,51.87 +115,Visage,all,"Support, Nuker, Durable, Disabler, Pusher",331,171,51.66,1638,813,49.63,3240,1577,48.67,3840,1986,51.72,3108,1609,51.77,1995,1055,52.88,1309,702,53.63,858,457,53.26 +116,Void Spirit,all,"Carry, Escape, Nuker, Disabler",1565,727,46.45,8672,4096,47.23,20010,9694,48.45,25213,12376,49.09,18817,9231,49.06,10026,4920,49.07,4788,2319,48.43,2006,964,48.06 +117,Warlock,int,"Support, Initiator, Disabler",2547,1369,53.75,18931,10331,54.57,49795,26999,54.22,66697,36220,54.31,48401,25668,53.03,24999,12942,51.77,12575,6356,50.54,6183,2934,47.45 +118,Weaver,agi,"Carry, Escape",2818,1389,49.29,13873,6770,48.8,23493,11571,49.25,21545,10694,49.64,12911,6427,49.78,5809,2928,50.4,2960,1455,49.16,1303,719,55.18 +119,Windranger,all,"Carry, Support, Disabler, Escape, Nuker",3861,1814,46.98,19934,9223,46.27,40644,18807,46.27,44476,20652,46.43,28952,13508,46.66,13418,6297,46.93,5898,2782,47.17,2374,1142,48.1 +120,Winter Wyvern,all,"Support, Disabler, Nuker",821,371,45.19,5168,2424,46.9,10544,5014,47.55,11184,5308,47.46,7426,3512,47.29,3730,1854,49.71,1862,934,50.16,944,464,49.15 +121,Witch Doctor,int,"Support, Nuker, Disabler",7504,4173,55.61,45501,25616,56.3,99664,54963,55.15,111382,60421,54.25,71830,37860,52.71,33164,17334,52.27,14610,7442,50.94,4196,2076,49.48 +122,Wraith King,str,"Carry, Support, Durable, Disabler, Initiator",4175,2266,54.28,26362,14516,55.06,58733,32403,55.17,66283,36503,55.07,42360,23083,54.49,19084,10251,53.72,8334,4315,51.78,2707,1376,50.83 +123,Zeus,int,"Nuker, Carry",4132,2106,50.97,23721,12487,52.64,51568,27475,53.28,58333,31078,53.28,37821,20047,53.0,17901,9504,53.09,8539,4459,52.22,3400,1791,52.68 diff --git a/belyaeva_ekaterina_lab_6/README.md b/belyaeva_ekaterina_lab_6/README.md new file mode 100644 index 0000000..cbde53c --- /dev/null +++ b/belyaeva_ekaterina_lab_6/README.md @@ -0,0 +1,92 @@ +## Задание + +Использовать нейронную сеть MLPClassifier для данных из таблицы 1 по +варианту, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо она подходит для решения сформулированной вами задачи + +## Как запустить лабораторную +Запустить файл main.py +## Используемые технологии +Библиотеки pandas, scikit-learn, их компоненты +## Описание лабораторной (программы) +Данный код берет данные из датасета о персонажах Dota 2, где описаны атрибуты персонажей, их роли, название, и как часто их пикают и какой у них винрейт на каждом звании в Доте, от реркута до титана. + +В моем случае была поставлена задача понять, можно ли определить позицию персонажа (всего в игре есть 5 позиций - +carry, mid, offlane, support, full support), по его главному атрибуту и по тому, какие роли он выполняет в игре. Учитывая +то, что Dota 2 имеет 124 персонажа, все они очень разные, поэтому была вероятность, что модель не установит зависимость и +не будет работать в принципе. Именно поэтому я посчитала данную задачу довольно интересной. В моем датасете присутствует информация о главном атрибуте персонажа и его ролях, но нет +информации о том, на каких позициях он играется. Поэтому для выяснения этого списка я обратилась к внешним ресурсам +и занесла информацию об этом в программу вручную. Это можно увидеть в коде в месте, где определяются роли. + +![positions.png](positions.png) + +Программа берет столбцы Name, Roles, PrimaryAttribute из датасета. Так как в столбце Roles есть 9 значений, которые прописаны +в разном количестве и разные у каждого персонажа, нужно было создать 9 дополнительных столбцов, где для каждого персонажа +выставлялось 1, если такая роль присутствует в его описании и 0, если ее нет. + +Пример: +data['IsDurable'] = data['Roles'].apply(lambda x: 1 if 'Durable' in x else 0) + +Далее столбец Roles был удален. + +Так как PrimaryAttribute указан в строковом значении, он так же был переведен в числовое значение. + +После этого нужно было заполнить столбцы posCarry, posMid, posOfflane, posSupport, posFullSupport. Если персонаж есть в списке +персонажей с этой позицией, там проставлялась 1, 0 - если нет. + +В итоге получился датасет, где есть имя персонажа, его главный атрибут в виде числа, его роли (1 - если есть, 0 - если нет) +и то же самое с позициями. + +Далее датафрейм делится на признаки (все столбцы, кроме столбцов с позициями) и метки (столбцы с позициями). Метки переводятся в числовой формат с помощью LabelEncoder(), иначе программа не может с ними работать. +Данные делятся на обучающую и тестовую выборку. + +Модель создается таким образом потому, что если ставить меньшее число итераций или скрытых слоев, то она не успевала обучаться. +model = MLPClassifier(hidden_layer_sizes=(128, 128, 128), activation='relu', max_iter=1000, random_state=42) + +Затем происходит предсказание позиций для тестовой выборки и оценка работы модели с помощью accuracy_score и classification_report + +## Результат + +В результате получаем следующее: + +![accuracy.png](accuracy.png) + +Оценка модели имеет относительно низкое значение. Однако, как было сказано ранее, она могла не работать в принципе, поэтому +я считаю это достаточно неплохим результатом и поставленная цель была выполнена - было выяснено, что позиция персонажа +все-таки зависит от его атрибута и ролей, которые он выполняет по игре, хоть эта зависимость и не 100% явная. Если бы она +была явная, например, все персонажи с атрибутом "сила" - это позиция offlane, тогда работа модели была бы значительно лучше. + +Далее мы получаем classification report: + +![classificationReport.png](classificationReport.png) + +В данном отчете представлены 5 классов, то есть позиции (0, 1, 2, 3, 4). Для каждого класса представлены значения точности, +полноты и F1-оценки, вычисленные с использованием соответствующих метрик. Также показана поддержка класса, которая +представляет собой количество образцов, принадлежащих этому классу. + +Precision (точность) - это метрика, которая оценивает долю правильно классифицированных объектов из всех объектов, которые модель отнесла к данному классу. Она измеряет, насколько точно модель предсказывает положительные классы. + +Recall (полнота) - это метрика, которая оценивает долю правильно классифицированных объектов, отнесенных моделью к данному классу, относительно всех объектов, принадлежащих к данному классу. Она измеряет, насколько полно модель находит положительные классы. + +F1-мера (F1-score) - это гармоническое среднее между precision и recall. Она используется для объединения оценок точности и полноты в единую метрику. F1-мера принимает значение между 0 и 1, где 1 - это идеальное значение, означающее, что модель идеально находит и точно классифицирует объекты положительного класса + +micro avg - средневзвешенное значение точности, полноты и F1-оценки во всех классах, подсчитанное по общему количеству образцов. + +macro avg - среднее значение точности, полноты и F1-оценки по всем классам, без учета количества образцов. + +weighted avg - средневзвешенное значение точности, полноты и F1-оценки по всем классам, учитывая количество образцов. + +samples avg - средневзвешенное значение точности, полноты и F1-оценки по всем классам, учитывая количество образцов +класса (если образец может принадлежать нескольким классам). + +Из данного отчета можно сделать вывод о том, что по атрибутам и ролям в игре модель точно выявила персонажей для позиции +mid и offlane, но при этом, при работе с объектами, модель пропустила больше всего объектов, относящихся к этим классам, +и занесла их в другие классы, из-за чего снизилась precision других классов. Мы сами должны выбирать, что важнее - точность или полнота, +и в моем случае важнее точность, ведь изначально стоял вопрос о том, сможет ли модель определить, что к чему относится. Но низкие +значения полноты говорят о том, что низкое значение accuracy вполне оправдано, и хоть модель и может выявить, какие объекты к каким классам относятся, +делает она это не совсем "пОлно" и пропускает некоторые объекты. + +Что касается признаков micro avg, macro avg, weighted avg, samples avg - все они показывают неплохие результаты относительно +ожиданий по поводу работы модели. Я думаю, что для поставленной задачи значения этих показателей довольно высоки. + +Вывод: точность и показатели из отчета вышли достаточно хорошими относительно поставленной задачи, также был получен ответ на вопрос +зависит ли позиция персонажа от его атрибута и роли. Следовательно, с задачей разработанная модель справилась. diff --git a/belyaeva_ekaterina_lab_6/accuracy.png b/belyaeva_ekaterina_lab_6/accuracy.png new file mode 100644 index 0000000000000000000000000000000000000000..254e913b7f87816183f675823c7724457d267182 GIT binary patch literal 3224 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 z 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 KP$-sr?f-ALTH!nZ literal 0 HcmV?d00001 diff --git a/belyaeva_ekaterina_lab_6/main.py b/belyaeva_ekaterina_lab_6/main.py new file mode 100644 index 0000000..d9ff31c --- /dev/null +++ b/belyaeva_ekaterina_lab_6/main.py @@ -0,0 +1,76 @@ +import pandas as pd +from sklearn.neural_network import MLPClassifier +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import StandardScaler +from sklearn.preprocessing import LabelEncoder +from sklearn.metrics import accuracy_score, classification_report + +# Чтение данных из файла Current_Pub_Meta.csv +current_pub_meta = pd.read_csv('Current_Pub_Meta.csv') + +# Создаем пустой DataFrame для хранения данных +data = pd.DataFrame(columns=['Name', 'Roles', 'Primary Attribute', 'IsDurable', 'IsSupport', 'IsCarry', 'IsDisabler', + 'IsInitiator', 'IsNuker', 'IsEscaper', 'IsPusher', 'posCarry', 'posMid', + 'posOfflane', 'posSupport', 'posHardSupport']) + + +# Добавление новых столбцов из файла в датафрейм data +data['Name'] = current_pub_meta['Name'] +data['Roles'] = current_pub_meta['Roles'] +data['Primary Attribute'] = current_pub_meta['Primary Attribute'] +data['Primary Attribute'] = data['Primary Attribute'].map({'str': 0, 'all': 1, 'int': 2, 'agi': 3}) + +data['IsDurable'] = data['Roles'].apply(lambda x: 1 if 'Durable' in x else 0) +data['IsCarry'] = data['Roles'].apply(lambda x: 1 if 'Carry' in x else 0) +data['IsSupport'] = data['Roles'].apply(lambda x: 1 if 'Support' in x else 0) +data['IsDisabler'] = data['Roles'].apply(lambda x: 1 if 'Disabler' in x else 0) +data['IsInitiator'] = data['Roles'].apply(lambda x: 1 if 'Initiator' in x else 0) +data['IsNuker'] = data['Roles'].apply(lambda x: 1 if 'Nuker' in x else 0) +data['IsEscaper'] = data['Roles'].apply(lambda x: 1 if 'Escaper' in x else 0) +data['IsPusher'] = data['Roles'].apply(lambda x: 1 if 'Pusher' in x else 0) + +#Удаление столбца Roles +data.drop('Roles', axis=1, inplace=True) + +# Создаем список персонажей на каждую позицию +roles = { + 'posHardSupport': ['Undying', 'Pudge', 'Marci', 'Grimstroke', 'Elder Titan', 'Warlock', 'Dazzle', 'Witch Doctor', 'Vengeful Spirit', 'Ancient Apparition', 'Disruptor', 'Keeper of the Light', 'Rubick', 'Jakiro', 'Oracle', 'Visage', 'Silencer', 'Shadow Demon', 'Chen', 'Winter Wyvern', 'Bane', 'Treant Protector', 'Io', 'Enchantress', 'Naga Siren'], + 'posSupport': ['Venomancer', 'Tusk', 'Tiny', 'Spirit Breaker', 'Techies', 'Snapfire', 'Pudge', 'Muerta', 'Marci', 'Hoodwink', 'Grimstroke', 'Earth Spirit', 'Bounty Hunter', 'Crystal Maiden', 'Lion', 'Shadow Shaman', 'Lich', 'Ogre Magi', 'Warlock', 'Dazzle', 'Witch Doctor', 'Vengeful Spirit', 'Ancient Apparition', 'Disruptor', 'Keeper of the Light', 'Rubick', 'Jakiro', 'Oracle', 'Visage', 'Silencer', 'Shadow Demon', 'Chen', 'Winter Wyvern', 'Bane', 'Treant Protector', 'Io', 'Enchantress', 'Naga Siren', 'Earthshaker', 'Skywrath Mage', 'Leshrac', 'Shadow Fiend', 'Nyx Assassin', 'Pugna', 'Lina', 'Zeus', "Nature's Prophet", 'Dark Willow'], + 'posOfflane': ['Wraith King', 'Spirit Breaker', 'Snapfire', 'Pudge', 'Primal Beast', 'Marci', 'Dragon Knight', 'Tidehunter', 'Centaur Warrunner', 'Dark Seer', 'Beastmaster', 'Mars', 'Brewmaster', 'Timbersaw', 'Bristleback', 'Abaddon', 'Axe', 'Enigma', 'Sand King', 'Clockwerk', 'Doom', 'Underlord', 'Omniknight', 'Legion Commander', "Nature's Prophet", 'Slardar', 'Faceless Void', 'Earthshaker', 'Pangolier', 'Pugna', 'Mars', 'Batrider', 'Windranger', 'Mirana', 'Beastmaster', 'Brewmaster', 'Phoenix', 'Beastmaster', 'Dark Seer', 'Lone Druid', 'Timbersaw', 'Broodmother', "Nature's Prophet", 'Magnus', 'Necrophos', 'Bloodseeker', 'Lycan'], + 'posMid': ['Void Spirit', 'Pudge', 'Primal Beast', 'Earth Spirit', 'Dragon Knight', 'Arc Warden', 'Invoker', 'Storm Spirit', 'Shadow Fiend', 'Templar Assassin', 'Queen of Pain', 'Puck', 'Zeus', 'Tinker', 'Lina', 'Ember Spirit', 'Outworld Destroyer', 'Morphling', 'Leshrac', 'Sniper', 'Mirana', 'Viper', 'Death Prophet', 'Razor', 'Pugna', 'Skywrath Mage', "Nature's Prophet", 'Windranger', 'Batrider', 'Lina', 'Shadow Fiend', 'Templar Assassin', 'Ember Spirit', 'Huskar', 'Kunkka', 'Puck', 'Queen of Pain', 'Invoker', 'Storm Spirit', 'Outworld Devourer', 'Death Prophet', 'Razor', 'Lina', 'Sniper', 'Medusa', 'Leshrac', 'Viper'], + 'posCarry': ['Pudge', 'Muerta', 'Monkey King', 'Drow Ranger', 'Alchemist', 'Anti-Mage', 'Spectre', 'Juggernaut', 'Phantom Assassin', 'Faceless Void', 'Phantom Lancer', 'Lifestealer', 'Slark', 'Terrorblade', 'Medusa', 'Luna', 'Shadow Fiend', 'Morphling', 'Templar Assassin', 'Ember Spirit', 'Naga Siren', 'Troll Warlord', 'Gyrocopter', 'Lone Druid', 'Ursa', 'Riki', 'Sven', 'Phantom Lancer', 'Chaos Knight', 'Night Stalker', 'Wraith King', 'Meepo', 'Troll Warlord', 'Juggernaut', 'Lifestealer', 'Templar Assassin', 'Ursa', 'Clinkz', 'Weaver', 'Riki', 'Spectre', 'Phantom Assassin', 'Naga Siren', 'Luna', 'Gyrocopter', 'Meepo', 'Lone Druid', 'Slark', 'Morphling', 'Terrorblade', 'Medusa', 'Faceless Void'] +} + +# Перебираем каждого героя и добавляем значения в соответствующие столбцы +for index, row in data.iterrows(): + for role, characters in roles.items(): + data.loc[index, role] = int(row['Name'] in characters) + +pd.set_option('display.max_columns', None) +pd.set_option('display.max_rows', None) +print(data) + +# Разделение датафрейма на признаки и метки +X = data[['Primary Attribute', 'IsDurable', 'IsSupport', 'IsCarry', 'IsDisabler', 'IsInitiator', 'IsNuker', 'IsEscaper', 'IsPusher']] +y = data[['posCarry', 'posMid', 'posOfflane', 'posSupport', 'posHardSupport']] + +# Преобразование меток в числовой формат +label_encoder = LabelEncoder() +y = y.apply(label_encoder.fit_transform) + +# Разделение выборки на обучающую и тестовую +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42) + +# Создание и обучение модели +model = MLPClassifier(hidden_layer_sizes=(128, 128, 128), activation='relu', max_iter=1000, random_state=42) +model.fit(X_train, y_train) + +# Предсказание позиций для тестовой выборки +y_pred = model.predict(X_test) + +# Оценка точности модели +accuracy = accuracy_score(y_test, y_pred) +class_report = classification_report(y_test, y_pred) +print("Accuracy:", accuracy) +print('Classification Report:') +print(class_report) diff --git a/belyaeva_ekaterina_lab_6/positions.png b/belyaeva_ekaterina_lab_6/positions.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8c6c2274235c3588a131d23682ed2c5e8a6a90 GIT binary patch literal 36688 zcmce;Wl)@J*DeSIf=eJkfZ#5TySq!U;1HY+8Z@}OyK8WFmjrid+=IKjPm{g(yWjcd z)YSPgXR7F`?uSSEUh7(Rt#x%6J;pl~2#nH2jc|K401np&!r>p}hT|LDN2hN|3^mb6)Be78{O> zmJNL}EiIM}*hq6`E-T5p`5YVGx+f4ga`_DO1 zc5nZ^U=-(nTo6SUNJDUKy<+c#{f!W@IXQl$r`;gEmh8_X`<=ak@IFRd?{y|PTuG}5 zlD{>TmVdEvcXf7bOzQpX2~kMvxj=Za#LF=&y{d-EDyqQZk9u?3gk^Go_3Yi&_3bLD zmuZ{L?ZNx2o-aSS=d_bzHOb+8sFbF7ceS@s5!2@)Z@p|Kzi`5!gcWL&0T_(ID3O{#3)p2R_NctN%X=fAg`+* z-=5A6nJYu*ZW!?3W9HFLlI9lLVhz_@jwpqBpgrGM-JC&zl{Bel)=n1Y`$w|cpCU37 z;_9_Vuv&VsiSK+Dzf!(%Xyv;NEz%10T2$5bp<}|S48YYi;V18nVUn@jx8IdS156X2 z3qR<5TG4kHE)STsDlfHsYueU(O`~J`9IL#*Z=?rDr=vAbkEpt^g!i02Y@|M}DGuMNL!VwsJEje< zD?GWjl4$i^(nECJ{>)x6zkqP}?A2RdhhBCSji}DkU+fk7fvi6Xg)KyiokFZw^_H>j zWk*~$py8{d1*a32r*K_qVUV_J0Nh(Oo_L>fbK=$(ktf&aK9L zK!#3dYF#_j!b(pAY3_(Vba@APm54M2uS`MIHCG_d{X!=9e2csx_R`eR@$R$HMM^;h z^8{f`g6Ir;CoM;TOGuNoG*Y%CBX2`St%terM03mv7wEGQVBNvB)RAEi^_{I*v0COw ztWtXB$1L@HENiK*P|?ZvI>vA-n#+>(Z-9t7h*IiOn2vLjR5jeQ8c=LV*J@GUAnkui zM0wnt?+;JKP5vqxN-J0MRqC;&-pMrZIdriJqck5#pMBR1&tn$mypz)`ecm~*mtr(?=#egO30te)anY$~j=6;jJ{L@_H_nMrb{b8{%I$2ZjI zsh*u2>-zwD>a0mxvYo;u=7l0+UI`)TS@`c{9GZ&B(EzzomuGH5)o}}Ay{!<@!0Ye)dMYu`JAr|G4XE_P+*_=kQ zDEQ}^rU~pErjKf|gMte_yChttWR4*AIw7ccYS^xOxF}}Y5IWr=ZIU)wF{@PSbNtT! zyKz97IH}n=A@`a3s+?#4_>qI_8DV`%{1!O;jyGr}u-uLgZ6cDhjYNWnuplha0M>5G z-31ECrH;dLh3^o}E}W9g>VyS1xs@$ub1hA6j4Mf9qb}~L4=zS5$|@ zWOI{(N_Cj%u$!z+T?aMzm~X9%fl~40lA9Zc=(%pr_I14^;)+EnhGo zjhHB9WEvMqABELf+Ogm@2kV4k-+_!35T^Gv=9e1_UewNnbChyrJ#EiR_J&2 zCfw?(m}LFW^Rz7^MS5s3ukxCADIOskZ*??+-@|n+1zgE-vUd0GF40Wd8rdzIJB`p; zN+e*>T@xkxksadj{{u9LBZ(S75E3v+;rDq|$+6Y(yT(B#bUSO!lv_M=?YR+$xw`Mh zc8k$)ErF7A_)MQec`E!$%LW%(oAG;Pitqn|T70AlA21H}HP-fgWC3K;xb*cyvA8?L z>zp@z=vjlemgv0Lz-p=D1GcG1G#^T3YZj<&C9Y|)PcWArIG!^h+#O8kMU{2v-ZHxT z?`l@t2Lo_UOD$p`xk|v35~Kj zHE1gBgxGA(xZrsB2##I`)3?3SW;&&@U{NkK|L&B|Hu^kAJ3}o&kOg*n#9CujAoQPe zhL!_Y662;`;S+}kbEaxBB_!Vp3OJq%m2w1ZErTC^lsmxzKPFP3JwVpyQH$XI#xT%J zK&@`THQ_;+M^66HJ*!hSOK~09(`lto+lSI(Y^gf4J$=Net2F%@WflmF+*l8!ez<{? zsVKVbMxfM1oLLn%dWKo_vo<`~t-*LWobFOK`S;X`L@>fDf0i(hY>%{bP-j1d^_NPV zLm&-Sv|=Ki?hLdi*N0rp>^^4GFeo_(eMyc0u_4PbSv`EgDf=G-ub2u>v6|SH)#%IQ@W&e=nxo2g)Pe9{4#DfYN2+FGk7>cw zNVXc>;vm{`oRcDI|Jmzy#{9dgzX+FSmm4Bs?t-&C!4@ zdnM6;@0S{9&;l8W?hLUsWF$;~|*n zu>1pR+V6SzpfqAfxbr}W#i(lu8p8idFr+k<%#kc%M;@Or9P_lL_kPXXqS~c2%~D^h zo_hO~_cD4a-*St^$C{#3qVzZ#EL~nAjP7S&$vIZ5tfuU*O{RA8qpO$R2Es_Rha}F$ ztbH=Fb9JnZ@Jv!o)HBs58AxqB=RV36P%}xnd;ZkCFSIKDeSY=ViC1FyV?=C%4W+1< zD5dCfkVQGU0W)w{P(~zKJ^81F4bX0K1~;;%hZrsw;6lI%eF{qyJEk(G zo4n0~BnJ$7P`!tP;0DyLPl+jT;Xp%|d;{cWJrLZBvR9K3u6XagS9fHrK!_)fDDt(r z(0p6mh;KYE67$Vp(G8sVqCHGlAd-k=DM&_5{{F%@yl;ccnNh|BXgrFK~%jg}s!hUV^$>F>F6kDoUl2MK<- zep?%?!(?x4B|z|BO3222nxHV*Gh`IzZ4=WTSURWwLHS;L#Xv9h$mwQgAJ1}qJS68r zX0i9K!MuWD_)fxg-@oe>n9&K99qX(7ql1*yRcJ|gC)P3TTRNn1!GS2Vhh=Bxd9~V< zY>OfB6XX7@rAE|vXJs{s-&21wI0S@+0`l{~DMHEhb!RVA-{V63RjOJ=VcXV|sA1rh z#&YkVcmhc(-ja|)4oBQU$}*W#3VyJF8pOwz{1rB-p++xo+-n2Jy)}OC6ZH#DDF}9` z<*M3Gr%#G=BOY`Xhfee{5jt(nyoM~fmsoaLX>3PPGv|K`lQcf;(|^nIv39fbool_4 zM=Fl0C9;)Os4yCtc@**$8kuUQV0<;KTgC7trIomjrqQ3=f`}4w5*+Zkn z+8v~PaJ~H3hcp)O?f(8?JNiZQpL6=TeE)yAU;syG;(lQbX!6bd$fZ)DA{I;VFY+Nu z1~H%96f%DH7w^MeLzjZ*^MR)TLHm{Jzu!>ei>58s`=)jZt^t7ze^>Jm2i9$}zgH5| z%~e32x03jJ8HOA0~TmkR$8k)0-q(e8}(d`iMD1>wuL+dbpo@ACrxmKt{AMgjSIogTNFy^Xbo z(f#Lnh7~bS?#HVJ&tv|@`UbLPj4U(v8q164l8%>+hL@YglMeh=mulYm6owl&e-};R z2^fd%>6X=})sC0z6Ftv6uo4K$at=K1!Jgn&ec>-~H>Eb3}ypq%^T;_@$_?-YU)&LiF& z0)!s-8#^bND;-V`q1LNUmzj})o*sB+L(xVQG+@$YXXZio`TOnO4IwIl=QnHcIV;b% z0)(h9w}Z1Wg@HNdItrdI-){w8=I-vV%Z|(&js;epz~AHL@hYND9h88eGBm~AQ9+lS zTA%QK|DEua_De=CIo^LT7KB8pAoG0XlGj0mb)#%wrT@?u8TjISNFSO=ZNKz#HQ7f< zpfPyoGI(_3aeH|-OPL`2EvO1dlKIVtc2lyK zJ9_o_F3;FS?uY3cSJzCO3*&tiAKZua**U3p5`Kc`jzvT2DU6En(IEy)w$=ORNCD5K zkDaFfFkPYnu?6HOZ>}VMaT_;YY^)XdN-8{V{JdU86?i(judK{yKX`fketWR(#o4VU zBlFhkY2$SAcp7Cb5iqohc#u74(!uq3dGLdpUV_^xrQ$Ju%=Fpq#lp3@LfXX_?jH(` z8y`5(Apgr9wb*!VZ$+;IxzCAKaT~S+-(vy34&eZZoPc$8$nR>ySIx_@L4aq*z|{dOGbmBfeeZ1g@a*)^@%->$x+Xt> zO!5y?w_964PEvTr;F$=P`p(6-vx+HDj5?n!UP;UWHOuhI^YztD$MeP5_cZ|z56>T&ZVlmGdAN|R2x z0KMR*|6#QpFV|D}Z!~VkO``Xh%6QE0V!ud(7sRJ^?!orlA3~?%p&{mAsiEk7I+Red zI#i!0>_X_glhu3tBn+ydJpu{*q3ys=wjBfpuS;o5P@0hk@pV4$=!6b`Q$3W@&dul$ zU`^cV=@_s^^tc%Fe7ueS!K#ZoU4Q+2Iyn}ZkKPBVY(L+f*x||h2rQFWn!)*zd7nVW zKIVq`f4})@8~Ndb`1%Rp&ZJ(|g)Y9_-2G-u!Sk`!^X1yoV>PaU&EwL>iu7WivOOc! zDTDvz`E+Bg!>J+?i#!HR$Mtliqd#%A`DQZG^D%Iha3iy!QbG65GPHe`JNJQw|=06<773wSn7NTz(hb0DF&G>34#XI#zv_ZdyKufFt? zy_MAL@O|u)FX7AM(P>%5zqBydzi);9AB68e`u^W$i2u)D5Opas5k3=tWUd9@T2?Es ziS(BZuKffv%pg=TRGo*l$;_8~y@<#_1-ki|giqwiZBD$gPDs-|8q6e{%y!8~cg&Ia zP3l=?x&&YnJnFJ5kDSnR?sz1@g3NpLYv$7d`Y$8usAo(edaT6x42Fxj=unu2{Vig| zNpzY52Uc8@9E>Zj9h`ScY){u_bDm{lx5iI(Xc*~xgjRidye=J{d57 z=rH1K34Km??$fdB6O@ww+&%JMhv$@gxRszx1%EVo{w*UwaSwI+tBqJ!##SzlT3zc; zQBzl~9)D%AuXr|v3n-JJSvUS=cb6mTV*EgfJV3FB*RZjbA{irW=*ler(Do-C%Z%C# z6|P`^ zsL4nj8hW%)<2u3==hfjy#?Gl18yRW}bA+Q^wKmLT1Ut|~179Ol{P%*^?#5LYxm1&` zgrPc_FwQU43DTafYY@%3EH%hxnmJ3EVRAB~=$Lo8`0@3PwcRgu?q7g$#`C-`nP<^O zmsZ7XirNarY4!9fz44AJ3kH)hPdJOS`Zor0rMcy{zzFBx)frBjP(rU_$ODT3aMq|n z*uH_+VMU^*yIYXL!d2g7j3?!TW|k^Lv@f@*p&`7=WxQkD!k}Ga(yq21 z>;t*#vMCRo%S}>7!d%~ihZd_vJ*Kod4*_LWmCC?iZSI61)Ul4;$X;qF0#0JW``Ql! z!=7x4dRPom%9CvEBGvEh;*aU>?TR6EKw#)_0u&EX^T}(A-9Qo2T4%LJKQumZHuURf z66>w(^(V$D1W(TR4>rF3(?S#70g3J|$r>rIHe#>{|CZk33OOkUn*^ZvQEfpH7&>Up z6eG}9$M(6`dQuUF&3#OG_}ArpDRtjlFd+J=bIC)RC3$EpdnRKT9uUYqV`BDkzb!n& z3TqCN0^)xvPJnOnH58Z8`3La^)d6xL|KxD$-hef>gt&p{K7MM%+rWE;JnNzbu;Pt1 zl{hZhhYypA$+lzQ7|vbq!#$JJSM)C1({PYk_hL8B=fcnDObXh>R#$uuhJshBY$r@8 zrS;}N)XI6VoEX>4{hpdtCT$mYKUT!~qA9!=Li=4^b1LzlXhT46%$ z2({Bl%(}P~xO&;R5<@@2a~#IbUYRHbeHAzLmg0!P_qomMAiJ(jMz19!ErAt@GiNPX z@<-P85<;Z0kzr+kX8;m9f`}0uHO7HgKpI=$XqgB|>*vQMFb()>o z?|XbsIA>4~vC1l2HS+E1r?J5o->XY1IO|yla}Q|FrNFY5nnb@IN_*QiI-vwPfvqL0 zitRSCaGt%(`*fOh=Dk{jecpk{*->eaBW=uKRQ$*GF=b@(7XpIg+?J8Ki@P`-egmzK z>d6Yoffs@HRueB)D|d5DzY8%Jh`Tdj{4x7pO(jQD9q*!yL(xY7lgskD z!o=laeN}Mt2bW_A{oeQYCIpwWcRI&TLbK`5)t%=FfYr-mAH$XoZ3eU-``mDsV^REl zA;2>1m|8zL=@VP$;P5gI`1aN>c9h{j`2H8O0oXzYP8uBl`m#=oFhJ3s)|Uh9RVFd_ zJp8ph{%*!PW}2J#qHd_s1Xnw?mfzHRaPbYB&$G?; zIzbE9jt3*xM;t;|&OR$5XJGN5Lfil?>b)f2^Xz0ka?M)6;#IG{kt>y?%q9M|Z{>@J zg10CgJW)2LWIz-%5tn&b`e22*9t)oOVZ;+-%?V47Ky~d+P-eJtRX8+h=F>0y%&SRL ziakAVFK|BfoSTD~dUsSB-+z}fDFwA<*8i>$yXJxdf4LX*h4uIxH^CDbbQv5|Ve8{auQsQ5ou7RvvSIM_y)<;OLQEFfRKr@JZZ z%Dn3zv()3Hu#Utd9KM6Wn_-(3%JK}j!l~4i1fe&#TN^M8w=&MY*ZJKPTV4yj?OD6^ zWmT<&2#t_jOat_ozGcD`w@!OOy;8|1_Q%jEDcYBA;T%ttmO?mj4AJ|;B`LLuq*6; zvp{CGPu#hs36Byt__FwZ&S-Sez}}|+WDn>UEFmBQ9vH@ zBqfHetTS>ZgUiLnm$01lL`JVJY(d)aE$KFbW4pM!VmBniwA=jSo-o|aWh!eJxT=}u zly!TGXv?Fq!fT!(#@oww)6AjDto;E>UvI^zgzctQ6^mA? zstDX#COK37VE9Xe2EgEk8u`BGouT09oi%s`c&EA(Du7g?z;NimX?jVxK&;mw?a6mE zqa3@Z^!12|!Rs`^KLNB%1%%Fa2N#X+$_tpUn%dl>YHocfVZ5-f44P4Fk|PzZym47) zM^%TtLzsSK$sNnOBH;pL+tM}@0GMHGeA^^u3+UIE6y55(bpdjDQ^MjwFOdDPITdlA zI3l5|>k&$!H?<%RW)=Mh|Kt^l_RGIhD?Ll%^X>4g1GInbgPaNNYQo9z;?{&4~JR;?t>c9NhECICK(zrjPdGA7AZBq~5DW zzi6B9-BZA#2Sl%^#vyn3O<9H<7usycwEFulbAE6HsPqWbBQya^N(QyxV8ZYF*A*boKA7_>jqX% zl20|7{cvXj5O;!?@#y>8(SkFdmCHnf<{BVoD#Coy3sAd;6UmO~Pdso5oObOf@rPp} z`397%{F5KfhG46M`Z7Y~r!A0}73v-@jAdm+Q<>(DpeOu)b+0VxhYH}V{MN@@$vAFhUUF34FEd)uRO=_@$IK+F7m8V7ZgJAFadk+~+=(F> zD=a>${ZY=xoJ&O{@{YEmXKba_P~bXz1nmI6SHPBvfAI5X4a1|8MH_CXel(w0?`F|+ z2!t{sX1_Sd0S(tfw}ChvP?2o{Fj#VQotbg*H?RMVIBkPpBFv+xhRD-7>~9(XYSy!T zzxEksQ@^Y)-t5FBuli;CnN|hP{sGLx74bdPE))r&)v@d{2cmoE+H;!Cu@P=nZTISO z?ho5yp8E8SXcY7X+s~9AEnFUnf0z59k-Ltv`faS=r+u-|j!P&Uc-2lexS{i3s-Oor z@8KF$;B#sdc0QYuZsk0%W7{0(T4G>#zd&sM@t>&@P#RkPYB@(>vr!ZOWg@2)dZ-hf zmcQ2a`%6cJ9GT;=sy%Rr^qROz~eat^nv1jRwcFN?mbqn1gAY# z{FU4*$v7XWrFg^O7P?jEfhHUbZ}FXa!7U&KotO&xq2y4wpq6Oiy^twK0T6z2GHr@aQ8R|!lZsLVGwzUUG74WUdy%gsKB16^$MK71 zXHFf;IcD*lsbr?mf&b>-&K_P_4q`9%x8pQ-%^Z5dpmrtUWnT3D1)56qDC_8p3!3v` z=()=ME>U;mNVa;xsLDw!2lfLEMKUXA?_Mw#RgIuh3T!=O;qu8(Z8V<0BE)Nb`lO}G z#r?$v(_}@Coy^e)3KRpLvIQNss{ZzoT<4Ro_k>$wQ`~p z1h-NC5=Y;@3F?<7DnU?8?VU)Ov4UR=pDAwj#yTiQ@q#OlJUEl8)Yr}b>oX3>blin_ zsXLGMASGh63plif8ixY>>9UK-xvLXyb5oz#NsD5TWp@X|SC*r|WZ1SV3#h#VE0x10(5us=cBP=RtJpDnv66RKiukrt*?b%_k=k2-lZj<8X@&AErX(kyu;!W zs2~}W^)e7?Z2CpZ?ot2wrcM2$A_qXAEnCZp+(5!#^H#eRbjGSv_UgF|l zcl%-25}i{s75%PonCtM=qel*}T0g#S0B$|Z`VR0@Eq#TZnJvdws`(iPd%Fy`epiY% z>VTk$WG3NdBAIx!-iil9(q)#N{4x>FUVBR$|FfLD$V>M_?h`N3e-e%A)>IxY8fVHg zCaT@G^Y15pyUz`#Ht2~6D!Ld>B+7Q=FUG0`cRGjP)4Gd3LvSEeBbSqf3wMEMVaTt>%krezyD zDDi3&&Q2>AF4fVVu!{MRQZk@z)TUTnM={DaI*OGbI^lr~7UXM(5Lc$mpP3->$Ko}y zq`Ti=sbz%tg~57|lYuxOdTIMx4?*(lIZ~tBSFuD7gA>XpV7tzZOXwz0K#d407qGn& zd_)!GM|02fa}j?HJTUQv^B?*f`tO|M(ReYkaADIYdIkb@Jp%R@+u^j>%QANDT~%Ah zvR+-DD&Cu6Wx$IY&ScEqBF2XGhl2!Xv*nD=2Ucw#yA}t`bWdVoBsq639G;40UR<7y z`5XH})^E^wM1X8*E%DW;L2R8HN~98#jh*&ACzOr!FU8w2_5^p$1C?Uy9}4!Y&gGiZ zK--Iu%q341^B4VrGnN<(hNfbkD|tIz6h12kqyzLdL+a(J^Dg}~-x;l0@s~j`1OG7x zXG|dhVCO|QduOJ`3MluCR%7(Mjhv?PJUL^1MekPzp~5D{BEi>mth5(on;&S4;D#Yj z@7GLEkyy0i?6Sz!gu!&ellH{#bkzkpQDq1q!ut3K;)j)qYva|8U&m#+&e7=abvjP3 zC;PfQS5wh44U_1>URcca_@{j~HK74skNhl>fYY4at{z&!J6k$7GN|r2&Nn#1pqR_M zt{--1fGY57sp*yj`UC(uXD6NJjTF2h!>3$2=C(r!W>FR@7d1L?s|Q*=1y%Vq4FmJZ zy&R%W;!`}|Ug1>hO0H-LZ%tpi;~StPwMTSQG=y?Ey+?)9#kD+o-*H4=F#Y=$?YbkG zy__t>A+C2r(emX@G^(f`b#_dG*+Ov^x+g`CGoXPs-6hv9fW=^M1&8 z1nk}~oV+k9W(J87zZQ+f>~E6_G@tL7^T}80@_pJNH-0oFKSkZ}+%-gEN8*H`CIg=V z@qFTES~Pp0lo?vbhYPP8k)%7cOWsT-fP)$tdiTdqn!@ALb(bsWjVsXZC)?>a!VWs_U7G4vL;JQ3w)8BI&{ue`diD{#=LdU^;%<#w}3mq{^ywz9teO-DU zOOat|_gX8{*}FbUCEpGw4lns9W_=#2+Ez8=?dQmc!@WdU)`;g2XL z#TG5YE$=7&qEhn|rb_^d!vgLVO!K{YUx$|PUa6BOWw~dco^x8JNECkJ`;n%u1jv11 z8Ga*VdR!b5OXq9h_H?eDu7UP}uWMSa%Iio*a8fe6toI^0q1lkvfX)`;)#KKKD#P*Q z#{?%YzJhL?{wR~acs+xV4xxDk+1;wL%w0aQ%p$J8BQyb9@nI&hdj#gBCIcA|UTD_R z9^db2EMO=?cf#h^b_59WSB-50iuw?tiJlUF+ZdrRT6&>^s2{}34{E}!_TPnh;DRtk zMSZ^4Ea)|epC4d{u~Z>nPm>!}vRm_N>o*(_`ZW%uQswhqtJoLo8){y#>iSlDwub?O zPnTH9R9{6sV6_e$u!g;9sIRE{u0@W*@g}?Y!2(u)H9cZOhm)7!kmUnMut=JfK*C9W zO5!TM$NlZo)iulEg@�onXHUP6i}Z*AVI?MCK`h}t<16xg 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 Kb6Mw<&;$U}tVz}Y literal 0 HcmV?d00001