Redes radiales con Matlab

La herramienta que tiene Matlab para redes radiales es la función newrb. El inconveniente es que hay que darle dos parámetros: error objetivo admisible y ancho de las gaussianas; va añadiendo procesadores hasta conseguir el objetivo. Si le pedimos mucha precisión, o no podrá, o pondrá muchísimos procesadores, con el problema de sobreajuste. Para resolver esta dificultad vamos buscar estos parámetros mediante las funciones de optimización bayesiana (supone que la función optimizada sigue un proceso gaussiano - tutorial , matemáticas) que tiene.

Necesitaremos un rango para esos parámetros. El error objetivo lo sacamos de los modelos más simples, que ya deberíamos haber probado; desde cerca de cero hasta el de esos modelos. El del ancho, de la distancia (usa dist) entre cada punto y su vecino más cercano; entre la menor y la mayor.

Para nuestra optimización de parámetros necesitamos (todo este proceso habrá que repetirlo):

  1. Cargar los datos de casas y separar una parte para ajuste y otra para prueba
  2. Definirle las variables que tiene que buscar. Algo como:
    anc=optimizableVariable('ancho',[minanc,maxanc]);
    obj=optimizableVariable('obje',[minobj,maxobj]);
      
  3. Prepararle la función a optimizar. Empezamos por una función que cree una red radial y la valore, por ejemplo separando una parte de la muestra. Puedes usar este esqueleto. A continuación preparamos un handler que reciba los parámetros e invoque a la función anterior, como rad=@(var) radial(entaj,salaj,var.obje,var.ancho);
  4. Lanzarla con: sale=bayesopt(rad,[obj,anc]);
  5. Nos dará su estimación de los mejores valores. No es tan preciso, así que redondéalo. Si queda cerca de un límite del rango que habías dado repite moviendo el rango en esa dirección.

Ahora podemos construir nuestra red definitiva con redr=newrb(paj,taj,objemejor,anchomejor); y probarla con el conjunto de prueba. Puedes verlo gráficamente con plotregression

¿Qué tamaño tiene la red? (redr.layers{1}) ¿Cómo compara su tamaño y precisión con los perceptrones? ¿Conclusiones?

Al ser una red basada en respuestas locales, puede ser dependiente de la muestra usada para crearla. Repite todo el proceso con otra partición de la muestra ¿Es muy sensible?