Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Previsioni del Tempo


Previsioni del tempo, usando Regressione Logistica, Foreste Causuali, PCA

In questo esempio le previsioni del tempo, usando

  • Regressione Logistica
  • Foresta Causuali
  • Principal component Analisys

Generazione di un data base casuale db.csv

Per generare il DB ho usato in codice

import numpy as np
import pandas as pd

# Genera il database casuale
np.random.seed(0)
n_rows = 1000
data = {
    'y': np.random.choice([0, 1], size=n_rows),  # Variabile target y (0: nuvoloso, 1: bel tempo)
    'temperatura': np.random.randint(0, 31, size=n_rows),  # Temperatura da 0 a 30
    'umidita': np.random.randint(10, 101, size=n_rows),  # Umidità da 10% a 100%
    'mese': np.random.randint(1, 13, size=n_rows)  # Mese dell'anno da 1 a 12
}
df = pd.DataFrame(data)

# Salva il dataframe in un file CSV
file_path = "~/Desktop/db.csv"  # Percorso del file sul desktop
df.to_csv(file_path, index=False)

print("Database salvato con successo in:", file_path)


 

Il DB si trova nella scrivania e lo stesso DB verrà usato per le 3 diverse simulazioni Posso cosi poi spostarlo nella directory del sito
La varibile y ha 2 valori
  • valore 1 che significa bel tempo, tale numero se la probabilità ottenuta è uguale o maggiore di 0,7 (0,7)
  • valore 0 che vuole dire nuvoloso, se la probabilità ottenuta è inferiore di 0,7 (0,7) .

Regressione Logistica

-Ecco il codice Python legge il db.csv
-Addestra un modello di regressione logistica per prevedere la probabilità di bel tempo in base alle tre variabili indipendenti
-Calcola la probabilità di bel tempo per una nuova riga

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Leggi il database dal file CSV
file_path = "/Applications/MAMP/htdocs/livio.bollini/SingoloArticolo-html/int-artificiale/approfondimenti/db.csv"
df = pd.read_csv(file_path)

# Dividi il database in training e test set (80% training, 20% test)
X = df[['temperatura', 'umidita', 'mese']]
y = df['y']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Inizializza il modello di regressione logistica
model = LogisticRegression()

# Addestra il modello
model.fit(X_train, y_train)

# Calcola l'accuratezza del modello
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuratezza del modello:", accuracy)

# Aggiungi una nuova riga con temperatura 2, umidità 90, mese 5
new_data = {'temperatura': [2], 'umidita': [90], 'mese': [5]}
new_row = pd.DataFrame(new_data)

# Calcola la probabilità che sia bel tempo
probabilita_bel_tempo = model.predict_proba(new_row)[0][1]
print("Probabilità che sia bel tempo:", probabilita_bel_tempo)

# Mostra le prime 10 righe del database
print("\nPrime 10 righe del database:")
print(df.head(10))


Ho eseguito il codice a terminale, poichè il db è

Risposta del codice:


Accuratezza del modello: 0.53
Probabilità di bel tempo per la nuova riga: 0.2545663926796696
Y previsto per la nuova riga (0 se inferiore a 0.7, 1 altrimenti): 0


Prime righe del database:
-------------
y temperatura umidita mese
0 7 69 10
0 10 24 6
1 27 58 7


Foreste Casuali


import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Leggi il database dal file CSV
file_path = "/Applications/MAMP/htdocs/livio.bollini/SingoloArticolo-html/int-artificiale/approfondimenti/db.csv"
df = pd.read_csv(file_path)

# Dividi il database in training e test set (80% training, 20% test)
X = df[['temperatura', 'umidita', 'mese']]
y = df['y']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Inizializza il modello Random Forest
model = RandomForestClassifier()

# Addestra il modello
model.fit(X_train, y_train)

# Calcola l'accuratezza del modello
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuratezza del modello:", accuracy)

# Aggiungi una nuova riga con temperatura 2, umidità 90, mese 5 e prevedi y
new_data = {'temperatura': [2], 'umidita': [90], 'mese': [5]}
new_row = pd.DataFrame(new_data)
predicted_y = model.predict(new_row)
print("Y previsto per la nuova riga:", predicted_y[0])

# Mostra le prime 10 righe del database
print("\nPrime 10 righe del database:")
print(df.head(10))

Accuratezza: 0,555

Principal Component Analysis


import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression

# Leggi il database dal file CSV
file_path = "/Applications/MAMP/htdocs/livio.bollini/SingoloArticolo-html/int-artificiale/approfondimenti/db.csv"
df = pd.read_csv(file_path)

# Riduci da 3 a 1 le variabili con PCA
pca = PCA(n_components=1)
X_pca = pca.fit_transform(df[['temperatura', 'umidita', 'mese']])
df['PCA_feature'] = X_pca

# Dividi il database in training e test set (80% training, 20% test)
X = df[['PCA_feature']]
y = df['y']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Inizializza il modello di regressione logistica
model = LogisticRegression()

# Addestra il modello
model.fit(X_train, y_train)

# Mostra le prime 10 righe del nuovo database
print("Prime 10 righe del nuovo database:")
print(df.head(10))

# Calcola y sulla base della regressione logistica per il test set
y_pred = model.predict(X_test)
y_proba = model.predict_proba(X_test)[:, 1]  # Probabilità di appartenenza alla classe positiva (bel tempo)
threshold = 0.7  # Soglia per determinare la classe
y_pred_adjusted = [1 if proba >= threshold else 0 for proba in y_proba]
accuracy = (y_pred_adjusted == y_test).mean()
print("Accuratezza del modello:", accuracy)

# Aggiungi una nuova riga con temperatura 2, umidità 90, mese 5
new_data = {'temperatura': [2], 'umidita': [90], 'mese': [5]}
new_row = pd.DataFrame(new_data)

# Applica la PCA alla nuova riga
new_row_pca = pca.transform(new_row)

# Calcola y sulla base della regressione logistica per la nuova riga
y_new_row_proba = model.predict_proba(new_row_pca)[:, 1]
y_new_row = 1 if y_new_row_proba >= threshold else 0
print("Y previsto per la nuova riga:", y_new_row)


In questo esempio
  • Riduco da 3 a 1 le variabili attraverso la tecnica della Principal Component Analysis.
  • Divido il nuovo data base trasformato in training e test (20%).
Nel nuovo DB applico la regressione logistica
y puo avere due valori:
  • valore 1 cioè bel tempo, se la probabilità ottenuta è uguale o maggiore di 0,7 (0,7)
  • valore 0 se la probabilità ottenuta è minore di 0,7 (0,7) .