Oefenen en toetsen
Je voorspeller werkt. Maar hoe goed is hij? Dat lijkt makkelijk te meten: laat hem de voorbeelden voorspellen en tel hoeveel hij er goed heeft. In deze stap zie je waarom dat een oneerlijke toets is, en hoe je de voorbeelden eerlijk verdeelt.
Je gebruikt hier voorspel(nieuw, voorbeelden, k) uit
laat de buren stemmen.
Die functie staat in de code hieronder al klaar: klap onder de editor de
verborgen code open om hem te lezen. Je gebruikt ook slicing uit
de buren sorteren,
en import uit Modules.
Voorspel
Een leerling krijgt een week van tevoren de vragen én de antwoorden van een toets. Hij haalt een 10. Wat zegt dat cijfer over wat hij kan?
Antwoord
Bijna niets. Hij kan de antwoorden onthouden hebben zonder iets te begrijpen. Of hij de stof kent, merk je pas bij vragen die hij nog nooit zag. Met een voorspeller is het net zo.
Zo test je niet
Hieronder staan 24 stuks fruit. De code laat de voorspeller elk stuk voorspellen, met alle 24 als voorbeelden.
Wat zie je?
24 van de 24 goed
Alles goed. Maar dat komt doordat elk stuk fruit zelf in de voorbeelden
staat, op afstand 0. Met k = 1 is het dichtstbijzijnde voorbeeld altijd
het stuk fruit zelf. Dit is de toets waarvan je de antwoorden al had.
Zo werkt het
Je verdeelt de voorbeelden in twee stapels:
- de oefenset: hier leert de voorspeller van, dus dit zijn de voorbeelden waar hij de buren in zoekt;
- de toetsset: die houd je achter. Daarmee test je, want deze stukken fruit heeft de voorspeller nooit gezien.
Voordat je verdeelt, schud je de lijst met random.shuffle. random.seed(3)
zorgt dat het schudden elke keer hetzelfde uitpakt, zodat jij dezelfde
stapels krijgt als in de antwoorden. Daarna knip je de lijst met slicing in
tweeën: fruit[:18] zijn de eerste 18, fruit[18:] de rest.
Onderzoek
- Draai de code. Hoeveel stukken fruit zitten er in de oefenset, en welke soorten zitten er in de toets?
- Zet een
#voorrandom.shuffle(fruit). Welke soorten zitten nu in de toets? - Haal de
#weg, en verander de seed in 4. Wat zit er nu in de toets? - Zet een
#voorrandom.seed(4), en draai een paar keer.
Antwoorden
- 18 om te oefenen. In de toets zitten twee bananen, twee appels en twee citroenen.
- Zes citroenen: de laatste zes van de lijst. Je toetst dan alleen citroenen, en de voorspeller heeft er maar twee om van te leren.
- Drie appels en drie bananen, en geen enkele citroen.
- Elke keer een andere toets. Zonder seed weet je niet welke stapels je krijgt, en kun je je antwoord niet naast dat van de les leggen.
Door naar veertig procent achter.