Novità

Python - Addestramento rete neurale

SatuRno17

Senior Member
Apro questa discussione per condividere con gli appassionati di IA questo codice in python che addestra un rete neurale (tensorflow) per fare previsioni lotto.
Considerazioni importanti:

1. Il codice è stato creato con l'aiuto di chatGpt ma ho dovuto modificarlo altrimenti non funzionava correttamente.
2. Il codice elabora una previsione che per il momento non è attendibile (dalle prove fatte per adesso ha un' accuracy intorno al 20%) ma tutto si può migliorare quindi chiunque voglia modificarlo è ben accetto. Ovviamente sto cercando di modificarlo ma venendo dal basic mi trovo molto in difficoltà con questo linguaggio e perdo tanto tempo tra gli errori di scrittura.
3. Siccome c'è bisogno di un'archivio.csv, io ho provato a cercare/creare qualcosa ma per il momento sono riuscito solo ad ottenere un archivio di Bari anno 2024 che non mi fa allegare non so perchè (dimensione 6 Kb).
N.B. per eseguire il codice serve Python versione 3.10 e serve aver installato le librerie : numpy, pandas, tensorflow
Python:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

data = pd.read_csv(r"2024_BA.csv",header=None,sep=";")

# Filtra i numeri estratti
numeri = data.iloc[:, 1:6].values  # Seleziona le colonne con gli estratti

# Normalizza i numeri (ad esempio da 1-90 a 0-1)
scaler = MinMaxScaler(feature_range=(0, 1))
numeri_normalizzati = scaler.fit_transform(numeri)

# Creazione dei dati di input (X) e output (y)
X = numeri_normalizzati[:-1]  # Tutti i gruppi tranne l'ultimo
y = numeri_normalizzati[1:]   # Gruppi spostati in avanti di una riga

# Dividere i dati in train e test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. Creare il modello di rete neurale
model = Sequential()
model.add(Dense(128, input_dim=X.shape[1], activation="relu"))  # Primo livello
model.add(Dense(64, activation="relu"))                        # Secondo livello
model.add(Dense(X.shape[1], activation="sigmoid"))             # Livello di output

# 4. Compilare il modello
model.compile(optimizer="adam", loss="mean_squared_error", metrics=["accuracy"])

# 5. Addestrare il modello
history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))

# 6. Valutare il modello
loss, accuracy = model.evaluate(X_test, y_test)
print(f"Loss: {loss}, accuracy: {accuracy}")

# 7. Previsione
# Prevedere il prossimo gruppo di numeri (esempio)
next_prediction = model.predict(X_test[:1])  # Usa il primo elemento del test set
numeri_originali = scaler.inverse_transform(next_prediction)  # Riconverti i numeri al range originale
numeri_interi = numeri_originali.round().astype(int)
print("Prossima previsione:", numeri_interi[0])
 
ciao
ho provato a modificarlo solo per far in modo che leggesse i miei file in txt aggiornabili con un piccolo programma fatto da me per le estrazioni

ti allego un img vediamo
Screenshot-7.png
 
Bravissimo Lottopython, sono contento che il codice funzioni anche con file text. Complimenti! 👏 Ora bisogna perfezionarlo 👍
 
si sto facendo delle verifiche sommarie poi ti giro il codice con le ruote e il programmino per aggiornare i file ruote semplicemente impostando le nuove data da: a:
 
è una prima bozza da verificare correggere e impostare meglio ,il formato ruote è YYYY/MM/DD il programmino per l'aggiornamento è davvero semplice scarica lo storico lo scompatta e aggiorna le ruote in un colpo solo , attenzione solo alla ruota nazionale che va rinominata da RN A NZ tutto qui.
 

Allegati

Si sto provando a scrivere qualcosa ma purtroppo sono troppo legato al basic e faccio parecchi errori di sintassi
Tipo
Codice:
Basic :
a <> b ' a diverso da b

Python :
a != b # a diverso da b
 
in questo ho inserito un piccolo box txt per i risultati
niente di che ma prima è necessario verificare il codice e i risultati che credo vada un po rivisto

Codice:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import tkinter as tk
from tkinter import messagebox, scrolledtext

# Definizione dei file delle ruote
file_ruote = {
    'BA': 'Bari.txt',
    'CA': 'Cagliari.txt',
    'FI': 'Firenze.txt',
    'GE': 'Genova.txt',
    'MI': 'Milano.txt',
    'NA': 'Napoli.txt',
    'PA': 'Palermo.txt',
    'RM': 'Roma.txt',
    'TO': 'Torino.txt',
    'VE': 'Venezia.txt',
    'NZ': 'Nazionale.txt'
}

# Funzione per caricare i dati della ruota selezionata
def carica_dati(ruota):
    file_name = file_ruote[ruota]
    try:
        # Usa il separatore di tabulazione per leggere il file
        data = pd.read_csv(file_name, header=None, sep="\t")
        print(f"File caricato: {file_name}")

        # Seleziona solo i numeri (dalla terza colonna in poi)
        numeri = data.iloc[:, 2:].values

        if numeri.size == 0:
            print("Nessun numero trovato nel file.")
            return None, None, None

        # Normalizza i numeri
        scaler = MinMaxScaler(feature_range=(0, 1))
        numeri_normalizzati = scaler.fit_transform(numeri.astype(float))

        X = numeri_normalizzati[:-1]  # Tutti i numeri tranne l'ultimo
        y = numeri_normalizzati[1:]    # Tutti i numeri a partire dal secondo

        return X, y, scaler
    except Exception as e:
        print(f"Errore durante il caricamento dei dati: {e}")
        return None, None, None

# Funzione per gestire la selezione della ruota
def on_seleziona_ruota(ruota):
    X, y, scaler = carica_dati(ruota)
    
    if X is not None and y is not None:
        print(f"Dimensione X: {X.shape}, Dimensione y: {y.shape}")

        # Dividere i dati in train e test
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

        # Creare il modello di rete neurale
        model = Sequential()
        model.add(Dense(128, input_shape=(X.shape[1],), activation="relu"))
        model.add(Dense(64, activation="relu"))
        model.add(Dense(X.shape[1], activation="sigmoid"))

        # Compilare il modello
        model.compile(optimizer="adam", loss="mean_squared_error", metrics=["accuracy"])

        # Addestrare il modello
        model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))

        # Previsione dei numeri
        next_prediction = model.predict(X_test[:1])
        numeri_originali = scaler.inverse_transform(next_prediction)
        numeri_interi = numeri_originali.round().astype(int)

        # Visualizza i numeri previsti e la ruota
        risultato = f"Nella ruota {ruota}, i numeri previsti sono:\n" + ", ".join(map(str, numeri_interi[0]))
        print(risultato)
        mostra_risultati(risultato)
    else:
        print("Impossibile addestrare il modello. Verifica i dati caricati.")

# Funzione di visualizzazione dei risultati
def mostra_risultati(risultato):
    text_area.delete(1.0, tk.END)  # Pulisci il box di testo
    text_area.insert(tk.END, risultato)  # Inserisci il risultato

# Funzione per esportare i numeri in un file
def esporta_numeri(numeri):
    try:
        with open("numeri_previsti.txt", "w") as file:
            file.write("Prossimi numeri da giocare:\n")
            file.write(", ".join(map(str, numeri[0])) + "\n")
        messagebox.showinfo("Esportazione completata", "Numeri esportati in numeri_previsti.txt")
    except Exception as e:
        messagebox.showerror("Errore", f"Errore durante l'esportazione: {e}")

# Creazione della finestra di selezione della ruota
root = tk.Tk()
root.title("Seleziona Ruota")

# Creazione dei pulsanti per la selezione delle ruote
for ruota in file_ruote.keys():
    btn = tk.Button(root, text=ruota, command=lambda r=ruota: on_seleziona_ruota(r))
    btn.pack(pady=5)

# Creazione di un box di testo per visualizzare i risultati
text_area = scrolledtext.ScrolledText(root, width=50, height=10)
text_area.pack(pady=10)

# Aggiungi un pulsante per esportare i numeri previsti
btn_export = tk.Button(root, text="Esporta Numeri", command=lambda: esporta_numeri(numeri_interi))
btn_export.pack(pady=5)

root.mainloop()
 
in questo ho inserito un piccolo box txt per i risultati
niente di che ma prima è necessario verificare il codice e i risultati che credo vada un po rivisto

Codice:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import tkinter as tk
from tkinter import messagebox, scrolledtext

# Definizione dei file delle ruote
file_ruote = {
    'BA': 'Bari.txt',
    'CA': 'Cagliari.txt',
    'FI': 'Firenze.txt',
    'GE': 'Genova.txt',
    'MI': 'Milano.txt',
    'NA': 'Napoli.txt',
    'PA': 'Palermo.txt',
    'RM': 'Roma.txt',
    'TO': 'Torino.txt',
    'VE': 'Venezia.txt',
    'NZ': 'Nazionale.txt'
}

# Funzione per caricare i dati della ruota selezionata
def carica_dati(ruota):
    file_name = file_ruote[ruota]
    try:
        # Usa il separatore di tabulazione per leggere il file
        data = pd.read_csv(file_name, header=None, sep="\t")
        print(f"File caricato: {file_name}")

        # Seleziona solo i numeri (dalla terza colonna in poi)
        numeri = data.iloc[:, 2:].values

        if numeri.size == 0:
            print("Nessun numero trovato nel file.")
            return None, None, None

        # Normalizza i numeri
        scaler = MinMaxScaler(feature_range=(0, 1))
        numeri_normalizzati = scaler.fit_transform(numeri.astype(float))

        X = numeri_normalizzati[:-1]  # Tutti i numeri tranne l'ultimo
        y = numeri_normalizzati[1:]    # Tutti i numeri a partire dal secondo

        return X, y, scaler
    except Exception as e:
        print(f"Errore durante il caricamento dei dati: {e}")
        return None, None, None

# Funzione per gestire la selezione della ruota
def on_seleziona_ruota(ruota):
    X, y, scaler = carica_dati(ruota)
   
    if X is not None and y is not None:
        print(f"Dimensione X: {X.shape}, Dimensione y: {y.shape}")

        # Dividere i dati in train e test
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

        # Creare il modello di rete neurale
        model = Sequential()
        model.add(Dense(128, input_shape=(X.shape[1],), activation="relu"))
        model.add(Dense(64, activation="relu"))
        model.add(Dense(X.shape[1], activation="sigmoid"))

        # Compilare il modello
        model.compile(optimizer="adam", loss="mean_squared_error", metrics=["accuracy"])

        # Addestrare il modello
        model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))

        # Previsione dei numeri
        next_prediction = model.predict(X_test[:1])
        numeri_originali = scaler.inverse_transform(next_prediction)
        numeri_interi = numeri_originali.round().astype(int)

        # Visualizza i numeri previsti e la ruota
        risultato = f"Nella ruota {ruota}, i numeri previsti sono:\n" + ", ".join(map(str, numeri_interi[0]))
        print(risultato)
        mostra_risultati(risultato)
    else:
        print("Impossibile addestrare il modello. Verifica i dati caricati.")

# Funzione di visualizzazione dei risultati
def mostra_risultati(risultato):
    text_area.delete(1.0, tk.END)  # Pulisci il box di testo
    text_area.insert(tk.END, risultato)  # Inserisci il risultato

# Funzione per esportare i numeri in un file
def esporta_numeri(numeri):
    try:
        with open("numeri_previsti.txt", "w") as file:
            file.write("Prossimi numeri da giocare:\n")
            file.write(", ".join(map(str, numeri[0])) + "\n")
        messagebox.showinfo("Esportazione completata", "Numeri esportati in numeri_previsti.txt")
    except Exception as e:
        messagebox.showerror("Errore", f"Errore durante l'esportazione: {e}")

# Creazione della finestra di selezione della ruota
root = tk.Tk()
root.title("Seleziona Ruota")

# Creazione dei pulsanti per la selezione delle ruote
for ruota in file_ruote.keys():
    btn = tk.Button(root, text=ruota, command=lambda r=ruota: on_seleziona_ruota(r))
    btn.pack(pady=5)

# Creazione di un box di testo per visualizzare i risultati
text_area = scrolledtext.ScrolledText(root, width=50, height=10)
text_area.pack(pady=10)

# Aggiungi un pulsante per esportare i numeri previsti
btn_export = tk.Button(root, text="Esporta Numeri", command=lambda: esporta_numeri(numeri_interi))
btn_export.pack(pady=5)

root.mainloop()
Mi ci vorrà un bel pò di tempo per capirlo, comunque ti ringrazio ancora (y)
 
utilizza al meglio L'IA ti darà un gran supporto e di pari passo impari piu velocemente non che io sia una cima eh sia chiaro ,in confronto ai mostri sacri qui sono agli inizi
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 14 gennaio 2025
    Bari
    41
    25
    12
    73
    55
    Cagliari
    54
    20
    48
    32
    67
    Firenze
    75
    23
    68
    10
    38
    Genova
    33
    27
    81
    70
    64
    Milano
    68
    01
    64
    86
    87
    Napoli
    47
    75
    45
    10
    21
    Palermo
    55
    86
    33
    53
    70
    Roma
    88
    78
    61
    06
    07
    Torino
    76
    08
    23
    61
    82
    Venezia
    25
    15
    49
    21
    81
    Nazionale
    70
    10
    32
    78
    07
    Estrazione Simbolotto
    Bari
    07
    14
    28
    45
    31

Ultimi Messaggi

Indietro
Alto