Alles zusammenführen
Du hast zwei Bedenken zu deiner Pipeline beim Arrhythmie-Detection-Startup:
- Die App wurde mit Patientinnen und Patienten aller Altersgruppen trainiert, wird aber vorwiegend von Fitness-Usern genutzt, die meist jung sind. Du vermutest Domain Shift und möchtest daher alle Beispiele über 50 Jahren ignorieren.
- Du machst dir weiterhin Sorgen um Overfitting. Du willst prüfen, ob ein weniger komplexer Random-Forest-Klassifikator und eine Merkmalsauswahl helfen.
Du erstellst eine Pipeline mit einem Feature-Selection-Schritt SelectKBest() und einem RandomForestClassifier, die beide bereits importiert sind. Außerdem stehen dir GridSearchCV(), Pipeline, numpy als np und pickle zur Verfügung. Die Daten liegen als arrh vor.
Diese Übung ist Teil des Kurses
Machine-Learning-Workflows in Python entwerfen
Anleitung zur Übung
- Erstelle eine Pipeline mit
SelectKBest()als SchrittftundRandomForestClassifier()als Schrittclf. - Erstelle ein Parameter-Grid, um
kinSelectKBest()undmax_depthinRandomForestClassifier()zu tunen. - Verwende
GridSearchCV(), um deine Pipeline gegen dieses Grid und Daten zu optimieren, die nur Personen unter 50 Jahren enthalten. - Speichere die optimierte Pipeline für die Produktion als Pickle.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Create a pipeline
pipe = Pipeline([
('ft', ____), ('clf', ____(random_state=2))])
# Create a parameter grid
grid = {'ft__k':[5, 10], '____':[10, 20]}
# Execute grid search CV on a dataset containing under 50s
grid_search = ____(pipe, param_grid=grid)
arrh = arrh.____[____(arrh['age'] < 50)]
____.____(arrh.drop('class', 1), arrh['class'])
# Push the fitted pipeline to production
with ____('pipe.pkl', ____) as file:
pickle.dump(____, file)