Van een heuristiek een classifier maken
Je bent verrast dat heuristieken zo nuttig kunnen zijn. Daarom besluit je de heuristiek dat "te veel unieke poorten verdacht is" te behandelen als een volwaardige classifier. Dat doe je door het aantal unieke poorten per bron te thresholden met het gemiddelde aantal dat wordt gebruikt door slechte broncomputers — dat zijn computers waarvoor het label True is. De gegevensset is al ingeladen en gesplitst in training en test, dus je hebt de objecten X_train, X_test, y_train en y_test in het geheugen. Je imports bevatten accuracy_score() en numpy als np. Ter verduidelijking: je gaat in deze oefening geen classifier uit scikit-learn fitten, maar je definieert expliciet je eigen classificatieregel!
Deze oefening maakt deel uit van de cursus
Machine Learning-workflows ontwerpen in Python
Oefeninstructies
- Selecteer alle slechte hosts uit
X_trainom een nieuwe gegevenssetX_train_badte vormen. Let op:y_trainis een Booleaanse array. - Bereken het gemiddelde van de kolom
unique_portsvoor slechte hosts en sla dit op inavg_bad_ports. - Beschouw nu een classifier die elk voorbeeld als positief voorspelt waarvan
unique_portsgroter is danavg_bad_ports. Sla de voorspellingen van deze classifier op de testdata op in een nieuwe variabelepred_port. - Bereken de nauwkeurigheid van deze classifier op de testdata met
accuracy_score().
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Create a new dataset X_train_bad by subselecting bad hosts
X_train_bad = ____[____]
# Calculate the average of unique_ports in bad examples
avg_bad_ports = np.____(____['unique_ports'])
# Label as positive sources that use more ports than that
pred_port = ____['unique_ports'] > ____
# Print the accuracy of the heuristic
print(____(y_test, ____))