-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Kernel PCA


Un'estensione della PCA che utilizza tecniche di kernel per eseguire una trasformazione non lineare dei dati.

Cos'è la Kernel PCA?

La Kernel Principal Component Analysis (Kernel PCA) è un'estensione della Principal Component Analysis (PCA) che utilizza tecniche di kernel per eseguire una trasformazione non lineare dei dati. La PCA tradizionale è una tecnica di riduzione della dimensionalità che trova le componenti principali linearmente più significative dei dati. Tuttavia, la PCA standard può risultare inefficace quando i dati non sono linearmente separabili. La Kernel PCA affronta questo problema trasformando i dati originali in uno spazio a dimensioni superiori utilizzando una funzione kernel. In questo spazio ad alta dimensione, è più probabile che i dati siano linearmente separabili. Dopo la trasformazione, la PCA viene applicata in questo spazio trasformato per trovare le componenti principali.

Quando si usa la Kernel PCA


La Kernel PCA è utile quando:
- I dati hanno una struttura non lineare.
- La PCA tradizionale non riesce a separare efficacemente i dati.
- Si desidera ridurre la dimensionalità dei dati mantenendo informazioni non lineari.
- È necessario visualizzare dati complessi in uno spazio bidimensionale o tridimensionale.

Esempio con Python

Vediamo un esempio pratico utilizzando Python.
Utilizzeremo la funzione `make_circles` di `sklearn.datasets` per generare un dataset di dati non linearmente separabili, lo visualizzeremo usando Seaborn e applicheremo la Kernel PCA per renderli separabili.

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_circles
from sklearn.decomposition import KernelPCA
from sklearn.preprocessing import StandardScaler

# Generazione del dataset
X, y = make_circles(n_samples=200, factor=.05, noise=.1, random_state=1)

# Visualizzazione del dataset originale
plt.figure(figsize=(8, 6))
sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=y, palette='viridis')
plt.title('Dataset originale non linearmente separabile')
plt.show()

# Standardizzazione dei dati
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Applicazione della Kernel PCA
kpca = KernelPCA(kernel='rbf', fit_inverse_transform=True, gamma=15, n_components=2)
X_kpca = kpca.fit_transform(X_scaled)

# Visualizzazione dei dati trasformati
plt.figure(figsize=(8, 6))
sns.scatterplot(x=X_kpca[:, 0], y=X_kpca[:, 1], hue=y, palette='viridis')
plt.title('Dataset trasformato con Kernel PCA')
plt.show()

Spiegazione del Codice

  • Generazione del Dataset**: Utilizziamo `make_circles` per creare un dataset di punti in due cerchi concentrici, che non sono linearmente separabili.
  • Visualizzazione del Dataset Originale**: Utilizziamo Seaborn per visualizzare il dataset originale. Come previsto, i punti dei due cerchi si sovrappongono, rendendo difficile la separazione lineare.
  • Standardizzazione dei Dati**: La standardizzazione è un passaggio importante per le tecniche di kernel, in quanto migliora la performance della trasformazione kernel.
  • Applicazione della Kernel PCA**: Applichiamo la Kernel PCA con un kernel RBF (Radial Basis Function) per trasformare i dati in uno spazio ad alta dimensione in cui i due cerchi sono linearmente separabili.
  • Visualizzazione dei Dati Trasformati**: Visualizziamo i dati trasformati. Dopo l'applicazione della Kernel PCA, i due gruppi di punti sono chiaramente separabili, dimostrando l'efficacia della tecnica su dati non linearmente separabili.
La Kernel PCA è un potente strumento per la riduzione della dimensionalità e la separazione di dati complessi, offrendo un significativo miglioramento rispetto alla PCA tradizionale per dataset non lineari.