Come fare Machine Learning con Python

Machine Learning con Python: Guida base a scikit-learn per principianti

    Il Machine Learning è oggi una delle tecnologie più potenti e diffuse nel mondo dell’informatica. Dai sistemi di raccomandazione alle previsioni meteo, dai motori di ricerca all’analisi dei dati finanziari, l’apprendimento automatico è ovunque. In questa guida scoprirai come muovere i primi passi con scikit-learn, la libreria Python più utilizzata per costruire modelli di machine learning.

    Cos’è il Machine Learning?

    Il Machine Learning (ML) è un insieme di tecniche che permettono a un sistema informatico di apprendere da dati esistenti per compiere previsioni o classificazioni. In altre parole, non si programma esplicitamente ogni singola azione, ma si forniscono al computer esempi (i dati) e un algoritmo per apprendere delle regole utili a generalizzare nuovi casi.

    Il Machine Learning si divide in due categorie principali:

    • Apprendimento supervisionato: l’algoritmo apprende da dati etichettati (es. immagini di cani e gatti con le rispettive etichette).
    • Apprendimento non supervisionato: l’algoritmo cerca schemi nei dati non etichettati (es. clustering o riduzione dimensionale).

    Cos’è scikit-learn?

    scikit-learn è una libreria open source basata su Python che offre strumenti semplici ed efficienti per l’analisi predittiva dei dati. È costruita sopra NumPy, SciPy e Matplotlib, ed è perfetta per chi vuole iniziare a sperimentare con modelli di classificazione, regressione o clustering, anche con una conoscenza limitata della matematica avanzata.

    Con scikit-learn puoi:

    • Caricare e analizzare dataset reali o di esempio
    • Preprocessare dati e costruire pipeline
    • Addestrare modelli e valutarne le prestazioni
    • Integrare facilmente altri strumenti come pandas, seaborn e Jupyter

    Prerequisiti e installazione

    Per seguire questa guida ti serviranno:

    • Python 3.8 o superiore
    • Conoscenze base di Python (liste, funzioni, import)
    • Librerie installate: scikit-learn, numpy, matplotlib

    Installa tutto con:

    pip install scikit-learn numpy matplotlib
    

    Il flusso di lavoro nel Machine Learning

    Ogni progetto di machine learning segue una sequenza di fasi comuni:

    1. Caricamento dei dati
    2. Esplorazione e analisi preliminare
    3. Pulizia e preparazione (preprocessing)
    4. Suddivisione in dati di addestramento e test
    5. Scelta del modello e addestramento
    6. Valutazione delle prestazioni
    7. Ottimizzazione del modello (se necessario)
    8. Previsioni su nuovi dati

    Vediamolo in pratica con un esempio classico.

    Costruiamo un modello: classificazione con il dataset Iris

    Il dataset Iris è uno dei più usati per sperimentare. Contiene misurazioni su tre specie di fiori (setosa, versicolor, virginica) in base a lunghezza e larghezza di petali e sepali.

    Caricamento del dataset

    from sklearn.datasets import load_iris
    iris = load_iris()
    
    X = iris.data      # Caratteristiche (feature)
    y = iris.target    # Etichette (target)
    

    Suddivisione del dataset

    Separiamo i dati in set di addestramento (80%) e test (20%):

    from sklearn.model_selection import train_test_split
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    

    Addestramento del modello

    Scegliamo il classificatore K-Nearest Neighbors (KNN), semplice ma efficace:

    from sklearn.neighbors import KNeighborsClassifier
    
    model = KNeighborsClassifier(n_neighbors=3)
    model.fit(X_train, y_train)
    

    Valutazione del modello

    Calcoliamo l’accuratezza, cioè la percentuale di previsioni corrette sui dati di test:

    accuracy = model.score(X_test, y_test)
    print(f"Accuratezza: {accuracy:.2f}")
    

    Previsioni su nuovi dati

    Possiamo usare il modello per prevedere la specie di un nuovo fiore:

    import numpy as np
    
    nuovo_fiore = np.array([[5.1, 3.5, 1.4, 0.2]])
    predizione = model.predict(nuovo_fiore)
    print(f"Specie predetta: {iris.target_names[predizione[0]]}")
    

    Metriche di valutazione più avanzate

    L’accuratezza non sempre basta. È utile analizzare anche:

    • Matrice di confusione
    • Precisione
    • Recall
    • F1-score
    from sklearn.metrics import classification_report, confusion_matrix
    
    y_pred = model.predict(X_test)
    print(confusion_matrix(y_test, y_pred))
    print(classification_report(y_test, y_pred, target_names=iris.target_names))
    

    Introduzione alle pipeline

    Con scikit-learn possiamo costruire pipeline che combinano più fasi, come normalizzazione e addestramento, in un unico oggetto facilmente riutilizzabile.

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler
    
    pipeline = Pipeline([
        ('scaling', StandardScaler()),
        ('classifier', KNeighborsClassifier(n_neighbors=3))
    ])
    
    pipeline.fit(X_train, y_train)
    accuracy = pipeline.score(X_test, y_test)
    print(f"Accuratezza con pipeline: {accuracy:.2f}")
    

    Con questa guida hai imparato i fondamenti del machine learning con scikit-learn: caricamento dei dati, addestramento di un modello, valutazione delle prestazioni e previsioni. scikit-learn è solo l’inizio: il passo successivo è esplorare dataset più complessi, confrontare diversi algoritmi e imparare tecniche avanzate come la validazione incrociata o l’ottimizzazione degli iperparametri.

    Se desideri continuare, puoi approfondire:

    • Regressione lineare e logistica
    • Support Vector Machine (SVM)
    • Random Forest e alberi decisionali
    • Clustering con K-Means o DBSCAN
    Shinobi

    Shinobi