#!/usr/bin/python3
# -*- coding: utf-8 -*-
import lectura
import preproceso
import particion
import tipored
import inicializacion
import ajuste
import registro
import analizar
import torch
from torch import nn
from collections import OrderedDict
import pandas
def muestab(tabla):
print(tabla.head())
print(tabla.describe())
print(tabla.value_counts())
#tabla.hist()
datostabla=pandas.read_sql("select tipo,nucleotidos from adn","sqlite:///../adn")
muestab(datostabla)
def transforma(fila):
codiftipo={'Acep':[1],'Don':[0],'Neu':[0.5]}
codifnuc={'A':[1,0,0],'C':[0,1,0],'G':[0,0,1]}
ctip=codiftipo[fila['Tipo']]
cnuc=sum([codifnuc[g] for g in fila['Nucleotidos']],start=[])
indnuc=['n'+str(indn+1)+str(ind+1) for indn in range(len(fila['Nucleotidos'])) for ind in range(3)]
return pandas.Series(data=cnuc+ctip,index=indnuc+['tipo'])
datosnum=datostabla.apply(transforma,axis=1)
muestab(datosnum)
datos=datosnum.to_numpy()
nument=len(datos[0])-1
numsal=1
import matplotlib.pyplot as plot
for vsal in range(nument,nument+numsal):
for var in range(nument):
plot.scatter(datos[:,var], datos[:,vsal])
plot.suptitle(f'x: {var+1} y: {vsal-nument+1}')
plot.show()
datot=preproceso.rango1(datos)
numues=len(datot)
nolin=nn.LeakyReLU;
capas=[]
capas.extend([('capa1',nn.Linear(nument,15)),('nl1',nolin())])
capas.extend([('capa22',nn.Linear(15,10)),('nl2',nolin())])
capas.extend([('salida',nn.Linear(10,1)),('nlsal',nn.Sigmoid())])
red=nn.Sequential(OrderedDict(capas))
sumer=0
for part in range(10):
tea,tsa,tev,tsv,tep,tsp=particion.azaryestrat(datot,1,0.7,0.15,salidas=1)
inicializacion.reinicia(red,inicializacion.inio)
erp,red,_=ajuste.ajustar(red,tea,tsa,None,None,tep,tsp,algo=torch.optim.Rprop,kaj=0.001,numiter=20,
regiter=registro.listaiter,regfin=registro.listaprueba,error=nn.MSELoss())
sumer+=erp
print("Error esperado: ",sumer/10)
salpru=red(tep)
graficos=['grafreg','graferror','grafrel','graforden']
for graf in graficos:
getattr(registro,graf)(tsp,salpru.detach())
analisis=['derivent','grafder','ocultos','pesos']
for anal in analisis:
getattr(analizar,anal)(red,tep,tsp)
captumanal=['IntegratedGradients','DeepLift','GradientShap','FeatureAblation']
for anal in captumanal:
analizar.atribucion(anal,red,tep,tsp)