Ga naar hoofdinhoud

Er gaat iets mis — top-3 fouten

Leerdoel: je herkent de drie fouten die je bij het bouwen van PageRank het makkelijkst maakt.

Het verschil is meteen nul​

Symptoom: de test van bouwsteen 4 faalt, en de ranks zien eruit alsof er maar één ronde is gerekend:

AssertionError: {'A': 0.25, 'B': 0.1437, 'C': 0.4784, 'D': 0.0375}

Oorzaak: nieuw en rank zijn dezelfde dict. nieuw = rank maakt geen kopie, maar geeft dezelfde dict een tweede naam. Alles wat je in nieuw zet, staat dus meteen ook in rank. Het verschil tussen de twee is daardoor altijd 0, en de lus stopt na de eerste ronde.

Oplossing: begin elke ronde met een lege dict.

# FOUT
nieuw = rank # geen nieuwe dict, maar een tweede naam
for p in web:
nieuw[p] = nieuwe_rank(web, rank, p, d)

# GOED
nieuw = {}
for p in web:
nieuw[p] = nieuwe_rank(web, rank, p, d)

Hetzelfde gebeurt als je rank = nieuw vóór het meten van het verschil zet: dan vergelijk je nieuw met zichzelf. De test toont dan 'C': 0.5687.

Meer uitleg: Bouwsteen 4

Het basisdeel (1 − d)/N vergeten​

Symptoom: de som van de ranks zakt onder de 1, en de pagina's lopen leeg.

Oorzaak: je rekent alleen d · Σ ... en laat de willekeurige sprong weg. Elke ronde gaat er dan een deel van het belang verloren.

# FOUT
nieuw[p] = d * som # basisdeel ontbreekt

# GOED
nieuw[p] = (1 - d) / n + d * som

Symptoom: zodra een pagina nergens naartoe linkt, telt de som niet meer op tot 1.

Oorzaak: een doodlopende pagina geeft haar belang aan niemand door, dus het verdwijnt. In het mini-web linkt elke pagina ergens naartoe. Voeg je op de compleet-pagina een pagina zonder links toe, dan zie je het meteen aan de som.

Oplossing: doe alsof een pagina zonder uitgaande links naar alle pagina's linkt. De surfer springt dan vanaf die pagina willekeurig verder.

def uitgaande_links(web, i, paginas):
if web[i]:
return web[i]
return set(paginas)

Zo blijft het belang behouden en telt de som weer op tot 1.

Door naar cheatsheet →.

Doe je de route machine learning? Dan ga je nu door naar op weg naar PageRank. Die opstap zet de surfer en dit hoofdstuk samen in de vorm van PageRank van CS50.