Come fare la regressione lineare su Python con Scikit Learn

Per elaborare un dataset di dati tramite un algoritmo di regressione posso usare il modulo Scikit Learn di Python. Il modulo contiene diversi algoritmi di machine learning, tra cui l'algoritmo di regressione lineare (o regressore).

Cos'è la regressione? E' un algoritmo di machine learning. La regressione lineare restituisce in output un valore numerico reale. Si distingue dagli algoritmi di classificazione (o classificatori) che, invece, restituiscono in output una classe.

    Un esempio pratico

    A] La costruzione del modello

    Importo da Scikit Learn un dataset di addestramento per fare una prova.

    Opto per il dataset che contiene 500 esempi di prezzi di case a Boston. E' utile per scopi didattici.

    from sklearn.datasets import load_boston

    Assegno i dati alla variabile dataset

    dataset = load_boston()

    La variabile dataset contiene una matrice con n+1 colonne, ossia n caratteristiche x e un prezzo y.

    Ogni riga del dataset di train è una casa con diverse caratteristiche x (features) e un prezzo y.

    In tutto ci sono tredici caratteristiche ( tasso di criminalità, distanza dal fiume, % di zone residenziali, ecc. )

    Per vedere tutte le caratteristiche del dataset digito.

    print(dataset['DESCR'])

    Per vedere i dati del dataset, invece, digito

    print(dataset['data'])

    o per vederne uno solo (il primo) digito

    print(dataset['data'][0])

    Ora suddivido la matrice in due parti.

    La variabile X contiene soltanto la matrice con i dati mentre la variabile y solo il vettore dei prezzi.

    X=dataset['data']
    y=dataset['target']

    Suddivido ulteriormente il dataset in un insieme di training e un insieme di test.

    Per farlo richiamo la funzione train_test_split() di sklearn.

    from sklearn.model_selection import train_test_split

    Prima di usarla fisso il generatore di numeri random a un seme per evitare la suddivisione casuale.

    E' utile per avere sempre gli stessi risultati quando si lancia più volte l'addestramento del modello.

    from numpy import random
    random.seed(0)

    Assegno la suddivisione alle variabili X_train, y_train, X_test, y_test, fissando la dimensione dell'insieme di test al 30% del dataset.

    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3)

    A questo punto importo l'algoritmo di regressione lineare da Scikit-Learn.

    from sklearn.linear.model import LinearRegression

    Questo algoritmo ha due metodi principali:

    • fit()
      Addestra il modello usando i dati del dataset.
    • predict()
      Usa il modello per fare una previsione e rispondere a una query.

    Nota. In scikit-learn la classe ha lo stesso nome del modello di addestramento. Inoltre, i metodo fit() e predict() hanno lo stesso nome per ogni algoritmo. Il che è un bel vantaggio perché mi permette di cambiare algoritmo di addestramento lasciando immutato il codice e i dati.

    Assegno la classe dell'algoritmo regressore a un'istanza.

    In questo caso assegno all'istanza il nome modello, qualsiasi altro nome andrebbe bene.

    modello=LinearRegression()

    L'istanza modello è la variabile in cui sarà registrato il modello al termine dell'addestramento.

    A questo punto addestro il modello con il metodo fit() passandogli in input le caratteristiche X (features) e i prezzi y dell'insieme di training.

    modello.fit(X_train,y_train)

    Se tutto va bene, in pochi secondi il modello viene costruito.

    B] La verifica del modello ( fase di test )

    A questo punto devo vedere se il modello funziona bene, ossia se calcola i prezzi con un margine d'errore accettabile.

    Utilizzo il metodo predict() per calcolare i prezzi delle case, passandogli soltanto la matrice delle caratteristiche X dell'insieme di test.

    Salvo vettore con i prezzi previsti dal modello viene salvato nella variabile p.

    p=modello.predict(X_test)

    Poi verifico le differenze tra il vettore dei prezzi p, appena calcolato, e il vettore dei prezzi reali dell'insieme di test (y_test).

    Carico in memoria un algoritmo per calcolare l'errore assoluto medio.

    from sklearn.metrics import mean_absolute_error

    Infine lo utilizzo per confrontare i due vettori.

    m=mean_absolute_error(y_test,p)

    Nella variabile m viene salvato l'errore medio tra i due vettori.

    Quanto più basso è il valore m, tanto migliore è l'affidabilità del modello di regressione.

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Libri di approfondimento

    Scikit-learn

    1. Cos'è sklearn
    2. Come installare sklearn
    3. Un esempio di machine learning
    4. Come usare i datasets didattici di scikit-learn
    5. Come creare un dataset con Excel
    6. Come rappresentare le regioni decisionali
    7. La vettorizzazione delle categorie
    8. StandardScaler ( riduzione di scala )
    9. L'analisi degli errori del classificatore
    10. L'analisi degli errori del regressore
    11. Perceptron
    12. La regressione lineare
    13. La regressione logistica
    14. Decision Tree Classifier
    15. k-NN (k Nearest Neighbors)
    16. MLPClassifier