#!/usr/bin/python3 # -*- coding: utf-8 -*- """ Perceptrón para estimar precio de viviendas. Una capa oculta con 5 procesadores con activación tangente hiperbólica y error cuadrático. Dependencias: torch, sklearn, captum, httpimport """ import httpimport with httpimport.remote_repo('https://personales.unican.es/crespoj/redes/redespytorch.zip'): import lectura import preproceso import particion import tipored import ajuste import registro import lecturaurl from torch import nn import activaciones #Cargamos los datos, todos datos=lecturaurl.leelistas('practica1/casas.trn.txt') numentradas=len(datos[0])-1 varnoms=['criminalidad','residencial','industrial','rio','polucion','habitaciones','casas-viejas','distancia-trabajo', 'autovias','impuestos','ratio-aula','negr@s','pobreza','precio'] #Descripción numérica #Si no quieres anális previo, anula esta línea lectura.estadistica(varnoms,datos) #Descripción gráfica frel,vals=lectura.grafica(varnoms,datos,True) # Si no quieres los análisis, pásale False #Preproceso. Hay otras posibilidades. Mira el fichero preproceso.py del paquete de clase datot=preproceso.rango1(datos) #Conjuntos de ajuste (por ejemplo 70%), validación (por ejemplo 15%) y muestra. Parte al azar (por ejemplo 50%) y parte por agrupamiento tea,tsa,tev,tsv,tep,tsp=particion.azaryestrat(datot,0.5,0.7,0.15) red=tipored.lineal(numentradas,1) # Modelo lineal hecho con una red a la que se le quita la parte no-lineal #red=tipored.lineallineal(numentradas,1) # Regresión lineal clásica #red=tipored.cuasilineal(numentradas,5,nn.Tanh, 1) # Hecho con red neuronal. 5 ocultos por cada variable Función no lineal: tangente hiperbólica #red=tipored.linealgen(numentradas,3,1) # Modelo cuasilineal Tweedie, con potencia 3 para la cola de la distribución #red=tipored.perceptron(numentradas,[5],1,nn.Tanh,nn.Identity) # Red con 5 ocultos, tangente hiperbólica entre capas y lineal a la salida print(red) print('\nAjuste') err,red,_=ajuste.ajustar(red,tea,tsa,tev,tsv,tep,tsp,kaj=0.1) # Learning rate: 0.1 #Descoméntalo si estás usando redes neuronales de cualquier forma #err=err.item() #red.eval() print('Error medio cuadrático final en conjunto de prueba',err) tepor=registro.residuos(tep,tsp,red,True) # Si no quieres análisis de resíduos, pásale False #Vemos un caso concreto. Coméntalo si no quieres registro.sacarejemplos(tep,tsp,tepor,varnoms,frel,vals,red,False)