Richard Feynman, il famoso fisico, una volta disse: “Posso tranquillamente affermare che nessuno capisce la meccanica quantistica”. Nella sua intervista dal titolo “Divertente da immaginare con Richard Feynman”, ha toccato lo strano comportamento delle cose a livello delle particelle atomiche e subatomiche, notando come spesso sfidano il nostro buon senso. È interessante notare che possiamo notare un comportamento simile a livello di dati di dimensione superiore. Non è esattamente come la meccanica quantistica, ma c’è un simile elemento di sorpresa e bellezza – mescolato con poche/molte sfide – quando passiamo dalle dimensioni inferiori a quelle superiori.
In questo e nei prossimi articoli, voglio fornire alcuni spunti su questo affascinante argomento. Il mio obiettivo è suscitare l’interesse e incoraggiare l’apprendimento del mondo dei dati a dimensione superiore, soprattutto da parte di coloro che non ne hanno familiarità.
I dati ad alta dimensione, o dati in dimensioni superiori, nel contesto dell’analisi dei dati e del ML, si riferiscono generalmente a set di dati che hanno un gran numero di variabili, caratteristiche o attributi. Ognuno di questi rappresenta una “dimensione” diversa nei nostri dati.
Per iniziare, esaminiamo alcuni esempi di base che evidenziano le distinzioni che emergono quando passiamo dagli spazi di dimensione inferiore a quelli di dimensione superiore.
Concentrazione di volume in spazi ad alta dimensione
Innanzitutto, esploriamo il concetto di concentrazione del volume negli spazi ad alta dimensione. Considera l’idea di generare punti casuali all’interno di un ipercubo i cui lati vanno da 0 a 1. Quanto è probabile che questi punti cadano nella regione centrale di questo ipercubo man mano che le sue dimensioni aumentano?
Nell’immagine sopra, supponiamo che x sia un valore piccolo, ad esempio 0,1. Il nostro obiettivo è determinare come varia la probabilità che un punto cada casualmente in questa regione centrale (non sul bordo) con l’aumentare delle dimensioni.
- Spazio unidimensionale (linea)
Pensa a un segmento di linea da 0 a 1. La parte centrale è compresa tra 0,1 e 0,9. La possibilità che un punto casuale arrivi qui è semplicemente la lunghezza di questo segmento centrale sulla lunghezza totale, che è 0,8.
2. Spazio bidimensionale (quadrato)
Ora, immagina un quadrato in cui ciascun lato varia da 0 a 1. La regione centrale è un quadrato più piccolo con ciascun lato da 0,1 a 0,9. Il calcolo della probabilità implica confrontare l’area di questo quadrato più piccolo con l’area totale, dandoci una probabilità di 0,64.
3. Spazio tridimensionale (cubo)
Per un cubo con ciascun bordo che misura 1, la regione centrale è un cubo più piccolo con ciascun bordo compreso tra 0,1 e 0,9. Qui, la probabilità è il volume di questo cubo più piccolo diviso per il volume totale, risultando in 0,512.
4. Dimensioni superiori (ipercubo)
In un ipercubo di n dimensioni, il “volume” della regione centrale si riduce drasticamente all’aumentare delle dimensioni. Ad esempio, in 4D, la probabilità è 0,4096; in 5D è 0,32768; e in 10D scende a circa 0,10737.
La generalizzazione di questa idea inizia considerando il bordo ad una piccola distanza x, come mostrato nell’immagine sopra. Per una linea, la probabilità che un punto cada nella regione centrale è 1–2x. Per un quadrato, è (1–2x)*(1–2x), poiché un punto deve cadere nel mezzo di entrambe le dimensioni.
Questo modello continua in n dimensioni, dove la probabilità di cadere nella regione centrale è (1–2x)^n, diventando molto piccola nelle dimensioni superiori.
Nota che qui semplifichiamo considerando la lunghezza di ciascun lato come 1.
Iscrivere un’ipersfera all’interno di un ipercubo
Per illustrare ulteriormente il concetto di concentrazione di volume, ho eseguito una semplice simulazione utilizzando Python, in cui inscriviamo un’ipersfera all’interno di un ipercubo e quindi confrontiamo il rapporto tra il volume dell’ipersfera e quello dell’ipercubo all’aumentare delle dimensioni.
Cos’è comunque un ipercubo?
Immagina un quadrato. Ora gonfialo fino a formare un cubo. Questo è il salto dal 2D al 3D. Ora, fai un salto di immaginazione nella quarta dimensione e oltre: è qui che entrano in gioco gli ipercubi. Un ipercubo è essenzialmente un cubo esteso in dimensioni superiori. È una forma con i lati uguali e nella nostra simulazione stiamo considerando gli ipercubi con la lunghezza dei lati pari a 2. La formula per il suo volume? solo 2^n(2 elevato a n) per un ipercubo n-dimensionale.
E un’Ipersfera?
Un’ipersfera, l’equivalente dimensionale superiore di una sfera, emerge quando si estende un cerchio 2D in 3D (formando una sfera) e poi si continua nelle dimensioni superiori. La presa? Il suo volume non è così semplice da calcolare. Coinvolge il pi greco (sì, il famoso 3.14159…) e la funzione gamma, che è come un fattoriale degli steroidi. In poche parole, il volume di un’ipersfera di raggio 1 in an n
Lo spazio dimensionale è:
La funzione Gamma Γ(N) estende la funzione fattoriale ai numeri reali e complessi. Per numeri interi positivi NΓ(n)=(n−1)!, e per valori non interi viene calcolato numericamente.
Per calcolare questo rapporto usando Python possiamo usare il seguente codice:
import math
import matplotlib.pyplot as pltdef hypersphere_volume(dim):
""" Calculate the volume of a hypersphere with radius 1 in 'dim' dimensions. """
return math.pi ** (dim / 2) / math.gamma(dim / 2 + 1)
def hypercube_volume(dim):
""" Calculate the volume of a hypercube with side length 2 in 'dim' dimensions. """
return 2 ** dim
# Number of dimensions to consider
max_dim = 20
# Lists to hold volumes and dimension values
dimensions = range(1, max_dim + 1)
sphere_volumes = (hypersphere_volume(dim) for dim in dimensions)
cube_volumes = (hypercube_volume(dim) for dim in dimensions)
ratios = (sphere_volumes(i) / cube_volumes(i) for i in range(max_dim))
# Plotting the results
plt.figure(figsize=(10, 6))
plt.plot(dimensions, ratios, marker='o')
plt.xlabel('Number of Dimensions')
plt.ylabel('Ratio of Volumes (Hypersphere/Hypercube)')
plt.title('Volume Concentration in Higher Dimensions')
plt.grid(True)
plt.show()
L’output del codice sopra è il seguente grafico:
Possiamo vedere chiaramente che man mano che si passa a dimensioni più elevate il rapporto diminuisce rapidamente, lasciando la maggior parte del volume concentrata negli angoli dell’ipercubo.
Questi esempi dimostrano che nelle dimensioni più elevate, il volume della regione centrale diventa una frazione progressivamente più piccola del volume totale, evidenziando la natura controintuitiva degli spazi ad alta dimensione.
D: Quali sono alcune delle implicazioni di questo fenomeno di concentrazione del volume sulle prestazioni degli algoritmi ML?
L’esperimento su carta e DVD
Considera l’esperimento in cui provi a far passare un DVD attraverso un pezzo di carta con un foro quadrato. Inizialmente sembra impossibile perché la diagonale del quadrato è più piccola del diametro del DVD. Tuttavia, piegando la carta è possibile far passare il DVD.
La piegatura della carta, un piccolo ma efficace aggiustamento delle dimensioni spaziali, è la chiave del puzzle. In questo esperimento si può trovare un’intrigante analogia per comprendere la complessità dei paesaggi di dimensione superiore.
Quando la carta viene stesa per la prima volta, forma un piano bidimensionale. La fessura quadrata sembra troppo stretta per far passare il DVD a causa delle sue dimensioni predefinite.
Questa situazione ipotetica è coerente con le nostre esperienze quotidiane in un ambiente tridimensionale, dove lunghezza, larghezza e altezza sono le unità di misura per dimensione e distanza. Ma nell’istante in cui cominciamo a piegare il foglio, aggiungiamo un’altra dimensione. Il foro e la connessione spaziale del DVD vengono completamente alterati da questa azione di piegatura.
In questa nuova ambientazione tridimensionale, il concetto di distanza, così rigido e netto nelle due dimensioni, diventa più flessibile e meno intuitivo. La carta viene piegata, modificando di fatto gli angoli generati dai bordi della carta e le distanze tra i punti che circondano il foro.
Il foro in questa nuova forma tridimensionale può adattarsi al DVD, dimostrando come l’inclusione di una terza dimensione possa rendere realizzabile un compito apparentemente senza speranza in uno spazio bidimensionale.
La matematica alla base di questo esperimento è spiegata completamente in un intrigante studio di Weiwei Lin et al.
Puoi anche guardare questo bellissimo video di “The Action Lab” che dimostra l’idea in modo intuitivo:
Questo cambiamento di prospettiva ha implicazioni significative, soprattutto nei campi della matematica, della fisica e dell’apprendimento automatico. Questa idea si riflette nei metodi di apprendimento automatico come Support Vector Machines (SVM).
SVM e il trucco del kernel
Il trucco del kernel in Support Vector Machines (SVM) mostra un’idea simile. Nelle SVM, spesso incontriamo dati che non sono separabili linearmente. Il trucco del kernel supera questo problema trasformando i dati in uno spazio di dimensione superiore, in modo simile a come piegare la carta ne ha modificato le proprietà spaziali. (In realtà, le SVM non trasformano effettivamente i dati in dimensioni superiori, poiché ciò è costoso dal punto di vista computazionale. Invece, calcolano le relazioni tra i punti dati come se fossero in una dimensione superiore utilizzando il trucco del kernel).
In termini più semplici, gli SVM normalmente trovano una linea di separazione (o iperpiano) nelle dimensioni inferiori. Ma con dati non lineari, questo non è possibile. Il trucco del kernel, come piegare la carta, aggiunge dimensioni, rendendo più facile trovare un iperpiano che svolga il lavoro.
Il trucco del kernel non si limita a spostare le dimensioni; semplifica anche problemi complessi. È davvero un ottimo esempio di come il pensiero di dimensione superiore possa fornire soluzioni a problemi che sembrano impossibili nelle dimensioni inferiori.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC# Here I manullay entered a data that is not linearly seperable in 1D
x = np.array((1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30)).reshape(-1, 1) # Replace YOUR_X_VALUES with your data
y = np.array((1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1)) # Replace YOUR_Y_VALUES with your class labels
# Non-linear transformation to 2D, (squaring)
def transform_to_2d(X):
return np.c_(X, X**2)
# Transforming data to 2D
X_transformed = transform_to_2d(x)
# Fitting SVM with a linear kernel in the transformed 2D space
svm = SVC(kernel='linear')
svm.fit(X_transformed, y)
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 1D data plot
axes(0).scatter(x, np.zeros_like(x), c=y, cmap='bwr', edgecolors='k')
axes(0).set_title('Original 1D Data')
axes(0).set_xlabel('Feature')
axes(0).set_yticks(())
# 2D transformed data plot
axes(1).scatter(X_transformed(:, 0), X_transformed(:, 1), c=y, cmap='bwr', edgecolors='k')
axes(1).set_title('Transformed 2D Data')
axes(1).set_xlabel('Original Feature')
axes(1).set_ylabel('Transformed Feature (X^2)')
# Plotting the decision boundary in 2D
ax = axes(1)
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim(0), xlim(1), 30)
yy = np.linspace(ylim(0), ylim(1), 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack((XX.ravel(), YY.ravel())).T
# Getting the separating hyperplane
Z = svm.decision_function(xy).reshape(XX.shape)
# Plotting decision boundary and margins
ax.contour(XX, YY, Z, colors='k', levels=(-1, 0, 1), alpha=0.5,
linestyles=('--', '-', '--'))
plt.tight_layout()
plt.show()
Il risultato del codice sopra è il seguente grafico:
È chiaro che i dati, inizialmente separabili in modo non lineare a sinistra, diventano separabili in 2D. Questa trasformazione, come mostrato nel grafico a destra, risolve efficacemente il nostro problema. Non è fantastico?
Avvolgendo
In questo articolo abbiamo esplorato alcune idee sul mondo dei dati ad alta dimensione. Abbiamo dimostrato come entrare in dimensioni superiori possa alterare notevolmente i nostri punti di vista e i nostri metodi di approccio ai problemi, a partire dalla concentrazione del volume e continuando con l’esempio di vita reale dell’esperimento su carta e DVD e, infine, il trucco del kernel nelle SVM.
Nel prossimo articolo discuteremo della “maledizione della dimensionalità”, che si riferisce alle difficoltà e alle complicazioni legate alla navigazione in spazi ad alta dimensionalità. Esamineremo l’impatto che ciò ha sull’apprendimento automatico e sull’analisi dei dati, nonché sulle strategie per mitigarne gli effetti.
Grazie per essere arrivato fin qui! Apprezzo davvero il tempo che hai dedicato alla lettura di questo articolo e spero che tu abbia trovato l’argomento interessante. Non esitate a condividere eventuali suggerimenti o possibili modifiche per articoli futuri!
Fonte: towardsdatascience.com