Aan de slagGa gratis aan de slag

Strings en categorieën

Zoals je weet, heeft Spark numerieke gegevens nodig voor modellering. Tot nu toe was dat geen probleem; zelfs booleankolommen kun je eenvoudig omzetten naar gehele getallen. Maar je gaat ook de luchtvaartmaatschappij en de bestemming van het vliegtuig als features in je model gebruiken. Deze zijn als strings gecodeerd en er is geen voor de hand liggende manier om ze naar een numeriek gegevenstype te converteren.

Gelukkig heeft PySpark functies hiervoor in de submodule pyspark.ml.features. Je kunt zogeheten ‘one-hotvectoren’ maken om de carrier en de bestemming van elke vlucht te representeren. Een one-hotvector is een manier om een categorische feature voor te stellen waarbij elke observatie een vector heeft waarin alle elementen nul zijn, behalve maximaal één element, dat de waarde één (1) heeft.

Elk element in de vector komt overeen met een niveau van de feature, dus je kunt zien welk niveau van toepassing is door te kijken welk element van de vector gelijk is aan één (1).

De eerste stap om je categorische feature te encoderen is het maken van een StringIndexer. Instanties van deze klasse zijn Estimators die een DataFrame met een kolom strings nemen en elke unieke string aan een getal koppelen. Vervolgens geeft de Estimator een Transformer terug die een DataFrame neemt, de mapping als metadata toevoegt en een nieuw DataFrame retourneert met een numerieke kolom die overeenkomt met de stringkolom.

De tweede stap is deze numerieke kolom encoderen als een one-hotvector met een OneHotEncoder. Dit werkt precies hetzelfde als de StringIndexer: er wordt eerst een Estimator en daarna een Transformer gemaakt. Het eindresultaat is een kolom die je categorische feature als een vector codeert die geschikt is voor Machine Learning-routines!

Dit lijkt misschien ingewikkeld, maar geen zorgen! Het enige dat je moet onthouden, is dat je een StringIndexer en een OneHotEncoder moet maken, en de Pipeline regelt de rest.

Waarom moet je een categorische feature encoderen als een one-hotvector?

Deze oefening maakt deel uit van de cursus

Basis van PySpark

Cursus bekijken

Praktische interactieve oefening

Zet theorie om in actie met een van onze interactieve oefeningen.

Begin met trainen