Blog

ANALISIS DE PLANES DE GOBIERNO #ELECCIONES2021

#jne #eleccionesperu #elecciones2021 #votoinformado #onpe

¡Hola a todos!

Me tome el trabajo de hacer un breve análisis de los planes de gobierno que fueron presentados oficialmente para estas elecciones del 2021 https://elperuano.pe/noticia/113353-elecciones-2021-mira-aqui-los-planes-de-gobierno-de-los-candidatos-a-la-presidencia

No pude procesar algunos planes porque estaban incompletos o tenían un formato complicado. Por ejemplo, RUNA subió fotos en vez de un documento digital y el triste plan de gobierno de Hernando De Soto solo tiene 2 páginas. Por otro lado, no consideré las agrupaciones políticas con más indicios de corrupción como Fuerza Popular, Renovación Popular, Patria Segura y Somos Perú. Por ejemplo, los fundadores del Fujimorismo (Alberto Fujimori) y Peru Libre (Vladimir Cerrón) están presos por corrupción, por lo tanto no los considero.

Para este análisis intente resaltar las diferencias que hay entre los planes de gobierno. Para ello se suprimieron, por ejemplo, conceptos relacionados a “covid-19”, “desarrollo”, “gobierno”, “pandemia” o “Perú”. Todos los planes abordaban de alguna manera estos conceptos en sus propuestas y, al ser algo tan común, no ayudaban a entender qué es aquello que realmente le interesa a cada partido.

Finalmente, consideré los Objetivos de Desarrollo Sostenible de las Naciones Unidas para intentar encontrar alguna semejanza con los planes de gobierno.

VERSIÓN 1.0.1

Palabras clave por ODS

ODS 01. Fin de la Pobreza pobreza dólares pobres viven mujeres hombres recursos

ODS 02. Hambre Cero hambre producción alimentos acceso niños mercados población

ODS 03. Salud y Bienestar mortalidad enfermedades niños muertes regiones acceso sida

ODS 04. Educación de Calidad niños enseñanza asegurar formación escuela jóvenes calidad

ODS 05. Igualdad de Género mujeres niñas leyes violencia igualdad mutilación derechos

ODS 06. Agua Limpia y Saneamiento agua acceso saneamiento aguas servicios ríos recursos

ODS 07. Energía Asequible y No Contaminante energía acceso servicios carbón combustibles fuentes eficiencia

ODS 08. Trabajo Decente y Crecimiento Economico trabajo empleo trabajadores hombres mujeres crecimiento puestos

ODS 09. Industria, Innovación e Infraestructura acceso industrialización empresas investigación infraestructura tecnologías ingresos

ODS 10. Reducción de las Desigualdades mujeres desigualdad instituciones mercados niños población protección

ODS 11. Ciudades y Comunidades Sostenibles ciudades desastres aire seguridad acceso gestión reducir

ODS 12. Producción y Consumo Reponsables agua consumo energía alimentos vida empresas producción

ODS 13. Acción por el Clima cambio temperatura emisiones climático adaptación mitigación grados

ODS 14. Vida Submarina pesca océanos recursos subvenciones particular derecho superficie

ODS 15. Vida de Ecosistemas Terrestres especies ecosistemas bosques recursos plantas degradación conservación

ODS 16. Paz, Justicia e Instituciones Sólidas instituciones formas corrupción niños violencia acceso soborno

ODS 17. Alianzas para Lograr los Objetivos tecnología asistencia capacidad deuda recursos apoyo creación

Palabras clave por partido

Acción Popular (Yonhy Lescano) trabajar honestidad pensiones reinstalar reforma acción empresas

Democracia Directa (Andrés Alcántara Paredes) educación población ministerio presupuesto instituto servicios entidades

Juntos por el Perú (Verónika Mendoza) derechos educación gestión género fortalecer capacidades enfoque

Partido Morado (Julio Guzmán) servicios calidad educación gestión vida acceso instituciones

Podemos Perú (Daniel Urresti) educación programa creación servicios empresas economía recursos

Partido Popular Cristiano – PPC (Alberto Beingolea) mujeres derechos educación pobreza indicador corrupción población

Semejanzas (%)

ACCIÓN POPULAR

Democracia Directa: 80.88 % Juntos por el Perú: 79.45 % Partido Morado: 81.0 %
Podemos Perú: 83.76 %
PPC: 75.97 %

ODS 1: 51.33 %
ODS 2: 67.2 %
ODS 3: 56.11 %
ODS 4: 68.2 %
ODS 5: 66.5 %
ODS 6: 52.87 %
ODS 7: 71.39 %
ODS 8: 73.56 %
ODS 9: 82.87 %

ODS 10: 74.83 %
ODS 11: 74.42 %
ODS 12: 66.98 %
ODS 13: 73.71 %
ODS 14: 71.3 %
ODS 15: 65.39 %
ODS 16: 72.35 %
ODS 17: 81.09 %

DEMOCRACIA DIRECTA

Accion Popular: 80.88 %
Juntos por el Peru: 83.17 %
Partido Morado: 85.97 %
Podemos Peru: 90.99 %
PPC: 82.87 %

ODS 1: 57.07 %
ODS 2: 74.28 %
ODS 3: 64.26 %
ODS 4: 74.57 %
ODS 5: 66.64 %
ODS 6: 60.82 %
ODS 7: 72.18 %
ODS 8: 75.69 %
ODS 9: 84.79 %

ODS 10: 82.45 %
ODS 11: 70.45 %
ODS 12: 63.32 %
ODS 13: 70.42 %
ODS 14: 74.97 %
ODS 15: 68.83 %
ODS 16: 79.24 %
ODS 17: 83.67 %

JUNTOS POR EL PERU

Accion Popular: 79.45 %
Democracia Directa: 83.17 %
Partido Morado: 86.66 %
Podemos Peru: 87.96 %
PPC: 82.31 %

ODS 1: 51.16 %
ODS 2: 67.81 %
ODS 3: 59.56 %
ODS 4: 76.08 %
ODS 5: 71.24 %
ODS 6: 51.72 %
ODS 7: 66.02 %
ODS 8: 71.54 %
ODS 9: 80.47 %

ODS 10: 77.5 %
ODS 11: 70.06 %
ODS 12: 59.93 %
ODS 13: 72.76 %
ODS 14: 72.03 %
ODS 15: 67.51 %
ODS 16: 75.78 %
ODS 17: 81.91 %

PARTIDO MORADO

Accion Popular: 81.0 %
Democracia Directa: 85.97 %
Juntos por el Peru: 86.66 %
Podemos Peru: 89.33 %
PPC: 78.82 %

ODS 1: 53.49 %
ODS 2: 77.38 %
ODS 3: 64.23 %
ODS 4: 80.56 %
ODS 5: 63.54 %
ODS 6: 65.5 %
ODS 7: 78.95 %
ODS 8: 72.58 %
ODS 9: 87.67 %

ODS 10: 78.06 %
ODS 11: 81.47 %
ODS 12: 74.13 %
ODS 13: 72.59 %
ODS 14: 73.94 %
ODS 15: 71.06 %
ODS 16: 79.04 %
ODS 17: 84.46 %

PARTIDO POPULAR CRISTIANO

Accion Popular: 75.97 %
Democracia Directa: 82.87 %
Juntos por el Peru: 82.31 %
Partido Morado: 78.82 %
Podemos Peru: 78.06 %

ODS 1: 75.44 %
ODS 2: 77.99 %
ODS 3: 74.63 %
ODS 4: 72.35 %
ODS 5: 85.07 %
ODS 6: 53.85 %
ODS 7: 63.09 %
ODS 8: 78.94 %
ODS 9: 73.8 %

ODS 10: 90.78 %
ODS 11: 66.92 %
ODS 12: 64.78 %
ODS 13: 71.69 %
ODS 14: 74.67 %
ODS 15: 67.38 %
ODS 16: 86.72 %
ODS 17: 75.75 %

PODEMOS PERÚ

Accion Popular: 83.76 %
Democracia Directa: 90.99 %
Juntos por el Peru: 87.96 %
Partido Morado: 89.33 %
PPC: 78.06 %

ODS 1: 54.0 %
ODS 2: 76.24 %
ODS 3: 58.0 %
ODS 4: 75.43 %
ODS 5: 60.06 %
ODS 6: 63.17 %
ODS 7: 78.27 %
ODS 8: 75.09 %
ODS 9: 92.46 %

ODS 10: 78.83 %
ODS 11: 74.93 %
ODS 12: 69.96 %
ODS 13: 74.12 %
ODS 14: 76.41 %
ODS 15: 73.35 %
ODS 16: 74.64 %
ODS 17: 89.23 %

Atentamente,
Moisés Alexander Salazar Vila
Gerente General de Epicalsoft

Python Básico: Preparando nuestro entorno de desarrollo de Machine Learning con Python

En el presente capítulo aprenderemos qué es Python y cómo preparar nuestro entorno para desarrollar soluciones de Machine Learning empleando la distribución de Python Anaconda, el editor de código Visual Studio Code y los Jupyter Notebooks.

Python

Python es un lenguaje de programación orientado a objetos de código abierto que popularmente se emplea para:

  • Desarrollo del lado del servidor de aplicaciones web
  • Desarrollo software con bases de datos
  • Matemáticas complejas
  • Estadística
  • Machine learning
  • Ejecución de comandos de sistema

En el mercado podemos encontrar una variedad de distribuciones o implementaciones de Python como: CPython, IronPython, WinPython, Jython, PyPy, MicroPython, Anaconda, ActivePython, entre otros. Cada uno de ellos aporta ventajas especiales para determinados sistemas, plataformas de desarrollo o tipos de soluciones.

Particularidades

  • Python emplea saltos de línea para completar las instrucciones, a diferencia de otros lenguajes de programación que suelen usar “;”.
  • Python hace uso de la sangría (caracteres en blanco al comenzar una instrucción) para definir el contexto de los bucles, funciones o clases, a diferencia de otros lenguajes de programación que suelen utilizar corchetes para este propósito.

Anaconda

Descargar Python 3 desde https://www.python.org instalar cada uno de los paquetes necesarios para trabajar en Data Science puede ser tedioso, sobretodo para aquellos que recién estamos empezando. Por ello, una de las mejores alternativas para levantar nuestro entorno es Anaconda, la cual es una distribución de Python que viene lista con todo lo que necesitamos para Machine Learning y Data Science, asímismo cuenta con una intuitiva interfaz gráfica que nos permitirá organizar, instalar, actualizar y desinstalar los paquetes de forma muy sencilla y amigable.

Descarga

Para nuestro objetivo de aprendizaje, lo ideal será descargar la Edición Individual desde https://www.anaconda.com

El instalador de Python 3.8 para Windows (64-bits) pesa aproximadamente 468 MB.

Instalación

Antes de empezar la instalación asegurémonos de tener todos los permisos o privilegios de administrador en el sistema que nos encontremos.

Hagamos doble click sobre el instalador y sigamos por el asistente de instalación. Notemos que el espacio requerido para la instalación es de aproximadamente de 2.7 GB

Seleccionemos la opción avanzada “Registrar Anaconda3 como el Python 3.8 de sistema” y continuemos para que el asistente pueda instalar Python y cada uno de los paquetes que necesitaremos.

En la carpeta de destino de la instalación también se creará un ejecutable llamado Uninstall-Anaconda3.exe que nos permitirá efectuar la desinstalación en el momento que se requiera.

Configuración

Una vez completada la instalación, vayamos a “Propiedades del Sistema“. Podemos ingresar a través de la ruta “Panel de Control > Seguridad o Sistema > Sistema” o haciendo click derecho sobre Mi PC e ingresando a Propiedades.

Desde la parte inferior de la sección de “Avanzado“, ingresemos a la vista de “Variables de Entorno“, seleccionemos “Path” y demos en Editar. En esta parte debemos agregar una nueva entrada que apunte a la carpeta Scripts en el lugar instalación de Anaconda, que en nuestro caso sería “C:\anaconda3\Scripts”.

Luego, ejecutemos Anaconda Navigator desde nuestra lista de programas instalados en el sistema.

En la vista de inicio, esta aplicación nos permite instalar o ejecutar otras aplicaciones relacionadas al desarrollo de Machine Learning, Minería de Datos o Estadística. Algunas de ellas, como Glueviz o Orange 3, nos pueden ayudar en la visualización de datos a través de una interfaz gráfica, pero son limitadas en relación al desarrollo de modelos de Deep Learning con redes neuronales o proyectos que requieran la integración con un sistema de control de versiones y de despliegue.

En la vista de ambientes, podemos actualizar, eliminar o degradar los paquetes de un ambiente de desarrollo hacia alguna versión específica que necesitemos.

También podemos crear nuevos ambientes y personalizarlos para que trabajen con paquetes y versiones distintas de Python en caso necesitemos varios ambientes de desarrollo con diferente conjunto de paquetes para diferentes proyectos.

Anaconda Prompt o terminal

Para trabajar con Python a través de una interfaz de línea de comandos (CLI) en Windows, debemos ejecutar “Anaconda Prompt (anaconda 3)“, y, si nos encontramos en macOS o Linux, debemos abrir la terminal.

Y seguido de ello, debemos ejecutar el comando python.

Visual Studio Code

Segun Wikipedia, Visual Studio Code es un editor de código fuente desarrollado por Microsoft para Windows, Linux y macOS. Incluye soporte para la depuración, control integrado de Git, resaltado de sintaxis, finalización inteligente de código, fragmentos y refactorización de código.

Descarga

Parece algo útil así que descargémoslo desde https://code.visualstudio.com

El instalador de Visual Studio Code 1.53 para Windows (64-bits) pesa aproximadamente 68 MB.

Instalación

Hagamos doble click sobre el instalador y sigamos por el asistente de instalación. El espacio que se requerirá para la instalación es de aproximadamente de 259.7 MB

Seleccionemos la opción “Add to PATH” y ambos “Add ‘Open with Code’ action to Windows Explorer” ya que el primero permitirá la ejecución del comando code desde la línea de comandos de sistema y el segundo agregará un acceso rápido para abrir archivos y carpetas con Visual Studio Code.

Terminada la instalación, ejecutemos Visual Studio Code e ingresemos a la vista de Extensiones (“Ctrl+Shift+X”) para buscar e instalar las siguientes 2 extensiones: Python (Microsoft) y Jupyter (Microsoft)

Nuevo archivo Python

Abramos nuestra carpeta de trabajo con “Abrir con Code”.

Y notemos que, ya sea creando los archivos Python (.py) desde el Explorador de Archivos del sistema o desde Visual Studio Code, igual se muestran en el siguiente explorador:

Para ejecutar Python debemos ubicarnos en la línea de código de interés o seleccionar las líneas de código que deseamos ejecutar y presionar “Shift+Enter”.

Jupyter Notebook

Jupyter Notebook (.ipynb) es un tipo de documento en formato JSON, que contiene toda la información necesaria para construir una lista ordenada de celdas de entrada/salida que pueden contener código (Python, C#, R, etc.), Markdown y gráficos.

No necesitamos descargar ni instalar nada puesto que Anaconda y Visual Studio Code ya gestionaron todo lo necesario para emplear este tipo de documento en nuestros proyectos.

Nuevo Jupyter Notebook

Abramos la lista de comandos de Visual Studio Code con “Ctrl+Shift+P” y ejecutemos “Jupyter: Create New Blank Jupyter Notebook” para crear nuestro primer documento.

Si deseamos abrir un archivo .ipynb con Visual Studio Code solo debemos darle click derecho y seleccionar la opción “Abrir con Code”.

Finalmente, podemos presionar “Shift+Enter” o usar alguna de las opciones disponibles en la parte superior del documento para ejecutar la(s) celda(s) de nuestro Jupyter Notebook.

Otras lecturas

Eche un vistazo a algunos de estos:

Artículos

Working with Jupyter Notebooks in Visual Studio Code
https://code.visualstudio.com/docs/python/jupyter-support

Getting started with Anaconda — Anaconda documentation
https://docs.anaconda.com/anaconda/user-guide/getting-started/

Notas del parche de Reach 1.6.126

General

  • Se disminuyó el peso del instalador de 132 Mb a 48 Mb.
  • Se ocultó la dependencia específica de Visual C++ 14 para que, en caso ya exista una versión más actualizada en el equipo, la instalación pueda continuar.

Interfaz gráfica

  • Se agregó una nueva opción en el menú lateral para poder entrar y salir del modo pantalla completa.

Incidentes

  • Se agregaron 12 nuevos tipos de mapas:
    1. Imágenes satelitales
    2. Calles
    3. Híbrido (imágenes + calles)
    4. Topográfico
    5. Navegación
    6. Calles (noche)
    7. Terreno con etiquetas
    8. Lona gris claro
    9. Lona gris oscuro
    10. National Geographic
    11. Océanos
    12. OpenStreetMaps

CORRECCIÓN DE ERRORES

Interfaz gráfica

  • Hacer click sobre la opción ocultar menú lateral dentro del módulo de contactos ya no provoca un mensaje de error.

Inició de sesión

  • Se solucionó el problema relacionado a la compatibilidad del navegador y el inicio de sesión por medio de Google.

Gobierno Regional de Cajamarca

Gobierno Regional de Cajamarca

Tipo: Institución estatal

Productos Epicalsoft usados: Reach

Tamaño de la organización: 487

Alcance: 1 300 000

País: Perú

regioncajamarca.gob.pe

Gobierno Regional de Cajamarca
El Gobierno Regional de Cajamarca es una institución pública regional con identidad propia, capital humano calificado y nivel tecnológico avanzado, capaz de administrar y brindar con calidad recursos y servicios públicos, propiciar condiciones favorables para el desarrollo de la inversión privada y liderar procesos de concertación con la sociedad civil, en el marco de una efectiva lucha contra la pobreza y la defensa del medio ambiente y sus recursos.
Epicalsoft Reach

Seguridad Ciudadana es tarea de todos, y ese compromiso nos permitirá reducir indicadores delictivos.  Garantizar seguridad es garantizar desarrollo.

ING. MESÍAS ANTONIO GUEVARA AMASIFUEN – GOBERNADOR REGIONAL

Antecedentes

La inseguridad ciudadana es un fenómeno social que afecta al derecho a la vida y deteriora el sistema democrático. Es por ello que, y dada la creciente ola de delincuencia en Perú, la gestión del Gobierno Regional de Cajamarca puso en marcha varias medidas para proteger y mejorar la calidad de vida de sus habitantes a través de la prevención, disuasión y control de la inseguridad ciudadana. Una de estas medidas es la modernización de la seguridad ciudadana.

Problemas a resolver

Digitalización y centralización

El empleo de libretas de notas físicas o Excel para almacenar los registros de los incidentes complicaban la tarea de organizar la información a nivel regional para la toma de decisiones.

Asímismo, la clasificación de los mismos no era muy específico, por ejemplo, el perjuicio personal se puede desglosar en bullying, coacción, difamasión, acoso, hostigamiento, injuría, insulto, invasión de privacidad, etc. Cada uno de estos casos tiene una naturaleza diferente, por ende requieren una organización y un enfoque adecuado para su prevención o control.

Vigilancia ciudadana participativa

La no existencia de mecanismos para compartir con los habitantes de forma amigable, eficiente y en tiempo real las situaciones de riesgo, como los fenómenos naturales o delincuencia común, mermaban las oportunidades para tomar precauciones o acciones por parte de la ciudadanía a tiempo.

Implementación

La implementación de Reach en la región de Cajamarca se dividió en dos etapas. La primera etapa, de 1 mes de duración, consistía en la configuración y entrega de las cuentas de usuario para cada uno de los 127 distritos y 13 provincias que forman parte de la región. La segunda etapa, de 5 meses de duración, consistía en una serie de capacitaciones presenciales para los responsables del uso de nuestra herramienta en su respectivas jurisdicciones.

Delimitación, configuración y planificación

Los datos sobre las delimitaciones geográficas de los distritos y departamentos se encontraban disponibles en formato .kml. Entonces, para poder emplearlos y culminar la primera etapa dentro de los tiempos estimados, fue necesario desarrollar un algoritmo que sea capaz de convertir eficientemente de forma automatizada esta enorme cantidad de datos a otros formatos más amigables para Reach como JSON, SQL Spatial Data y Google Encoded Polyline.

Capacitaciones sobre uso de Reach

Las capacitaciones presenciales buscaban especializar a los responsables de la seguridad ciudadana de cada distrito en el uso de Reach, así como la de asegurar su correcta instalación en cada central. Para cumplir con esta etapa se realizarón hasta 3 capacitaciones por día dependiendo de las circunstancias.

La elaboración del cronograma y la movilidad fueron los desafíos más grandes durante esta etapa. Algunas Municipalidades se encontraban muy lejos del centro de la ciudad y a veces las carreteras se encontraban bloqueadas por fenómenos naturales (derrumbes o deslizamientos) o porque se encontraban en mantenimiento.

Salida: 5:30 AM
Tiempo de viaje: 1 hora
Regreso: Había pase por la carretera desde las 12 AM hasta la 1:00 PM.

Municipalidad Distrital de Huabal

Jaén, 12 de Febrero

Salida: 5:30 AM
Tiempo de viaje: 1 hora
Regreso: Había pase por la carretera desde las 12 AM hasta la 1:00 PM.

Salida: 5:00 AM
Tiempo de viaje: 3 horas 30 minutos
Regreso: Había carro de regreso hasta las 3:00 PM

Municipalidad Distrital de Chontalí

Jaén, 14 de Febrero

Salida: 5:00 AM
Tiempo de viaje: 3 horas 30 minutos
Regreso: Había carro de regreso hasta las 3:00 PM

Salida: 12:00 AM
Tiempo de viaje: 4 horas
Regreso: Había carro de regreso a partir de las 4:00 AM del día siguiente

Municipalidad Distrital de Sallique

Jaén, 17 de Febrero

Salida: 12:00 AM
Tiempo de viaje: 4 horas
Regreso: Había carro de regreso a partir de las 4:00 AM del día siguiente

[Cognitive Services] Extendiendo Face API SDK para LargeFaceList

Hasta hace casi un par de años, la Face API de Microsoft Azure Cognitive Services ofrecía como únicas opciones para persistir rostros, las APIs de FaceList y PersonGroup. Esta situación cambió cuando se introdujeron LargeFaceList y LargePersonGroup

Continue reading “[Cognitive Services] Extendiendo Face API SDK para LargeFaceList”

[Azure Machine Learning] La dicotomía Varianza-sesgo (Bias-Variance)

En el aprendizaje automático supervisado, un algoritmo aprende un modelo a partir de los datos de entrenamiento. El objetivo de cualquier algoritmo de aprendizaje automático supervisado es estimar lo mejor posible una función que pueda mapear las variables de salida según un conjunto de datos de entrada. El error de predicción para cualquier algoritmo de aprendizaje automático se puede dividir en tres partes:

  • Error de sesgo
  • Error de varianza
  • Error irreducible

El error irreducible no puede reducirse independientemente del algoritmo utilizado. Es el error introducido desde el encuadre elegido del problema y puede ser causado por factores como variables desconocidas que influyen en el mapeo de las variables de entrada a la variable de salida.

Error de sesgo

Los sesgos son los supuestos o simplificaciones que se hacen por un modelo para hacer que la función sea más fácil de aprender. En general, los algoritmos lineales tienen un alto sesgo por lo que son rápidos de aprender y más fáciles de entender, pero en general son menos flexibles. A su vez, tienen un rendimiento predictivo más bajo en problemas complejos.

  • Bajo sesgo: sugiere menos suposiciones sobre la forma de la función.
  • Alto sesgo: sugiere más suposiciones sobre la forma de la función.

Los ejemplos de algoritmos de aprendizaje automático de bajo sesgo incluyen: Decision Trees, k-Nearest Neighbors y Support Vector Machines. Los ejemplos de algoritmos de aprendizaje automático de alto sesgo incluyen: Linear Regression, Linear Discriminant Analysis and Logistic Regression.

Error de varianza

La varianza es la cantidad estimada de cambio de la función si se utilizaran datos de entrenamiento diferentes. Idealmente, no debería cambiar demasiado de un conjunto de datos de entrenamiento al siguiente, lo que significa que el algoritmo es bueno. Los algoritmos de aprendizaje automático que tienen una gran varianza están fuertemente influenciados por las especificaciones de los datos de entrenamiento.

En general, los algoritmos de aprendizaje automático no lineales, que son los que tienen mucha flexibilidad para ajustar los datos, tienen una alta probabilidad de poseer una gran variación. Los ejemplos de algoritmos de aprendizaje automático de baja varianza incluyen: Linear Regression, Linear Discriminant Analysis and Logistic Regression. Los ejemplos de algoritmos de aprendizaje automático de alta varianza incluyen: Decision Trees, k-Nearest Neighbors and Support Vector Machines.

El dilema

El objetivo de cualquier algoritmo de aprendizaje automático supervisado es lograr un sesgo bajo y una varianza baja. A su vez, el algoritmo debe lograr un buen rendimiento de predicción. Considerando los algoritmos mencionados anteriormente como ejemplos podemos concluir en lo siguiente:

  • Los algoritmos de aprendizaje automático lineales a menudo tienen un sesgo alto pero una varianza baja.
  • Los algoritmos de aprendizaje automático no lineales a menudo tienen un sesgo bajo pero una varianza alta.

Hay una estricta relación entre la complejidad del algoritmo y la dicotomía varianza-sesgo. Esto se puede entender mucho mejor si apreciamos correctamente la relación entre la complejidad de los algoritmos de aprendizaje y los errores que se pueden encontrar en los datos de entrenamiento y datos de validación.

La parametrización de los algoritmos de aprendizaje automático es a menudo una batalla para equilibrar el sesgo y la varianza. A continuación, se muestran dos ejemplos de configuración para algoritmos específicos:

  • El algoritmo k-nn (k-nearest neighbors) tiene un sesgo bajo y una varianza alta, pero el intercambio puede modificarse aumentando el valor de k, lo que aumenta el número de vecinos que contribuyen a la predicción y, a su vez, aumenta el sesgo del modelo.
  • El algoritmo SVM (Support Vector Machine) tiene un sesgo bajo y una varianza alta, pero se puede cambiar aumentando el parámetro que influye en el número de violaciones del margen permitido en los datos de entrenamiento, lo que aumenta el sesgo pero disminuye la varianza.

No hay escapatoria a la relación entre sesgo y variación en el aprendizaje automático:

  • Aumentar el sesgo disminuirá la varianza.
  • Aumentar la varianza disminuirá el sesgo.

Existe una relación de intercambio entre estas dos preocupaciones, el sesgo y la varianza proporcionan las herramientas para comprender el comportamiento de los algoritmos de aprendizaje automático en la búsqueda del mejor rendimiento predictivo.

[Azure Machine Learning] Sobreajuste y subajuste (Overfitting and Underfitting)

Se le llama inducción al aprendizaje de conceptos generales a partir de ejemplos específicos. Esto es contrario a la deducción que busca aprender conceptos específicos a partir de reglas generales.

Considerando lo anterior, podemos deducir que una inducción eficiente es clave para el desarrollo de modelos predictivos en el aprendizaje automático supervisado.

Generalización en Machine Learning

La capacidad de generalización nos indica qué tan bien los conceptos aprendidos por un modelo de aprendizaje automático se aplican a ejemplos específicos que el modelo no vio cuando estaba aprendiendo. El objetivo de un buen modelo de aprendizaje automático es generalizar bien los datos de entrenamiento. Esto nos permite hacer predicciones en el futuro sobre los datos que el modelo nunca ha visto. Sobreajuste y subajuste son terminologías empleados en el aprendizaje automático para hacer referencia a qué tan bien un modelo generaliza nuevos datos ya que el ajuste excesivo y el ajuste insuficiente son las dos causas principales del rendimiento deficiente de los algoritmos de aprendizaje automático.

Sobreajuste

El sobreajuste hace referencia a un modelo que se sobre-entrena considerando cada mínimo detalle de los datos de entrenamiento. Esto significa que el ruido o las fluctuaciones aleatorias en los datos de entrenamiento son recogidos y aprendidos como conceptos por el modelo. El problema es que estos conceptos no se aplican a nuevos datos y tienen un impacto negativo en la capacidad de los modelos para generalizar.

Este sobre-entrenamiento suele darse con mayor probabilidad en modelos no lineales, por ello muchos de estos algoritmos de aprendizaje automático también incluyen parámetros o técnicas para limitar y restringir la cantidad de detalles que aprende. Algunos ejemplos de algoritmos no lineales son los siguientes:
  • Decision Trees
  • Naive Bayes
  • Support Vector Machines
  • Neural Networks

Sobreajuste y subajuste en problemas de clasificación

Subajuste

El subajuste hace referencia a un modelo que no puede modelar los datos de entrenamiento ni generalizar a nuevos datos. Un modelo de aprendizaje automático insuficiente no es un modelo adecuado. Las estrategias para mitigar un ajuste insuficiente son variadas y dependen del contexto.

Como puede deducirse, el subajuste suele darse con mayor probabilidad en modelos lineales, como por ejemplo:
  • Logistic Regression
  • Linear Discriminant Analysis
  • Perceptron

Sobreajuste y subajuste en problemas de regresión

¿Cómo detectarlos?

Tanto el sobreajuste como el subajuste perjudican el rendimiento de un modelo. Lo bueno es que existen algunas técnicas que se pueden utilizar para evaluar los algoritmos de aprendizaje automático:

  • Retención de conjunto de datos de validación.
  • Validación cruzada dejando uno fuera (Leave-one-out cross-validation or LOOCV).
  • Validación cruzada basada en remuestreo por grupos o pliegos (K-fold cross-validation)
  • Bootstrapping o remuestreo de Bradley Efron

La técnica de remuestreo más popular es la validación cruzada de k-fold, el cual permite entrenar y probar el modelo k-veces con diferentes subconjuntos de datos de entrenamiento y construir una estimación más objetiva del rendimiento de un modelo de aprendizaje automático cuando trabaja con datos invisibles.

En el caso del bootstrapping, la idea básica es dado un conjunto datos de entrenamiento extraer de esta tabla aleatoriamente y con reemplazo nuevas tablas de datos, cada una de la cuales deberá tener el mismo tamaño que la tabla original. Entonces modelo se estima en cada una de estas nuevas tablas (boostraps) y luego las predicciones se hacen para la tabla original de datos o conjunto de entranamiento.

[Azure Machine Learning] Criterios para la selección de algoritmos de aprendizaje

Puede que existan algunas consideraciones que debamos tener en cuenta para seleccionar el “mejor” algoritmo, pero la verdad es de que no hay forma de saberlo hasta que empecemos a evaluar y comparar modelos construidos con diferentes de ellos.

Para que logremos construir un buen modelo predictivo, no es suficiente con hacer una lista de comprobación de lo que tenemos a la mano, es menester ir construyendo hasta obtener un modelo que nos ofrezca un equilibrio entre la precisión (“precision”) y la exhaustividad (“recall”), que son conceptos que ahondaremos más adelante. Dejando lo anterior claro empecemos con algunos criterios:

Naturaleza del problema

Como tratamos en una anterior publicación. Este primer considerando nos invita a identificar correctamente que tipo de problema estamos intentando resolver para limitar el rango de posibles algoritmos a utilizar.

Número y estructura de las características de entrada

Existen algoritmos que trabajan mejor con más características (columnas) que otros, algoritmos que necesitan una gran cantidad de datos (filas) para poder trabajar adecuadamente y algoritmos que incluso se traban cuando existen una gran cantidad de características.

Fuente: https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html

Complejidad del modelo

Los algoritmos de aprendizaje más simples hacen uso de líneas para ajustar los datos: los algoritmos de regresión lineal suponen que las tendencias de datos siguen una línea recta y los algoritmos de clasificación lineal suponen que las clases pueden estar separadas mediante una línea recta. Estas suposiciones no son tan malas para algunos problemas, pero en otros podrían causar un sub-ajuste (underfitting).

Límite de clase no lineal: la dependencia de un algoritmo de clasificación lineal se traduciría en baja precisión.

Datos con tendencia no lineal: el uso de un método de regresión lineal generaría errores mucho mayores que los necesarios.

En general, mientras más complejo es un algoritmo de aprendizaje, mayor precisión se puede obtener, pero mucha precisión sobre los datos de entrenamiento también podría causar un sobre-ajuste (overfitting).

Velocidad de entrenamiento

El tiempo de entrenamiento requerido para construir un modelo predictivo es muy variado, algunos algoritmos son más sensibles a la cantidad de puntos de datos que otros, mientras que otros soportan muchos hiperparámetros y son más complejos. Si el tiempo es limitado, esto puede determinar la elección del algoritmo.

Uso de memoria o recursos de computo

Dependiendo a la complejidad, la cantidad de datos suministrados y diversos factores, cada algoritmo usará una diferente cantidad de recursos. Esto podría ser decisivo para la elección de un algoritmo, incluso si trabajamos en Azure Machine Learning hay que tener en cuenta los posibles límites que podrían existir en cuanto al servicio y el tipo de suscripción vigente.

Número de hiperparámetros

Los hiperparámetros son números que afectan al comportamiento del algoritmo, como la tolerancia a errores o la cantidad de iteraciones, o bien opciones de variantes de comportamiento del algoritmo. Mientras más hiperparámetros tenga un algoritmo, mayor exploración de prueba y error deberemos hacer para asegurarnos de encontrar la mejor combinación.

La ventaja es que tener muchos parámetros normalmente indica que un algoritmo tiene mayor flexibilidad. A menudo, puede lograr una precisión muy alta siempre y cuando se encuentre la combinación correcta de configuraciones de parámetros.

Fuente: https://docs.microsoft.com/en-us/azure/machine-learning/studio/algorithm-choice