Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

We gaan in dit labo een t-SNE representatie bouwen van de UC Merced Land Use Dataset dataset.

Dit is een bekende benchmark dataset voor classificatie van luchtfoto’s, ontwikkeld door de University of California, Merced. De dataset bevat:

  • 2100 beelden van 256×256 pixels

  • 21 categorieën (bijv. agricultural, airplane, beach, buildings, forest, freeway, harbor, parking lot, residential, etc.)

  • 100 beelden per categorie

1. Data inspectie

Dataset structure:
DatasetDict({
    train: Dataset({
        features: ['image', 'label'],
        num_rows: 2100
    })
})

Number of training images: 2100

Features: {'image': Image(mode=None, decode=True), 'label': ClassLabel(names=['agricultural', 'airplane', 'baseballdiamond', 'beach', 'buildings', 'chaparral', 'denseresidential', 'forest', 'freeway', 'golfcourse', 'harbor', 'intersection', 'mediumresidential', 'mobilehomepark', 'overpass', 'parkinglot', 'river', 'runway', 'sparseresidential', 'storagetanks', 'tenniscourt'])}

Categories: ['agricultural', 'airplane', 'baseballdiamond', 'beach', 'buildings', 'chaparral', 'denseresidential', 'forest', 'freeway', 'golfcourse', 'harbor', 'intersection', 'mediumresidential', 'mobilehomepark', 'overpass', 'parkinglot', 'river', 'runway', 'sparseresidential', 'storagetanks', 'tenniscourt']
<Figure size 1200x900 with 12 Axes>

2. Embedding Model

We willen eerst de beelden omzetten naar bruikbare feature vectoren aan de hand van een beeld-embedding model. We kiezen voor een klein CNN model: MobileNetV2 getraind met IMAGENET. Via torch.nn.Sequential(*list(mobilenet.children())[:-1]) verwijderen we de bovenste klassificatie layer.

/opt/venv/lib/python3.10/site-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.
  warnings.warn(
/opt/venv/lib/python3.10/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=MobileNet_V2_Weights.IMAGENET1K_V1`. You can also use `weights=MobileNet_V2_Weights.DEFAULT` to get the most up-to-date weights.
  warnings.warn(msg)

3. Genereren van embeddings

We nemen een sample van 1000 beelden en sturen die door het embedding model.

Sampled 987 images
Categories distribution: [47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47]
Generating embeddings...
Embeddings shape: (987, 1280)
Labels shape: 987
Embeddings shape: (987, 1280)
Labels shape: 987

4. Toepassing van t-SNE

Via t-SNE reduceren we de hoog-dimensionele embeddings (1280 dimensies) naar 2D vor de visualisatie.

Applying t-SNE (this may take a moment)...
[t-SNE] Computing 91 nearest neighbors...
[t-SNE] Indexed 987 samples in 0.002s...
[t-SNE] Computed neighbors for 987 samples in 0.310s...
[t-SNE] Computed conditional probabilities for sample 987 / 987
[t-SNE] Mean sigma: 5.857131
[t-SNE] Computed neighbors for 987 samples in 0.310s...
[t-SNE] Computed conditional probabilities for sample 987 / 987
[t-SNE] Mean sigma: 5.857131
[t-SNE] KL divergence after 250 iterations with early exaggeration: 65.859451
[t-SNE] KL divergence after 250 iterations with early exaggeration: 65.859451
[t-SNE] KL divergence after 1000 iterations: 0.836003

Reduced embeddings shape: (987, 2)
X range: [-41.03, 47.04]
Y range: [-33.70, 54.63]
[t-SNE] KL divergence after 1000 iterations: 0.836003

Reduced embeddings shape: (987, 2)
X range: [-41.03, 47.04]
Y range: [-33.70, 54.63]

5. Visualisatie

Loading...

6. Perplexity Hyperparameter

Perplexity is een belangrijke hyperparameter in t-SNE die de balans bepaalt tussen lokale en globale structuur. Het kan worden gezien als het effectieve aantal buren dat elk punt heeft. Laten we verkennen hoe verschillende perplexity waarden de visualisatie beïnvloeden.

Computing t-SNE with different perplexity values...
Perplexity = 5... 
done
Perplexity = 15... done
Perplexity = 30... done
Perplexity = 30... done
Perplexity = 50... done
Perplexity = 50... done
All done!
done
All done!
Loading...

Perplexity begrijpen

Perplexity bepaalt de balans tussen lokale en globale aspecten van de data:

  • Lage perplexity (5-10): Focust op zeer lokale structuur. Je ziet veel kleine, compacte clusters. Kan fijnmazige lokale patronen onthullen maar kan gerelateerde groepen fragmenteren.

  • Medium perplexity (20-50): Aanbevolen bereik voor de meeste datasets. Balanceert lokale en globale structuur, toont zowel individuele clusters als hun onderlinge relaties.

  • Hoge perplexity (50+): Benadrukt globale structuur. Clusters kunnen samensmelten, maar je krijgt een beter beeld van de algemene data-organisatie.

Richtlijnen:

  • Voor kleine datasets (< 100 samples): Gebruik perplexity 5-15

  • Voor medium datasets (100-1000 samples): Gebruik perplexity 15-50

  • Voor grote datasets (> 1000 samples): Gebruik perplexity 30-100

De vuistregel is: perplexity moet kleiner zijn dan het aantal datapunten, typisch tussen 5 en 50.