#!/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)