Sono un Programmatore industriale, e sono qui per chiedere aiuto. Non ho molta esperienza nel settore IA, ma ho visto qualcosina sul deep learning in Python.
Andiamo al dunque. C'è un Sistema chiuso, che genera un set di numeri esadecimali, 12 byte, in una sequenza temporale di ogni 180 secondi.
Io e il mio Team avremmo bisogno di prevedere la sequenza successiva, analizzando le sequenze precedenti.
Ma sappiamo che è impossibile. Ma noi abbiamo trovato una "sorta" di logica.
Supponiamo di prendere le ultime 140 sequenze escludendo l'ultima conosciuta
Ora, selezioniamo tutte le sequenze dove non è presente neanche un numero appartenente all'ultima sequenza.
Ora, da queste sequenze selezionate, raccogliamo una distinta dei valori presenti presi una sola volta. Otterremo quindi un insieme considerevolmente grande di numeri da scartare dall'insieme totale dei numeri possibili nella nuova sequenza, ovvero da 0 a 255.
In altre parole, otteniamo un insieme ridotto di valori possibili. Ed è davvero ridotto, secondo in nostri elaborati.
Questa analisi è ripetibile su tutto lo storico che sbbiamo accumulato in 2 anni.
Ora, quello che vorremmo realizzare è uno script in grado di imparare dalle sequenze numeriche, indicando quali di queste è da scartare e quali no, immagino abbinando ad ogni array di insiemi di 12 valori un secondo array di 140 booleani, così da imparare a riconoscere o a creare un modello tale da prevedere la sequenza di booleani datoun array di 140 insiemi di 12 valori.
Pensate che si possa realizzare?
Se si, come?
non conoscendo il contesto, con le informazioni che hai fornito, potrei pensare ad una codificazione di errori, e tempi ma in quel caso ci dovrebbe essere una sequenza "parlata"... della serie, primi ttt.code = tempo secondi zzz.code= classe errore terzi yyy.code = tipo di errore... vi saranno delle conversioni da qualche parte, se è una macchina vi sarà un libretto tecnico....
ecc...
Partire da una black box, per estrarre delle previsioni direi che, se non si hanno cognizioni su chi genere l'output, è come giocare con dei pseudorandom.
Come dire fare dei calcoli sulla previsione del gioco del Lotto, conoscendo quali sono state le vincite in passato.
La mia domanda è quindi: sicuri che i numeri estratti debbano essere diversi da quelli estratti precedentemente?
in qualsiasi caso, vi può essere una logica nascosta? < Io e il mio Team avremmo bisogno di prevedere la sequenza successiva, analizzando le sequenze precedenti.> ... escludendole?
le sequenze, contengono dei dati temporali... criptografati?
Su che cosa devo interpretare la frase < Ma sappiamo che è impossibile. Ma noi abbiamo trovato una "sorta" di logica.> che, per me risuona come una contraddizione logica?
Io potrei dire che in questo caso, la statistica non aiuta e faccio riferimento a questo: http://progettomatematica.dm.unibo.it/Prob2/2calcolocombinatorio.html
in qualsiasi caso, ma solo per ragioni tecniche, suggerisco questo:
https://it.mathworks.com/discovery/lstm.html
Buona fortuna.
Per quanto riguarda i dati, non sappiamo quale sia l'algoritmo generato dal sistema, poichè come abbiamo detto prima, è un sistema chiuso, dal quale preleviamo dati da esso. Sapere però quali potrebbero essere i valori probabili in uscita, considerando un insieme ridotto, ci permetterebbe di integrare una elaborazione successiva su di essi più rapido ed in anticipo.
Caro Marco,
Non puoi neanche lontanamente immaginare quanto mi sia di aiuto il tuo commento. Non avrei mai immaginato di ricevere una benchè minima risposta, tantomeno in meno di 2 ore!
Considera che ho chiesto in molti altri forum indicazioni su questo problema, e pensa che nessuno mi aveva mai risposto.
Non solo mi hai risposto, ma sei stato in grado di darmi dei punti di vista differenti e di questo te ne sono immensamente grato.
Oggi pomeriggio inizio a metterci mano e vi aggiorno sugli sviluppi, perchè ce ne saranno.
Grazie davvero.
Ciao! non sono un ssuper esperto di IA ma ho fattto diversi corsi con intelligenzaartificialeitalia.net e provo a rispondere alla tua domanda sperando di essere di aiuto.
Partendo dal fatto che la tua richiesta è piuttosto complessa e richiede una soluzione avanzata di deep learning.
Ecco qualche consiglio che posso fornirti alcune linee guida su come affrontare il problema utilizzando Python e librerie di deep learning come TensorFlow o PyTorch. ( Sulla base delle mie esperienze passate )
1. Preparazione dei dati
- Converti le sequenze esadecimali in array numerici per facilitare l'elaborazione.
- Crea un dataset di addestramento e di test suddividendo i dati storici disponibili.
- Normalizza i dati per migliorare le prestazioni del modello. ( Questo passaggio non è obbligatorio ma ti consiglio di fare dei test )
Come dicono sempre i ragazzi di IntelligenzaArtificialeItalia.net lo sviluppo di applicativi come questi è pura ricerca !
2. Testare un Modello di sequenza
- Poiché si tratta di un problema di previsione di sequenze, potresti considerare l'utilizzo di reti neurali ricorrenti (RNN) come le LSTM (Long Short-Term Memory) o le GRU (Gated Recurrent Unit).
- Queste architetture sono particolarmente adatte per elaborare sequenze di dati e apprendere le dipendenze a lungo termine tra gli elementi.
3. Architettura del modello ( Complessa da stimare su due piedi, solitamente ci vogliono settimane di test )
- L'architettura potrebbe consistere in uno strato di input che accetta le sequenze di 140 insiemi di 12 valori.
- Questo strato di input potrebbe essere collegato a uno o più strati LSTM o GRU per elaborare le sequenze.
- L'output del modello dovrebbe essere un array di 140 valori booleani che rappresentano la previsione per la sequenza successiva.
4. Addestramento del modello
- Utilizza l'algoritmo di backpropagation attraverso il tempo (BPTT) per addestrare il modello sui dati storici.
- Ottimizza una funzione di perdita appropriata, come la cross-entropy binaria per le previsioni booleane.
- Applica tecniche come il dropout e la regolarizzazione per evitare l ov.erfitting.
Ecco un esempio di codice Python semplificato che potrebbe essere un punto di partenza:
---
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# Preparazione dei dati
X_train, y_train, X_test, y_test = prepare_data(historical_data)
# Definizione del modello
model = Sequential()
model.add(LSTM(64, input_shape=(140, 12)))
model.add(Dense(140, activation='sigmoid'))
# Compilazione del modello
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Addestramento del modello
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))
# Previsione su nuovi dati
new_sequence = np.array([[...]]) # Preparazione dei nuovi dati
prediction = model.predict(new_sequence)
---
Questo è solo un esempio di base e richiederà sicuramente ulteriori ottimizzazioni e personalizzazioni per adattarsi ai tuoi dati specifici e ai requisiti di prestazioni.
Per aiutarti sarebbe utile avere più informazioni sul sistema e sui dati disponibili per migliorare l'accuratezza del modello.
Ad esempio, se ci sono eventuali pattern noti o proprietà delle sequenze che potrebbero essere sfruttate come caratteristiche aggiuntive.
Comunque il problema che hai descritto è fattibile da affrontare utilizzando tecniche di deep learning, ma richiede una comprensione approfondita dei dati e delle architetture di rete neurale appropriate.
Spero di essere stato un minimo di aiuto 🙏