Riassunto di Claude.ai
Ayuba, D.L.; Guillemaut, J.-Y.; Marti-Cardona, B.; Mendez, O. A Hybrid Framework for Soil Property Estimation from Hyperspectral Imaging. Remote Sens. 2025, 17, 2568. https://doi.org/10.3390/rs17152568
Spettro ASD (2151 bande, 350–2500 nm)
│
├──► BLOCCO 1: HyperKon CNN ──────────────► 128 numeri (embedding)
│ │
└──► BLOCCO 2: Feature artigianali ────────► ~6900 numeri
│
┌──────────────┘
▼
Vettore combinato (~7028 numeri)
│
┌───────────────┼───────────────┐
▼ ▼ ▼
Random Forest XGBoost KNN
│ │ │
└───────────────┴───────────────┘
│
Media pesata ottimizzata
│
▼
CaCO3, FeO, Fe2O3 (predizioni)
BLOCCO 1 — Backbone CNN HyperKon
Scopo
Estrarre automaticamente pattern spettrali complessi che le feature artigianali non riescono a catturare. La CNN "impara a vedere" strutture nella forma dello spettro.
Pre-addestramento auto-supervisionato (NT-Xent / SimCLR)
Prima di usare le etichette chimiche, la CNN viene pre-addestrata su tutti gli spettri disponibili (anche quelli senza etichetta) usando l'apprendimento contrastivo.
L'idea: due versioni distorte dello stesso spettro devono produrre rappresentazioni simili; spettri diversi devono produrre rappresentazioni diverse.
In pratica impara a dare più peso alle bande spettrali più informative per ogni campione.
BLOCCO 2 — Feature artigianali
Queste feature catturano aspetti interpretabili dello spettro, ispirati alla spettroscopia classica.
Derivate spettrali (eq. 4 del paper)
d^n R(λ) / dλ^n
```
- **1ª derivata**: evidenzia i punti di massima variazione della riflettanza → posizione delle bande di assorbimento
- **2ª derivata**: evidenzia la curvatura → profondità delle bande di assorbimento
- **3ª derivata**: evidenzia variazioni di curvatura → asimmetrie delle bande
Usano filtro **Savitzky-Golay** (finestra=11, polinomio di grado 2/3/4) che deriva e liscia simultaneamente per ridurre il rumore.
### Trasformata wavelet discreta - DWT (eq. 5)
```
R(λ) = A_4 + D_4 + D_3 + D_2 + D_1
```
Decompone lo spettro in **approssimazioni** (A, variazioni lente = forma generale) e **dettagli** (D, variazioni rapide = caratteristiche fini). Si usa il wavelet Meyer (`dmey`) che è ottimale per segnali spettrali continui. Per ogni coefficiente si estrae media, deviazione standard e massimo → 15 valori totali.
### SVD — Singular Value Decomposition (eq. 6)
Lo spettro viene riorganizzato in una matrice di Hankel e decomposto:
```
B = U Σ V^T
```
I **valori singolari** σ₁ ≥ σ₂ ≥ ... misurano quanto "energia spettrale" è concentrata in ogni componente principale. I loro **rapporti** σᵢ/σᵢ₊₁ descrivono la struttura gerarchica dello spettro → 9 valori totali.
### FFT — Trasformata di Fourier (eq. 7)
```
F(k) = Σ R(n) × e^(-i2πkn/N)
```
Le prime 20 componenti in frequenza (parte reale + immaginaria) catturano i pattern periodici nello spettro, utili per rilevare strutture ripetitive come le bande di assorbimento degli ossidi metallici → 40 valori totali.
### Feature statistiche
Media, deviazione standard, percentili 25/75, range, posizione del massimo e del minimo → 7 valori totali.
---
## BLOCCO 3 — Ensemble ML (RF + XGBoost + KNN)
I ~7028 valori combinati (128 CNN + ~6900 artigianali) vengono normalizzati con `StandardScaler` (media 0, varianza 1) e passati ai tre modelli.
### Random Forest (`n_estimators=100, max_depth=20, min_samples_leaf=5`)
Crea 100 alberi decisionali ognuno su un sottoinsieme casuale dei dati e delle feature. La predizione è la media di tutti gli alberi. Robusto all'overfitting grazie alla diversità degli alberi.
**`max_depth=20`**: ogni albero può fare fino a 20 divisioni → abbastanza complesso da catturare non-linearità.
**`min_samples_leaf=5`**: ogni foglia deve avere almeno 5 campioni → evita di memorizzare singoli punti.
### XGBoost (`learning_rate=0.1, n_estimators=100, max_depth=5`)
Costruisce gli alberi **in sequenza**: ogni nuovo albero corregge gli errori del precedente (gradient boosting). Più potente del Random Forest per pattern complessi ma più sensibile all'overfitting.
**`reg_alpha=0.01, reg_lambda=1.0`**: regolarizzazione L1 e L2 che penalizzano la complessità del modello.
**`early_stopping_rounds=15`**: si ferma se la performance sul validation set non migliora per 15 iterazioni consecutive.
### KNN (`n_neighbors=7, weights="distance"`)
Per predire un nuovo campione, trova i 7 spettri più simili nel dataset di training e fa una media pesata delle loro etichette, dove il peso è inversamente proporzionale alla distanza nello spazio delle feature.
**`n_neighbors=7`**: con 11 campioni di training, 7 vicini è un buon compromesso — troppo pochi (1-2) portano a overfitting, troppi (>9) a underfitting.
Spettro grezzo: 2151 numeri
[0.12, 0.14, 0.18, 0.23, ..., 0.31, 0.28]
350nm 2500nm
│
│ Il backbone trasforma progressivamente
│
▼
STEM (Conv 1D, kernel=7)
Legge 7 bande alla volta, scorre lungo tutto lo spettro
2151 bande → 64 "mappe di caratteristiche" × 537 posizioni
│
▼
SPECTRAL ATTENTION
Impara quali delle 64 mappe sono più informative
Es: "le bande intorno a 900nm contano di più per Fe2O3"
│
▼
STAGE 1 (3 blocchi ResNeXt)
64 → 128 caratteristiche
Impara pattern semplici: pendenze, picchi singoli
│
▼
STAGE 2 (4 blocchi ResNeXt)
128 → 256 caratteristiche
Combina i pattern: forma delle bande di assorbimento
│
▼
STAGE 3 (6 blocchi ResNeXt)
256 → 512 caratteristiche
Pattern complessi: interazioni tra bande diverse
│
▼
STAGE 4 (3 blocchi ResNeXt)
512 → 512 caratteristiche
Pattern di alto livello: "firma chimica" dello spettro
│
▼
GLOBAL CONTEXT MODULE
Comprime 512×537 → 128 numeri
Media globale + massimo globale → proiezione lineare
│
▼
Embedding: 128 numeri
[0.83, -0.21, 1.45, 0.07, ..., -0.93, 0.44]
Nessun commento:
Posta un commento