Data kan worden onderverdeeld in drie hoofdcategorieën:
gestructureerde data,
semi-gestructureerde data en
ongestructureerde data. De verschillen tussen deze datatypes zijn cruciaal voor de keuze tussen ML modellen en leeralgoritmes.
Gestructureerde data¶
Gestructureerde data is data die een gestandaardiseerd formaat heeft dat wordt gedefinieerd door een schema. Deze data wordt doorgaans opgeslagen in een tabelformaat met rijen en kolommen, wat het gemakkelijk maakt om te doorzoeken en te analyseren.
Kenmerken¶
Vooraf bepaald formaat: Volgt een vast patroon en structuur
Tabelformaat: Opgeslagen in rijen en kolommen; ieder datapunt heeft een specifiek veld (
Naam,Datum,Adres, enz.)Gemakkelijke navigatie: Kan eenvoudig worden opgevraagd met standaard data-wrangling tools (SQL, Pandas, enz.)
Voorbeelden¶
SQL-databases
Spreadsheets (.csv, .tsv, .xlsx, enz.)
Uitdaging¶
Heterogene datatypes: Complexe vertaling van verschillende soorten data naar numerieke features (feature engineering).
Missing data: Hoe omgaan met
nullwaarden?
Source
import os
import kagglehub
import pandas as pd
# Download data from kaggle
path = kagglehub.dataset_download("yashdevladdha/uber-ride-analytics-dashboard")
# Load data into Pandas DataFrame
csv_file = os.path.join(path, "ncr_ride_bookings.csv")
df = pd.read_csv(csv_file)
df.head()Downloading from https://www.kaggle.com/api/v1/datasets/download/yashdevladdha/uber-ride-analytics-dashboard?dataset_version_number=2...
100%|██████████| 16.5M/16.5M [00:02<00:00, 7.78MB/s]Extracting files...
Semi-gestructureerde data¶
Semi-gestructureerde data bevindt zich tussen gestructureerde en ongestructureerde data in. Het heeft geen star schema zoals gestructureerde data, maar bevat wel organisatorische elementen zoals tags, labels of andere markers die helpen bij het categoriseren van de informatie.
Kenmerken¶
Flexibele structuur: Geen vast schema, maar wel organisatorische markers (
{[]},<div></div>, enz.)Hiërarchische en/of netwerkstructuur: Kan worden voorgesteld in diagrammen met nodes en edges.
Voorbeelden¶
JSON
XML
YAML
AVRO
Parquet
NoSQL records (MongoDB, ElasticSearch, enz.)
Uitdagingen¶
Schema evolution: Sparse data
Onvoorspelbare datatypes: bv.
[["car"], ["car", "bus", "truck"], ["bike", "train"], ...]Navigatie: Hoe groter de flexibiliteit in structuur, hoe groter de uitdaging.
Source
import json
with open("../../../.devcontainer/devcontainer.json") as f:
devcontainer_spec = json.load(f)
devcontainer_spec{'name': 'ml-courses',
'dockerComposeFile': '../docker-compose.yml',
'service': 'devcontainer',
'workspaceFolder': '/workspaces/${localWorkspaceFolderBasename}/',
'features': {'ghcr.io/devcontainers-extra/features/starship:1': {}},
'overrideCommand': True,
'remoteUser': 'user',
'postStartCommand': 'sudo chown -R user:user /opt/ && uv sync --python ${localEnv:PYTHON_VERSION:3.10} --resolution ${localEnv:RESOLUTION_STRATEGY:highest} --all-extras && pre-commit install --install-hooks',
'customizations': {'jetbrains': {'backend': 'PyCharm',
'plugins': ['com.github.copilot']},
'vscode': {'extensions': ['charliermarsh.ruff',
'GitHub.copilot',
'GitHub.copilot-chat',
'GitHub.vscode-github-actions',
'GitHub.vscode-pull-request-github',
'ms-azuretools.vscode-docker',
'ms-python.mypy-type-checker',
'ms-python.python',
'ms-toolsai.jupyter',
'ms-toolsai.vscode-jupyter-cell-tags',
'ryanluker.vscode-coverage-gutters',
'saoudrizwan.claude-dev',
'streetsidesoftware.code-spell-checker',
'streetsidesoftware.code-spell-checker-dutch',
'tamasfe.even-better-toml',
'visualstudioexptteam.vscodeintellicode'],
'settings': {'coverage-gutters.coverageFileNames': ['reports/coverage.xml'],
'cSpell.language': 'en,nl',
'editor.codeActionsOnSave': {'source.fixAll': 'explicit',
'source.organizeImports': 'explicit'},
'editor.formatOnSave': True,
'[python]': {'editor.defaultFormatter': 'charliermarsh.ruff'},
'[toml]': {'editor.formatOnSave': False},
'editor.rulers': [100],
'files.autoSave': 'onFocusChange',
'github.copilot.chat.agent.enabled': True,
'github.copilot.chat.codesearch.enabled': True,
'github.copilot.chat.edits.enabled': True,
'github.copilot.nextEditSuggestions.enabled': True,
'jupyter.kernels.excludePythonEnvironments': ['/usr/local/bin/python'],
'mypy-type-checker.importStrategy': 'fromEnvironment',
'mypy-type-checker.preferDaemon': True,
'notebook.codeActionsOnSave': {'notebook.source.fixAll': 'explicit',
'notebook.source.organizeImports': 'explicit'},
'notebook.formatOnSave.enabled': True,
'python.defaultInterpreterPath': '/opt/venv/bin/python',
'python.terminal.activateEnvironment': False,
'python.testing.pytestEnabled': True,
'ruff.importStrategy': 'fromEnvironment',
'terminal.integrated.env.linux': {'GIT_EDITOR': 'code --wait'},
'terminal.integrated.env.mac': {'GIT_EDITOR': 'code --wait'}}}}}Source
pd.read_json("../../../.devcontainer/devcontainer.json")Ongestructureerde data¶
Ongestructureerde data is vrije data (in the wild) die geen consistent model volgt. Het is vaak rijker aan informatie maar moeilijker te verwerken dan gestructureerde data.
Kenmerken¶
Vrije vorm: Geen vooraf gedefinieerde structuur
Specifieke serialisering: Digitale formaten die eigen zijn aan de data (
.txt,.pdf,.py,.cpp,.jpeg,.avi,.wav,.mp3, enz.)Hoge Densiteit / Volumes: Vaak zeer dense informatie (bv.
1080x1080 px)
Voorbeelden¶
Tekstdocumenten: Word-bestanden, PDF’s
Scripts
Protein folding
Media-inhoud: Video’s, audio-opnames, afbeeldingen
Uitdagingen¶
Processing: Grote volumes en informatiedensiteit vragen om veel resources (opslag en verwerking; zie GPU, TPU).
Complexe niet-lineaire patronen: Complexe patronen in tijd en ruimte
Datastructuur en ML modelkeuzes¶
Het onderzoek en de ontwikkeling van ML technieken is sterk beïnvloed door de gangbare datastructuur in bepaalde domeinen. Zo is deep learning voornamelijk tot stand gekomen binnen beeldverwerking (ongestructureerde data). De alomtegenwoordige transformer architectuur is afkomstig uit Natural Language Processing (NLP; ongestructureerde data). Graph Neural Networks zijn vooral ontwikkeld binnen semi-structured social-media netwerk toepassingen. Moderne tree-based methodes zijn dan weer alom tegenwoordig bij gestructureerde data. Hieronder geven we een illustratief overzicht van courante technieken.
Gestructureerde Data¶
Linear/Polynomial Regression
Logistic Regression
Support Vector Machines
Random Forest
XGBoost
AdaBoost
LightGBM
CatBoost
Semi-gestructureerde data¶
Bayesian Networks
Graph Neural Networks
State Space Modellen
Transformers
Ongestructureerde data¶
Convolutional Neural Networks (CNN’s)
RNN
LSTM
Transformers
Diffusion models