De voorspeller uit scikit-learn
Je eigen voorspel uit
laat de buren stemmen
werkt, maar met duizenden bezoekers en zeventien kenmerken wordt hij traag.
De bibliotheek scikit-learn heeft k-NN al ingebouwd, en snel. In deze stap
zie je hoe je hem gebruikt, en dat hij hetzelfde antwoord geeft als jouw
functie.
Voorspel
from sklearn.neighbors import KNeighborsClassifier
kenmerken = [[1, 3, 1], [2, 12, 0], [2, 1, 0], [10, 25, 1]]
labels = [0, 1, 0, 1]
model = KNeighborsClassifier(n_neighbors=1)
model.fit(kenmerken, labels)
print(model.predict([[2, 10, 0]]))
De kenmerken en labels zijn die van de vorige stap. Een nieuwe bezoeker komt in maart, bekijkt tien pagina's en is nieuw. Wat print dit programma?
Antwoord
[1]
De nieuwe bezoeker lijkt het meest op de koper uit maart, [2, 12, 0]: de
afstand is 2. Dus voorspelt hij dat deze bezoeker ook iets koopt.
Zo werkt het
KNeighborsClassifier(n_neighbors=1) is k-NN met k = 1. Met fit geef je
hem de oefenset: de kenmerken en de labels. Hij onthoudt ze, net zoals jouw
voorspel de lijst voorbeelden meekrijgt. predict voorspelt voor een
lijst nieuwe bezoekers tegelijk, en geeft een lijst labels terug.
scikit-learn draait op je eigen computer, niet in deze browser. Daarom
oefen je hieronder met je eigen voorspel, die hetzelfde doet.
Opdracht: jouw voorspeller op de webshop
Lees de regels van de webshop, en zet elke bezoeker als voorbeeld in de vorm
die je eigen voorspel kent: ((maand, paginas), label). Voorspel dan of
een nieuwe bezoeker in maart met tien pagina's iets koopt:
1
Begin klein, en breid de code stap voor stap uit:
- Draai de code: hij print elke rij.
voorspelstaat klaar in de verborgen code onder de editor. - Maak in de loop
maand = MAANDEN[rij[0]]enpaginas = int(rij[1]), en print(maand, paginas). - Maak een variabele
label: 1 alsrij[3]gelijk is aan"TRUE", en anders 0. Zet((maand, paginas), label)met.append()invoorbeelden. - Print na de loop
voorspel((2, 10), voorbeelden, 1).
Tip
Een voorbeeld is een tuple met twee dingen: de maten en het label. De maten
zijn zelf weer een tuple. Tel de haakjes in ((maand, paginas), label)
voordat je hem in .append() zet.
Antwoord
Dit vervangt alles onder voorbeelden = []:
lezer = csv.reader(regels)
next(lezer)
for rij in lezer:
maand = MAANDEN[rij[0]]
paginas = int(rij[1])
if rij[3] == "TRUE":
label = 1
else:
label = 0
voorbeelden.append(((maand, paginas), label))
print(voorspel((2, 10), voorbeelden, 1))
1
Jouw voorspel en scikit-learn zeggen hetzelfde. Bij Shopping gebruik je
scikit-learn: dat is sneller, en het werkt met alle zeventien kenmerken.
Door naar gevoeligheid en specificiteit.