Categories: CienciaNoticias

Human-Learn: aprendizaje basado en reglas como alternativa al aprendizaje automático

Se le proporciona un conjunto de datos etiquetado y se le asigna la predicción de uno nuevo. ¿Qué haría? El primer enfoque que probablemente intente es entrenar un modelo de aprendizaje automático para encontrar reglas para etiquetar nuevos datos.Imagen de AuthorEsto es conveniente, pero es un desafío saber por qué el modelo de aprendizaje automático genera una predicción particular. Tampoco puede incorporar su conocimiento de dominio en el modelo. En lugar de depender de un modelo de aprendizaje automático para hacer predicciones, ¿hay alguna manera de establecer las reglas para el etiquetado de datos en función de su conocimiento?Imagen del autorAhí es cuando human-learn resulta útil. human-learn es un paquete de Python para crear sistemas basados ​​en reglas que son fáciles de construir y compatibles con scikit-learn. Para instalar human-learn, escriba: pip install human- aprender En el artículo anterior, hablé sobre cómo crear un modelo de aprendizaje humano dibujando: En este artículo, aprenderemos cómo crear un modelo con una función simple. Siéntase libre de jugar y bifurcar el código fuente de este artículo aquí: Para Para evaluar el rendimiento de un modelo basado en reglas, comencemos con la predicción de un conjunto de datos utilizando un modelo de aprendizaje automático. Usaremos el Conjunto de datos de detección de ocupación del Repositorio de aprendizaje automático de UCI como ejemplo para este tutorial. Nuestra tarea es predecir la ocupación de la sala en función de temperatura, humedad, luz y CO2. Una habitación no está ocupada si Ocupación = 0 y está ocupada si Ocupación = 1. Después de descargar el conjunto de datos, descomprima y lea los datos: importe pandas como pd
de sklearn.ensemble importar RandomForestClassifier
from sklearn.metrics import Classification_report# Obtener datos de entrenamiento y prueba
entrenar = pd.read_csv(“datos_de_ocupacion/datosentrenamiento.txt”).drop(columnas=”fecha”)
test = pd.read_csv(“occupancy_data/datatest.txt”).drop(columns=”date”)# Obtener X e y
objetivo = “Ocupación”
tren_X, tren_y = tren.drop(columnas=objetivo), tren[target]
val_X, val_y = prueba.drop(columnas=objetivo), prueba[target]Eche un vistazo a los primeros diez registros del conjunto de datos del tren: tren.cabeza (10)Imagen de AuthorTrain el modelo RandomForestClassifier de scikit-learn en el conjunto de datos de entrenamiento y utilícelo para predecir el conjunto de datos de prueba: # Train
forest_model = RandomForestClassifier(random_state=1)# Preducción
modelo_bosque.fit(tren_X, tren_y)
machine_preds = forest_model.predict(val_X)# Evaluar
imprimir (informe_clasificación (val_y, machine_preds))Imagen del autor La puntuación es bastante buena. Sin embargo, no estamos seguros de cómo el modelo obtiene estas predicciones. Veamos si podemos etiquetar los nuevos datos con reglas simples. Hay cuatro pasos para crear reglas para etiquetar datos: Generar una hipótesis Observar los datos para validar la hipótesis Comenzar con reglas simples basado en las observaciones Mejorar las reglas

Generar una Hipótesis

La luz en una habitación es un buen indicador de si la habitación está ocupada. Por lo tanto, podemos suponer que cuanto más clara es una habitación, más probable es que esté ocupada. Veamos si esto es cierto al observar los datos.

Observa los datos

Para validar nuestra conjetura, usemos un diagrama de caja para encontrar la diferencia en la cantidad de luz entre una habitación ocupada (Ocupación=1) y una habitación vacía (Ocupación=0).import plotly.express as px
importar plotly.graph_objects como gofeature = “Luz”
px.box(data_frame=tren, x=objetivo, y=característica)Imagen de AutorPodemos ver una diferencia significativa en la mediana entre una habitación ocupada y una vacía.

Comience con reglas simples

Ahora, crearemos reglas para determinar si una habitación está ocupada en función de la luz de esa habitación. Específicamente, si la cantidad de luz está por encima de cierto umbral, Ocupación=1 y Ocupación=0 en caso contrario.Imagen de AuthorPero, ¿cuál debería ser ese umbral? Comencemos por elegir 100 como umbral y veamos qué obtenemos.Imagen del autor Para crear un modelo basado en reglas con aprendizaje humano, haremos lo siguiente: Escribir una función Python simple que especifique las reglas. Usar el clasificador de funciones para convertir esa función en un modelo de aprendizaje scikit. Importar números como np.
from hulearn.classification import FunctionClassifierdef create_rule(datos: pd.DataFrame, col: str, umbral: float=100):
devuelve np.array(datos[col] > umbral).astype(int)mod = FunctionClassifier(create_rule, col=’Light’)Prediga el conjunto de prueba y evalúe las predicciones:mod.fit(train_X, train_y)
preds = mod.predict(val_X)
imprimir (informe_clasificación (val_y, preds))Imagen del autor ¡La precisión es mejor que la que obtuvimos antes usando RandomForestClassifier!

Mejora las reglas

Veamos si podemos obtener un mejor resultado experimentando con varios umbrales. Usaremos coordenadas paralelas para analizar las relaciones entre un valor específico de luz y la ocupación de la habitación. from hulearn.experimental.interactive import Parallel_coordinatesparallel_coordinates(train, label=target, height=200)Imagen de autorA partir de las coordenadas paralelas, podemos ver que la habitación con una luz superior a 250 Lux tiene una alta probabilidad de estar ocupada. El umbral óptimo que separa una habitación ocupada de una habitación vacía parece estar entre 250 Lux y 750 Lux. Busquemos el mejor umbral en este rango usando GridSearch.from sklearn.model_selection de scikit-learn import GridSearchCVgrid = GridSearchCV(mod, cv= 2, param_grid={“umbral”: np.linspace(250, 750, 1000)})
grid.fit(train_X, train_y)Obtenga el mejor umbral:best_threshold = grid.best_params_[“threshold”]
mejor_umbral
> 364.61461461461465 Trace el umbral en el diagrama de caja.Image by AuthorUtilice el modelo con el mejor umbral para predecir el conjunto de pruebas: human_preds = grid.predict(val_X)
imprimir (informe_clasificación (val_y, human_preds))Imagen del autor El umbral de 365 da un mejor resultado que el umbral de 100. Usar el conocimiento del dominio para crear reglas con un modelo basado en reglas es bueno, pero hay algunas desventajas: No se generaliza bien a datos no vistos Es difícil llegar crear reglas para datos complejosNo hay un ciclo de retroalimentación para mejorar el modelo. Por lo tanto, combinar un modelo basado en reglas y un modelo ML ayudará a los científicos de datos a escalar y mejorar el modelo sin dejar de ser capaces de incorporar su experiencia en el dominio. Una forma sencilla de combinar el dos modelos es decidir si reducir los falsos negativos o los falsos positivos.

Reducir los falsos negativos

Es posible que desee reducir los falsos negativos en escenarios como predecir si un paciente tiene cáncer (es mejor cometer un error diciéndoles a los pacientes que tienen cáncer que fallar en detectar el cáncer). Para reducir los falsos negativos, elija etiquetas positivas cuando dos modelos no están de acuerdo.Imagen por autor

Reducir los falsos positivos

Es posible que desee reducir los falsos positivos en escenarios como recomendar videos que pueden ser violentos para los niños (es mejor cometer el error de no recomendar videos aptos para niños que recomendar videos para adultos a los niños). Para reducir los falsos positivos, elija etiquetas negativas cuando dos modelos no están de acuerdo.Imagen del autor También puede usar otras capas de políticas más complejas para decidir qué predicción elegir. Para profundizar más en cómo combinar un modelo ML y un modelo basado en reglas, recomiendo ver este excelente video de Jeremy Jordan. ¡Felicitaciones! Acaba de aprender qué es un modelo basado en reglas y cómo combinarlo con un modelo de aprendizaje automático. Espero que este artículo le brinde el conocimiento necesario para desarrollar su propio modelo basado en reglas.

aliintizar71

Recent Posts

Máquina de mano Lean, Green, Raspberry Pi

Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…

2 years ago

Cómo pronosticar series de tiempo usando autorregresión

Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…

2 years ago

Aquí están todas las formas en que puede cargar su AirPods Pro

Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…

2 years ago

Las principales noticias tecnológicas del lunes: la prohibición de clientes de terceros de Twitter parece no ser un accidente

Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…

2 years ago

AirPods Max 2: aquí están las características más solicitadas

Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…

2 years ago

El remake de Dead Space continúa luciendo terriblemente genial en el nuevo tráiler de la historia

El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…

2 years ago