1.1. Ejemplo de aprendizaje automático


Ejemplo de aprendizaje automático 



El aprendizaje automático básicamente, se trata de enseñar a las máquinas a aprender patrones a partir de datos, permitiéndoles tomar decisiones o hacer predicciones sin estar explícitamente programadas para cada tarea.

El proceso general del aprendizaje automático implica:

  • Selección de datos: Seleccionar y preparar datos relevantes y de calidad para el entrenamiento del modelo.
  • Elección del modelo: Seleccionar el algoritmo o tipo de modelo adecuado para el problema.
  • Entrenamiento del modelo: Alimentar los datos al modelo y ajustar sus parámetros para que aprenda patrones.
  • Evaluación del modelo: Probar el modelo con datos no vistos para evaluar su rendimiento y ajustar su desempeño si es necesario.
  • Puesta en producción: Implementar el modelo entrenado en aplicaciones del mundo real para su uso.

El aprendizaje automático se utiliza en una amplia gama de campos, desde reconocimiento de voz y visión por computadora hasta análisis de datos financieros y recomendaciones en plataformas de redes sociales.

Ejemplo en la Educación superior

El aprendizaje automático puede aplicarse de diversas maneras. Una de ellas es la recomendación personalizada de cursos o programas académicos para estudiantes. Aquí tienes un ejemplo:

Sistema de recomendación de cursos:

Imagina una universidad con una amplia gama de cursos y programas. El objetivo es ayudar a los estudiantes a seleccionar los cursos que mejor se ajusten a sus intereses y metas académicas. Se puede implementar un sistema de recomendación basado en aprendizaje automático de la siguiente manera:

  1. Datos de los estudiantes: Se recopilan datos sobre el rendimiento académico, intereses, historial de cursos anteriores, y quizás información adicional como actividades extracurriculares o preferencias declaradas.

  2. Datos de los cursos: Se recopila información detallada sobre los cursos disponibles, incluyendo la descripción del curso, el nivel de dificultad, el contenido temático, las calificaciones históricas de los estudiantes, etc.

  3. Entrenamiento del modelo: Utilizando técnicas de aprendizaje automático, como el filtrado colaborativo o sistemas basados en contenido, se desarrolla un modelo que aprende patrones entre los datos de los estudiantes y los cursos. Por ejemplo, puede aprender que a los estudiantes que les gustan ciertos temas también les suelen interesar otros temas relacionados.

  4. Recomendaciones personalizadas: Cuando un estudiante nuevo ingresa al sistema o busca orientación sobre qué cursos tomar, el modelo de aprendizaje automático puede generar recomendaciones personalizadas. Estas recomendaciones se basarían en las preferencias y el historial del estudiante, sugiriendo cursos que podrían ser de su interés y que también podrían ayudar a su progreso académico.

  5. Evaluación y mejora: Se monitorean las decisiones tomadas por el modelo y se recopila retroalimentación sobre la efectividad de las recomendaciones. Esto puede usarse para mejorar el modelo, ajustando los algoritmos para que las sugerencias sean más precisas y útiles.

Ejemplo básico de un sistema de recomendación utilizando Python y scikit-learn para un enfoque simple de filtrado colaborativo.

# Instalar la librería surprise si no está instalada
!pip install scikit-surprise

import pandas as pd
from surprise import Dataset, Reader
from surprise import SVD
from surprise.model_selection import train_test_split
from surprise import accuracy

# Datos de ejemplo: DataFrame con 'ID de Estudiante', 'ID de Curso' y 'Calificación'
data = {
    'ID Estudiante': ['Estudiante1', 'Estudiante1', 'Estudiante2', 'Estudiante2', 'Estudiante3'],
    'ID Curso': ['Curso1', 'Curso2', 'Curso1', 'Curso3', 'Curso2'],
    'Calificación': [4, 3, 5, 2, 3]
}

# Crear un DataFrame a partir de los datos
df = pd.DataFrame(data)

# Inicializar un lector de Surprise
reader = Reader(rating_scale=(1, 5))

# Cargar los datos desde el DataFrame
dataset = Dataset.load_from_df(df[['ID Estudiante', 'ID Curso', 'Calificación']], reader)

# Dividir el conjunto de datos en entrenamiento y prueba
trainset, testset = train_test_split(dataset, test_size=0.2)

# Crear un modelo SVD
model = SVD()

# Entrenar el modelo con el conjunto de entrenamiento
model.fit(trainset)

# Función para el Test de Holland
def holland_test():
    print("Responde las siguientes preguntas con 'Sí' o 'No':")
    questions = {
        'Realista': [
            '¿Te gustan las actividades al aire libre?',
            '¿Disfrutas arreglando o construyendo cosas?',
            '¿Te interesa trabajar con herramientas o maquinaria?'
        ],
        'Investigador': [
            '¿Te gusta resolver problemas matemáticos?',
            '¿Disfrutas aprender sobre temas científicos?',
            '¿Eres curioso y te gusta descubrir cómo funcionan las cosas?'
        ],
        'Artístico': [
            '¿Tienes habilidades creativas como dibujar o pintar?',
            '¿Te gusta la música, la literatura o el arte?',
            '¿Disfrutas de actividades que permitan expresar tu creatividad?'
        ],
        'Social': [
            '¿Te sientes cómodo ayudando a los demás?',
            '¿Te gusta trabajar en equipos colaborativos?',
            '¿Disfrutas cuidando y enseñando a otros?'
        ],
        'Emprendedor': [
            '¿Te interesa liderar y tomar decisiones?',
            '¿Te gusta la idea de ser tu propio jefe?',
            '¿Disfrutas tomando riesgos calculados en situaciones nuevas?'
        ],
        'Convencional': [
            '¿Te gustan las actividades estructuradas y detalladas?',
            '¿Prefieres seguir instrucciones y reglas establecidas?',
            '¿Disfrutas organizando y manteniendo registros ordenados?'
        ]
    }
    answers = {}
    for category, category_questions in questions.items():
        print(f"Para la categoría {category}:")
        category_answers = []
        for question in category_questions:
            answer = input(f"{question}: ")
            category_answers.append(answer.lower() == 'sí' or answer.lower() == 'si')
        answers[category] = category_answers
    return answers

# Diccionario de definiciones y carreras asociadas a cada categoría Holland
categories_info = {
    'Realista': {
        'Definición': 'Las personas realistas son prácticas, físicas, mecánicas y disfrutan del trabajo práctico.',
        'Carreras': ['Ingeniería Civil', 'Técnico en Electricidad', 'Carpintería']
    },
    'Investigador': {
        'Definición': 'Las personas investigadoras son analíticas, lógicas y les gusta resolver problemas complejos.',
        'Carreras': ['Física', 'Matemáticas', 'Química']
    },
    'Artístico': {
        'Definición': 'Las personas artísticas son creativas, imaginativas y disfrutan de la expresión artística.',
        'Carreras': ['Diseño Gráfico', 'Bellas Artes', 'Teatro']
    },
    'Social': {
        'Definición': 'Las personas sociales son compasivas, comunicativas y les gusta ayudar a los demás.',
        'Carreras': ['Trabajo Social', 'Educación Primaria', 'Psicología']
    },
    'Emprendedor': {
        'Definición': 'Las personas emprendedoras son líderes, persuasivas y disfrutan tomando riesgos calculados.',
        'Carreras': ['Administración de Empresas', 'Marketing', 'Emprendimiento']
    },
    'Convencional': {
        'Definición': 'Las personas convencionales son organizadas, detalladas y disfrutan del trabajo estructurado.',
        'Carreras': ['Contabilidad', 'Secretariado Ejecutivo', 'Gestión Administrativa']
    }
}

# Obtener datos del usuario
student_name = input("Ingrese el nombre del estudiante: ")
print(f"Bienvenido, {student_name}.")

# Realizar el Test de Holland
holland_answers = holland_test()

# Predecir la carrera basada en los resultados del Test de Holland
predicted_career = max(holland_answers, key=lambda x: sum(holland_answers[x]))
print(f"Basado en tus respuestas, tu tipo Holland predominante es: {predicted_career}.")

# Mostrar la definición y carreras asociadas a la categoría predominante
print("\nInformación sobre tu tipo Holland predominante:")
print(categories_info[predicted_career]['Definición'])
print("Carreras asociadas:")
for career in categories_info[predicted_career]['Carreras']:
    print(f"- {career}")

# Obtener recomendaciones para el tipo Holland predominante
recommendations = []
available_courses = df[df['ID Curso'].str.contains(predicted_career)]['ID Curso'].unique()
for course_id in available_courses:
    prediction = model.predict(student_name, course_id)
    recommendations.append({
        'ID Estudiante': student_name,
        'ID Curso': course_id,
        'Calificación Predicha': prediction.est
    })

# Mostrar las recomendaciones para el estudiante
recommendations_df = pd.DataFrame(recommendations)
sorted_recommendations = recommendations_df.sort_values('Calificación Predicha', ascending=False)
print("\nRecomendaciones de cursos basadas en tu tipo Holland predominante:")
print(sorted_recommendations)

Resultados

Requirement already satisfied: scikit-surprise in /usr/local/lib/python3.10/dist-packages (1.1.3) Requirement already satisfied: joblib>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-surprise) (1.3.2) Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.10/dist-packages (from scikit-surprise) (1.23.5) Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.10/dist-packages (from scikit-surprise) (1.11.4) Ingrese el nombre del estudiante: luis Bienvenido, luis. Responde las siguientes preguntas con 'Sí' o 'No': Para la categoría Realista: ¿Te gustan las actividades al aire libre?: si ¿Disfrutas arreglando o construyendo cosas?: no ¿Te interesa trabajar con herramientas o maquinaria?: no Para la categoría Investigador: ¿Te gusta resolver problemas matemáticos?: SI ¿Disfrutas aprender sobre temas científicos?: NO ¿Eres curioso y te gusta descubrir cómo funcionan las cosas?: SI Para la categoría Artístico: ¿Tienes habilidades creativas como dibujar o pintar?: SI ¿Te gusta la música, la literatura o el arte?: SI ¿Disfrutas de actividades que permitan expresar tu creatividad?: SI Para la categoría Social: ¿Te sientes cómodo ayudando a los demás?: SI ¿Te gusta trabajar en equipos colaborativos?: SI ¿Disfrutas cuidando y enseñando a otros?: SI Para la categoría Emprendedor: ¿Te interesa liderar y tomar decisiones?: NO ¿Te gusta la idea de ser tu propio jefe?: NO ¿Disfrutas tomando riesgos calculados en situaciones nuevas?: SI Para la categoría Convencional: ¿Te gustan las actividades estructuradas y detalladas?: SI ¿Prefieres seguir instrucciones y reglas establecidas?: SI ¿Disfrutas organizando y manteniendo registros ordenados?: NO

Basado en tus respuestas, tu tipo Holland predominante es: Artístico. Información sobre tu tipo Holland predominante: Las personas artísticas son creativas, imaginativas y disfrutan de la expresión artística. Carreras asociadas: - Diseño Gráfico - Bellas Artes - Teatro

El código implementa un modelo de aprendizaje automático (usando la técnica de filtrado colaborativo con SVD) para generar recomendaciones de cursos basadas en las respuestas del Test de Holland. Este ejemplo combina la implementación del Test de Holland con la generación de recomendaciones usando un modelo de filtrado colaborativo.

Enlace a Google Colab


Código en Python utilizando una librería como pandas para crear un dataset ficticio para interpretar el test de Holland.


import pandas as pd
import numpy as np

# Generar datos ficticios para el test de Holland
np.random.seed(42)  # Para reproducibilidad

# Creamos una muestra ficticia de 100 personas con puntuaciones en diferentes áreas (R, I, A, S, E, C)
data = {
    'ID': range(1, 101),
    'Realista (R)': np.random.randint(1, 6, 100),
    'Investigador (I)': np.random.randint(1, 6, 100),
    'Artístico (A)': np.random.randint(1, 6, 100),
    'Social (S)': np.random.randint(1, 6, 100),
    'Emprendedor (E)': np.random.randint(1, 6, 100),
    'Convencional (C)': np.random.randint(1, 6, 100)
}

# Crear un DataFrame a partir de los datos y guardar como CSV
df = pd.DataFrame(data)
df.to_csv('test_holland_dataset.csv', index=False)

# Mostrar las primeras filas del DataFrame
print(df.head())


RESULTADO EN GRAFICAS




Link de Google Colab del DataSet

Comentarios

Entradas populares de este blog

5. Árboles de Decisión

4. Regresión Logística (Aprendizaje Supervisado)