Gli scienziati dei dati utilizzano l'intelligenza artificiale (AI) per... praticamente qualsiasi cosa .
L'intelligenza artificiale può eseguire sistemi di controllo per ridurre il consumo energetico degli edifici , fornire consigli su vestiti da acquistare o spettacoli da guardare, aiutare a migliorare le pratiche agricole per aumentare la quantità di cibo che possiamo coltivare in modo sostenibile e un giorno un algoritmo di intelligenza artificiale potrebbe persino guidare le nostre auto .
Fortunatamente, iniziare con l'IA non è poi così difficile per chi ha già esperienza con Python e l'analisi dei dati. Puoi sfruttare il potente pacchetto scikit-learn per fare la maggior parte del duro lavoro per te.
Scikit-learn è un pacchetto Python progettato per facilitare l'uso dell'apprendimento automatico e degli algoritmi di intelligenza artificiale. Questo pacchetto include algoritmi utilizzati per la classificazione, la regressione e il raggruppamento come foreste casuali e aumento del gradiente. Scikit-learn è stato progettato per interfacciarsi facilmente con i comuni pacchetti scientifici NumPy e SciPy. Sebbene scikit-learn non sia stato specificamente progettato per, si interfaccia ottimamente anche con Pandas.
Che cosa è SCIKIT-LEARN ?
Scikit-learn è un pacchetto Python progettato per facilitare l'uso dell'apprendimento automatico e degli algoritmi di intelligenza artificiale. Sci-kit learn include algoritmi utilizzati per la classificazione, la regressione e il clustering.
Scikit-learn include strumenti utili per facilitare l'uso di algoritmi di apprendimento automatico. Lo sviluppo di pipeline di machine learning in grado di prevedere con precisione il comportamento di un sistema richiede la suddivisione dei dati in set di training e test , l' assegnazione di un punteggio agli algoritmi per determinare il loro corretto funzionamento e la garanzia che i modelli non siano né overfit né underfit.
Come funzionano gli algoritmi di Scikit-Learn?
Possiamo sviluppare e testare algoritmi di scikit-learn in tre fasi generali.
PASSAGGI PER SVILUPPARE E TESTARE GLI ALGORITMI SCIKIT-LEARN :
Addestrare il modello utilizzando un set di dati esistente che descrive i fenomeni che è necessario prevedere per il modello.
Testa il modello su un altro set di dati esistente per assicurarti che funzioni correttamente.
Usa il modello per prevedere i fenomeni in base alle esigenze del tuo progetto.
L'API (Application Programming Interface) di scikit-learn fornisce i comandi per eseguire ciascuno di questi passaggi con una singola chiamata di funzione. Tutti gli algoritmi di scikit-learn usano le stesse chiamate di funzione per questo processo, quindi se lo impari per uno lo impari per tutti.
La chiamata di funzione per addestrare un algoritmo di scikit-learn è .fit(). Per addestrare ogni modello, chiami la funzione .fit e gli passi due componenti del set di dati di addestramento. I due componenti sono x set di dati, che fornisce i dati che descrivono le caratteristiche del set di dati, e y , che forniscono i dati che descrivono gli obiettivi del sistema.
Nota: quando si parla di funzionalità e obiettivi, si tratta essenzialmente di termini x e y, dove x sono le variabili che descrivono la nostra y
Esempio Pratico Scikit-Learn
L'algoritmo crea quindi un modello matematico, come determinato dall'algoritmo selezionato e dai parametri del modello. Il modello matematico corrisponde il più possibile ai dati di allenamento forniti. L'algoritmo memorizza quindi i parametri nel modello, che consente di chiamare la versione adatta del modello secondo necessità per il progetto.
La funzione per testare l'adattamento del modello è .score(). Per utilizzare questa funzione si chiama nuovamente la funzione e si passa un set di dati x, che rappresenta le caratteristiche, e il set di dati y corrispondente , che rappresenta gli obiettivi. È importante che il set di dati che utilizzi durante il test dei dati (il set di dati del test) sia diverso dal set di dati che utilizzi per addestrare il modello. È molto probabile che un modello ottenga un punteggio molto buono quando viene valutato sui dati di addestramento perché lo hai forzato matematicamente a corrispondere a quel set di dati. Il vero test è il rendimento del modello su un set di dati diverso, che è lo scopo del set di dati di test. Quando si chiama il . score()funzione, scikit-learn restituirà il valore r² indicando quanto bene il modello ha previsto quanto fornito set di dati ys utilizzando il set di dati x.
È possibile prevedere gli output di un sistema dati gli input forniti utilizzando la funzione .predict() di scikit-learn . È importante farlo solo dopo aver adattato il modello. L'adattamento è il modo in cui si regola il modello in modo che corrisponda al set di dati, quindi se non lo si adatta prima, il modello non fornirà una previsione preziosa. Una volta che hai adattato il modello, puoi passare un x alla funzione .predict() e restituirà y come previsto dal modello. In questo modo puoi prevedere come si comporterà un sistema in futuro.
Queste tre funzioni costituiscono il nucleo dell'API scikit-learn e fanno molto per applicare l'intelligenza artificiale ai tuoi problemi tecnici.
Come posso creare set di dati di training e test?
La creazione di set di dati di addestramento e test separati è una componente fondamentale dell'addestramento dei modelli di intelligenza artificiale. Senza questo passaggio non possiamo creare un modello che corrisponda al sistema che stiamo cercando di prevedere, né possiamo verificare l'accuratezza delle nostre previsioni. Fortunatamente, scikit-learn fornisce uno strumento utile per facilitare questo processo: la train_test_split() .
Train_test_split() fa esattamente quello che sembra. Suddivide un set di dati fornito in set di dati di addestramento e test. Puoi usarlo per creare i set di dati di cui hai bisogno per assicurarti che il tuo modello preveda correttamente il sistema che stai studiando. Fornisci un set di dati train_test_split() e fornisce i set di dati di addestramento e test di cui hai bisogno.
Ci sono alcune cose a cui prestare attenzione quando si utilizza train_test_split(). Innanzitutto, train_test_split()è di natura casuale, il che significa che non restituirà gli stessi set di dati di training e test se si esegue più volte con gli stessi dati di input. Questo può essere utile se si desidera testare la variabilità dell'accuratezza del modello, ma può anche essere negativo se si desidera utilizzare ripetutamente lo stesso set di dati sul modello. Per assicurarti di ottenere lo stesso risultato ogni volta puoi utilizzare il random_stateparametro. L'impostazione dello stato casuale forzerà train_test_split()l'uso dello stesso seme di randomizzazione ogni volta che lo esegui e fornirà le stesse suddivisioni del set di dati. Quando si utilizza random_stateè consuetudine impostarlo su 42, probabilmente come un cenno umoristico alla Guida galattica per autostoppisti più che per qualsiasi motivo tecnico.
Come funziona tutto questo insieme?
Tutti combinati, questi strumenti creano un'interfaccia semplificata per creare e utilizzare strumenti di apprendimento di scikit. Parliamone usando l'esempio del modello di regressione lineare di scikit-learn .
Per implementare questo processo dobbiamo prima importare i nostri strumenti: il modello scikit-learn, la train_test_split()funzione e Panda per il processo di analisi dei dati. Importiamo le funzioni come segue:
from scikit-learn.linear_model import LinearRegression
from scikit-learn.model_selection import train_test_split
import pandas as pd
Possiamo quindi leggere un set di dati in modo che sia disponibile per l'addestramento e il test del modello. Ho creato un set di dati realistico che dimostra le prestazioni degli scaldacqua a pompa di calore (HPWH) in funzione delle loro condizioni operative, in modo specifico per aiutare le persone ad apprendere la scienza dei dati e le competenze ingegneristiche .
Supponendo che tu abbia scaricato quel set di dati e salvato nella stessa cartella del tuo script, puoi aprirlo usando la seguente riga di codice. In caso contrario, puoi modificare questi passaggi secondo necessità per esercitarti su qualsiasi set di dati che desideri.
data = pd.read_csv('COP_HPWH_f_Tamb&Tavg.csv', index_col = 0)
Il passaggio successivo consiste nel suddividere il set di dati in xe ydati. Per fare ciò creiamo nuovi data frame specificando le colonne del data set che rappresentano le caratteristiche e gli obiettivi. Nel caso degli HPWH, le caratteristiche sono la temperatura del serbatoio e la temperatura ambiente mentre l'obiettivo è il consumo di elettricità.
Il set di dati contiene otto colonne che mostrano la temperatura dell'acqua a otto diverse profondità nel serbatoio dell'acqua, ciascuna denominata Tx (deg F)dove xè un numero che rappresenta la posizione della misurazione.
Il set di dati contiene anche una colonna che mostra la temperatura ambiente misurata nello spazio circostante lo scaldabagno, denominata T_Amb (deg F). Infine, il set di dati contiene una colonna che memorizza i dati sul consumo di elettricità denominata P_Elec (W). In questo caso, è anche importante filtrare il nostro set di dati in modo tale da utilizzare i dati solo quando il sistema utilizza l'elettricità. Se saltiamo questo passaggio, introdurremo la non linearità in un modello lineare, che imposta il modello per fallire.
Possiamo eseguire tutti questi passaggi utilizzando il seguente codice:
# filtriamo i dati con power > 0
data = data[data['P_Elec (W)'] > 0]
# Identifichiamo x
x_columns = ['T_Amb (deg F)']
for i in range(1, 9):
x_columns.append('T{} (deg F)'.format(i))
x = data[x_columns] #Creiamo la colonna y
y = data['P_Elec (W)']
Ora che abbiamo x e y , possiamo dividerli in set di dati di addestramento e test. Lo facciamo chiamando la train_test_split() funzione di scikit-learn come segue.
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state = 42)
Ora che abbiamo a disposizione set di dati di training e test, possiamo creare e adattare il modello di regressione lineare al set di dati. Innanzitutto, creiamo un'istanza del modello, quindi chiamiamo la .fit() come segue.
model = LinearRegression()
model = model.fit(x_train, y_train)
Si noti che questa implementazione ha utilizzato i parametri predefiniti del modello di regressione lineare. Questo potrebbe o meno fornire un buon adattamento ai dati e potrebbe essere necessario modificare i parametri per ottenere un buon adattamento. Per ora, usiamo i parametri predefiniti per apprendere questi concetti.
Il passaggio successivo consiste nel valutare il modello sul set di dati di test per assicurarsi che si adatti bene al set di dati. Puoi farlo chiamando .score() e passando i dati di test.
score = model.score(x_test, y_test)
Se il modello ottiene un buon punteggio nel set di dati di test, è probabile che tu abbia un modello ben addestrato e appropriato per il set di dati. Se il modello non ottiene un buon punteggio, è necessario prendere in considerazione la raccolta di più dati, la regolazione dei parametri del modello o l'utilizzo di un modello completamente diverso.
Se il modello funziona bene, puoi dichiarare il modello pronto per l'uso e iniziare a prevedere il comportamento del sistema. Poiché non abbiamo un set di dati aggiuntivo da prevedere in questo momento, possiamo semplicemente prevedere l'output sul set di dati di test. Per fare ciò, chiami la funzione .predict() come segue.
predict = model.predict(x_test)
La variabile di previsione ora manterrà l'output previsto del sistema quando esposto agli input come definito da X_test. È quindi possibile utilizzare questi output per confrontare direttamente i valori nel ytest, il che consente di esaminare con maggiore attenzione l'adattamento del modello e l'accuratezza della previsione.
Quanto bene si comporta questo modello?
Poiché abbiamo calcolato il punteggio del modello e l'abbiamo salvato nel punteggio variabile, possiamo vedere rapidamente come il modello prevede il consumo di elettricità dell'HPWH. In questo caso, il punteggio del modello è 0,58.
R² è una metrica che raggiunge il massimo a uno perché si indica che il modello spiega perfettamente il comportamento del sistema. Più basso è il valore, peggiore è l'adattamento (e, sì, può essere negativo). Un valore r² di 0,58 indica che il modello spiega un po' il comportamento osservato, ma non è eccezionale.
Come promemoria, per migliorare possiamo:
Raccogliere più dati
Regolare i parametri del modello
Usare un modello completamente diverso
Potremmo certamente raccogliere più dati o regolare i parametri del modello di regressione lineare, ma il problema principale qui è che la relazione tra il consumo di energia della pompa di calore e la temperatura dell'acqua è probabilmente non lineare. È difficile per un modello lineare prevedere qualcosa che non sia lineare!
Possiamo provare lo stesso metodo utilizzando un modello progettato per sistemi non lineari e vedere se otteniamo risultati migliori. Un possibile modello è il regressore della foresta casuale . Possiamo provarlo aggiungendo il seguente codice alla fine dello script.
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
model.fit(x_train, y_train)
score = model.score(x_test, y_test)
Questo metodo produce un punteggio molto alto di 0,9999, che è sospetto nell'altro modo. C'è una ragionevole possibilità che questo modello sia in overfitting al set di dati e non produrrà effettivamente previsioni realistiche in futuro.
Sfortunatamente, questo non è qualcosa che possiamo veramente determinare dato il set di dati disponibile. Se utilizzi questo modello per iniziare a prevedere il sistema, dovrai monitorare attentamente il modello per vedere come si comporta man mano che diventano disponibili più dati e per continuare ad addestrarlo. Tracciare le previsioni rispetto ai dati misurati fornirebbe anche informazioni su come si comporta il modello.
Per questo particolare set di dati, dirò che mi fido di questo modello perché questo set di dati non contiene dati misurati effettivi; è un set di dati di esempio che ho creato implementando un'equazione di regressione per mostrare come si comporta un HPWH in queste condizioni. Ciò significa che il regressore della foresta casuale probabilmente corrisponde ai dati così bene perché ha identificato l'equazione che ho usato per creare il set di dati.
Conclusioni
E con ciò, dovresti essere in ottima forma per iniziare a utilizzare scikit-learn per implementare l'apprendimento automatico e l'intelligenza artificiale! Se vi ricordate che tutti gli algoritmi di scikit-learn usano le funzioni fit(), score() e predict() ed è possibile creare i set di dati utilizzando train_test_split(), allora sei sulla buona strada per sviluppare ottimi modelli di I.A. con python.
Comentários