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
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.
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.
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!
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.
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
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.
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…