L‘apprendimento automatico include una varietà di algoritmi e metodologie il cui fine è la modellazione delle variazioni di una o più grandezze assunte come variabili dipendenti (o esplicative) in funzione delle variazioni di altre grandezze dette variabili indipendenti.

Ogni modello è costruito a partire dai dati. I dati sono generalmente un sottoinsieme dei valori ammissibili delle grandezze in esame e sono sempre misurati sotto specifiche condizioni operative (che dovrebbero essere sufficientemente rappresentative di ciò che si vuole analizzare).

Il paradigma classico della programmazione del software prevede che, partendo dalla conoscenza dei dati di input, si debba poi codificare con un linguaggio di programmazione (p.e. Python o qualsiasi altro possiamo immaginare) il processo di trasformazione dell’input nell’output desiderato. I meccanismi di causalità che regolano la trasformazioni degli ingressi nelle uscite devono quindi essere ben noti al programmatore che è chiamato ad esprimerli in forma algoritmica.

Diversamente, il paradigma di programmazione che sottende ai sistemi di apprendimento automatico non richede la codifica esplicita (e manuale!) dei meccanismi di causalità e sposta il focus esclusivamente sui dati. Nei software di apprendimento automatico, le causalità tra i dati sono dedotte in modo approssimativo ed automatico (secondo approcci matematici specifici per ogni algoritmo di ML e spesso iterativi) e sono implicitamente codificate in parametri che contribuiscono al funzionamento del modello stesso (p.e. coefficienti di polinomi, etc..).

I dati che si usano per l’appredimento automatico devono avere un grado di completezza e “senzatezza” tale da favorire la costruzione di modelli realistici attraverso l’individuazione, per via automatica, di correlazioni verosimili. Con il termine “sensatezza” intendo che i dati devono riferirsi a grandezze attinenti e significative con ciò che si vuole modellare (ossia inquadrabili e spiegabili nell’ambito del fenomeno che si sta analizzando). Per stressare il concetto, propongo un esempio in parte mutuato dal bel lavoro di Tyler Vigen.

Consideriamo il seguente elenco di dati:

Y, G1, G2
1999, 18.084, 5688
2000, 18.594, 6198
2001, 19.753, 6462
2002, 20.734, 6635
2003, 20.831, 7336
2004, 23.029, 7248
2005, 23.597, 7491
2006, 23.584, 8161
2007, 24.407, 8578
2008, 26.773, 9000
2009, 28.417, 9493

G1 e G2 sono due grandezze rilevate consecutivamente su base annuale e su un periodo di 11 anni (dal 1999 al 2009). Tra qualche istante approfondiremo i caratteri che esse descrivono. Sul piano statistico, il coefficiente di correlazione tra G1 e G2, nel periodo 1999-2009, è pari a circa 0,97 ed esprime una correlazione positiva forte cioè un  alto grado di probabilità che le due grandezze si muoveranno nella stessa direzione. Supponiamo ora di voler creare un modello che aiuti a predire, noto il valore della grandezza G1 in un anno, il valore della grandezza G2 nell’anno successivo. Quindi, se 28.417 è il valore di G1 nel 2009, vorremmo predire il valore di G2 nel 2010 (che, per i nostri scopi di test, sappiamo già essere pari a 9913). Siamo alle prese con un problema di regressione: l’obiettivo è determinare un valore numerico. Potremmo optare per l’impiego di un algoritmo di regressione lineare come nel seguente caso:

import numpy as np
from sklearn import datasets, linear_model

# Load the dataset
data_X=np.array([[18084],[18594],[19753],[20734],[20831],[23029],[23597],[23584],[24407],[26773],[28417]])
target=np.array([[6198],[6462],[6635],[7336],[7248],[7491],[8161],[8578],[9000],[9493],[9913]])

# Split the data into training/testing sets
data_X_train = data_X[:-1]
data_X_test = data_X[-1:]

# Split the targets into training/testing sets
data_y_train = target[:-1]
data_y_test = target[-1:]

# Create linear regression object
regr = linear_model.LinearRegression(fit_intercept=False)

# Train the model using the training sets
regr.fit(data_X_train, data_y_train)

# Just a simple prediction
print "pred=",regr.predict(data_X_test)
print "actual=",data_y_test

Il valore di G2 predetto dal modello per il 2010 è 9938, significativamente prossimo a quello atteso. Una predizione decentemente utile, ma solo in apparenza.

Il punto è che le due grandezze in questione, G1 e G2, descrivono fenomeni completamente scollegati. G1 rappresenta gli investimenti annui degli USA in scienze e tecnologie (espressi in miliardi di dollari), G2 rappresenta il numero annuo di suicidi per soffocamento negli USA1. Interessante, no? Abbiamo appositamente individuato una correlazione priva di “sensatezza” (che in un dato intervallo di tempo appare anche statisticamente forte) tra due grandezze che rappresentano fenomeni completamente distanti. Quindi siamo pervenuti ad un modello che ha fornito una predizione apparentemente coerente.

Nel caso precedente si è volutamente creata una forzatura, tuttavia, nei casi reali una scelta superficiale dei dati di addestramento potrebbe agevolmente ricondurre a situazioni critiche. La matematica che è dietro all’apprendimento automatico non si occupa di valutare il reale significato dei dati proposti, questo è lasciato allo specialista che deve obbligatoriamente approfondire il dominio.

Sebbene il caso esemplificativo precedente sia di tipo supervisionato, anche l’apprendimento “non supervisionato” è impattato da argomentazioni analoghe.

Una conoscenza aprioristica blanda (o assente) di un dominio non aiuta certamente a riconoscere le grandezze più rappresentative e i modelli automatici risultanti sarebbero indotti a produrre inferenze tuttaltro che utili. Inoltre, cosa da non sottovalutare, a causa di meccanismi causali dedotti automaticamente e in modo implicito dalla macchina (e non evidenti all’uomo), potrebbe essere molto difficile valutare l’utilità di certe inferenze se non dopo averne sperimentato gli effetti.

Volume, Varietà e Veridicità sono tre dimensioni dei dati che influenzano significativamente il “cosa” e “come” scegliere ai fini dell’efficace addestramento di una soluzione di apprendimento automatico.  Le grandi quantità di dati, oggi disponibili ad oltranza su un qualsiasi dominio, rappresentano una condizione necessaria ma non sufficiente per l’applicazione dell’apprendimento automatico. Questo è vero anche nel più recente ambito dei sistemi cognitivi (cognitive computing) ove la notevole capacità di elaborazione di enormi volumi di dati (strutturati e non) tende ad essere anteposta alla valutazione a priori dell’effettiva veridicità/correlabilità dei dati stessi (o di parte di essi) ai fini della produzione di un ragionamento automatico concretamente apprezzabile ed utile. Ma questa è un’altra storia.

Il Cognitive Computing (elaborazione cognitiva) fa riferimento a soluzioni basate su architetture  che prevedono l’impiego combinato di più sottosistemi avanzati dall’ML, dal NLP, dal Deep Learning, etc. per l’elaborazione e la comprensione dei dati ad un livello che appare imitare, per profondità ed astrazione, i processi cognitivi umani.

Per esempio, attraverso l’uso combinato di soluzioni di processazione del linguaggio naturale (NLP) e algoritmi di deep learning su estese quantità di documenti (anche non strutturati), sono automaticamente individuate particolari correlazioni  estese tra le parole nel corpus di documenti. Tali correlazioni rendono praticabile un recupero a posteriori di documenti (o parti di essi) partendo da un’interrogazione (query) che potrebbe non includere le specifiche parole chiave utilizzate nei documenti, ma essere comunque concettualmente attinente. L’interrogazione è dunque basata sulla descrizione di un concetto di interesse più che su un elenco di parole che si assume essere chiave.

I casi d’uso, per il cognitive, sono numeorsi e non limitati certamente all’elaborazione del testo e al suo recupero. Il valore di queste soluzioni è comunque strettamente legato alla disponibilità di significative quatità di dati e alla loro intrinseca qualità, in relazione all’estensione del dominio di conoscenza.

 

  1. I dati relativi alle grandezze G1 e G2 sul periodo 1981-2014, per l’addestramento della rete neurale, sono stati recuperati da: https://goo.gl/MMMqyg (per i budget) e http://www.cdc.gov/injury/wisqars/fatal_injury_reports.html (per i decessi).

Pubblicato da lorenzo

Full-time engineer. I like to write about data science and artificial intelligence.

Vuoi commentare?