Autorské riešenie
[stiahni strojove_ucenie.py]

  • Počet riešiteľov: 26 / 39 =  67 %

  • Úspešnosť riešenia:  3,3 / 6 = 55 %

Našou úlohou je rozdeliť vstupný zoznam príkladov do dvoch zoznamov, tréningového a testovacieho,  pričom dodržíme nasledovné podmienky:

  • počet príkladov v tréningovom a testovacom zozname musí zodpovedať zadanému počtu percent,

  • pomer pozitívnych a negatívnych príkladov v tréningovom a testovacom zozname musí byť rovnaký, ako pomer pozitívnych a negatívnych príkladov vo vstupnom zozname.

Pri rozdeľovaní tak musíme dodržať dve podmienky. Postupovať môžeme podľa nasledovnej schémy:

Najskôr rozdelíme príklady na pozitívne a negatívne. Z každej časti potom vyberieme požadovaných x% príkladov to tréningového zoznamu. Zvyšok potom zaradíme do testovacieho zoznamu.

Výsledné riešenie môže vyzerať nasledovne: 

import random

def rozdel_priklady(priklady, percento):
    treningove_priklady = []
    testovacie_priklady = []
    pozitivne_priklady = []
    negativne_priklady = []

    for priklad in priklady:
        if priklad[1] == 0:
            pozitivne_priklady.append(priklad)
        else:
            negativne_priklady.append(priklad)

    random.shuffle(pozitivne_priklady)
    random.shuffle(negativne_priklady)

    pocet_pozitivnych_trenovanie = round(len(pozitivne_priklady) * percento / 100)
    pocet_negativnych_trenovanie = round(len(negativne_priklady) * percento / 100)

    treningove_priklady.extend(pozitivne_priklady[:pocet_pozitivnych_trenovanie])
    treningove_priklady.extend(negativne_priklady[:pocet_negativnych_trenovanie])
    testovacie_priklady.extend(pozitivne_priklady[pocet_pozitivnych_trenovanie:])
    testovacie_priklady.extend(negativne_priklady[pocet_negativnych_trenovanie:])

    return treningove_priklady, testovacie_priklady 

Podľa zadania úlohy: "Dostupné príklady najskôr náhodne rozdelíme do dvoch zoznamov". Preto sme zoznamy pozitívnych a negatívnych príkladov pred samotným výberom do tréningového a testovacieho zoznamu náhodne preusporiadali.

Nie vždy bude možné príklady presne rozdeliť (napr. nedá sa vybrať 50 % z 11 príkladov). Zadanie preto pripúšťa aj toleranciu +- 1 príklad. Presný počet príkladov, ktorý nemusí byť celé číslo, preto zaokrúhlime .

Vaše zaujímavé riešenia a najčastejšie chyby

Zbytočnou chybou, ktorú spravilo viacero z vás, bolo nedodržanie požiadaviek zadania na parametre funkcie a na návratovú hodnotu funkcie. Takmer v každom zadaní súťaže PALMA junior je požiadavka na funkciu, ktorá má nejaké parametre a pokiaľ nie je jej úlohou niečo kresliť, tak má aj návratovú hodnotu. Vo všeobecnosti platí, že všetky hodnoty ktoré funkcia potrebuje by mala dostať v parametroch a všetky (nekresliace) výsledky vracia ako svoju návratovú hodnotu.

Pomerne častou chybou bolo nedodržanie pomeru pozitívnych a negatívnych príkladov v tréningovom a testovacom zozname.

Ďalšou pomerne častou chybou bolo, že rozdeľovanie príkladov do tréningového a testovacieho zoznamu nebolo náhodné, ale záviselo od poradia príkladov vo vstupnom zozname.