Predice si un hongo es comestible o venenoso basándose en atributos mediante Aprendizaje Automático (ML)
Entrenado con el algoritmo J48 (ID3) y datos históricos reales sobre setas, este proyecto usa Weka y Java para predecir la comestibilidad de nuevas muestras.
- Se eligió el problema de predicción sobre si una seta es comestible o venenosa.
- Se utilizó el dataset
mushroom.arff
con atributos como olor, forma del sombrero, color, hábitat... - Se evaluaron varios algoritmos en Weka y se seleccionó J48 por su precisión.
- El modelo entrenado se usa para predecir datos nuevos y mostrar los resultados.

El atributo odor (olor) es el más determinante según el árbol generado.
training_data/
- Datos de entrenamiento (.arff
)test_data/
- Datos de prueba (.arff
)models/
- Modelos entrenados
- Java (JRE)
- Weka (ML para Java)
- Clona el repositorio
- Navega al directorio del proyecto
- Compila y empaqueta en
.jar
:
make jar
- Ejecuta el programa:
java -jar aprendizaje.jar
Resultado: Muestra si cada seta es comestible (
e
) o venenosa (p
).

- Fuente: arff-datasets
- Dataset original: UC Irvine ML Repository
Atributos como: forma del sombrero, olor, hábitat, anillos...
Proveniente de la Guía de campo de la Sociedad Audubon con descripciones de 23 especies de hongos.
Este proyecto utiliza la biblioteca Weka, muy conocida en entornos educativos y de prototipado, que permite crear, entrenar y guardar modelos de aprendizaje automático en Java. El modelo J48 es serializado y cargado desde disco, lo que permite hacer predicciones sin tener que reentrenar, optimizando tiempo y recursos. Los datos están en formato .arff
, un formato clásico en ML que describe atributos y valores de forma estructurada.
- Basado en ID3, usa entropía e información ganada para elegir qué atributo usar en cada nodo.
- Se poda para evitar sobreajuste (overfitting).
- El atributo odor sale como raíz porque tiene la mayor ganancia de información: su valor predice fuertemente la comestibilidad.
- Muy usado en medicina, agricultura, bioinformática…
- Random Forest: combina muchos árboles diferentes → más robusto, menos riesgo de sobreajuste.
- Random Tree: más aleatorio, puede ser más rápido pero menos estable.
- 🌟 Precisión: 100%
- Tiempo: 0.01 s
- Algoritmo basado en árboles de decisión, usa ganancia de información para decidir qué atributo dividir.
- Gran interpretabilidad: fácil de entender el porqué de cada predicción.
- 🌟 Precisión: 100%
- Tiempo: 0.25 s
- Combina muchos árboles con selección aleatoria de atributos → más robusto, menos overfitting.
- 🌟 Precisión: 100%
- Crea un solo árbol con decisiones aleatorias → más rápido pero menos estable.
Todos los algoritmos mostraron un rendimiento excelente (100% accuracy) con este dataset. J48 se eligió por su interpretabilidad y rapidez.
Apache License 2.0
Ver licencia
Marta Canino Romero
@martacanirome4
GitHub 2023
Copyright 2023 Marta Canino Romero
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.