Ontwikkel een Scikit-learn Pipeline voor Geautomatiseerde Modelselectie en Hyperparameteroptimalisatie
description
Met deze prompt leer je hoe je een volledig geautomatiseerde machine learning pipeline bouwt die niet alleen verschillende modellen vergelijkt, maar ook de beste hyperparameters vindt. Dit bespaart tijd, verbetert modelprestaties en maakt je workflows efficiënter dan handmatige tuning of losse modelexperimenten.
prompt
Help me een geautomatiseerde machine learning pipeline te ontwikkelen met Scikit-learn. Beschrijving van mijn dataset: <beschrijf je dataset> Doelvariabele: <specificeer de doelvariabele> Mogelijke algoritmen voor modelselectie (bijv. LogisticRegression, RandomForestClassifier, SVC): <noem de a ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van hoe je een geautomatiseerde machine learning pipeline kunt bouwen met Scikit-learn, inclusief modelselectie en hyperparameteroptimalisatie met GridSearchCV. Deze pipeline omvat gegevensvoorverwerking, modeltraining en modelkeuze.
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
# Voorbeeld: laad je dataset
# data = pd.read_csv('jouw_dataset.csv')
# Veronderstel dat je je features en target hebt gedefinieerd
# X = data.drop('klantloyaliteit', axis=1)
# y = data['klantloyaliteit']
# Voorbeeld: scheid numerieke en categorische kolommen
numerieke_kolommen = X.select_dtypes(include=['int64', 'float64']).columns
categorische_kolommen = X.select_dtypes(include=['object', 'category']).columns
# Definieer de preprocessors voor numeriek en categorisch
numerieke_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
categorische_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('onehot', OneHotEncoder(handle_unknown='ignore'))
])
# Combineer preprocessors in een ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[
('num', numerieke_transformer, numerieke_kolommen),
('cat', categorische_transformer, categorische_kolommen)
])
# Definieer de verschillende modellen en hyperparameters
models = [
('logreg', LogisticRegression(max_iter=1000), {
'clf__C': [0.1, 1, 10]
}),
('rfc', RandomForestClassifier(), {
'clf__n_estimators': [50, 100],
'clf__max_depth': [5, 10]
}),
('svc', SVC(), {
'clf__C': [0.1, 1, 10],
'clf__kernel': ['linear', 'rbf']
})
]
# Maak een lijst van pipelines met elk model
pipelines = []
for name, model, params in models:
pipeline = Pipeline(steps=[
('preprocessor', preprocessor),
('clf', model)
])
pipelines.append((name, pipeline, params))
# Split je data in training en test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Voer GridSearchCV uit voor elk model
best_results = []
for name, pipeline, params in pipelines:
grid = GridSearchCV(pipeline, param_grid=params, cv=5, scoring='accuracy')
grid.fit(X_train, y_train)
best_results.append((name, grid.best_score_, grid.best_params_, grid.best_estimator_))
# Vind het beste model op basis van score
beste_model = max(best_results, key=lambda x: x[1])
print(f"Beste model: {beste_model[0]}")
print(f"Score: {beste_model[1]}")
print(f"Optimale hyperparameters: {beste_model[2]}")
# Optioneel: evalueer het beste model op de testset
beste_estimator = beste_model[3]
test_score = beste_estimator.score(X_test, y_test)
print(f"Test score van het beste model: {test_score}")
```
**Uitleg:**
- **Voorverwerking:** Numerieke kolommen worden genormaliseerd en aangevuld met de gemiddelde waarde als er ontbrekende waarden zijn. Categorische kolommen worden aangevuld en omgezet in one-hot encodering.
- **Pipeline:** Combineert de voorverwerking en het classificatiemodel.
- **Modelselectie:** We definiëren verschillende modellen met hun hyperparameter zoekruimten.
- **GridSearchCV:** Voert hyperparameteroptimalisatie uit voor elk model met cross-validatie.
- **Resultaat:** Bepaalt welk model en welke hyperparameters het beste presteren en evalueert dat model op de testset.
Hiermee heb je een volledige pipeline die automatisch het beste model en de optimale hyperparameters selecteert.
provider: deepseek
model: deepseek-chat
Hier is een complete voorbeeldcode voor een geautomatiseerde ML-pipeline met Scikit-learn:
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report
# Laad je dataset (vervang dit met je eigen data)
# df = pd.read_csv('jouw_dataset.csv')
# Voorbeeld: splits features en target
X = df.drop('Klantloyaliteit', axis=1) # Features
y = df['Klantloyaliteit'] # Target variabele
# Identificeer numerieke en categorische kolommen
numerical_cols = X.select_dtypes(include=['int64', 'float64']).columns
categorical_cols = X.select_dtypes(include=['object', 'category']).columns
# Maak preprocessing transformers
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), numerical_cols),
('cat', OneHotEncoder(handle_unknown='ignore'), categorical_cols)
])
# Definieer de modellen en hun hyperparameter ruimtes
models = {
'LogisticRegression': {
'model': LogisticRegression(random_state=42),
'params': {
'classifier__C': [0.1, 1, 10],
'classifier__solver': ['liblinear']
}
},
'RandomForest': {
'model': RandomForestClassifier(random_state=42),
'params': {
'classifier__n_estimators': [50, 100],
'classifier__max_depth': [5, 10],
'classifier__min_samples_split': [2, 5]
}
},
'SVC': {
'model': SVC(random_state=42),
'params': {
'classifier__C': [0.1, 1, 10],
'classifier__kernel': ['linear', 'rbf']
}
}
}
# Train-test split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# Loop door alle modellen en vind de beste
best_score = 0
best_model = None
best_params = None
for model_name, model_info in models.items():
# Maak pipeline
pipeline = Pipeline([
('preprocessor', preprocessor),
('classifier', model_info['model'])
])
# Voer GridSearch uit
grid_search = GridSearchCV(
pipeline,
model_info['params'],
cv=5,
scoring='accuracy',
n_jobs=-1
)
grid_search.fit(X_train, y_train)
print(f"\n{model_name} - Beste score: {grid_search.best_score_:.4f}")
print(f"Beste parameters: {grid_search.best_params_}")
# Update beste model
if grid_search.best_score_ > best_score:
best_score = grid_search.best_score_
best_model = grid_search.best_estimator_
best_params = grid_search.best_params_
# Evalueer het beste model op testdata
y_pred = best_model.predict(X_test)
test_accuracy = accuracy_score(y_test, y_pred)
print(f"\n🎯 Beste model: {type(best_model.named_steps['classifier']).__name__}")
print(f"Test accuracy: {test_accuracy:.4f}")
print(f"\nGedetailleerde evaluatie:")
print(classification_report(y_test, y_pred))
# Voorbeeld van RandomizedSearchCV (alternatief)
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform, randint
# Voor LogisticRegression met randomized search
logreg_pipeline = Pipeline([
('preprocessor', preprocessor),
('classifier', LogisticRegression(random_state=42))
])
param_dist = {
'classifier__C': uniform(0.1, 10),
'classifier__solver': ['liblinear', 'saga']
}
random_search = RandomizedSearchCV(
logreg_pipeline,
param_dist,
n_iter=10,
cv=5,
scoring='accuracy',
random_state=42,
n_jobs=-1
)
random_search.fit(X_train, y_train)
print(f"\nRandomizedSearch beste score: {random_search.best_score_:.4f}")
```
**Uitleg van de pipeline:**
1. **Data Preprocessing**: Automatische handling van zowel numerieke als categorische features
2. **Model Selectie**: Test meerdere algoritmes simultaan
3. **Hyperparameter Tuning**: GridSearchCV test alle parametercombinaties
4. **Cross-validatie**: 5-fold CV voor betrouwbare resultaten
5. **Automatische selectie**: Kiest het model met de hoogste accuracy
**Tips voor gebruik:**
- Pas de kolomnamen aan naar jouw dataset
- Overweeg `RandomizedSearchCV` voor grotere parameterruimtes
- Voeg extra preprocessing stappen toe indien nodig
- Gebruik `Pipeline` om data leakage te voorkomen
**Vervolgstappen:**
- Feature importance analyse
- Model interpretatie met SHAP values
- Deployment van het beste model
Deze pipeline automatiseert het volledige proces van data preprocessing, modelselectie en hyperparameter tuning!