Ga naar hoofdinhoud

Python Featureselectie-tutorial: een gids voor beginners

Leer de basis van featureselectie en hoe je verschillende featureselectietechnieken in Python implementeert en onderzoekt.
Bijgewerkt 2 okt 2026  · 14 min lezen

Verken met AI

ChatGPTClaudePerplexity

banner

Voer de code van deze tutorial online uit en bewerk deze

Code uitvoeren

Wil je meer leren in Python? Volg dan DataCamp’s gratis cursus Intro to Python for Data Science.

Jullie hebben allemaal datasets gezien. Soms zijn ze klein, maar vaak zijn ze enorm groot. Het wordt dan erg uitdagend om deze datasets te verwerken, groot genoeg zelfs om een verwerkingsknelpunt te veroorzaken.

Wat maakt deze datasets zo groot? Features. Hoe meer features, hoe groter de datasets zullen zijn. Nou ja, niet altijd. Je vindt ook datasets met heel veel features maar relatief weinig instanties. Maar dat is hier niet het onderwerp. Je vraagt je misschien af hoe je met een gewone computer dit soort datasets kunt verwerken zonder er eindeloos omheen te draaien.

Vaak blijven er in een hoog-dimensionale dataset volledig irrelevante, onbeduidende en onbelangrijke features over. Het is gebleken dat de bijdrage van dit soort features vaak kleiner is aan predictieve modellering dan die van de cruciale features. Soms dragen ze helemaal niets bij. Deze features veroorzaken een aantal problemen die efficiënte predictieve modellering in de weg staan:

  • Onnodige resource-toewijzing voor deze features.
  • Deze features werken als ruis, waardoor het machinelearningmodel erg slecht kan presteren.
  • Het model kost meer tijd om te trainen.

Dus, wat is hier de oplossing? De meest economische oplossing is featureselectie.

Featureselectie is het proces waarbij je de meest significante features uit een dataset selecteert. In veel gevallen kan featureselectie ook de prestaties van een machinelearningmodel verbeteren.

Klinkt interessant, toch?

Je hebt een informele introductie gekregen tot featureselectie en het belang ervan in de wereld van data science en machine learning. In deze post ga je het volgende behandelen:

  • Introductie tot featureselectie en het belang ervan begrijpen
  • Verschil tussen featureselectie en dimensionaliteitsreductie
  • Verschillende soorten featureselectiemethoden
  • Implementatie van verschillende featureselectiemethoden met scikit-learn

Introductie tot featureselectie

Featureselectie staat ook bekend als variabelenselectie of attribuutselectie.

In essentie is het het proces van het selecteren van de belangrijkste/relevantste features van een dataset.

Het belang van featureselectie begrijpen

Het belang van featureselectie zie je het duidelijkst wanneer je werkt met een dataset met een groot aantal features. Zo’n dataset wordt vaak een hoog-dimensionale dataset genoemd. Met die hoge dimensionaliteit komen ook veel problemen: de traintijd van je machinelearningmodel neemt aanzienlijk toe, en je model kan erg complex worden, wat kan leiden tot overfitting.

Vaak zitten er in een hoog-dimensionale featureset verschillende redundante features, oftewel features die niet meer zijn dan uitbreidingen van andere essentiële features. Deze redundante features dragen ook niet effectief bij aan de modeltraining. Er is dus duidelijk behoefte om de belangrijkste en meest relevante features uit een dataset te halen om de meest effectieve predictieve prestaties te krijgen.

"The objective of variable selection is three-fold: improving the prediction performance of the predictors, providing faster and more cost-effective predictors, and providing a better understanding of the underlying process that generated the data."

-An Introduction to Variable and Feature Selection

Laten we nu het verschil begrijpen tussen dimensionaliteitsreductie en featureselectie.

Soms wordt featureselectie verward met dimensionaliteitsreductie. Maar ze zijn verschillend. Beide methoden verminderen het aantal attributen in de dataset, maar een dimensionaliteitsreductiemethode doet dit door nieuwe combinaties van attributen te maken (ook wel featuretransformatie), terwijl featureselectiemethoden attributen die in de data aanwezig zijn juist opnemen of uitsluiten zonder ze te veranderen.

Voorbeelden van dimensionaliteitsreductiemethoden zijn Principal Component Analysis, Singular Value Decomposition, Linear Discriminant Analysis, enzovoort.

Laat me het belang van featureselectie voor je samenvatten:

  • Het stelt het machinelearningalgoritme in staat sneller te trainen.
  • Het vermindert de complexiteit van een model en maakt het makkelijker te interpreteren.
  • Het verbetert de nauwkeurigheid van een model als de juiste subset wordt gekozen.
  • Het vermindert overfitting.

In de volgende sectie bestudeer je de verschillende soorten algemene featureselectiemethoden: filtermethoden, wrappermethoden en embedded methoden.

Filtermethoden

De volgende afbeelding beschrijft filtergebaseerde featureselectiemethoden het best:

filter-based feature selection methods

Beeldbron: Analytics Vidhya

De filtermethode steunt op de algemene eigenschappen van de data om een featuresubset te evalueren en te kiezen, zonder een datamining-algoritme in te zetten. De filtermethode gebruikt exacte beoordelingscriteria zoals afstand, informatie, afhankelijkheid en consistentie. Ze gebruikt een rangordetechniek als hoofdcriterium voor variabelenselectie. De reden om rangordening te gebruiken is eenvoud en het opleveren van uitstekende en relevante features. De rangordemethode filtert irrelevante features eruit voordat de classificatie start.

Filtermethoden worden meestal gebruikt als stap in de datapreprocessing. De selectie van features is onafhankelijk van elk machinelearningalgoritme. Features krijgen een rang op basis van statistische scores die bepalen hoe sterk ze correleren met de uitkomstvariabele. Correlatie is een sterk contextgebonden term en verschilt per toepassing. Je kunt naar de volgende tabel verwijzen om correlatiecoëfficiënten te definiëren voor verschillende datatypen (in dit geval continu en categorisch).

table for defining correlation coefficients for different types of data

Beeldbron: Analytics Vidhya

Voorbeelden van filtermethoden zijn de chi-kwadraattoets, information gain en correlatiecoëfficiënt-scores.

Vervolgens kijk je naar wrappermethoden.

Wrappermethoden

Net als bij filtermethoden geef ik je een soortgelijke infographic die je helpt wrappermethoden beter te begrijpen:

understand wrapper methods

Beeldbron: Analytics Vidhya

Zoals je in de bovenstaande afbeelding ziet, heeft een wrappermethode een machinelearningalgoritme nodig en gebruikt ze de prestaties daarvan als beoordelingscriterium. Deze methode zoekt naar een featureset die het best past bij het machinelearningalgoritme en wil zo de miningprestaties verbeteren. Voor de evaluatie van features wordt predictieve nauwkeurigheid gebruikt bij classificatietaken en wordt de kwaliteit van clusters beoordeeld bij clustering.

Typische voorbeelden van wrappermethoden zijn forward feature selection, backward feature elimination, recursive feature elimination, enzovoort.

  • Forward selection: De procedure start met een lege set features [gereduceerde set]. De beste van de oorspronkelijke features wordt bepaald en toegevoegd aan de gereduceerde set. Bij elke volgende iteratie wordt de beste van de overgebleven oorspronkelijke attributen toegevoegd.

  • Backward elimination: De procedure start met de volledige set attributen. Bij elke stap wordt het slechtste attribuut uit de set verwijderd.

  • Combinatie van forward selection en backward elimination: De stapsgewijze forward- en backwardmethoden kunnen worden gecombineerd zodat de procedure bij elke stap het beste attribuut selecteert en het slechtste verwijdert uit de overgebleven attributen.

  • Recursive feature elimination: Recursive feature elimination voert een greedy search uit om de best presterende featuresubset te vinden. Het maakt iteratief modellen en bepaalt bij elke iteratie de beste of slechtste presterende feature. Vervolgens bouwt het de volgende modellen met de overgebleven features totdat alle features zijn verkend. Daarna rangschikt het de features op basis van de volgorde van eliminatie. In het slechtste geval, als een dataset N features bevat, zal RFE een greedy search doen over 2N-combinaties van features.

Klinkt goed!

Nu gaan we embedded methoden bestuderen.

Embedded methoden

Embedded methoden zijn iteratief in de zin dat ze per iteratie van het modeltrainingsproces kijken en zorgvuldig die features extraheren die het meest bijdragen aan de training voor een bepaalde iteratie. Regularisatie-methoden zijn de meest gebruikte embedded methoden; zij straffen een feature af gegeven een drempel voor de coëfficiënt.

Daarom worden regularisatiemethoden ook wel penalizatiemethoden genoemd: ze introduceren extra beperkingen in de optimalisatie van een predictief algoritme (zoals een regressie-algoritme) die het model sturen richting lagere complexiteit (minder coëfficiënten).

Voorbeelden van regularisatie-algoritmen zijn LASSO, Elastic Net, ridge-regressie, enzovoort.

Verschil tussen filter- en wrappermethoden

Het kan soms verwarrend zijn om het verschil tussen filter- en wrappermethoden in hun functionaliteit te zien. Laten we kijken op welke punten ze van elkaar verschillen.

  • Filtermethoden gebruiken geen machinelearningmodel om te bepalen of een feature goed of slecht is, terwijl wrappermethoden wel een model gebruiken en het met de feature trainen om te beslissen of die essentieel is of niet.
  • Filtermethoden zijn veel sneller dan wrappermethoden omdat ze geen modellen trainen. Wrappermethoden zijn daarentegen computationeel kostbaar, en bij enorme datasets zijn ze niet de meest effectieve featureselectiemethode om te overwegen.
  • Filtermethoden kunnen er niet in slagen de beste subset te vinden als er onvoldoende data is om de statistische correlatie van de features te modelleren, maar wrappermethoden kunnen door hun uitputtende aard wel de beste subset opleveren.
  • Het gebruik van features uit wrappermethoden in je uiteindelijke model kan leiden tot overfitting, omdat wrappermethoden al modellen met die features trainen en dit het echte leren beïnvloedt. Features uit filtermethoden leiden in de meeste gevallen niet tot overfitting.

Tot nu toe heb je het belang van featureselectie bestudeerd en het verschil met dimensionaliteitsreductie begrepen. Je hebt ook verschillende soorten featureselectiemethoden behandeld. Tot zover, zo goed!

Nu kijken we naar valkuilen waar je in kunt trappen bij featureselectie:

Belangrijke overweging

Je hebt vast al begrepen hoe waardevol featureselectie is in een machinelearningpijplijn en wat het oplevert als je het integreert. Maar het is heel belangrijk om precies te begrijpen waar je featureselectie in je pijplijn moet opnemen.

Eenvoudig gezegd: je moet de stap featureselectie opnemen vóórdat je de data aan het model voert voor training, zeker als je nauwkeurigheidsinschattingen gebruikt zoals cross-validatie. Dit zorgt ervoor dat featureselectie wordt uitgevoerd op de datafold vlak voordat het model wordt getraind. Als je echter eerst featureselectie doet om je data voor te bereiden, en daarna modelselectie en training uitvoert op de geselecteerde features, dan is dat een grote fout.

Als je featureselectie op alle data uitvoert en dan cross-valideert, dan is de testdata in elke fold van de cross-validatie ook gebruikt om de features te kiezen, en dat zorgt voor een vertekende prestatie-inschatting van je model.

Genoeg theorie! Laten we nu meteen wat code schrijven.

Een casestudy in Python

Voor deze casestudy gebruik je de Pima Indians Diabetes-dataset. De beschrijving van de dataset vind je hier.

De dataset hoort bij een classificatietaak waarin je moet voorspellen of iemand diabetes heeft op basis van 8 features.

De dataset bevat in totaal 768 observaties. Je eerste taak is de dataset te laden, zodat je verder kunt. Maar laten we eerst de benodigde dependencies importeren. Andere kun je gaandeweg importeren.

import pandas as pd
import numpy as np

Nu de dependencies zijn geïmporteerd, laden we de Pima Indians-dataset in een DataFrame-object met behulp van de Pandas-bibliotheek.

data = pd.read_csv("diabetes.csv")

De dataset is succesvol geladen in het DataFrame-object data. Laten we nu naar de data kijken.

data.head()
Dataframe

Je ziet 8 verschillende features, gelabeld met de uitkomsten 1 en 0, waarbij 1 betekent dat de observatie diabetes heeft en 0 dat dit niet zo is. Van de dataset is bekend dat er missende waarden in zitten. Specifiek: er zijn missende observaties voor sommige kolommen die als nul zijn aangeduid. Dat kun je afleiden uit de definitie van die kolommen, en het is onpraktisch en ongeldig dat die metingen nul zijn, bijvoorbeeld een nul voor body mass index of bloeddruk is ongeldig.

Maar voor deze tutorial gebruik je direct de voorbewerkte versie van de dataset.

# load data
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pd.read_csv(url, names=names)

Je hebt de data nu geladen in een DataFrame-object genaamd dataframe.

Laten we het DataFrame-object omzetten naar een NumPy-array voor snellere berekeningen. Laten we de data ook opsplitsen in aparte variabelen zodat features en labels gescheiden zijn.

array = dataframe.values
X = array[:,0:8]
Y = array[:,8]

Top! Je data is voorbereid.

Eerst implementeer je een chi-kwadraat-statistiektest voor niet-negatieve features om 4 van de beste features uit de dataset te selecteren. Je hebt al gezien dat de chi-kwadraattoets tot de klasse van filtermethoden behoort. Wie nieuwsgierig is naar de interne werking van chi-kwadraat: deze video legt het uitstekend uit.

De scikit-learn-bibliotheek biedt de klasse SelectKBest die je met verschillende statistische tests kunt gebruiken om een specifiek aantal features te selecteren; in dit geval is dat chi-kwadraat.

# Import the necessary libraries first
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

Je hebt de libraries geïmporteerd om de experimenten uit te voeren. Laten we ze nu in actie zien.

# Feature extraction
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X, Y)

# Summarize scores
np.set_printoptions(precision=3)
print(fit.scores_)

features = fit.transform(X)
# Summarize selected features
print(features[0:5,:])
[ 111.52  1411.887   17.605   53.108 2175.565  127.669    5.393  181.304]
[[148.    0.   33.6  50. ]
 [ 85.    0.   26.6  31. ]
 [183.    0.   23.3  32. ]
 [ 89.   94.   28.1  21. ]
 [137.  168.   43.1  33. ]]

Interpretatie:

Je ziet de scores voor elk attribuut en de 4 gekozen attributen (die met de hoogste scores): plas, test, mass en age. Deze scores helpen je verder om de beste features voor het trainen van je model te bepalen.

P.S.: De eerste rij staat voor de namen van de features. Voor de preprocessing van de dataset zijn de namen numeriek gecodeerd.

Vervolgens implementeer je Recursive Feature Elimination, een type wrapper-featureselectiemethode.

Recursive Feature Elimination (of RFE) werkt door iteratief attributen te verwijderen en een model te bouwen op de attributen die overblijven.

Het gebruikt de modelnauwkeurigheid om te bepalen welke attributen (en combinaties daarvan) het meest bijdragen aan het voorspellen van de doelvariabele.

Je kunt meer leren over de klasse RFE in de scikit-learn-documentatie.

# Import your necessary dependencies
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

Je gebruikt RFE met de classifier Logistic Regression om de top 3 features te selecteren. De keuze van het algoritme maakt niet heel veel uit zolang het vaardig en consistent is.

# Feature extraction
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Num Features: %s" % (fit.n_features_))
print("Selected Features: %s" % (fit.support_))
print("Feature Ranking: %s" % (fit.ranking_))
Num Features: 3
Selected Features: [ True False False False False  True  True False]
Feature Ranking: [1 2 3 5 6 1 1 4]

Je ziet dat RFE de top 3 features koos als preg, mass en pedi.

Deze zijn gemarkeerd als True in de support-array en met keuze “1” in de ranking-array. Dit geeft de sterkte van deze features aan.

Vervolgens gebruik je ridge-regressie, in essentie een regularisatietechniek en ook een embedded featureselectiemethode.

Dit artikel geeft een uitstekende uitleg over ridge-regressie. Zeker even checken.

# First things first
from sklearn.linear_model import Ridge

Daarna gebruik je ridge-regressie om de coëfficiënt R2 te bepalen.

Bekijk ook de officiële scikit-learn-documentatie over ridge-regressie.

ridge = Ridge(alpha=1.0)
ridge.fit(X,Y)
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)

Om de resultaten van ridge-regressie beter te begrijpen, implementeer je een kleine helperfunctie die helpt de resultaten mooier te printen, zodat je ze makkelijk kunt interpreteren.

# A helper method for pretty-printing the coefficients
def pretty_print_coefs(coefs, names = None, sort = False):
    if names == None:
        names = ["X%s" % x for x in range(len(coefs))]
    lst = zip(coefs, names)
    if sort:
        lst = sorted(lst,  key = lambda x:-np.abs(x[0]))
    return " + ".join("%s * %s" % (round(coef, 3), name)
                                   for coef, name in lst)

Vervolgens geef je de coëfficiënttermen van het ridgemodel door aan deze kleine functie en kijk je wat er gebeurt.

print ("Ridge model:", pretty_print_coefs(ridge.coef_))
Ridge model: 0.021 * X0 + 0.006 * X1 + -0.002 * X2 + 0.0 * X3 + -0.0 * X4 + 0.013 * X5 + 0.145 * X6 + 0.003 * X7

Je ziet alle coëfficiënttermen naast de featurevariabelen. Dit helpt opnieuw om de belangrijkste features te kiezen. Hieronder staan enkele punten om in gedachten te houden bij ridge-regressie:

  • Het staat ook bekend als L2-regularisatie.
  • Voor gecorreleerde features geldt dat ze vergelijkbare coëfficiënten krijgen.
  • Features met negatieve coëfficiënten dragen minder bij. In een complexer scenario met veel features helpt deze score zeker bij de uiteindelijke besluitvorming rond featureselectie.

Daarmee is de casestudy afgerond. De methoden die je hierboven hebt geïmplementeerd helpen je de features van een specifieke dataset grondig te begrijpen. Enkele kernpunten over deze technieken:

  • Featureselectie is in essentie onderdeel van datapreprocessing, wat wordt gezien als het meest tijdrovende deel van elke machinelearningpijplijn.
  • Deze technieken helpen je het systematischer en meer ML-vriendelijk aan te pakken. Je kunt de features nauwkeuriger interpreteren.

Afronding

In deze post heb je een van de meest bestudeerde en onderzochte statistische onderwerpen behandeld: featureselectie. Je hebt ook de varianten leren kennen en ze gebruikt om te zien welke features in een dataset belangrijk zijn.

Je kunt deze tutorial uitbreiden door een correlatiemaat te combineren met de wrappermethode en te kijken hoe dat presteert. Onderweg kun je zomaar je eigen featureselectiemechanisme ontwikkelen. Zo leg je de basis voor je eigen kleine onderzoek. Onderzoekers gebruiken ook verschillende soft computing-principes om selectie uit te voeren. Dit is op zichzelf al een heel studie- en onderzoeksveld. Probeer ook bestaande featureselectie-algoritmen uit op verschillende datasets en trek je eigen conclusies.

Waarom zijn deze traditionele featureselectiemethoden nog steeds relevant?

Ja, die vraag is logisch. Er zijn immers neurale netwerkarchitecturen (bijvoorbeeld CNN’s) die heel goed in staat zijn de belangrijkste features uit data te halen, maar ook dat kent beperkingen. Een CNN gebruiken voor een reguliere tabelvormige dataset die geen specifieke eigenschappen heeft (zoals een typische afbeelding met translationele eigenschappen, randen, positionele eigenschappen, contouren, enz.) is niet de wijste keuze. Bovendien kan het trainen van een CNN op tabulaire datasets bij beperkte data en middelen compleet verspild zijn. In zulke situaties komen de methoden die je hebt bestudeerd zeker van pas.

De volgende bronnen zijn interessant als je dieper in dit onderwerp wilt duiken:

Hieronder vind je de referenties die zijn gebruikt om deze tutorial te schrijven.

Zet je vragen gerust in de comments als je die hebt!

Onderwerpen
Python

Python-cursussen

Cursus

Introductie tot Python

4 uur
7.1M
Leer de basis van data-analyse met Python in 4 uur. Deze online cursus laat je kennismaken met de Python-interface en populaire pakketten.
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