Ga naar hoofdinhoud

Logistic regression in Python begrijpen

Leer over logistic regression, de basiskenmerken en bouw een machinelearningmodel voor een realistische toepassing in Python met scikit-learn.
Bijgewerkt 2 okt 2026  · 10 min lezen

Verken met AI

ChatGPTClaudePerplexity

Classificatietechnieken zijn een essentieel onderdeel van machine learning en data mining. Ongeveer 70% van de datascienceproblemen zijn classificatieproblemen. Er zijn veel classificatieproblemen, maar logistic regression komt vaak voor en is een nuttige regressiemethode om binaire classificatieproblemen op te lossen. Een andere categorie is multinomiale classificatie, die gevallen aanpakt waarbij meerdere klassen in de doelvariabele voorkomen. Zo is de IRIS-dataset een bekend voorbeeld van multiclass-classificatie. Andere voorbeelden zijn het classificeren van categorieën van artikelen/blogs/documenten.

Logistic regression kan voor uiteenlopende classificatieproblemen worden gebruikt, zoals spamdetectie. Andere voorbeelden zijn: het voorspellen van diabetes, of een klant een bepaald product zal kopen, of een klant zal afhaken (churn), of een gebruiker op een advertentielink zal klikken, en nog veel meer.

Logistic Regression is een van de eenvoudigste en meest gebruikte machinelearningalgoritmen voor tweeklassenclassificatie. Het is makkelijk te implementeren en kan dienen als baseline voor elk binair classificatieprobleem. De basisconcepten zijn bovendien nuttig in deep learning. Logistic regression beschrijft en schat de relatie tussen één afhankelijke binaire variabele en onafhankelijke variabelen.

Wil je alle voorbeeldcode in deze tutorial eenvoudig zelf draaien? Maak dan gratis een DataLab-werkboek aan met vooraf geïnstalleerde Python en alle codevoorbeelden. Wil je meer oefenen met logistic regression? Bekijk dan de oefeningen in onze cursus Credit Risk Modeling in R, met volop realistische voorbeelden. 

Wat is Logistic Regression?

Logistic regression is een statistische methode om binaire klassen te voorspellen. De uitkomst- of doelvariabele is dichotoom van aard. Dichotoom betekent dat er slechts twee mogelijke klassen zijn. Je kunt het bijvoorbeeld gebruiken voor kankerdetectie. Het berekent de kans dat een gebeurtenis optreedt.

Het is een bijzonder geval van lineaire regressie waarbij de doelvariabele categorisch is. Het gebruikt de logaritme van odds als afhankelijke variabele. Logistic regression voorspelt de kans op het optreden van een binaire gebeurtenis met behulp van een logitfunctie. 

Vergelijking lineaire regressie:

vergelijking lineaire regressie

Waar y de afhankelijke variabele is en x1, x2 ... en Xn de verklarende variabelen.

Sigmoidfunctie:

vergelijking sigmoidfunctie

Sigmoidfunctie toepassen op lineaire regressie:

sigmoidfunctie en vergelijking lineaire regressie

Eigenschappen van logistic regression:

  • De afhankelijke variabele in logistic regression volgt een Bernoulli-verdeling.
  • De schatting gebeurt via maximum likelihood.
  • Geen R-kwadraat; modelgeschiktheid wordt berekend met Concordance, KS-statistieken.

Lineaire regressie versus logistic regression

Lineaire regressie geeft een continue output, maar logistic regression levert een discrete output. Een voorbeeld van continue output is huizenprijs of aandelenkoers. Voorbeelden van discrete output zijn voorspellen of een patiënt kanker heeft of niet, en of een klant zal afhaken. Logistic regression wordt geschat met de maximum likelihood estimation (MLE), terwijl lineaire regressie doorgaans wordt geschat met ordinary least squares (OLS), wat ook als een speciaal geval van MLE kan worden beschouwd wanneer de fouten in het model normaal verdeeld zijn.

Lineaire regressie versus logistic regression gevisualiseerd

Maximum likelihood estimation versus kleinste-kwadratenmethode

MLE is een methode om de "waarschijnlijkheid" te maximaliseren, terwijl OLS een benadering is die de afstand minimaliseert. Door de likelihoodfunctie te maximaliseren bepaal je de parameters die het meest waarschijnlijk de geobserveerde data opleveren. Statistisch gezien zet MLE het gemiddelde en de variantie als parameters om specifieke parametrische waarden voor een model te bepalen. Deze parameterset kan worden gebruikt om data te voorspellen die in een normale verdeling nodig zijn.

Ordinary least squares-schattingen worden berekend door een regressielijn te fitten op de gegeven datapunten met de minimale som van de gekwadrateerde afwijkingen (least square error). Beide worden gebruikt om de parameters van een lineair regressiemodel te schatten. MLE veronderstelt een gezamenlijke kansmassa- of dichtheidsfunctie, terwijl OLS geen stochastische aannames vereist om de afstand te minimaliseren.

Sigmoidfunctie

De sigmoidfunctie, ook wel logistic function genoemd, geeft een S-vormige curve die elk reëel getal afbeeldt op een waarde tussen 0 en 1. Als de curve naar positieve oneindig gaat, wordt de voorspelde y gelijk aan 1, en als de curve naar negatieve oneindig gaat, wordt de voorspelde y gelijk aan 0. Als de output van de sigmoidfunctie groter is dan 0,5, kunnen we de uitkomst als 1 of JA classificeren, en als deze kleiner is dan 0,5, als 0 of NEE. Als de output bijvoorbeeld 0,75 is, kunnen we in termen van kans zeggen dat er 75 procent kans is dat een patiënt aan kanker zal lijden.

eq4

Grafiek van de sigmoidfunctie in Python

Soorten logistic regression

Soorten logistic regression:

  • Binaire logistic regression: de doelvariabele heeft slechts twee mogelijke uitkomsten, zoals Spam of Geen spam, Kanker of Geen kanker.
  • Multinomiale logistic regression: de doelvariabele heeft drie of meer nominale categorieën, zoals het voorspellen van het type wijn.
  • Ordinale logistic regression: de doelvariabele heeft drie of meer ordinale categorieën, zoals een restaurant- of productbeoordeling van 1 tot en met 5.

Begin gratis met Python leren

Machine Learning voor tijdreeksgegevens in Python

BasicSkill Level
4 uur
54.3K learners
Deze cursus gaat over feature engineering en machine learning voor tijdreeksgegevens.
See DetailsRight Arrow
Start Course

Modelbouw in Scikit-learn

Laten we het diabetesvoorspellingsmodel bouwen met een logisticeregressie-classifier.

We laden eerst de benodigde Pima Indian Diabetes-dataset met de CSV-leesfunctie van pandas. Je kunt de data downloaden via de volgende link: https://www.kaggle.com/uciml/pima-indians-diabetes-database of een dataset selecteren van DataCamp: https://www.datacamp.com/datalab/datasets. Met de kant-en-klare dataset kun je het model trainen op DataLab, DataCamps gratis Jupyter-notebook in de cloud. 

Data laden

We vereenvoudigen de kolommen door col_names mee te geven aan de pandas-functie read_csv().

#import pandas
import pandas as pd
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
# load dataset
pima = pd.read_csv("pima-indians-diabetes.csv", header=None, names=col_names)
pima.head()

schermafbeelding van Pima Indian Diabetes-dataset

Features selecteren

Hier moet je de gegeven kolommen opdelen in twee soorten variabelen: afhankelijke (of doelvariabele) en onafhankelijke variabelen (of feature-variabelen).

#split dataset in features and target variable
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable

Data splitsen

Om de modelprestatie te begrijpen, is het een goede strategie om de dataset op te splitsen in een trainings- en een testset.

Laten we de dataset splitsen met de functie train_test_split(). Je geeft 3 parameters mee: features, target en de grootte van de test_set. Daarnaast kun je random_state gebruiken om willekeurig records te selecteren.

# split X and y into training and testing sets
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=16)

Hier wordt de dataset in twee delen gesplitst in een verhouding van 75:25. Dat betekent dat 75% van de data wordt gebruikt om het model te trainen en 25% om het model te testen.

Modelontwikkeling en voorspelling

Importeer eerst de module LogisticRegression en maak een logisticeregressie-classifierobject met de functie LogisticRegression() en random_state voor reproduceerbaarheid.

Fit vervolgens je model op de trainingsset met fit() en voer voorspellingen uit op de testset met predict(). 

# import the class
from sklearn.linear_model import LogisticRegression

# instantiate the model (using the default parameters)
logreg = LogisticRegression(random_state=16)

# fit the model with data
logreg.fit(X_train, y_train)

y_pred = logreg.predict(X_test)

Modelevaluatie met een confusion matrix

Een confusion matrix is een tabel die wordt gebruikt om de prestaties van een classificatiemodel te evalueren. Je kunt hiermee de prestaties van een algoritme ook visualiseren. Het kernonderdeel van een confusion matrix is het aantal correcte en foutieve voorspellingen per klasse.

# import the metrics class
from sklearn import metrics

cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
cnf_matrix
array([[115,   8],
      [ 30,  39]])

Hier zie je de confusion matrix als array-object. De dimensie van deze matrix is 2×2 omdat dit model binaire classificatie is. Je hebt twee klassen, 0 en 1. Diagonale waarden staan voor correcte voorspellingen, terwijl niet-diagonale elementen foutieve voorspellingen zijn. In de output zijn 115 en 39 correcte voorspellingen en 30 en 8 foutieve voorspellingen.

Confusion matrix visualiseren met een heatmap

Laten we de resultaten van het model visualiseren als een confusion matrix met matplotlib en seaborn.

Hier visualiseer je de confusion matrix met een heatmap.

# import required modules
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

class_names=[0,1] # name  of classes
fig, ax = plt.subplots()
tick_marks = np.arange(len(class_names))
plt.xticks(tick_marks, class_names)
plt.yticks(tick_marks, class_names)
# create heatmap
sns.heatmap(pd.DataFrame(cnf_matrix), annot=True, cmap="YlGnBu" ,fmt='g')
ax.xaxis.set_label_position("top")
plt.tight_layout()
plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual label')
plt.xlabel('Predicted label')

Text(0.5,257.44,'Predicted label');

confusion matrix voor Pima Indian Diabetes-dataset

Evaluatiemetrics voor de confusion matrix

Laten we het model evalueren met classification_report voor accuracy, precision en recall.

from sklearn.metrics import classification_report
target_names = ['without diabetes', 'with diabetes']
print(classification_report(y_test, y_pred, target_names=target_names))
   precision    recall  f1-score   support

without diabetes       0.79      0.93      0.86       123
  with diabetes       0.83      0.57      0.67        69

        accuracy                           0.80       192
      macro avg       0.81      0.75      0.77       192
    weighted avg       0.81      0.80      0.79       192

Je behaalde een classificatiescore van 80%, wat als een goede nauwkeurigheid wordt beschouwd.

Precision: precision gaat om precisie, oftewel hoe accuraat je model is. Met andere woorden: als een model een voorspelling doet, hoe vaak is die dan correct? In jouw geval, wanneer je logisticeregressiemodel voorspelde dat patiënten diabetes zouden krijgen, klopte dat 73% van de tijd.

Recall: als er patiënten met diabetes in de testset zitten, kan je logisticeregressiemodel dat in 57% van de gevallen identificeren.

ROC-curve

De Receiver Operating Characteristic (ROC)-curve is een plot van de true positive rate tegen de false positive rate. Hij laat de trade-off zien tussen sensitiviteit en specificiteit.

y_pred_proba = logreg.predict_proba(X_test)[::,1]
fpr, tpr, _ = metrics.roc_curve(y_test,  y_pred_proba)
auc = metrics.roc_auc_score(y_test, y_pred_proba)
plt.plot(fpr,tpr,label="data 1, auc="+str(auc))
plt.legend(loc=4)
plt.show()

ROC voor Pima Indian Diabetes-dataset

De AUC-score in dit geval is 0,88. Een AUC-score van 1 staat voor een perfecte classifier en 0,5 voor een waardeloze classifier.

De broncode is beschikbaar op DataLab: Understanding Logistic Regression in Python.

Voordelen

Door het efficiënte en eenvoudige karakter is er geen hoge rekenkracht nodig, het is makkelijk te implementeren, goed te interpreteren en wordt het veel gebruikt door data-analisten en -scientists. Ook is schalen van features niet vereist. Logistic regression levert een kansscore voor observaties.

Nadelen

Logistic regression kan niet goed overweg met een groot aantal categorische features/variabelen. Het is gevoelig voor overfitting. Daarnaast kan het geen niet-lineaire problemen oplossen, waardoor transformatie van niet-lineaire features nodig is. Logistic regression presteert slecht met onafhankelijke variabelen die niet gecorreleerd zijn met de doelvariabele en die onderling sterk lijken of gecorreleerd zijn.

Conclusie

In deze tutorial heb je veel geleerd over logistic regression. Je weet nu wat logistic regression is, hoe je bijbehorende modellen bouwt, hoe je resultaten visualiseert en kent wat theoretische achtergrond. Ook kwamen basisconcepten aan bod zoals de sigmoidfunctie, maximum likelihood, confusion matrix en de ROC-curve.

Hopelijk kun je nu de techniek van logistic regression toepassen om je eigen datasets te analyseren. Bedankt voor het lezen!

Wil je meer leren over Logistic Regression? Volg dan DataCamps cursus Machine Learning with scikit-learn. Je kunt ook je reis beginnen om machinelearningengineer te worden door je in te schrijven voor de carrièreroute Machine Learning Scientist with Python.

Onderwerpen
Python
Data-analyse
Machine Learning

Python-regressiecursussen

Cursus

Introductie tot regressie met statsmodels in Python

4 uur
63.6K
Voorspel huizenprijzen en de klikfrequentie van advertenties door regressieanalyses uit te voeren, te analyseren en te interpreteren met statsmodels in Python.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken