Progetto di gruppo: Classficazione del tipo di Pokemon a partire dal dataset: https://www.kaggle.com/datasets/abcsds/pokemon
Gruppo: Alessio Giuseppe Ferraioli, Daniele Florio, Pier Carlo Ciraselli, Roberta Basile, Stefano Flora
Questo progetto utilizza un modello di Deep Learning sviluppato con TensorFlow per classificare il tipo di un Pokemon basandosi sulle sue varie caratteristiche. Il modello sfrutta tecniche di apprendimento supervisionato per prevedere il tipo di un Pokemon date le sue caratteristiche presenti in un dataset popolare sui Pokemon. Inoltre, include un mini-gioco che simula delle battaglie Pokemon in cui la vittoria/sconfitta tra di essa dipende dalle interazioni tra i tipi dei Pokemon. Ma attenzione! Il tipo del Pokemon è quello assegnato dal nostro modello di DL!
- Dataset: Utilizza un dataset contenente info basilari sui Pokemon.
- Framework di Deep Learning: TensorFlow.
- Obiettivo: Predire il tipo principale di un Pokemon (es. Fire, Water, Grass) basandosi sulle sue caratteristiche.
- Mini-Game: Permettere all'utente di giocare una versione semplificata di una battaglia Pokemon, in cui il tipo dei Pokemon è quello generato dal modello.
- Preprocessing dei Dati: Normalizza le caratteristiche e codifica le variabili categoriali.
- Architettura del Modello: Implementa una rete neurale con livelli nascosti progettati per ottenere una migliore accuratezza nella classificazione.
Il dataset contiene informazioni su diversi Pokemon, tra cui:
- Nome
- statistiche di HP, Attacco, Difesa, Attacco Speciale, Difesa Speciale e Velocità;
- tipo principale;
- tipo secondario;
- se è leggendario o no;
- e altro ancora
Il dataset deve essere preprocessato per:
- Normalizzare le caratteristiche numeriche.
- Codificare le variabili categoriali (es. tipi del Pokemon) tramite one-hot encoding.
Pokemon-Classifier/
├── model/ # File del modello
├── modulo_unico.py # Contiene tutte le classi e le funzioni necessarie al gioco
├── genera_modello_DL.ipynb # Genera modello Deep Learning
├── README.md # Descrizione del progetto (questo file)
└── start_game.py # Inizia il MiniGame battaglia Pokemon
Assicurati di avere installato Python 3.8 o versioni superiori insieme alle seguenti librerie:
- TensorFlow
- NumPy
- pandas
- scikit-learn
- Pillow (il mini-game appare in una finestra grafica)
- matplotlib (opzionale, per visualizzazioni)
Il modello è composto dai seguenti livelli:
- Livello di input per accettare tutte le caratteristiche numeriche e codificate.
- Diversi livelli nascosti completamente connessi con attivazione ReLU.
- Livelli di dropout per la regolarizzazione.
- Livello di output con una funzione di attivazione softmax per prevedere le probabilità per ogni tipo.
Il modello raggiunge un'accuratezza del 30% sul dataset di test dopo 200 epoche di allenamento.
Ogni appassionato di Pokemon sa che non c'è un collegamento preciso tra il tipo del Pokemon e le sue statistiche o tipo secondario. Bensì, queste caratteristiche sono decise dai game developer sulla base di motivazioni di storytelling e game design. Tuttavia, un giocatore attento nota che alcuni pattern emergono - ad esempio, i Pokemon di tipo Steel (Acciaio) hanno solitamente una difesa elevata. Il nostro modello è in grado di carprire alcuni di questi pattern e ottenere una accuracy considerevolmente più alta del random chance, equivalente al 5%.
- Il dataset dei Pokemon è stato ottenuto da Kaggle.
- Un ringraziamento speciale alla comunità TensorFlow per i loro tutorial e documentazione completi.