slogan3

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

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!