-
Robótica
Tutoriales de modelamiento y control de robots autónomos.
Robots móviles,brazos robóticos, UAVs y más. -
Inteligencia Artificial
Tutoriales de diseño de algoritmos para resolver problemas prácticos.
Deep Learning, Machine Learning, Algoritmos genéticos y más. -
Electrónica
Tutoriales de diseño y programación para resolver problemas prácticos.
Arduino, PICs, Raspberry PI y más.
Convertir un número en un String
Si desea convertir un número para mostrarlo como texto en un LCD o dispositivo serie, la más simple solución es utilizar las bibliotecas LCD y Serial. Pero quizás esté usando un dispositivo que no tiene este soporte integrado o si desea manipular el número como una cadena en su sketch.
Para esto, se utiliza la función itoa o ltoa. Los nombres provienen de “integer to ASCII” (itoa) y “long a ASCII ”(ltoa).
Estas funciones toman tres parámetros: el valor a convertir, el búfer que contendrá la cadena de salida y la base numérica (10 para un número decimal, 16 para hexadecimal y 2 para binario).
El siguiente sketch ilustra cómo convertir valores numéricos usando ltoa:
Para esto, se utiliza la función itoa o ltoa. Los nombres provienen de “integer to ASCII” (itoa) y “long a ASCII ”(ltoa).
Estas funciones toman tres parámetros: el valor a convertir, el búfer que contendrá la cadena de salida y la base numérica (10 para un número decimal, 16 para hexadecimal y 2 para binario).
El siguiente sketch ilustra cómo convertir valores numéricos usando ltoa:
long value = 123456; void setup() { Serial.begin(9600); } char buffer[12]; // tipo de dato long tiene 11 caracteres //(incluyendo el signo menos) y la terminación null) void loop() { ltoa(value, buffer, 10); Serial.print(value); Serial.print(" tiene "); Serial.print(strlen(buffer)); Serial.println(" digitos"); delay(1000); }
Convertir un String en un número
Necesitas convertir un String a un número que hayas recibido a través de un enlace de comunicación y necesita usarlo como un valor de punto flotante o entero.
Las funciones atoi (ASCII a int), atol (ASCII a long) y atof (ASCII a float) convierten un String en enteros, enteros long y floats respectivamente.
El siguiente sketch ilustra cómo convertir un String a valores numéricos int, long y float:
char dataInt[5] = "1234"; char dataLongInt[11]="2147483647"; char dataFloat[5]="1.23"; int cInt=0; long cLongInt=0; float cFloat=0.0; void setup() { Serial.begin(9600); } void loop() { cInt=atoi(dataInt); cLongInt=atol(dataLongInt); cFloat=atof(dataFloat); Serial.print("Original data : "); Serial.print(cInt); Serial.print(","); Serial.print(cLongInt); Serial.print(","); Serial.println(cFloat); // Operaciones con datos cInt=cInt+1; cLongInt=cLongInt-1; cFloat=cFloat+0.07; Serial.print("Modificated data : "); Serial.print(cInt); Serial.print(","); Serial.print(cLongInt); Serial.print(","); Serial.println(cFloat); delay(1000); }
Machine learning para predecir el precio de una vivienda.
1:21 p.m.ai, boston housing, inteligencia artificial, keras, machine learning, regresion, regresion lineal, tensorflow
No hay comentarios.
Introducción
Este tutorial implementa un modelo de red neuronal para predecir el precio de una vivienda utilizando el conjunto de datos Boston_Housing. El objetivo es predecir un valor continuo, por lo tanto, estamos frente a un problema de regresión. El código esta disponible en la sección descargas opción Inteligencia Artificial
Cargar conjunto de datos Boston Housing
El conjunto de datos contiene 506 ejemplos, divididos entre 404 muestras de entrenamiento y 102 muestras de prueba.
El conjunto de datos contiene 13 características diferentes:
- Tasa de criminalidad per cápita.
- La proporción de terrenos residenciales divididos en zonas para lotes de más de 25,000 pies cuadrados.
- La proporción de acres de negocios no minoristas por ciudad.
- Variable dummy de Charles River (= 1 si el tramo limita el río, 0 de lo contrario).
- Concentración de óxidos nítricos (partes por 10 millones).
- El número promedio de habitaciones por vivienda.
- La proporción de unidades ocupadas por sus propietarios construidas antes de 1940.
- Distancias ponderadas a cinco centros de empleo de Boston.
- Índice de accesibilidad a carreteras radiales.
- Tasa de impuesto a la propiedad de valor completo por $ 10,000.
- Proporción de alumno por profesor por ciudad.
- 1000 * (Bk - 0.63) ** 2 donde Bk es la proporción de personas negras por ciudad.
- Porcentaje de menor estatus de la población.
Y cada característica de los datos de entrada tiene una escala diferente. Por ejemplo, algunos valores son proporciones, que toman valores entre 0 y 1; otros toman valores entre 1 y 12, otros entre 0 y 100, y así sucesivamente.
Los objetivos, etiquetas o labels son los precios de la vivienda en miles de dólares registrados en la década de 1970. Los precios son típicamente entre $ 10,000 y $ 50,000.
Los objetivos, etiquetas o labels son los precios de la vivienda en miles de dólares registrados en la década de 1970. Los precios son típicamente entre $ 10,000 y $ 50,000.
Normalizar las características
Se recomienda normalizar los datos que usan escalas e intervalos diferentes. Para cada característica, reste la media de la característica y divida por su desviación estándar. La red podría adaptarse automáticamente a datos tan heterogéneos, pero dificultaría el aprendizaje.
Construir el modelo
En este turorial se implementa un modelo secuencial con dos capas ocultas totalmente conectadas de 64 nodos (neuronas) y la función de activación relu, y una capa de salida que devuelve un único valor continuo.
Debido a que no hay mucha información de entrenamiento, se usa una red pequeña con pocas capas ocultas y nodos para evitar el sobreajuste.
Definir la función de pérdida, optimizador y métrica
Para el problema de regresión es común utilizar la función de pérdida error cuadrático medio (mse), el optimizador utilizado es el rmsprop y una métrica de regresión común es el error absoluto medio (mae).
Entrenar el modelo
El modelo se entrena durante 300 épocas, los datos de entrenamiento se dividen en un 20% para validación y además se registra el entrenamiento y la precisión de validación en el objeto history.